Architecture

A wallet, its wardens, and the law

Three layers, one rule: the layer that holds secrets never talks to agents, and the layer that talks to agents never holds secrets.

┌─ Electron app (plain TypeScript) ─────────────┐
│  Approval · Vault · Request Logs · Policies   │  holds no secrets
└──────────────┬────────────────────────────────┘
               │ whitelisted IPC (main process)
┌──────────────▼────────────────────────────────┐
│  vaultd — the dumb vault                      │
│  AES-256-GCM store · OS-keychain master key   │
│  deterministic policy (the law) · grants/TTL  │
│  in-daemon secret injection · audit log       │
└──────┬───────────────────────────▲────────────┘
       │ MCP (stdio)               │ metadata only
┌──────▼──────────────┐   ┌────────┴────────────┐
│ Agents in any IDE   │   │ Meta LLM wardens    │
│ Cursor·Claude·Codex │   │ 3B → Glimmer → Spark│
└─────────────────────┘   └─────────────────────┘

Request flow

Invariants (tested, not promised)

The warden (Meta LLMs)

Effect-TS services with tagged errors (MarshalUnavailable, GrantExpired, …) and Effect Schema at every boundary. The warden prompt treats all agent-supplied fields as untrusted data; output is schema-decoded, never hand-parsed. Levels: none → Llama 3.2 3B (local) → Muse Glimmer 30B (local) → Muse Spark / Wonder (Meta Model API). Stronger wardens detect attacks — writes phrased as reads, injection in the reason field, slow scope-creep — and can flag rogue agents mid-testing.

How this compares to a crypto wallet

Same skeleton: an encrypted vault, a human approval surface, keys that are used but never displayed. Different payload: a wallet signs one predictable transaction; OpenVault authorises arbitrary API behaviour, so approval needs context a signature prompt never had — who is asking, what scope, what history, what the warden thinks. That context is the product.

Measured evidence (2026-10-31, RTX 3070 8 GB)

Future

Air-gapped vault mode (no network path at all), secure-enclave and hardened-device deployments, a browser extension approval surface, and per-team policy packs. The architecture already isolates the vault from every network-facing surface except localhost — air-gapping is a packaging decision, not a redesign.