Documentation 30
Agent tutorials · 3 pages · 10 min each
Test your agent against a world that never moves.
An agent that reads the tools your team works in is only as testable as the data underneath it, and a real account gives you neither a fixed answer nor a safe place to be wrong. Each page below points a tool client at a pinned host whose bytes never change, runs one small agent task against it, and asserts the answer, so the run in CI tonight is the run you did in your terminal this morning.
01 / The three pages
One incident, three tools.
They are deliberately the same lesson three times, because the thing worth learning is the shape: fetch what a tool would return, decide something from it, assert the decision. They also read the SAME incident from three sides, so following all three is itself an exercise in whether an agent can cross tools.
02 / The story they read
Cassandra files it, Tiresias ships it.
On 2026-06-17 an engineer at olympus-labs opens a thread in #incident-bridge about events dropped during a rebalance. Six minutes earlier the same person filed FATE-51. Two days later a colleague merges pull request 53 from hotfix/backfill-job-ooming, and twenty-four minutes after the thread's all clear the tracker marks the issue Done.
Three vendors' APIs, asked independently, tell that one story, because one simulated company is underneath rather than three sets of fixtures somebody keeps in step by hand. The four-hop demo walks it end to end in a terminal, and the tour shows who the people in it are.
03 / The shape
Fetch, reason, assert.
Every script on these pages is plain requests in three labelled beats. The middle one is a pure function of the fetched rows, which is the beat you replace with a model call when you want an eval rather than a smoke test:
rows = fetch(...) # what a tool call would return
answer = decide(rows) # swap in a model call here
assert answer == {"shipped": True} # the row it read is frozen, so this holdsThe assertions are values read off a frozen pin, never values typed into a page: apps/web/src/lib/tutorials.ts holds each script as the one string the page renders, and apps/web/src/lib/tutorials.test.ts compiles every one of them on each run and executes them against the pin hosts under SANDBOXAPIS_LIVE_TUTORIALS=1.
SANDBOXAPIS_LIVE_TUTORIALS=1 pnpm exec vitest run --project @sandboxapis/web src/lib/tutorials.test.tsNext
Where to go from here.
SandboxAPIs for agents is the wider case for pointing an agent here; MCP setup is the same universe through tools instead of HTTP.
Verified quickstarts · Versioning and pinning · Coverage manifest · All docs