Connect

The vault

Every credential a workspace holds lives in one place, encrypted, and no route ever returns one — not even masked. An agent never receives a secret. It receives a capability.

Write-only, and what that means

The vault is in Settings, under Vault. You can write a secret and you can replace it. You cannot read one back, and neither can anyone else, including an administrator.

This is structural rather than a policy:

Losing a secret means rotating it at the provider and writing the new one. That is the intended workflow.

Four namespaces

GroupWhat it holdsWritten from
PlatformManaged keys, such as the workspace's own model API keySettings → AI
ProviderA provider skill's API keyThe provider credentials route (manage role)
OrbA webhook's signing secretThe orb's own panel
SharedAnything else the team needs to shareThe vault's own write route

A single classifier decides which group a key is in and which lane may write it, and both backends use that same classifier — so a secret written through one is understood identically by the other. A malformed namespaced key is reported as an orphan rather than guessed at, so nothing offers to overwrite the wrong row.

How an agent uses a credential without seeing it

This is the part worth understanding properly. An agent that needs to call a provider API does not get the key. It calls call_provider and names four things, and only four:

skill_idWhich provider skill
operationWhich named operation on it
path_paramsValues for the operation's path placeholders
bodyThe request body

The server resolves the base URL and the endpoint path from the skill definition, attaches the vault credential, makes the request, and returns the response fenced as untrusted data.

The rules that make this a security feature

Every call is audited

One Activity row per call: provider, operation, method, resolved URL, status, duration. Never a body, never a header, never the vault key's name.

The vault beats the environment

When resolving a credential, the vault is read first. A host environment variable is a fallback for a locally-run server — and crucially, the name of that variable comes from the bundled skill definition, never from an agent-authored one. Otherwise an agent able to write its own metadata could name the server's own auth secret and have it attached as a bearer token.

Reaching it

The vault table is not in the generic database allowlists. The dedicated manage-role routes are the only doors, and the general write route's key charset excludes the colon, so it cannot address a namespaced entry belonging to another lane.

Self-hosting

If you run agensis across two hosts, the encryption key must be identical on both — a secret written on one is otherwise undecryptable on the other. See Self-hosting.