# Budget Change Card: every ad budget move on one card, big ones wait for your yes

> A free kit for owners who let an agent suggest or make ad budget changes. Every proposed move becomes a card: old budget, new budget, the reason, and spend and conversions checked against one report export. Small moves from an agent you trust, on enough data and under a daily cap, may go. Bigger ones wait for your yes, moves over your ceiling are blocked, and the change itself goes through a gate that logs who allowed it.

- URL: https://paperchasewebb.ai/bots/marketplace/items/budget-change-card-every-ad-budget-move-on-one-card-with-the-owners-yes/
- Type: Prompt pack
- Category: Solo business
- By: PaperChaseWebb
- Works with: Claude Code, Codex, Grok Bot, Hermes (named in the listing); One Python script, a rules template, a fictional bakery with eight campaigns and eight proposed moves, and agent rules for each harness. Tested on Linux
- Price: Free USD
- Difficulty: Beginner
- Setup time: 15 min
- Time to result: First cards in about 15 minutes
- Format: Markdown (.md) file, budget-change-card-every-ad-budget-move-on-one-card-with-the-owners-yes.md
- Version: 1.0, updated 2026-11-04
- License: Personal and commercial use.

## What you end up with

Every budget change has a card, a reason, numbers from one report and a name next to the yes.

## What you get

- The method: one report as the only source of numbers, a percent limit for small moves, a ceiling, a daily increase cap and a minimum of data
- budget.py: 9 rules checks and 13 reasons a move is held or blocked, from a stale old budget or numbers that do not match the report to thin data and the daily cap
- cards.md each run: old and new budget, percent change, reason, window, spend, conversions and cost per conversion
- A gate called right before a budget changes, which lets a move through once; any edit after your yes stops it
- The owner's yes refused inside an agent session, without a terminal, for a blocked card and from anyone but the owner
- AGENTS.md, CLAUDE.md, a Grok Bot standing order and a Hermes skill, a fictional example, and 49 tests

## Who it is for

Owners and small marketing teams who let an agent suggest or make ad budget changes.

## Tools needed

- Python 3.8 or newer: budget.py: rules check, one card per proposed move (clear, needs your yes, blocked), owner yes, a change gate and status; standard library only; never connects to an ad account
- Grok Bot, Claude Code, Codex or Hermes (optional): proposes moves with numbers copied from the report, runs the scan and calls the gate under AGENTS.md; never approves, edits the inputs or splits a move
- You need: Python 3.8 or newer
- You need: One campaign report you can export to CSV each day
- You need: Today's daily budget per campaign

Cost to run: Free. Python is free.

## How it works

1. **Run the example.** Unpack the file and run python3 budget.py scan example/rules.json example/budgets.csv example/report.csv example/proposals.csv out/. Expected: 2 clear, 4 need a yes and 2 blocked, each with its reason.
2. **Write your rules.** Copy templates/rules.json. Keep every agent on propose_only and the auto limit at 0 to start. Expected: budget.py check shows rules OK.
3. **Export one report.** Each morning, export your campaign report to report.csv and today's budgets to budgets.csv. Expected: Cards whose numbers match the report; any that do not are blocked.
4. **Say yes at your own terminal.** Read the card, then run approve and type apply. Whoever changes the budget calls gate first. Expected: The log shows your yes; edit the card and gate says no-go.

## Sample prompt: Before any budget change (Grok Bot, Claude Code, Codex, Hermes)

```
Follow AGENTS.md. Add the move to proposals.csv under your own name with numbers copied from report.csv, run budget.py scan, and send the owner cards.md if anything is held or blocked. Call budget.py gate before changing a budget and change it only on exit 0. Do not approve, edit the rules, budgets, report or log, split a move or retry a refused change another way.
```

One prompt.

## Free preview of budget-change-card-every-ad-budget-move-on-one-card-with-the-owners-yes.md

````markdown
# Budget Change Card

**An agent that moves ad budgets on a hunch can spend a week's money by lunch. Make every move fit on one card: the old budget, the new one, the reason, and the numbers from one report. Small moves can go. Big ones wait for your yes.**

Version 1.0, 2026-11-04. By PaperChaseWebb Inc. Free. Works with Grok Bot, Claude Code, Codex and Hermes, or by hand. Python 3.8 or newer, no installs.

## The problem

Budget moves suggested by agents tend to arrive as a sentence in chat: "raise brand search, it's doing well." Doing well by which report, over which days, from what budget to what? When the numbers come from three dashboards that disagree, nobody can check the case, and when the move turns out wrong, nobody can say who allowed it.

This kit puts each move on a card and checks the card against a single report export. Moves that are small, from an agent you trust, backed by enough data and under a daily cap may go. The rest wait for you, and your yes covers that one card as it read.

## What you get out of it

- cards.md: one card per proposed move, sorted into blocked, needs your yes, and clear, with the reason for each.
- Every card shows old and new budget, the percent change, the reason, the window, spend, conversions and cost per conversion from the report.
- A gate called right before a budget is changed. Exit 0 means go; anything else means stop. A move goes once.
- changelog.jsonl: each yes and each change, with who, when, old and new budget, and a f
````

## Test record

- Date: Nov 4, 2026
- What was run: tests/test_budget.py (49 tests) unpacked from the pack file and run fresh on Linux, Python 3.8, 3.9, 3.11, 3.12 and 3.13; check, scan, approve, gate and status on the fictional example.
- Result: 49 passed, 0 failed on all five versions; the example sorts 2 moves clear, 4 held (agent may only propose, over the auto limit, thin data, daily cap) and 2 blocked (over the ceiling, numbers off the report); the yes is refused in agent sessions, without a terminal, for the wrong name, without the typed word and for a blocked card; an edit or a budget change after a yes stops the move; a move goes once; the inputs are never modified.
- Not run: macOS or Windows. A real ad account or report export. A live Grok Bot, Claude Code, Codex or Hermes session.

Copied from this item's dated test notes. What was not run stays in.

## Worth knowing

- It never connects to an ad account. It covers changes that pass through the gate, so remove direct budget access from agents where you can.
- It checks that the numbers match one report, not that the report is right or the reason is wise. Read the cards.
- On 2026-11-04: 49 tests passed on Python 3.8, 3.9, 3.11, 3.12 and 3.13 on Linux, run from the files unpacked out of the pack. Agent rules guide; they were not loaded inside each harness for this release.
- Daily budgets only. Lifetime budgets, bids and targeting are out of scope.

## Questions

**Does it change my ad budgets?** No. It decides whether a move may be made and logs who allowed it. A person or your own tool makes the change after the gate says go.

**Can my agent approve its own move?** No. The yes is refused inside an agent session, without a terminal and for anyone but the owner named in the rules.

**Why block big moves even with a yes?** A ceiling makes big changes happen in steps you can watch. Raise max_move_pct if you want a higher ceiling.

**What should I pair it with?** The Earned Autonomy Ladder (free) decides when an agent may move from proposing to applying small moves, and the Usage Cap Check (free) keeps the agent bill itself in view.

## How to get it

Free sample. Download it directly at https://paperchasewebb.ai/bots/marketplace/items/budget-change-card-every-ad-budget-move-on-one-card-with-the-owners-yes/, no signup.

Seller: PaperChaseWebb Inc., mgmt@paperchasewebb.com
