This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

The launches abcd makes spend a person's money only within the budget they set, past it only through named residuals

adracceptedadr-2611011231015519

Context

abcd starts agents itself when a role is routed to a command-line runner, and on the claude runner's key route every launch is billed to the person's own API account. The first live run on a person's key (2026-11-01) cost 0.97 USD for one review and 0.33 USD for another; the run's budget check reported itself skipped, because no runner reports a quota. Every route already records the cost it reported (itd-166), so the figure exists; nothing treats it as a limit. The model-matrix intent rules a spending cap for matrix runs alone (itd-2610161733316518, decision 17: a figure the person named, no default abcd supplies, shown before consent, and the run stops when it is reached). Builds and drains spend the same money with no such rule, and a drain is meant to run unattended for a day (itd-2610161016401115).

Decision

We will spend a person's money, in the launches abcd makes, only within a budget they set; spend on the same key outside abcd's launches is neither counted nor bounded, and the record of totals is writable by the person's own account, residuals the provider's own console limit covers. Any launch that bills a person per token, through any route abcd starts, runs only under a budget of the person's own: caps per day, per week and per month, set in their own configuration through a command abcd refuses to agents (a filter, not a lock, since agents run as the person's own account and could edit the configuration directly), with no default figure abcd supplies; a route with no budget set refuses to start. Within the budget, abcd bounds every launch, running ones included, against what remains of the key's caps: each launch's --max-budget-usd is reserved against every cap before it starts, so the bounds handed out never together exceed what remains less a headroom kept for the response that can cross a bound, and a launch held back by reservations is told so, distinct from a cap reached. The spec sets the arithmetic and must bound, and name where it cannot, three residuals, each named in the record when it happens and the first flagged for the product thinker: a response larger than any launch cost recorded before it, a launch whose cost cannot be read, and how many launches may run on one key at once; and a fourth no machine can see when it happens, the same key used by abcd on a second machine, since the store of totals is per machine and each machine's store counts only its own launches, so one key spends up to the cap on each; running launches are not stopped at the cap, as decision 34 stops matrix copies, because each already ends at its own reserved bound. When a cap is reached the work pauses until the period resets or the person raises the cap; it never continues on the host session or the subscription; moving to a second key the person named for that purpose is a per-repository choice of theirs. A route that bills no money (the host session, the subscription route) needs no budget.

This refines decisions 17 and 34 of itd-2610161733316518 from matrix runs to every route that spends the person's money, keeping 17's person-named figure with no default and 34's rule that no launch starts unless its remainder covers it. The product thinker accepted it, the four named residuals included, at the planning interview of itd-2611011230226453 (dcn-2611041550126639): an overrun abcd can see is recorded against the key and named in the run's record, and the provider's own console limit is the outer stop past every residual.

Alternatives Considered

  • A budget the person sets, enforced per launch with headroom and summed per period, pausing at the cap (chosen). It keeps the guarantee where the money is spent, reuses the costs itd-166 records, and leaves only the residuals the Decision names. Its residual: a command refused to agents is a filter, not a lock, since agents run as the person's own account; raising a cap with the person's touch (itd-2611012123486967) closes it.
  • Leave it to the provider's console limit. It stops the key only at the account's limit, across every use of the key, and a run then fails mid-lane with no pause; the person learns of it from the provider. Rejected as the only control; the console limit stays a sensible second fence.
  • A default budget abcd supplies. Every figure abcd could choose spends money on a number the person never set, which decision 17 already refuses. Rejected.
  • Fall back to the host session when a cap is reached. It keeps work moving but spends the person's subscription without asking, which the product thinker ruled out on 2026-11-01. Rejected.

Consequences

  • Every route that bills per token must report its cost, failed launches included, and honour the bound before it can be routed; the claude runner must keep the cost of a non-success result it discards today.
  • The budget check of a build and a drain stops reporting itself skipped for a budgeted route.
  • An unread cost charged as its whole bound means a harness crash can pause the work early; the pause keeps the work, so the cost is time, not loss.
  • A person who wants agents unable even to request a raise needs the touch of itd-2611012123486967.
  • The brief gains an invariant naming this rule, and the build and drain chapters gain the arithmetic from the spec of itd-2611011230226453, which carries the outcome and the named residuals.

Frontmatter

idadr-2611011231015519
typeadr
statusaccepted
date2026-11-01

References4

mentions5