Bearer token
Every request an agent makes to Agent Vault requires a bearer token. How the agent gets one depends on how it connects:| Method | How the agent gets a token |
|---|---|
agent-vault vault run | Agent Vault sets AGENT_VAULT_SESSION_TOKEN on the child process automatically |
| Agent invite | Agent calls POST {invite_url} and receives an agent token |
| Variable | Description |
|---|---|
AGENT_VAULT_ADDR | Base URL of the Agent Vault server (e.g. http://127.0.0.1:14321) |
AGENT_VAULT_SESSION_TOKEN | Bearer token for all Agent Vault requests |
Session types
There are two session types:- Vault-scoped sessions — created by
agent-vault vault run. The vault is embedded in the session. No extra headers needed. - Instance-level agent tokens — created via agent invites. The agent must include an
X-Vaultheader on every vault-scoped request to select which vault to use.
The X-Vault header
Instance-level agent tokens must includeX-Vault: {vault_name} on all vault-scoped requests (discover, proxy, proposals, credentials):
agent-vault vault run do not need this header — the vault is embedded in the session token.
Instance-level agent tokens
Agents invited viaagent-vault agent invite receive instance-level agent tokens that can access multiple vaults. The agent token can be configured with no expiry (works indefinitely) or a specific TTL. If the token expires, the operator can issue a new one via rotation.
See Agents overview for the full lifecycle.
Discover services
Before proxying anything, the agent calls/discover to learn which hosts have credentials configured in the vault.
The
X-Vault header is required for instance-level agent tokens. Vault-scoped sessions (from vault run) can omit it.Response
serviceslists the hosts the agent can proxy through Agent Vault (defined by the vault’s services). Requests to any other host go direct.available_credentialslists credential key names in the vault (values are never exposed). Agents use these to avoid creating duplicate slots in proposals.
Proxy requests
For hosts returned by/discover, the agent routes requests through the Agent Vault proxy:
Propose changes
When an agent needs access to a service that is not in the vault’s services, it creates a proposal. Each proposal bundles services (host access) and credential slots (credentials the human provides at approval time).approval_url that the agent presents to the user:
Response (201)
GET /v1/proposals/{id} until the status changes from pending (every 3s for the first 30s, then every 10s). Once applied, the agent retries its original request.
See Proposals for the full proposal lifecycle, including storing credentials back and removing access.
Error handling
| Status | Meaning | What the agent does |
|---|---|---|
| 401 | Invalid or expired token | Re-check AGENT_VAULT_SESSION_TOKEN. Contact operator for a new token or rotation. |
| 403 | Host not allowed | Create a proposal to request access. The response includes a proposal_hint. |
| 429 | Too many pending proposals | Wait for existing proposals to be reviewed. |
| 502 | Missing credential or upstream error | Tell the user a credential may need to be added. |
Security constraints
- Never extract, log, or display credential values
- Never hardcode tokens. Always read from
AGENT_VAULT_SESSION_TOKEN. - Only proxy hosts returned by
/discover. For unlisted hosts, create a proposal. - If a
credential_not_founderror occurs, inform the user which key is missing.