Get started

Govern · QuoxVault beta

Grant secrets. Never hand them over.

QuoxVault is a password manager built for AI agents instead of people: it stores your organisation's real secrets and grants agents short-lived, scoped leases to use them, never the secrets themselves, with every access recorded on a tamper-evident chain.

It storesAPI keys·email accounts·web logins·SSH keys·TLS certificates·database credentials·generic secrets

Watch a secret get leased

In plain words

What it is, where it lives, when to reach for it

What is it
A credential store inside QuoxCORE that holds the API keys and passwords your agents use.
Where do I use it
On the dashboard's Vault pages, and through the quox vault commands in your terminal.
When would I use it
Every time an agent or integration needs a secret you do not want pasted into code.
How do I use it
Run quox vault create and follow the prompts, then quox vault test <id> to prove it connects.

QuoxCORE is the free, self-hosted platform underneath this. What is QuoxCORE

The vault console

Watch a secret get leased.

The whole product in one loop. An agent asks for a credential, the vault issues a short-lived lease bound to that agent, the secret is used server-side, and the lease revokes itself. Every step, including every refusal, lands on the WARD chain below. Grant or deny the next request yourself.

illustrative demo · sample data · the clock runs at 8× speed

vault consoleorg acme-industriesmode enforced · demoleases 0denials 0

stored credentials · typed · envelope-encrypted

stripe-prod service_apisk_••••••••••••••owner · financereleased server-side
acme-gmail email_accountimap+smtp ••••••••owner · opsreleased server-side
db-analytics databasepostgres://ro:••••••@…owner · datareleased server-side
deploy-key ssh_keyed25519 ••••••••••owner · platformreleased server-side
edge-cert tls_certx.509 pem ••••••••owner · platformreleased server-side

values are masked here and sealed at rest · they never leave this panel

requests & leases

incoming request

Agent CIPHER requests stripe-prod

no active lease

Granted, not handed over. The agent receives the lease, never the secret. The vault resolves the value server-side at the moment of use, and an expired lease resolves to nothing.

ward chain of custody

What it stores

Seven kinds of secret, all typed.

A secret is not just a string. Each credential kind carries shape validation and its own release policy, and the secret is used server-side, so it never reaches the agent at all.

service_api

API keys and tokens, resolved through the key waterfall at call time: bring your own key, organisation, instance, environment.

web_login

Browser automation signs in with it. TOTP codes are computed server-side under a compute-only policy: the seed never leaves the vault.

email_account

IMAP read and SMTP send, released server-side. Agents work the mailbox without ever holding the password.

ssh_key

A server-side executor uses the private key in memory only. Host keys are pinned on first use, and a changed host key hard-fails before any command runs.

tls_cert

X.509 parsing with expiry and metadata, no external dependencies.

database

A query executor that runs read-only by default, inside a read-only transaction unless you explicitly allow writes. The password is resolved server-side.

generic

Envelope-encrypted storage for any secret that does not fit a shape yet.

Leases

Leased, not handed over.

You watched it above: CIPHER used stripe-prod and never saw a single character of the key. That is the entire design.

  • Short-lived. Every lease carries an expiry, checked at release time in a single fail-closed query. A background job sweeps expired leases every 30 seconds.
  • Scoped and agent-bound. One lease covers one credential for one agent. A request from the wrong agent is a structural miss in the query, not a comparison that can drift.
  • Use-budgeted. Set a maximum number of uses and the count is consumed atomically. The sixth use of a five-use lease is refused.
  • Human-approved. A lease request lands in the approval inbox, so a person grants the access before any agent touches the secret.

the old way

agent.env
STRIPE_KEY=<the real key, in plain text>
 
held forever
copied anywhere
no record of use

Hand an agent the secret and you have lost custody of it.

the vault way

lease lse_01j8k2
scope read-only · uses 3
expires 90 s · agent-bound
resolved server-side
revokes itself
witnessed on the chain

Grant a lease and custody never leaves the vault.

The audit trail

Every access recorded.

Each release, grant, revocation and refusal is written to the audit trail and witnessed on the WARD chain, an append-only hash chain where every entry binds the hash of the one before it.

  • Tamper-evident by construction. Rewrite any entry andverifyChain reports the break at the exact block.
  • Denials are evidence too. A refused request appends a block just like a grant does. You saw RELAY refused in the console above, and the chain kept it.
  • Readable by an auditor. The chain exports with the rest of the evidence surface, alongside AEE, AOCL and VOLT.

anatomy of a block

eventsecret.release · stripe-prod
leaselse_01j8k2 · use 2 of 3
actoragent CIPHER
prev#8c41f7a2…
this#3d9b04ce…
verdictreleased · witnessed

Encryption

One envelope per secret.

Every credential gets its own data key, the data key is wrapped by the organisation KEK, and the result seals into an authenticated AES-256-GCM block. Watch the seal close.

the secret

plaintext · 9f3a c21b…

Plaintext exists only in memory, at the moment of use. Never at rest, never in a log.

sealed by

DEK · per credential

One data key for each secret. Compromise of one envelope stays one envelope.

wrapped by

org KEK · versioned

An HKDF-derived key-encryption key, carrying a version so rotation is traceable. It wraps the DEK, never the data.

seals to

AES-256-GCM block

9f3a c21b 44e0 8d17 a2c9…

sealing…

Authenticated ciphertext. A single flipped bit in data or wrapped key fails loudly on decrypt.

rotation

Rotation is a re-wrap.

Rotating the master key re-wraps each credential's data key. The ciphertext itself is never touched, and a dual-key window keeps the previous key valid during the roll.

completeness

Coverage by construction.

Every encrypted store is registered in one place, and the test suite fails if a new ciphertext column ships unregistered. Rotation cannot silently miss a table.

release

Unsealed only at the moment of use.

A secret is decrypted server-side, inside the release path, under the lease check. Plaintext exists in memory for the moment of use and nowhere else, never at rest and never in a log.

The actual console

The same console, running for real.

Not a mock-up of the demo above: credential health, connectors and encryption status, in the QuoxVault console itself. In beta.

quoxcore · quoxvault dashboard
The QuoxVault dashboard: an AES-256-GCM badge, a health counter row of total, healthy, failed, untested and stale credentials, a By Type bar chart, a Connectors panel with GitHub active and Jira empty, and a Health Scan Flags list.
  1. 1See the encryption at a glanceAn AES-256-GCM badge sits right beside the QuoxVault name, not buried in settings.
  2. 2Read health status as one rowTotal, healthy, failed, untested and stale counts sit as five cards across the top.
  3. 3Break down credentials by typeA stacked bar shows how the vault's credentials split across browser logins, OpenAI keys and more.
  4. 4Track connector statusGitHub and Tailscale show ACTIVE while Jira, Notion and Linear wait with no credentials in the vault yet.
  5. 5Catch stale and failed credentialsThe Health Scan Flags list names every credential that needs a fresh test.

Captured from the real QuoxVault dashboard, not a mockup.

On the roadmapcloud-credential connectors, Gmail and Outlook OAuth, and a standalone Rust vault server. The full status map lives in the docs.

Govern

Grant the secret. Keep the custody.

We are onboarding a small number of teams ahead of wider release. Read how leases, the envelope model and the WARD chain fit together, or talk to us about putting your first credential behind the vault.

leased, never handed over