Use Avibe Vault
When a task needs API keys, access tokens, passwords, wallet private keys, or other sensitive credentials, prefer Avibe Vault: agents reference secrets by name, tag, or skill tag, and users do not need to paste plaintext into chat.
Core concepts:
- Static secret: a regular secret value, such as an API key, token, database password, or deployment credential. Use it with
vibe vault runfor environment injection orvibe vault fetchfor authenticated HTTP egress. - Keypair secret: a signing key for digests or transactions, such as a wallet key or deployment signer. It cannot be exported as an environment variable and cannot be used with
run/fetch; usevibe vault sign. - Standard: for lower-risk routine automation. Agents can usually use it without interrupting the user unless it is configured to ask first.
- Protected: for high-risk secrets, such as production databases or wallet/funds keys. Because protected secrets are end-to-end encrypted, use requires browser approval and passkey unlock.
Rules:
- Refer to secrets only by secret name, tag, or skill tag.
- Static secrets can be used with
run/fetch; keypair secrets can only be used withvibe vault sign. - With
vibe vault run, the child process receives static secrets as environment variables, so never run commands that may print env vars, debug config, or secret-bearing errors. - When protected
run/fetchneeds approval, Avibe automatically asks the user to decrypt and authorize access. After the user approves, Avibe resumes this session; it does not replay the command for you, so run the samerun/fetchcommand again. - When protected
signneeds approval, Avibe creates a browser signing request and returns immediately. Do not rerunsign; when Avibe resumes this session, follow the callback instruction to read the completed request result and continue with the returned signature.
Common commands:
Request that the user add a missing static secret. spec-json may contain only non-secret prefill metadata; the actual secret value is entered by the user in the browser:
vibe vault request OPENAI_API_KEY --reason "Need OpenAI API access" --spec-json '{"kind":"static","protection":"protected","description":"OpenAI API key","tags":["openai","prod","skill:model-work"],"policy":{"allowed_hosts":["api.openai.com"],"auth":{"type":"bearer"}}}'
For a missing keypair/signing key, ask the user to create a keypair secret in the Vault UI; do not request or store private-key material as a static secret.
On Avibe Web chat, a lighter manual prompt can mention the missing secret as a clickable placeholder in your reply, for example $<OPENAI_API_KEY>. The user can click it and fill the secret from Web chat. This has no reason or structured prefill metadata; use vibe vault request when those are needed.
List or find existing Vault entries:
vibe vault list
vibe vault list --tag prod
vibe vault find --kind static --protection protected
vibe vault find openai --tag prod
vibe vault tags
Run a command with selected static secrets injected as environment variables:
vibe vault run --env OPENAI_API_KEY,GITHUB_TOKEN -- python script.py
vibe vault run --env GITHUB_TOKEN=GH_PAT --env OPENAI_API_KEY -- python script.py
vibe vault run --tag deploy -- ./deploy.sh
vibe vault run --skill github-release -- ./release.sh
Make an authenticated HTTP request. The credential is attached only at egress, and the agent never sees the secret:
vibe vault fetch --auth GITHUB_PAT --url https://api.github.com/user
Request approval before a protected run with an existing static secret:
vibe vault access PROD_DB_URL --skill deploy --command "run database migration" --egress "connect to production database"
For protected fetch, run vibe vault fetch; it creates the correct fetch approval request when needed.
Sign a 32-byte digest with a keypair secret. Standard keys may return the signature directly; protected keys create a browser approval request:
vibe vault sign WALLET_KEY --digest <64-hex-digest> --scheme ecdsa-secp256k1-recoverable --command "sign deployment transaction"
For more details, run vibe vault --help.