AI Agent Cost Governance โ policy engine, budget enforcement, per-tool cost tracking, multi-tenant workspaces
Project description
๐ก agent-gov
AI Agent Cost Governance Platform
A reverse proxy that tracks, budgets, and controls what your AI agents spend. Like a credit card with limits โ but for your agents.
What Problem Does This Solve?
AI agents call expensive tools (LLMs, browsers, APIs, email services). Without controls:
- A recursive agent burns โน5,000 in one night on GPT-4
- A buggy loop sends 10,000 emails before you notice
- You discover the bill when your credit card statement arrives
agent-gov sits between your agents and their tools. Every call goes through us. We check budgets, track costs, and auto-pause overspending agents.
Quick Start
1. Install
pip install agent-gov-saas
2. Start the server
agent-gov start
Server starts at http://localhost:8000.
Alternatively, use Docker:
docker compose up(see GitHub repo for docker-compose.yml).
3. Register an Agent
curl -X POST http://localhost:8000/agents/register \
-H "Content-Type: application/json" \
-d '{"name": "My Bot", "daily_budget": 500}'
Response:
{
"api_key": "ag-abc123...",
"name": "My Bot",
"daily_budget": 500,
"message": "Save this API key โ it won't be shown again!"
}
4. Route Agent Calls Through the Proxy
Instead of calling tools directly, your agent calls our proxy:
# BEFORE (no governance):
response = call_openai(prompt)
# AFTER (with agent-gov):
gov_response = requests.post("http://localhost:8000/proxy/call", json={
"agent_key": "ag-abc123...",
"tool_name": "openai-gpt4",
"estimated_cost": 12.50 # โน12.50 for this call
})
if gov_response.status_code == 429:
print("Budget exceeded! Agent auto-paused.")
else:
response = call_openai(prompt) # Proceed with actual call
5. Watch the Dashboard
Open http://localhost:8000/dashboard โ live view of all agents, their spend, and budget status.
6. (Optional) Pre-Register Common Tools
# Register 24 common AI tools with realistic costs (โน)
python seed_tools.py
# Preview before registering:
python seed_tools.py --list
API Reference
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Health check + stats |
POST |
/agents/register |
Create agent, get API key |
POST |
/proxy/call |
Proxy a tool call (budget checking + real cost lookup) |
POST |
/agents/{key}/resume |
Resume a paused agent (resets budget) |
POST |
/agents/{key}/reset |
Reset daily budget counters (no unpause) |
POST |
/workspaces |
Create a workspace (returns API key) |
GET |
/workspaces |
List all workspaces |
POST |
/tools/register |
Register a tool with its known cost per call |
GET |
/tools |
List all registered tools |
GET |
/analytics/tools |
Per-tool spend statistics |
GET |
/dashboard |
Live HTML dashboard |
GET |
/docs |
Interactive OpenAPI docs (Swagger) |
Features
| Feature | What it does |
|---|---|
| Budget enforcement | Auto-pause agents that exceed their daily budget |
| Tool registry | Register tools with known costs โ agents can't lie about pricing |
| Real cost lookup | Proxy uses registered tool cost, not client estimate |
| Per-tool analytics | See spend broken down by tool, not just by agent |
| Daily auto-reset | Budgets reset automatically at midnight |
| Multi-tenancy | Workspaces for teams, projects, or clients |
| Dashboard | Live HTML dashboard with per-agent and per-tool views |
| CLI | agent-gov start / status / version |
| Docker | Ready-to-run Docker Compose setup |
Architecture
Agent (your code)
โ
โ POST /proxy/call { agent_key, tool_name, estimated_cost }
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ agent-gov โ
โ โ
โ 1. Auth: Is key valid? โ
โ 2. Budget: Will this exceed? โ
โ 3. Log: Track cost + tool โ
โ โ
โ If approved โ return 200 โ
โ If denied โ return 429 โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ Agent calls actual tool
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Actual Tool (OpenAI, etc.) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Technology Stack
| Component | Technology | Why |
|---|---|---|
| API Framework | FastAPI | Fast, async, auto-docs |
| Validation | Pydantic | Type-safe input validation |
| Server | Uvicorn | Production ASGI server |
| Storage | SQLite via aiosqlite | Persistent, zero setup |
| Templates | Jinja2 | Server-rendered dashboard |
| Tool Registry | SQLite + UPSERT | Known tool costs, agents can't lie |
| Workspaces | SQLite + migrations | Multi-tenancy with workspace isolation |
| Testing | pytest + httpx | Fast, isolated tests |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_gov_saas-0.6.0.tar.gz.
File metadata
- Download URL: agent_gov_saas-0.6.0.tar.gz
- Upload date:
- Size: 23.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06d9d15042f664ff507cbcd08ff8ef5e95cb174c6161aa01448f94f3e16a4bcc
|
|
| MD5 |
aa13f92c22156ae1d48d07815c8f3162
|
|
| BLAKE2b-256 |
fe1bb55618462bfe388bb933caabed571a0945fffcf107fd9572f5931444f39c
|
Provenance
The following attestation bundles were made for agent_gov_saas-0.6.0.tar.gz:
Publisher:
publish.yml on sschelliah2026-source/agent-gov
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_gov_saas-0.6.0.tar.gz -
Subject digest:
06d9d15042f664ff507cbcd08ff8ef5e95cb174c6161aa01448f94f3e16a4bcc - Sigstore transparency entry: 1681615455
- Sigstore integration time:
-
Permalink:
sschelliah2026-source/agent-gov@8eeb5b9fe744fe7b5a81c7050dde7e825db9563a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sschelliah2026-source
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8eeb5b9fe744fe7b5a81c7050dde7e825db9563a -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file agent_gov_saas-0.6.0-py3-none-any.whl.
File metadata
- Download URL: agent_gov_saas-0.6.0-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0c47bb7ee425e9064db82d84a0e7ad691e6e04d6da4bca013d4175820463d7d
|
|
| MD5 |
7ee6587d4cb325809ac6466e44cf54ad
|
|
| BLAKE2b-256 |
8cd5fd8b1e0d72ac78eca021cd4e3da10f97014151ee3aca47aae583ad3875da
|
Provenance
The following attestation bundles were made for agent_gov_saas-0.6.0-py3-none-any.whl:
Publisher:
publish.yml on sschelliah2026-source/agent-gov
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent_gov_saas-0.6.0-py3-none-any.whl -
Subject digest:
f0c47bb7ee425e9064db82d84a0e7ad691e6e04d6da4bca013d4175820463d7d - Sigstore transparency entry: 1681615574
- Sigstore integration time:
-
Permalink:
sschelliah2026-source/agent-gov@8eeb5b9fe744fe7b5a81c7050dde7e825db9563a -
Branch / Tag:
refs/heads/main - Owner: https://github.com/sschelliah2026-source
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8eeb5b9fe744fe7b5a81c7050dde7e825db9563a -
Trigger Event:
workflow_dispatch
-
Statement type: