Manage costs

Every request Syntic Code makes uses tokens, and tokens are what plans and limits are measured in. This page explains how the CLI estimates cost, where to see it, how to cap it, and the habits that keep a team’s usage predictable.

For what your plan includes and what happens at a limit, see Usage and billing.

How cost is estimated

Each model reply comes back with its token counts: input, output, cache reads and cache writes. Syntic Code turns those into a dollar figure in one of three ways, and labels which one it used:

SourceMeaning
reportedThe platform sent the cost with the reply.
calculatedThe token counts multiplied by the model’s known rate. Rates come from the platform’s model list, or from a built-in table for models the CLI already knows.
estimatedThe reply had no usage numbers, or no rate is known for the model.

Cached input is billed at a much lower rate than fresh input, so long sessions that reuse the same context cost less per turn than the raw token count suggests.

Figures in the CLI are estimates at list price. Usage covered by your plan is not charged again. They exist to compare tasks and set budgets, not to reproduce your bill.

Your organization’s rates

If your organization has agreed its own rates, an administrator can put them in the modelPricing key of a managed settings file. Cost figures then use those rates, and the wording changes from a retail estimate to an estimate at your organization’s contract rates.

{
  "modelPricing": {
    "Syntic Code": { "input": 2.0, "output": 10.0, "cache_hit": 0.2 },
    "*": { "multiplier": 0.8 }
  }
}
FieldMeaning
input, outputUS dollars per million input and output tokens. Both are required for a rate entry.
cache_hitUS dollars per million cached input tokens. Optional; 0 when left out.
multiplierInstead of rates: list price times this number, so 0.8 is a 20% discount.
"*"Applies to every model without an entry of its own.

Model names match regardless of case. An entry that does not parse, or has a negative number, is skipped. modelPricing is only read from managed policy; it has no effect in user or project settings.

See what you are spending

WhereShows
The footerThe session’s running cost.
/costThis session’s spend, split by source, by model and by agent, with Cost, Usage and Trends tabs.
/usageYour plan’s usage windows, the context in use, usage credits, trends and usage by plugin.
/statsToken counts and spend by model, with an activity view.
/insightsWhat drove token use over the last day and week.
/contextWhat is filling the context window right now.
On exitA line such as Total cost this session: $0.42 (retail estimate; usage covered by your plan isn't charged). Very small sessions print nothing.
-p --output-format jsontotal_cost_usd in the result, for scripts and CI.

/cost adds up a record for each reply, so it agrees with the footer, survives a resume, and never counts a request twice when you branch a session. Spend copied from the session you branched from is listed as carried over but not counted in the total. Details are in Reading /cost.

Put a ceiling on spend

Scripted runs

For -p runs, especially in CI, set limits so a confused run cannot keep going:

FlagEffect
--max-budget-usd <amount>Stop the run once its estimated cost reaches this amount.
--task-budget <amount>A per-task budget. When both flags are set, the smaller one applies.
--max-turns <n>Stop after this many agent turns. 0 means no limit.
syntic -p "fix the failing test in src/parser" \
  --max-budget-usd 2 --max-turns 30 --output-format json

The budget is checked before each turn, so a run can finish the request in progress and end slightly above the cap. A run stopped by its budget ends with the result subtype error_max_budget_usd; one stopped by its turn limit ends with error_max_turns. Zero, negative or non-numeric budgets are ignored rather than stopping every run. maxTurns in settings sets a default turn limit.

See Headless mode for the rest of the scripting options.

Subagents

Subagents can do a lot of reading. Cap each one:

WhereKey
An agent’s definition filemaxBudgetUsd
Settings, for every agent without its own cap"agents": { "defaultMaxBudgetUsd": 0.5 }

agents.defaultMaxBudgetUsd can be set by policy, so an organization can cap every subagent on every machine. More in Spend caps.

Spend less per task

Most savings come from sending less context and choosing a lighter model when the task allows.

Context

  • Run /clear between unrelated tasks. Old conversation is resent with every request.
  • Use /compact in long sessions, or let automatic compaction do it (see Context window).
  • Keep SYNTIC.md short and specific. It is loaded into every session. See Memory.
  • Turn off MCP servers and plugins you are not using; their tool descriptions take space in every request.
  • Point the agent at the right files with @ mentions instead of asking it to search the whole repository.
  • Ask subagents to do broad searches. Their reading stays out of your main context.

Model and reasoning

  • Use fast mode (/fast) for small edits, renames and quick questions.
  • Lower the reasoning effort with /effort for routine work, and raise it only for hard problems.
  • Set fallbackModel so a busy model does not stall a long task.

Working style

  • Ask for a plan first on large changes. Correcting a plan is cheaper than undoing an implementation.
  • Give the checks to run (“run pnpm test when done”) so the agent does not guess.
  • Stop a turn that is going the wrong way with Esc instead of letting it finish.

Costs across a team

Syntic Code does not include an organization-wide spend dashboard. To track a team’s usage:

  • Send telemetry to your own tools. OpenTelemetry export reports syntic.cost.usage and syntic.token.usage per model, and you can tag every record with team or cost-centre attributes.
  • Use your organization’s rates with modelPricing, so the figures match what you pay.
  • Set default caps by policy: agents.defaultMaxBudgetUsd for subagents, and maxTurns for runs.
  • Limit the model list with availableModels, or set the default with model, so most work uses the model you intend.
  • Use usage credits deliberately. If your organization offers credits beyond plan limits, owners and admins control whether they are on in /usage-credits.

A reasonable starting point for a pilot is to let people work freely for two weeks, then look at the exported totals per person and per repository before setting caps. Caps set before you know normal usage tend to interrupt good work.

When the numbers look wrong

What you seeWhy
/cost shows a higher figure than your billCLI figures are list-price estimates; usage within your plan is not billed again.
A row says estimatedThe reply had no usage data, or the model has no known rate. Totals may be off for that row.
A branched session starts with a costThat is carried over usage from the original session. It is shown, but not added to the total.
Costs differ between two machinesOne may have a policy with modelPricing; the other uses list price.
A -p run went a little over --max-budget-usdThe cap is checked between turns, so the last request finishes. Lower the cap slightly.