The sandbox for production agents

The sandbox every AI agent should have been born with.

Every agent you run today has the keys to everything — your tools, your data, your infra. sypho gives it a sandbox instead: real boundaries it can't talk its way out of, enforced before any call reaches a real system.

Or see how the sandbox works →
Every action — allowed, denied, or held — crosses the same boundary.
What actually happens

Every tool call gets inspected before it runs.

Not validated by convention, not trusted by default. Four checks, in order, on every single call — whether the model asked for it on purpose or hallucinated it.

01 — CALL

Agent requests a tool

The model decides to call refund_payment, structured_data_save, whatever it has access to.

02 — CHECK

Runtime checks scope

Matched against the run's exact allowed tools — by name, glob, or pattern — and its remaining budget.

03 — STAMP

Call is marked

Allowed, denied, or held for a human to approve — decided by policy, not by what the agent intended.

Requires approval
04 — RECORD

Result hits the trace

Every call and its outcome is written to the run's trace — reachable by one deployment, one version, one run.

run_8f2a19c4 — live sandbox
refund_payment(amount: 1200)
Deniednot in scope for this run
structured_data_save(ticket)
Executedticket:4821 saved
wire_transfer(amount: 40000)
Holdingwaiting on approval
Yes, it really tried to wire $40,000. No, it didn't get anywhere near it.
The runtime layer

Four controls. One enforcement point.

Not a dashboard you configure and hope the agent respects. These are checks the runtime makes — the agent has no path around them.

Isolate

Network-sealed sandbox

Every run gets its own container with no route to the outside — only the gateway sidecar can reach the network.

Authorize

Exact tool scope

Tools are declared by exact name, glob, or pattern. Anything else is rejected before it reaches a real upstream.

Approve

Policy-held actions

Flag a tool as requiring approval and the runtime pauses it for a human — the agent can't talk its way past it.

Observe

Full run trace

Every call, result, and dollar spent — connected back to the exact deployment version that produced it.

Runs wherever you need it

Local, your cloud, your customer's cloud, or ours.

The runner is a lightweight binary plus Docker — the same network-isolated sandbox, wherever it runs.

LocalPrivate cloudCustomer cloudOn-premsypho-managed
Not marketing claims

Specifics, not promises.

Infrastructure claims should be checkable. Not "trust us" — here's exactly what's enforced and how.

Network isolation
The agent container is attached only to an internal Docker network. It is not reachable from the outside, and it cannot reach out — the gateway sidecar is the only member of both networks. No firewall rules involved; it's pure network membership.
Tool authorization
A run's tool_scope is frozen at creation from the deployment's manifest. Matching is exact name, glob, or /regex/ — a deny pattern always beats an allow pattern.
Approval gate
A policy can mark any tool as require_approval. A matching call is blocked and surfaced to a human before it executes — independent of whether the agent asked nicely.
Spend cap
Budget is a policy frozen on the run, checked before every model call. A run that exceeds it fails with a readable reason, not a silent overspend.
Structured data
Namespaced, versioned key/value storage. Access is read or read_write, scoped to specific keys, and can only be narrowed per run — never widened.
No proprietary SDK

Bring the framework you already use.

A manifest and a handful of environment variables — point your model client at the gateway and it's enforced for free.

LangChainLangGraphCrewAIYour own loop
$ sypho build --version 0.1.0
$ sypho deploy --version 0.1.0
$ sypho run my-agent:0.1.0
Ready when you are

Give your agents a boundary that holds.

Access approved