alsi_…). The agent approves that request with its own token, or a sign-in key it holds answers on its own. The page continues by itself; a headless agent follows the returned redirect.
Capabilities
Without
identity:share_owner, an agent cannot approve a request from a registered application that asks for owner_profile or owner_email. An owner or admin of the workspace approves such a request in the dashboard instead.
MCP tools
Read the request first:
will_share lists exactly what the app receives from this agent, and problems names what stands in the way (no_inbox, owner_share_not_permitted, owner_unavailable, not_pending). Approve only requests the agent itself started.
Approving a request
Read a sign-in request
Approve it
string
The app’s callback URL with the authorization code. The waiting page follows it within two seconds; an agent without a browser follows it with its own HTTP client, cookies included, to finish signing in at the app.
POST /api/v1/sign-ins/:id/deny ends the request without a token.
CLI
Starting a sign-in from the agent’s side
An agent does not have to find the app’s login page first.list_sign_in_apps (or GET /api/v1/sign-in-apps, or the public directory) lists apps that accept the sign-in; start_sign_in with an entry’s client_id grants that app now, with the same checks as approving, and returns two things:
url: a single-use connect link, valid five minutes. The browser that opens it generates a sign-in key for the agent and continues to the app’s login start, where the app begins its sign-in and the key completes it without anyone acting.app_login_url: the app’s login start withissandlogin_hint, for an agent without a browser. Follow it with an HTTP client; the app redirects to a new sign-in request, which the agent approves throughapprove_sign_in.
REST
can_start_sign_in: true in the directory; for the others the link enrols the browser and sends it to the app’s website, where the agent clicks the button. Without client_id, the link only enrols a browser for the agent.
CLI
Sign-in keys
A sign-in key is a P-256 pair whose private half never leaves the place it was made. There are two kinds:- Browser keys. The browser that started an approved sign-in, or opened a connect link, generates a non-extractable WebCrypto key and registers the public half. From then on the browser signs in the agent to apps it already approved by signing a fresh challenge, and offers one click for a new app. Browser JavaScript cannot read or export the key; it can only sign with it.
- Registered keys. An agent that signs for itself registers the public half of its own key with
POST /api/v1/sign-ins/keysand then answers sign-ins without a browser: fetch a challenge fromhttps://agent-loadout.com/id/challenge?purpose=sign-in&subject=alsi_…, sign it with ES256 and post{ kid, challenge, signature }tohttps://agent-loadout.com/id/sign-ins/alsi_…/assert. Within the agent’s grant the request is approved at once; otherwise the answer isneeds_approval, and a second assertion with"approve": trueapproves it.
identity:share_owner. Keys lapse after 30 days without use; every use extends them. The agent lists and revokes its keys with GET and DELETE /api/v1/sign-ins/keys, members do the same on the agent’s Sign-ins tab, and a browser forgets its own key at agent-loadout.com/id/sessions.
CLI
What the agent gives the app
The app receives an OpenID Connect id_token naming the agent: a stablesub, the agent’s inbox address, its name and username, and an identifier of its organization. A registered application that asked and was allowed to know also learns the organization’s accountable owner. The app never receives the agent’s Agent Loadout token, a password or access to its inbox. Everything the app sends to the agent arrives in the agent’s inbox, where it reads it.
An agent needs a ready inbox to approve a request that asks for email.