Single tenant, no cross-customer amplification
The control plane in your data centre serves only you. Cross-tenant credential leakage does not exist as a threat class because there is no second tenant. It also simplifies the architecture materially.
Threat model & boundaries
A security document that lists only strengths is a negative signal to a CISO. This page is deliberately inverted: the risks we introduce first, the problems we solve second, and the questions we have no answer to at the end.
Threat #0
Private deployment changes the shape of this threat but does not remove it. Because the control plane runs inside your own network and is single-tenant, the SaaS-specific amplification of “one breach reaches every customer” does not exist — the blast radius is bounded by your own perimeter. Inside that perimeter, it is still one of the highest-privilege components you run.
The control plane in your data centre serves only you. Cross-tenant credential leakage does not exist as a threat class because there is no second tenant. It also simplifies the architecture materially.
Signing and wrapping keys never leave the hardware security module in plaintext. Holding root keys in your own KMS / HSM over PKCS#11 must be supported; a software-key mode is explicitly labelled as a lower assurance tier.
Is a zero-knowledge credential design possible — where the broker cannot read the plaintext even as it injects it? We do not have a satisfying answer yet.
Threat classes
Every row below is marked with its current status: Designed / Needs dedicated work / Explicitly cannot.
| Class | Key question | Where we stand | Status |
|---|---|---|---|
| Control plane compromised | the broker is breached = every credential it holds leaks | Single-tenant private deployment bounds the blast radius to your own perimeter (no cross-customer amplification); root keys held in your KMS / HSM; zero-knowledge credential design still unsolved. | Needs dedicated work |
| Attestation degraded when air-gapped | Apple notarization cannot be checked online — does attestation strength drop? | Yes, it drops. Offline we can only do local static signature verification plus stapled tickets. The product labels which tier the attestation is in; we do not present the two tiers as equivalent. | Designed |
| Clock drift defeats short TTLs | without external NTP, a 60–300s Tup may expire on issue | Detect cluster clock skew at startup and warn; define an explicit tolerance window; fail closed with an explicit error when skew exceeds the threshold — never silently allow. | Designed |
| Agent self-tampering | the agent rewrites its own gate scripts (publicly documented) | Any control the agent can edit is not a control. Only root-owned managed policy, or an out-of-process broker, survives. This is one reason the credential sits outside the agent process. | Designed |
| Prompt injection → authorized call | a hijacked agent makes a call it is entitled to make | We cannot stop it. We degrade the impact, record it, and make it revocable. See the next section. | Explicitly cannot |
| Rug pull (tool description changed) | approve-at-install with no re-verification is the norm, and the gap has been exploited (CVE-2025-54136) | Tool description pinning (TOFU) + forced re-authorization on change | Designed |
| Availability is security | we go down, every agent stops | Fail-open violates deny-by-default; fail-closed makes us a single point of failure. A break-glass mechanism has to be designed, not avoided. | Needs dedicated work |
| Unregistered agents | an agent not in the registry makes a call — now what? | Refusing impedes adoption; allowing leaves a hole. This is a policy question we have not settled. | Needs dedicated work |
Prompt injection
This sentence is worth stating precisely, because the market is full of the opposite over-promise. Prompt injection is a confused deputy problem: anything the agent reads may be attacker-authored instructions, and the agent holds real privilege. When a hijacked agent makes a call it was already entitled to make, no control sitting above the credential — dialogs, tool-description validation, intent classifiers — can determine in principle that the call should not happen.
The credential's scope is narrowed to this one specific operation and its lifetime is measured in seconds. What would have been “exfiltrate the entire private repository” degrades to “make one authorized call.”
The call is attributable to a named human + agent instance + task and written to a tamper-evident audit record. Afterwards you can actually establish what happened.
Consume CAEP / Shared Signals events from your IdP to kill an in-flight agent session within one token TTL; or use token-claims-change to narrow a running agent's privileges rather than only killing it.
Local process attestation
This is the hardest technical bone in the product. We label it heuristic and defense in depth, and never claim it is equivalent to hardware remote attestation.
| Off-the-shelf approach | Why it does not hold for a macOS CLI process |
|---|---|
| SPIFFE workload attestation | Collapses here into UID + binary path, which a user can trivially forge. It gives you a name, not a guarantee. |
| Apple App Attest | An iOS / iPadOS / tvOS API that does not support arbitrary macOS CLI processes. |
| TPM 2.0 | Essentially nonexistent on macOS. |
| WebAuthn / FIDO2 | Binds “human to device,” not a background process. |
| TEE remote attestation | A server-side technology; not applicable to a developer laptop. |
attestation_score = f( code signature + notarization // Team ID, hardened runtime. // Verified by a local privileged helper -- // a process cannot attest itself. , Secure Enclave device key // non-exportable; binds device posture at enrollment , MDM enrollment state // when available, the strongest claim about this machine , parent process chain // was this MCP server launched by Claude Code, or something else? , continuous re-attestation // re-verified mid-session, not once at issuance ) This is a composite heuristic. It raises the cost of impersonation. It is NOT a hardware root of trust, and we will not describe it as one. Air-gapped tier: no online notarization check. Falls back to local static signature verification + stapled ticket. Explicitly a WEAKER tier -- labelled as such in the product, never presented as equivalent.
A workload identity issued once is trusted for its whole validity period no matter what the workload does afterwards. The prompt-injection threat model requires mid-session re-verification — that is the substantive difference between us and one-shot attestation.
Storing a non-exportable key in the Secure Enclave requires our own code-signing identity; proving who the calling process is makes no sense if the SDK runs inside the process being attested; and the credential has to be held outside the agent process — the physical precondition for “credentials never land.” So the Local Attestor has to be a separate, code-signed daemon.
Compliance
The standards below share one requirement: every privileged action must be attributable to a named, unique, non-shared identity, and the record must be tamper-evident and retained. A static API key structurally cannot satisfy that — and this gap holds today, without waiting for any new regulation.
| Standard | Clause | Evidence we provide |
|---|---|---|
| SOC 2 | CC6.1 / CC6.3 / CC6.5 / CC6.6 / CC7.2 | Every privileged action attributable to a named, unique, non-shared identity; logical access granted and revoked on least privilege. This is our core argument. |
| DORA | Chapter II — ICT risk management | Access control and traceability over ICT assets for financial entities. Financial services is currently the one segment with live obligations. |
| PCI DSS 4.0 | Req.7 / Req.8 / Req.10 | Unique IDs, no shared accounts, 12-month log retention. |
| ISO 27001:2022 | A.8.2 / A.8.15 | Management of privileged access rights; logging. |
| NIS2 | Art.21(2) | Access control as a baseline cybersecurity risk-management measure. |
Open questions
We keep this list on a public website because it is the biggest difference between us and a demo-driven product.