Architecture

A dumb vault. A warden that never sees the key.

The layer that holds secrets does not talk to agents. The layer that talks to agents does not hold secrets.

Three layers

Who is allowed to know what

App

Approval, vault, logs, policies

Plain TypeScript in Electron. It shows you the decision. It does not keep the secret.

vaultd

The dumb vault

AES-256-GCM under a passphrase-wrapped key (scrypt or Argon2id), the policy floor, single-use grants. Keys are decrypted here for one call — never persisted, never logged.

Edges

Agents and the warden

IDEs speak MCP. The warden scores metadata. Neither side receives the key.

One request

Denied early, or returned without a key

sequenceDiagram
  participant Agent
  participant Policy
  participant Warden
  participant You
  participant Vault
  Agent->>Policy: request_capability
  alt Write under a read ceiling
    Policy-->>Agent: denied, model never called
  else Inside the ceiling
    Policy->>Warden: agent, alias, scope, reason
    Warden-->>You: risk, and a scope it cannot widen
    You->>Vault: approve once
    Vault-->>Agent: the tool result, key absent
  end

A self-approve hits 401. MCP has no approve tool. The daemon token stays in the app and the CLI.

The floor

These do not depend on the model

No secret in the transcript

MCP, HTTP, audit rows, the UI, and the model prompt. A canary covers 27 surfaces and fails the build on a hit.

Plaintext stays in memory

Decrypted at call time for one grant. The app never writes it to disk and never logs it.

Narrow, never widen

The warden can shrink a scope. It cannot step past the alias ceiling.

Grants expire

After the call, after the TTL, or the moment you revoke.

Localhost only

The daemon does not listen on the network. Human routes want the daemon token.

Model down is still safe

Fooled, malformed, or missing: policy and you decide. The floor does not move.

Warden

Judgement on top of the law

The shipped catalogue is what Settings exposes. A larger model is better at spotting a write phrased as a read. It is not a wider permission.

none TypeSafe Jev 1.14 · default Local agent (ACP) · opt-in
Like a wallet

Keys are used, not shown

Encrypted at rest. A human approves. The secret is not a field you can copy back out.

Unlike a signature

The payload is an API call

Who asked, which scope, what they claimed, and what the warden thinks. That context is the product.

Next

What’s next

Enclave and device

The same daemon boundary, on hardened hardware.

Browser approval

The same human decision, outside the desktop app.

Team policy packs

Ceilings you share. The floor still cannot be widened by a model.

The canary test and the verification notes are in the repo.

07 · Next step

Does the warden hold up?

The architecture shows where the model sits. The research shows what it catches, what it costs, and where it fails.