Skip to main content

Agent Sandbox Troubleshooting

Sandbox failures usually look alike from the outside — the run ends without the outcome you wanted. This is how to tell which one you hit.

Start with the output

Most misdiagnosis comes from not having the output. Stream it before anything else:
--verbose adds telemetry; --json makes the result parseable rather than prose.

Authentication

Symptom: 401 or 403 on any call.
  • Confirm the key is valid and unexpired.
  • Check the header format: Authorization: ApiKey YOUR_API_KEY — not Bearer. This is the most common single mistake, because the rest of the platform uses Bearer.

The CLI isn’t there

Symptom: command not found: stateset. The sandbox image must include the CLI. If you’re on a custom or older image, rebuild it or update the runtime image.

The write didn’t happen

Symptom: the run reports success, but nothing changed. This is almost always a missing --apply. The CLI is read-only by default, so a write phrased without the flag describes what would happen and exits cleanly. A clean exit with no effect is the signature.
If --apply is present and the write still didn’t land, check guardrail policy for restricted operations, and whether the action exceeded a High-Value Action threshold and is awaiting approval rather than having failed.

Timeouts

Symptom: the run ends abruptly at a consistent duration. That consistency is the tell — it’s timeout_seconds, not the workload.
  • Raise the timeout, or reduce the work.
  • Prefer splitting the workflow: a run that dies takes one chunk with it rather than the whole job.
A hung agent bills for the full timeout. Raising it to make a symptom go away can turn a failing run into an expensive one — check whether the agent is stuck in a loop first. See Sandbox costs.

Unexpected results, not errors

Symptom: the command succeeds and does the wrong thing. If you’re using the natural-language binary, the phrasing was interpreted differently than you meant. Switch to stateset-direct, which takes explicit commands with no interpretation layer:
For anything an agent runs unattended, this should be the default rather than the fallback.

Quick triage