Proposal is a request from an agent to add, update, or remove credentials and services within a specific vault.
Each Proposal must be approved by a member of the vault with sufficient permissions in order for changes to take effect.
Each Proposal may include:
- Services: Host access changes that define which services the agent wants to reach and how Agent Vault should authenticate to them. These merge into the vault’s services on approval. For example, a service entry might grant access to
api.stripe.comusing a bearer token. - Credential slots: Credential operations covering keys the agent needs a human to supply, values the agent wants to store back, or credentials to delete. For example, a credential slot might ask the human to provide a
STRIPE_KEYat approval time. - Messages: A developer-facing
messageand a human-facinguser_messageshown on the browser approval page.
Lifecycle
Every proposal moves through a simple state machine:Approve proposals
- Browser
- CLI
When an agent needs access to a service, it shares an approval link in chat (e.g.
http://localhost:14321/approve/3?token=av_appr_...).Click the link
The approval token grants read access to the proposal details: requested services, credential slots, and the agent’s message. Token TTL: 24 hours.
Log in if needed
Submitting the approval requires a valid Agent Vault session. If you’re not logged in, the page shows an inline login form first.
Reject proposals
- Browser
- CLI
The browser approval page includes a Deny option alongside the approval
form.
List and inspect
review command presents each pending proposal one by one. For each, choose Approve, Reject, Skip, or Quit. At the end, a summary shows the count and IDs of approved, rejected, and skipped proposals.
How agents raise proposals
Agents handle this flow automatically. This section describes what happens
under the hood.
/discover, the response includes a proposal_hint with the denied host and the endpoint to create a proposal. The agent then sends:
approval_url that the agent presents to the user in chat.
Actions
Each service and credential slot carries anaction field:
set: idempotent upsert (add or replace). Services requirehost+auth; credential slots requirekey.delete: remove an existing entry. Services only needhost; credential slots only needkey.
Credential slots
A credential slot can work in three ways:| Scenario | value field | What happens |
|---|---|---|
| Human supplies the credential | omitted | Human enters the value at approval time |
| Agent stores a credential back | included | Value is encrypted at creation; human confirms at approval |
| Delete a credential | n/a | action: "delete" removes the key |
auth config must resolve to either a credential slot in the proposal or an existing credential in the vault. Credential keys use UPPER_SNAKE_CASE format.
Limits
| Constraint | Value |
|---|---|
| Max services per proposal | 10 |
| Max credential slots per proposal | 10 |
| Max pending proposals per vault | 20 |
message length | 2,000 chars |
user_message length | 5,000 chars |
description length | 500 chars |
obtain length | 500 chars |
obtain_instructions length | 1,000 chars |
| Proposal TTL | 7 days |