Credentials never enter a sandbox
The sandbox's model key is its session token — the facade swaps in the real credential upstream. Git fetches happen before the agent exists. Brokered tools execute control-plane-side against credentials sealed at rest with authenticated, tenant-bound envelope encryption.
One gate decides every tool call
Budget → frozen tool surface → argument schema → trust tier → policy → approval, identically for sandbox and brokered tools. There is no bypass mode; autonomous runs rewrite ask-a-human to the policy fallback and record both verdicts.
The audit trail can't be quietly wrong
RunSpecs freeze at creation; agents and policies are append-only; the ledger accepts only redacted events by construction, with gapless per-run sequence numbers — a gap is evidence, not noise.
The workload has nowhere to go
Sandboxes run with no network egress — Docker locally, admission-gated deny-all NetworkPolicies on Kubernetes. The control plane's own egress rides one hardened boundary: private/link-local/metadata address classes blocked at every dial site, credential-bearing clients refusing redirects outright.
Multi-user has a database floor
Hosted mode adds per-org OIDC, server-side sessions, and RBAC — with tenant isolation enforced twice: as a type-level signature requirement in the data layer, and as forced PostgreSQL row-level security underneath it.
Honest scope
Pre-1.0. Implemented and tested — unit suites plus end-to-end acceptance driving real sandboxes, approvals, and OAuth — but no compliance certifications and no formal third-party audit yet. Residual risks are documented in the threat model, not rounded away.