Whitepaper · v1.0 · Authored by Joe
Every architectural claim on this page links to a file and a line range. Every gap we haven't closed is named below. If you have a security requirement we don't meet, tell me and I'll fix it. Direct line at the bottom.
01 · Architecture
Trust boundaries
Five outbound trust edges from cagent-studio. The dashed boundary on the per-tenant machine means no shared filesystem, no shared OpenRouter key, no shared OAuth tokens. Every solid edge is a credentialed call with its own auth scheme.
02 · Primitives
Stored credentials (OpenRouter sub-keys, BYOK provider keys) are wrapped in AES-256-GCM before they ever hit Firestore. The userId is mixed into the AAD so a ciphertext stolen from one record cannot be replayed against another.
Each paying user gets their own isolated tenant: separate machine, separate IPv4/IPv6, separate volume. There is no shared compute pod or shared filesystem. A compromise of one tenant does not give an attacker any path into another.
We do not enforce the cap in our application layer. OpenRouter does, at the API gateway. The model literally cannot complete a token over budget; OpenRouter returns 402 and we surface that to the dashboard. The cap is therefore not a promise, it is a property of the system.
The strongest claim on this page: when you connect Claude / ChatGPT / Grok via OAuth, the tokens are written only to /workspace/.hermes/ on your encrypted volume. They never transit cagent-studio. They never land in Firestore. Even Joe cannot read them without a direct shell into your specific machine, a step that is logged in your dashboard's audit panel.
We are not in the cardholder-data path. Stripe Checkout is hosted; the only thing that crosses to us is the webhook, which we verify by signature and reject after a 5-minute freshness window.
Passwordless by design. There is no password to phish. A 6-digit single-use code expires in 15 minutes. Sessions are Firebase JWTs that rotate automatically.
03 · Threat model
● OK handled · ● PARTIAL mitigated, gaps named · ● GAP not yet
★ Direct line · The differentiator
SOC 2 audit-readiness, your DPA, SSO, MFA, longer log retention, on-prem images, HIPAA BAA, custom isolation, if you're paying me and you ask, I'll have it for you Monday.
This is the single biggest reason to deploy on clawd.run rather than a cohort of strangers behind a support queue. Email goes to my phone. I read it before I read Twitter.
joe@joepro.aiTypical reply < 2 hours · weekdays · UTC-04
04 · What we explicitly don't do (yet)
Anything marked "will sign" or "will build" is an honest commitment. See Direct line.
05 · Audit it yourself
src/lib/launchpad/openrouter.ts
AES-GCM envelope, sub-key minting, plan-limit cap enforcement
src/lib/launchpad/fly.ts
Per-tenant machine provisioning, IP allocation, volume attach
src/lib/launchpad/provisioner.ts
Key resolution order: BYOK → sub-key → pooled
src/lib/launchpad/usage.ts
Firestore launchpad_users schema, hour caps, cycle reset
src/app/api/stripe/webhook/route.ts
Stripe webhook sig verification, subscription state transitions
src/app/api/auth/send-verification/route.ts
6-digit code, 15min TTL, single-use