MOCK MODE — no API keys9 platforms2 client namespaces0/9 provider keys configuredkill-switch disarmedengine ok · v0.1.06 agents · pipeline complete
Two-tier spend gate

What the engine may spend without a human

Every autonomous financial action passes through this gate. Tier 1 flags, Tier 2 refuses and pulls the kill-switch, and the kill-switch can only be cleared by hand.

Kill-switch
Disarmed
armed — engaging halts everything
Current tier
clear
within budget
Authorised
$900
1 action on the ledger
Tier 1 soft limit
$3,500
70% of $5,000
Tier 2 hard limit
$5,000
100% of the campaign budget
Budget left
$4,100
to the hard limit
The two tiers

Flag first, refuse second, stop completely third

Both limits are a fraction of the client's own campaign budget — the numbers below are this client's real figures, not a generic example.

Tier 1 — soft limit

70% = $3,500

Crossing Tier 1 does not stop the action. It is allowed, written to the ledger, and flagged for a human to acknowledge — the engine marks the action flag_for_human_acknowledgement, and the dashboard turns amber.

Why a soft limit at all: a campaign that suddenly spends 70% of its budget on day two is usually a mistake, not a strategy. The flag puts a human in the loop before the hard limit does it for them.
Remaining to this limit for Full Frequency Co.: $2,600

Tier 2 — hard limit

100% = $5,000

Tier 2 is the hard limit. The action is refused — it never touches the ledger — and the gate auto-engages the kill-switch, whose effect is stop_all_autonomous_financial_actions. Every subsequent financial action is refused until a human clears the switch.

Auto-engage on Tier 2: true. Stopping is always safe to do automatically; starting again is not.
Remaining to this limit for Full Frequency Co.: $4,100
Kill-switch

Manual clearing, with a named human

The switch is persisted on disk. While it is engaged, no autonomous financial action is recorded. Clearing it requires an explicit confirm token and a named actor, and there is no code path anywhere in the engine that clears it by itself.
DISARMED — armed and readyblocks all financial actions: true
Engaged at
— (not engaged this session)
Engaged by
—
Cleared at
—
Cleared by
—

Manual only. Clear via POST /api/spend/kill-switch with engage=false, a named actor and confirm='CLEAR-KILL-SWITCH'. No code path anywhere in the engine clears it automatically.

What counts as a financial action

These action kinds all pass through the same gate. While the kill-switch is engaged, each one is refused with code kill_switch_engaged.

ad_spend_commitpaid_boostinfluencer_paymenttool_subscriptionprint_run_commit
Clearing, as the API enforces it
POST /api/spend/kill-switch
{
  "engage": false,
  "actor": "dana@agency",
  "confirm": "CLEAR-KILL-SWITCH"
}

A missing name, a missing reason or a wrong token leaves the switch engaged. There is no timer, no retry and no automatic release.

Ledgers

One ledger per client namespace

Each client's spend is recorded in its own namespace, so one client's activity can never count against another's budget.

Full Frequency Co.

USDwithin budget
$900 authorisedTier 1 $3,500Tier 2 $5,000
Budget
$5,000
Authorised
$900
Events
1
State
within budget
allowed$900ad_spend_commitprojected $900

week 1 paid boost — within the approved plan

pipeline/autonomous · 2026-10-02T12:00:00+00:00

Torczon Digital

USDwithin budget
$630 authorisedTier 1 $2,450Tier 2 $3,500
Budget
$3,500
Authorised
$630
Events
1
State
within budget
allowed$630ad_spend_commitprojected $630

week 1 paid boost — within the approved plan

pipeline/autonomous · 2026-10-02T12:00:00+00:00

Proof, not a promise

What happened when the engine was pushed past Tier 2

Transcript of a real run of the gate in an isolated ledger — this is what the engine did, not a mock-up. The demo campaigns' own ledger (below, under 'live') stays separate and untouched.
#What was triedAmountDecisionHTTPKill-switchWhy
1
Allowed
Autonomous spend inside Tier 1's shadow: allowed and recorded.
$1,200allowed
allowed
200disarmedrecorded on the ledger
2
Flagged at Tier 1
Crosses the 70% soft limit: allowed, but flagged for a human to acknowledge.
$2,400flagged
tier1_soft_limit
200disarmedflagged for human acknowledgement
3
Refused at Tier 2
Crosses the 100% hard limit: refused, and the kill-switch auto-engages.
$2,000blocked
tier2_hard_limit
423engagedprojected spend 5600.0 would cross the Tier 2 hard limit 5000.0; the action is refused
4
Refused (kill-switch)
Any further financial action is refused while the switch is engaged.
$250blocked
kill_switch_engaged
423engagedkill-switch is engaged: every autonomous financial action is halted until a human clears it
5
Cleared by a named human
Clearing is manual only: named actor plus the confirm token.
$0
200disarmedrecorded on the ledger

Refusals the gate kept on record

  • kill_switch_engaged$250

    kill-switch is engaged: every autonomous financial action is halted until a human clears it

  • tier2_hard_limit$2,000

    projected spend 5600.0 would cross the Tier 2 hard limit 5000.0; the action is refused

What this panel does and does not prove

  • Does prove: the gate really refuses when pushed past the hard limit, really engages the kill-switch automatically, and really requires a named human and a confirm token to release it. The transcript above is a run of that code.
  • Does not prove: anything about real money. No payment provider is connected, no charge is created, no invoice is issued and no card is touched. Billing is not implemented in this build, and the ledger is a local JSON file, not an accounting system.
  • Nor: that these limits suit a real client. The 70% / 100% split is the engine's default policy and is meant to be set per agency.