We are Capsera.
Most AI teams find out what they spent when the invoice arrives. We build the layer that answers before the call instead of reporting after it.
The story so far
01
The night it happened
Capsera started the night a runaway agent loop burned through a month of API credits before anyone noticed.
02
What we built
We built the tool we wished existed: one line of code that shows exactly where every token goes, and stops the bleeding before the invoice arrives.
03
What we believe
Spend governance belongs in every AI stack, not just at companies with a platform team. That is why the SDK is open and the free tier is real.
Nothing we build can take your app down.
If Capsera is unreachable, your calls go through untouched. A governance layer that can fail your production traffic is a worse problem than the one it was bought to solve.
Works with the providers your agents already call
OpenAI
Anthropic
Gemini
DeepSeek
Kimi
We believe an AI budget should be a control, not a report. Capsera gives every agent an identity, a budget and a hard limit that is enforced before the provider call, so the number you set is the number you pay.
Attribution per agent and per run, enforcement in-process, and a free tier that is genuinely usable.
Primary research · 2026-07-31
We did not assume the problem. We measured it.
- Repos analysed
- 133
- public agent repositories
- Making live LLM calls
- 51
- the ones that can actually spend
- Had a cost defect
- 76%
- (39 of 51) repos
- Files scanned
- 10,350
- commit 5dff5c4
Every figure above comes from our own scan of public agent repositories. Read the method and limitations.
import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")
on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()
assert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",
for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):
)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:
model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropic
def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)
for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02
from anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(
)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:
if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")
on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()
assert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",
for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):
)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:
model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropic
def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)
for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02
from anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(
)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:
if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")
on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()
assert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",
for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):
)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:
model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropic
def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)
for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02
from anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)# checked before the callcapsera.budget(monthly=500,on_exceed="block",)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(
)with capsera.agent("summarizer"):client = Anthropic()resp = client.messages.create(model="claude-sonnet-4-6",max_tokens=1024,)# no proxy, no gatewayassert resp.usage.cost < 0.02if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:
if capsera.over_budget():raise BudgetExceeded()@capsera.track()def extract(doc):return chain(doc)# cheaper route, same outputcapsera.route(prefer="cost")spend = capsera.usage(group_by="agent",window="30d",)for a, cost in spend:print(a, f"${cost:.2f}")# fails open, alwayscapsera.flush()for task in queue:run(task)log("run complete")import capserafrom anthropic import Anthropiccapsera.init(agent="reasoning_agent",run_id=ctx.run_id,)
Know exactly
where every token goes.
Stop runaway agents before they become runaway invoices.