Run a fleet with budgets, kill switches, and a ledger — not a chat window with extra steps.
Tenants, tool allowlists, hard spend/step/time caps, mid-tool abort, sequenced audit, metering hooks. The planner can stay deterministic for demos, or you swap in an LLM later without rewriting isolation.
Who it's for
Platform teams and founders who need to run agents for more than one tenant — and prove what each run did.
- Internal platform groups wrapping existing tools for several product lines
- Founders selling agent capacity who cannot share ledgers across customers
- Ops leads who need a kill switch that works while a tool is still in flight
The problem
One agent on a laptop is a demo. Ten tenants sharing tools without isolation is an incident. Prompt-level “please stay in budget” is not a budget. And if you cannot replay the tool calls, you cannot explain the bill — or the damage.
What breaks without it
- No tenant wall: IDs, usage, and ledgers leak across customers.
- Budgets live in the planner, so they fail when the planner improvises.
- Kill switches fire after the tool returns — too late for sleep, spend, or a bad fetch.
How it works
Concrete path through the private beta — not a capability cloud.
Create a tenant
Admin issues a tenant. The API key is shown once, hashed at rest, and every later read is scoped by tenantId. Cross-tenant IDs return 404, not 403.
Register an agent with an allowlist
Each agent gets the tools it may touch. Unknown or denied tools never run. Built-in demo tools (echo, search, calculator, sleep, memory, mocked http_fetch) stay off the public network.
Execute under hard budgets
Runs take max steps, max USD (integer micros), and max wall time. The runner — not the planner — refuses the next tool if it would exceed a cap.
Kill, ledger, meter
Tenant, agent, or run kill switches abort work, including in-flight sleep via AbortSignal. Every tool call appends an immutable sequenced ledger. Metering emits step, tool, spend, and wall-time events; denied tools do not bill.
Proof points
From the working repo and demo scripts. Design partners welcome. No fabricated case studies.
- Private-beta runtime with a Fastify API and a single-page operations dashboard.
- Deterministic planner (scripted prompts) so demos and tests do not drift. Swap plan() later for an LLM.
- Coverage includes budget exhaustion, concurrent runs, tenant isolation, mid-run kills, and metering hooks.
- Local path: npm test && npm start, or docker compose up --build. Demo script included.
- SQLite for single-node beta; the repository layer is the Postgres swap point. No invented customer logos — design partners welcome.
Join waitlist / book a 15-min pilot
Tell us you want Agent Fleet Runtime. We'll reply with a demo path, not a deck.
FAQ
Does this replace my agent framework?
No. It is the multi-tenant execution layer around agents: isolation, budgets, kill switches, ledger, metering. The default planner is scripted so a pilot is reproducible. You can replace plan() with your LLM loop without touching those guarantees.
Can I kill a run while a tool is executing?
Yes. Flags are reloaded before every step, and in-flight sleep is aborted with AbortSignal. That is the point of a runtime kill switch versus a dashboard toggle that waits for the loop to notice.
What does metering look like?
Hooks emit step, tool-call, spend, and wall-time events as tools succeed. Denied tools do not bill. The dashboard shows usage; the HTTP API exposes /v1/usage for the tenant.
Is the ledger the source of truth?
Tool calls append immutable events with monotonic seq. You can fetch /v1/runs/:id/ledger and /replay. That is how you explain a run to a tenant — or to yourself at 1 a.m.
What is in the private beta vs later?
Scripted planner, mocked http_fetch, SQLite. Do not point this process at production credentials. Postgres persistence and a live LLM planner are the next increments, not vapor on the homepage.