Vault
Encrypted secret storage.
12 actions. Each is callable by the agent as a tool, over HTTP via /api/invoke, and (usually) from a UI page.
vault.status
GET
Report whether the workspace cookie encryption key is properly configured. When configured=false, the dev fallback is being used and browser_sessions are encrypted with a deterministic key derived from a constant — readable by anyone with the code. Production deploys MUST set COOKIE_ENCRYPTION_KEY.
- AI tool:
vault_status - API:
GET /api/invoke/vault.status
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}vault.generate_key
POST
Generate a fresh AES-256 key as base64 — for the user to copy into COOKIE_ENCRYPTION_KEY in their .env.local. The key is generated server-side and NEVER persisted; we hand it to the caller and forget it. Existing encrypted sessions become unreadable once the env var changes, so rotate carefully.
- AI tool:
vault_generate_key - API:
POST /api/invoke/vault.generate_key
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}vault.list_credentials
GET
Unified view of everything stored at rest: encrypted browser sessions, Composio OAuth connections, and environment-secret presence audit. Returns metadata only — no decrypted cookies or token values.
- AI tool:
vault_list_credentials - API:
GET /api/invoke/vault.list_credentials
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {}
}vault.activity
GET
Recent credential-related events: session captures, test runs (active/expired verdicts), OAuth connect/disconnect. Derived from existing rows — no separate activity table. Useful as an audit trail.
- AI tool:
vault_activity - API:
GET /api/invoke/vault.activity
Input
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200
}
}
}vault.secrets.list
GET
List the manually-stored secrets the current actor can see — the ones they created plus the ones explicitly shared with them. Returns metadata only (field names + last-4 previews, owner, who it is shared with) — never the secret values. A secret is private to its creator by default.
- AI tool:
vault_secrets_list - API:
GET /api/invoke/vault.secrets.list
Input
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer | — | |
offset |
integer | — | |
orderBy |
string | — | |
orderDir |
"asc" | "desc" | — | |
q |
string | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
},
"offset": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"orderBy": {
"type": "string"
},
"orderDir": {
"type": "string",
"enum": [
"asc",
"desc"
]
},
"q": {
"type": "string"
}
}
}vault.secrets.reveal
POST
Decrypt and return one secret's field values. Access-gated: only the creator OR an actor the secret was shared with may reveal it. This is also how an AI agent USES a credential that was shared with it — the agent's own identity is the gate, so it can only read secrets explicitly shared with it. Handle the returned values carefully; they are sensitive.
- AI tool:
vault_secrets_reveal - API:
POST /api/invoke/vault.secrets.reveal
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
]
}vault.secrets.create
POST · mutating
Store a new secret (API key, password, token, SSH key, note, …). Encrypted at rest. The secret is owned by — and visible only to — the actor that creates it until explicitly shared. fields is a map of named values, e.g. { value: "sk_live_…" } or { username: "…", password: "…" }.
- AI tool:
vault_secrets_create - API:
POST /api/invoke/vault.secrets.create
Input
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | yes | |
description |
union | — | |
kind |
string | — | |
fields |
object | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string"
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"name",
"fields"
]
}vault.secrets.update
PATCH · mutating
Rename, re-describe, re-classify, or re-key an existing secret. Creator only. Provide fields only when rotating the secret material; omit it to keep the stored value unchanged.
- AI tool:
vault_secrets_update - API:
PATCH /api/invoke/vault.secrets.update
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
patch |
object | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"patch": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"kind": {
"type": "string"
},
"fields": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": "string"
}
}
}
}
},
"required": [
"id",
"patch"
]
}vault.secrets.delete
DELETE · mutating
Soft-delete a secret (and cascade its shares). Creator only.
- AI tool:
vault_secrets_delete - API:
DELETE /api/invoke/vault.secrets.delete
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
}
},
"required": [
"id"
]
}vault.secrets.share
POST · mutating
Grant another actor — a human teammate OR an AI agent in this workspace — access to a secret. After this, that actor can reveal/use the secret. Creator only. permission defaults to "use".
- AI tool:
vault_secrets_share - API:
POST /api/invoke/vault.secrets.share
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
actorId |
string | yes | |
permission |
"use" | "manage" | — |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"actorId": {
"type": "string",
"minLength": 1
},
"permission": {
"type": "string",
"enum": [
"use",
"manage"
]
}
},
"required": [
"id",
"actorId"
]
}vault.secrets.unshare
POST · mutating
Revoke an actor's access to a secret. Creator only.
- AI tool:
vault_secrets_unshare - API:
POST /api/invoke/vault.secrets.unshare
Input
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | yes | |
actorId |
string | yes |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"actorId": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"actorId"
]
}vault.audit
GET
Read recent secret/credential access events from the audit log.
- AI tool:
vault_audit - API:
GET /api/invoke/vault.audit
Input
No parameters.
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {},
"additionalProperties": {}
}