Durable runs
Every step is checkpointed before the next one starts. Kill the worker mid-run and the agent picks up at the same tool call.
checkpoint · resume · retryTooth is the runtime for long-horizon AI agents. Every step is durable, every tool call is traced, and anything risky waits for a person. Ship an agent on Friday and sleep through the weekend.
npx tooth init --template support-triage
A demo agent is a prompt and a loop. A production agent needs storage, retries, permissions, review and a record of what it did. Tooth is that second list.
Every step is checkpointed before the next one starts. Kill the worker mid-run and the agent picks up at the same tool call.
checkpoint · resume · retryGate any tool behind a rule. The run pauses, asks the right channel, and waits for as long as it takes.
slack · email · consolePrompts, tool calls, tokens and costs are all recorded. Fork a past run from any step and change one thing.
trace · fork · diffTools run in isolated workers with scoped credentials, per-call timeouts and a network allowlist.
isolation · secrets · limitsEach push replays your eval suites against the new build and blocks the release if a pass rate drops.
suites · gates · historyPick a provider per agent or per step. Tooth handles rate limits, retries and fallbacks between them.
routing · fallback · cost capsDefine tools as plain functions, set a budget, and say which calls need a person. Tooth runs each run through the same four stages.
The agent writes a plan before it touches a tool, and the plan is the first entry in the trace.
Each tool call runs in a sandbox with its own timeout and credentials.
Guards inspect every call. Anything over the line pauses for review.
When someone approves, the run resumes from the exact step it stopped on.
import { agent, checkpoint } from "@tooth/agents";import { searchTickets, readTicket, draftReply, issueRefund } from "./tools"; export const triage = agent({ name: "support-triage", model: process.env.TOOTH_MODEL, instructions: "Resolve open tickets. Draft replies, never send them.", tools: [searchTickets, readTicket, draftReply, issueRefund], // stop before it gets expensive budget: { steps: 40, usd: 2.00 }, guard: checkpoint({ when: (call) => call.tool === "issueRefund" && call.args.amount > 100, ask: "#support-leads", timeout: "24h", }),});
This is run 4182 of the agent above, paused on the refund it isn't allowed to make alone. Approve it and watch the run resume.
Click any span in the real console to see its full prompt, arguments and output, or fork the run from that point.
Requested by support-triage · run 4182 · step 6
The customer was charged twice on 2 October. Both charges appear in the billing ledger, and the second has no matching shipment. Refunds over $100 need a lead's approval.
Approving resumes the run at step 6. Rejecting tells the agent why, and it drafts a reply to the customer instead.
| Suite | Cases | Pass rate | vs. last deploy |
|---|---|---|---|
| support-triage/refunds | 120 | 97.5% | +1.7 |
| support-triage/tone | 80 | 93.8% | −0.6 |
| billing/ledger-math | 210 | 100% | ±0.0 |
| research/citations | 64 | 89.1% | +4.2 |
● Deploy gate passing · blocks a release if any suite drops by more than 2.0 points
You pay for steps your agents take in our cloud, not for seats or tokens. Model costs go straight to your provider.
Build and test agents locally with the full runtime.
For agents doing real work for real customers.
Tooth inside your own cloud, run your way.
Any provider with a chat API, and self-hosted models behind a compatible endpoint. You choose the model per agent or per step, and Tooth falls back to a second provider when the first is rate-limited or down.
On Developer, nowhere: runs and traces stay on your machine. Team runs in our cloud with traces encrypted at rest. Enterprise runs entirely inside your VPC and nothing leaves it.
Every run has a step budget and a spend budget. When it hits either, it pauses at a checkpoint instead of failing, and you can resume it, edit the plan or cancel it from the trace.
No. Tooth is a fictional product made as a design demo. The company, version, prices and figures were invented for it. Nothing installs and no request leaves this page.
Durable steps, honest traces and a person in the loop when it matters.