Smart Agent Teams

Budgets and costs

Monthly budgets in cents, how spend is counted, and when an agent is paused.

Every run reports what it cost, and SAT adds those costs up per agent, per project and per company for each calendar month. You can give the company, each agent and each project a monthly budget. Only the agent budget is enforced: when an agent's spend reaches it, the agent is paused and the board gets a budget_override approval. Company and project budgets are shown next to their spend so you can see where money goes, but they never stop work.

How it works

Budgets

BudgetFieldWho can change itEnforced
Companymonthly_budget_cents on the companyowner or adminNo. Shown on the dashboard, the costs screen and sat dashboard.
Agentmonthly_budget_cents on the agentAny memberYes, when a run finishes.
Projectmonthly_budget_cents on the projectAny memberNo. Shown on the project page and the costs screen.

All budgets are integer cents and default to 0, which means no limit. 150000 is $1,500.00. The web app and CLI take dollars and convert.

Spend

Spend for a month is the sum of cost_cents of the runs created (queued) in that month:

  • Months are UTC calendar months. "This month" starts on the 1st at 00:00 UTC.
  • Agent spend groups runs by agent_id. Company spend is all runs in the company.
  • Project spend groups runs by the project of the run's task as it is now. Moving a task to another project moves its past spend with it. Runs without a task (a wake with no task, or a run whose task was deleted) count as "No project".
  • A run's cost counts from the moment the runner reports it. A run still in progress usually counts 0, and a run queued on the 31st that finishes on the 1st counts toward the earlier month.

Enforcement

The check runs every time a run finishes: a runner's final report, a cancel, a lease expiry, or termination. It does not run when a run is queued or while it runs, so a run that starts under budget is never interrupted, and the agent can end up over budget by the cost of its last run. Agents that are already paused, pending_approval or terminated are skipped.

A paused agent is not woken by assignments, routines or the scheduler, and its queued runs are not claimed. To put it back to work, approve its budget_override (see Approvals for exactly how the budget changes), raise its budget and resume it, or resume it without changes (it will be paused again after its next run if it is still over).

Where costs come from

SAT does not price tokens. cost_cents is whatever the runner reports with the run.

Adapter in sat runnerTokensCost
Claude Code (claude_code)Input (including cache reads and writes) and output tokens from Claude Code's result.Claude Code's own total_cost_usd, rounded up to whole cents.
Codex (codex)From Codex's usage events.Only if the runner process sets SAT_CODEX_PRICE_IN and SAT_CODEX_PRICE_OUT (US dollars per million input and output tokens). Otherwise the run costs 0 and never counts toward a budget.
Simulated (--simulate)Echo adapter values.No model calls.
Price Codex runs so they count toward budgets
SAT_CODEX_PRICE_IN=1.25 SAT_CODEX_PRICE_OUT=10 sat runner start

A custom runner reports tokens_in, tokens_out and cost_cents in its PATCH /runs/{run_id} calls; see Custom runner. All amounts are shown in US dollars, whatever your locale preference.

Fields

The costs report, GET /costs (Costs):

Prop

Type

Each CostLine:

Prop

Type

Agents and projects also carry spend_mtd_cents (spend since the 1st of the current UTC month) in every agent and project response, and the dashboard has spend_mtd_cents and monthly_budget_cents for the company.

Use it

The Costs screen for October 2026: total spend $3.87 against a $1,500.00 company budget, then a By agent table with runs, tokens, spend and a budget bar for each agent. Ken shows 12K input tokens but $0.00, the cost of an unpriced Codex run

  • Costs shows the month's Total spend, the Company budget and Used, then By agent and By project tables with runs, tokens, spend and a budget bar per line (red from 90%). Use the arrows to move between months; the month is kept in the URL as ?month=2026-10.
  • The dashboard's Spend this month card shows company spend with a bar against the company budget, or "No company budget".
  • Set the company budget in Settings (owners and admins; leave it empty for no limit). Set an agent budget when you hire it or on the agent's page. Set a project budget when you create the project.

Permissions

ActionWho
Read costs, spend and budgetsAny member
Change the company budgetowner or admin (403 FORBIDDEN otherwise)
Change agent and project budgetsAny member
Approve a budget_overrideAny member

Non-members get 404 NOT_FOUND.

Events

Budgets and costs have no events of their own. Spend changes arrive as run.updated; a budget pause sends agent.updated and approval.created; budget edits send company.updated, agent.updated or project.updated. The web app refreshes the costs screen on run.* and agent.* events.

Limits and known gaps

  • Company and project budgets are not enforced. Spend can exceed them without any pause or approval.
  • Enforcement happens only when a run finishes. A long run can overshoot the agent's budget by its own cost.
  • Budgets in the costs report are today's values, not the values that applied in a past month.
  • Codex runs cost nothing unless the runner sets prices, so Codex agents are never paused for budget by default.
  • The month is always UTC; your time zone preference does not change month boundaries.
  • There is no currency other than US dollars, and no export of cost data.

On this page