Giving Your Digital Employee a Company Credit Card (With Limits)
The engineering behind AI spending limits.
The Core Problem
Here's how the $30K bill plays out:
Day 1: Agent runs 50 tasks, costs $12. Looks great.
Day 5: Agent discovers premium model. Uses it for everything. $80/day.
Day 10: Agent runs 200 tasks/day. $400/day.
Day 20: Agent enters a loop. $2,000/day.
Day 30: You check your bill. $30,000.
The Budget Engine: Lazy Auto-Reset
Instead of a midnight cron job (which creates a thundering herd), agent-gov uses lazy evaluation:
async def check_and_reset_budget(agent: dict) -> dict:
today = date.today().isoformat()
if agent["last_reset"] == today:
return agent # No reset needed
if agent["paused"]:
return agent
return await reset_daily_budget(agent["key_hash"])
Why lazy? An agent that makes no calls doesn't need a reset. The first call of the day triggers a single UPDATE. The thundering herd becomes a gentle trickle.
The Real Cost Problem
Agent says: "Estimated cost: $0.50." Reality: $15.00/call.
agent-gov's tool registry knows the real cost:
async def register_tool(name, cost_per_call, description, workspace_id="default"):
await db.execute("""
INSERT INTO tools (name, cost_per_call, description, registered_at, workspace_id)
VALUES (?, ?, ?, ?, ?)
ON CONFLICT(name) DO UPDATE SET
cost_per_call = excluded.cost_per_call
""", (name, cost_per_call, description, now, workspace_id))
Budget Pools
For teams running multiple agents:
agent-gov pool create production-agents --budget 1000
agent-gov pool member add web-agent --pool production-agents --max-per-agent 200
Now web agent is capped at $200/month even though the pool has $1,000.
The Data Model
Two SQLite tables, two queries per call, sub-millisecond overhead:
CREATE TABLE agents (
key_hash TEXT PRIMARY KEY,
name TEXT NOT NULL,
daily_budget REAL NOT NULL,
spent_today REAL NOT NULL DEFAULT 0.0,
calls_today INTEGER NOT NULL DEFAULT 0,
paused INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
last_reset TEXT NOT NULL
);
CREATE TABLE cost_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
agent_hash TEXT NOT NULL,
agent_name TEXT NOT NULL,
timestamp TEXT NOT NULL,
tool_name TEXT NOT NULL,
cost REAL NOT NULL,
FOREIGN KEY (agent_hash) REFERENCES agents(key_hash)
);
Part 3 of "Taming Your AI" series. agent-gov is open-source, MIT-licensed. 45 tests, zero database setup.
Top comments (0)