Skip to content

Anatomy of a stopped proposal

An agent asked for a bigger budget raise than your rules allow. Code said no, the agent proposed a smaller raise, and every step went on the record. Here it is, end to end.

Heraldic · Written

Wrenfield Coffee, the roaster in the live demo (opens in a new tab), has a New Customers agent that wins first orders with search and social ads. This is one of that agent’s proposals, from the moment it was made to the line it left on the record.

How the budget reached $122

On Wednesday, October 21, the agent proposed moving $60 a day from broad coffee campaigns to the Holiday Blend and gift sets, with total spend unchanged. Broad coffee would drop from $90 to $30 a day, and the Holiday Blend and gift sets would rise from $62 to $122. Its reason: roast-date messages beat the control by $8 per first order, and gift sets carry the best margin.

That move kept the agent’s total daily budget at $212, so the 20% limit, which applies to the total, had nothing to stop. Moving money between campaigns has its own check: if any one campaign’s budget moves by more than 50%, the move waits for a person, whatever the agent’s permission level. The Holiday Blend and gift sets would move 97%, so the proposal waited, and Alex Morgan approved it.

$90 − $60 = $30 a day; $62 + $60 = $122 a day; the total stays $212
$60 ÷ $62 = 0.968: the Holiday Blend and gift sets move 97%, over the 50% that needs you

The October 21 move that took the line to $122 a day: proposed, sent to a person by the reallocation check, approved and made.

The proposal

Five days later, on Monday, October 26, the agent proposed raising its daily budget 35%, from $212 to $286, all of it for the Holiday Blend and gift sets, taking that line from $122 to $196 a day. Its reason: the line had the lowest cost per first order of any product line.

The agent couldn’t make the change itself. Its tools can read data and propose actions, but none of them can change an account. The proposal records what it wants changed and why, and goes to the policy engine.

$286 − $212 = +$74 a day, all of it on one line: $122 + $74 = $196
$74 × 30 = +$2,220 a month
$286 ÷ $212 = 1.349, a 35% raise to the agent’s total

The policy engine, check by check

The policy engine is ordinary code, with no AI in it. Once an action is allowed at all, it runs the same checks in the same order on every proposal, and the first one that fails stops it with a reason:

  • Is the stop-everything switch on? Then every action is refused.
  • Would the budget go below zero? Refused.
  • Would the agent’s total daily budget change by more than the limit per change? Here that limit is 20%. Refused, with the size of the change and the limit.
  • If spend goes up, would it pass the agent’s daily cap ($275 a day for this agent) or the company’s ($400 a day across all agents), or has this month’s spend already reached the monthly cap ($10,000)? Refused.
  • Does it move money between campaigns? If any campaign’s budget moves by more than 50% (the setting is called “Largest move without approval”), it needs your approval, whatever the permission level says.
  • After that, the permission level decides who approves. If this kind of action needs you, it waits in your inbox. If not, it goes ahead.

The proposal failed the third check:

Largest change allowed: 20% of $212 = $42.40, so at most $254.40 a day
Proposed: $286, which is $31.60 over

The stopped proposal: permission passed, and spend limits stopped it.

A 35% change is over your 20% limit per change.

The proposal shows each check on its own line. Permission passed: budget changes are allowed. Spend limits stopped it. No approval could have rescued it: a stopped proposal never waits for your decision; it’s filed as stopped, with the reason. The limit would hold even if budget changes were set to “You approve”. The engine never got as far as the caps. The month’s spend stood at $7,742 of $10,000.

The spend limits it ran into: $10,000 a month, $400 a day across all agents, and at most a 20% change to an agent’s budget at a time.

The two moves, side by side

Side by side, the two proposals show how the rules work. The October 21 move kept the total and shifted money within it, so a person decided. The October 26 raise grew the total by 35%, so no one could approve it.

The New Customers agent’s two budget proposals, and the rule each one met.
October 21October 26
What it proposedMove $60 a day between campaignsRaise the daily budget from $212 to $286
The agent’s totalUnchanged at $212+$74 a day, a 35% raise
The rule it metOne campaign moving more than 50%: 97%20% limit per change
What happenedWaited for a person, and was approvedStopped; no approval could rescue it

What the agent did next

The reason goes back to the agent as a plain sentence it can act on. The same day, it proposed a raise inside the limit: the Holiday Blend and gift sets from $122 to $140, an 8% change to its total.

$140 − $122 = +$18 a day
$18 ÷ $212 = 0.085, shown as 8%
$212 + $18 = $230 a day, under the $254.40 ceiling
$140 ÷ $122 = 1.1475: the line itself rises 15%

That proposal passed every check. Budget changes are set to “Acts and notifies you”, so it ran without waiting, and the agent’s notebook records it as a decision that ran automatically. Wednesday’s report explained it in the agent’s own words: “On Monday I proposed raising my daily budget 35 percent, from $212 to $286, all of it for the Holiday Blend and gift sets; your 20 percent limit per change stopped it, so I proposed $122 to $140 for them instead, which ran automatically.”

The agent’s notebook: the line raised 15%, from $122 to $140, after the 35% raise to its total was stopped.

Why limit each step

A limit on each change doesn’t stop a budget from growing. It makes the budget grow in steps, and each step’s results are in before the next. The agent plans to raise the line again if first orders hold. Two full steps, a week of results apart, would take the total past where the agent wanted to go:

$212 × 1.20 × 1.20 = $305.28 a day, past the $286 it asked for

Checked again before the change

This raise didn’t need approval, because budget changes act and notify you. A change that waits for you is checked twice. When you approve it, the policy engine runs the same checks again against spend and settings as they stand at that moment, because an approval can wait hours or days while other changes go through and the day’s spend grows. The executor, the one part of the system with access to your accounts, makes the change if it still passes and records the result.

The record

The stopped proposal stays on the record with its checks: proposed by the New Customers agent on October 26, stopped by spend limits the same day, with the reason and a note that the agent proposed $122 to $140 instead. That raise is in the notebook, and the report explains both. Anyone can answer “Why did the budget go up $18 a day and not $74?” without asking the agent, and without trusting it to remember.

Nothing here depended on the AI behaving well. The agent wanted more than the rules allowed, as agents sometimes will. The rules held, the agent learned the limit from a plain reason, and every step is written down.

Give your first agent a brief.

Your work email is all we need to start.