Make something private
Invite people by email and only they can open your app. No account for them, no password, and no login screen for you to build.
Apps are public by default: anyone with the link can open them. When that isn't what you want — a client preview, an internal tool, a draft — you name the people who are allowed in, by email address.
You don't build a login. There isn't one to build.
Ask for it
only let anna@client.com and me open this
or, for something already live:
make the pricing tool private, and invite the three people on my team
The first person you share it with flips the app to invite-only. Everyone else who has the link now meets a sign-in screen instead of your app.
What your visitors see
They open the link
If they've never been here, they see a small page: "This is private. Enter the email address it was shared with."
They type their email and get a code
Six digits, by email, valid once. Only invited addresses get anywhere — an address that isn't on the list is turned away.
They're in
Their browser stays signed in for a week, so it's a one-time interruption rather than a login they have to remember. No account is created and no password exists.
Invitees are emailed a link to the app when you share it, so in the common case they never see a cold sign-in screen at all.
Managing the list
| What you want | What to say |
|---|---|
| See who can open it | "who has access to the client preview?" |
| Add someone | "give jonas@client.com access too" |
| Remove someone | "remove anna@client.com from that app" |
| Open it up to everyone | "make it public again" |
| Close it again | "make it invite-only again" |
Your agent can also tell you who has actually opened it, which is a quietly useful thing to know before a client meeting.
Revoking is immediate
Removing someone takes effect at once, even if they were signed in a minute ago. Membership is re-checked on every request, not just at sign-in.
This is not the same as inviting someone to your account
Inviting someone to an app lets them open it and nothing else. Inviting someone to your
organization (invite_user) hands them control of your projects, deploys
and other apps. Be clear which one you're asking for — see
Work with teammates.
Turning it public again
Making an app public keeps the invitation list. Switching back to invite-only later restores exactly the same audience, so it's safe to flip an app open for a demo and close it afterwards.
An invite-only app with nobody on the list is reachable by nobody — including you. If that happens by accident, add yourself or make it public.
Under the hood
A proxy in front of your app forward-authenticates every request against agenthost. A visitor carrying a valid, signed cookie for that hostname passes straight through; anyone else is bounced to the sign-in flow, and comes back with a one-use hand-off token that sets the cookie on your app's domain.
Nothing per-visit is stored: both the cookie and the hand-off token are HMAC-signed rather than recorded. The allowlist itself is checked on every request, which is why revocation is instant, and the cookie only bounds how long a visitor goes without re-proving their address (a week by default).
Rebuilding a container regenerates its proxy configuration, which would otherwise drop the gate and quietly leave a private app readable. agenthost re-applies the policy automatically when an invite-only app comes back up after a deploy.
Tools: share_app, set_app_access, list_app_access, revoke_app_access.