The control plane for
AI agents in production.
Deploy, route and monitor every agent from one place. Sigil traces each step, enforces budget limits, and reroutes automatically when a step fails.
RECENT RUNSlive
support-triage
Step
One place for everything your agents do after they ship.
Each capability works on the same trace, so a failed step, its fallback and its cost are always the same record.
Agents · acme-support · production4 deployed
AGENTVERSIONTRAFFIC
support-triageclassify → retrieve → draftv14100%
refund-agentcanary rolloutv7 → v880 / 20%
invoice-extractorbatch, nightlyv22100%
research-digestscheduled 07:00 UTCv3100%
Route · support-triage / classify_intentfallback active
Failed attempt
Rerouted
Run continues
Trace · run_8f3a2c · refund-agent v8✓ completed in 5.4 s
Budget limits · today, UTC1 paused
support-triage$41.20 / $60.00
Alert at 90% · hard stop at limit
research-digest$25.00 / $25.00
PausedLimit reached at 09:42 · resumes 00:00 UTC
refund-agent · per runmax $0.40
Median run $0.12 · runs over limit are stopped mid-step
Customer: Northwind Health$212 / $500 monthly
Tagged by customerId on every run
Wrap the agent you already have.
No rewrite. The SDK sits around your existing calls and reports to Sigil.
- 1Install the SDKnpm install @sigil/sdk
- 2Define steps and fallbacksName each step and say where it reroutes on failure.
- 3Set a budget and deployRuns appear in the console with full traces.
import { Sigil } from "@sigil/sdk"; const sigil = new Sigil({ apiKey: process.env.SIGIL_KEY }); export const triage = sigil.agent("support-triage", { budget: { daily: 60, alertAt: 0.9 }, }); triage.step("classify_intent", { model: "primary", timeout: "30s", // on timeout or error, rerun this step on the fallback fallback: { model: "fallback", retries: 1 }, run: async (ticket, llm) => llm.classify(ticket.body), });
import { triage } from "./agent"; // ship v15 to 10% of production traffic await triage.deploy({ version: "v15", env: "production", rollout: { percent: 10, promoteAfter: "2h" }, rollbackIf: { errorRate: 0.02 }, }); // every run is traced and tagged const result = await triage.run(ticket, { tags: { customerId: ticket.accountId }, });
Put your agents behind one control plane.
Start with one agent, then add the rest as you go.