capy redeem command to your clipboard.
Every prompt has a flag, so you can run the same thing unattended: --role <member|project-admin|admin>, --project <id|name> (repeatable), --ttl <duration> or --expires <iso>, plus --json and --non-tty for agents and CI.
Your teammate runs:
capy from then on syncs the secrets for the projects you granted.
Why out-of-band delivery matters
The redeem code carries an invite tokenT alongside the service-wrapped copy of the master key. T is one of the two halves that decrypt that copy; the other half is the Capy service stripping its own wrap. Redemption requires the invitation and authenticated, active organization membership.
The service only ever sees one half (its outer-wrapped blob). It never sees T. So T has to reach the invitee through a channel the service doesn’t touch:
- Good: Signal, a password manager share, a QR code scanned in person, a phone call to dictate.
- Bad: email, Slack DM that logs to your org admin, Git commit, a public chat log, screen share on Zoom with recording on.
--expires. Use capy invite alice@example.com --ttl 30m when a shorter window is appropriate. If someone else has already redeemed a leaked code, run capy kick <email> on the account that used it, which stops new service-assisted decryption for that account, then rotate values they could already have read.
Adjusting access after they join
capy users opens the interactive members list, but it only manages people who are already in the org - there is no way to type a new email into it. Press r on a member row to change their org role, Enter to expand a member (and then a project) to edit their per-project role - project-admin, member, or none - and g on a protected-branch row to grant or revoke that branch. Adding someone new always starts with capy invite.
What gets exchanged
The invite flow double-wraps the master key:- Your CLI wraps
Mwith a key derived fromT, the org ID, and the invitee’s email. - The service adds an outer wrap over that result.
- The invitee authenticates, gets the service to strip the outer wrap, and completes recipient-bound access configuration using
T+ their authenticated email.
What’s next
Roles
Member, Project Admin, Admin, Owner.
Kicking users
Remove a teammate. O(1), no re-encryption.