A template repo for Claude Code · Codex · claude.ai
Marketing budgets drain through campaigns that were never pressure-tested and never killed. The Marketing Office fixes the decision process: fourteen agents — a committee, a content studio, an orchestrator — each defined by a markdown charter, run by the coding agent you already use, against files in a private Git repo. A campaign idea gets ten isolated memos, two veto chairs, a hard economics hurdle, and a dated, written prediction before money moves. On a GO, the studio drafts the assets; every claim is sourced or flagged. You make every decision and ship every asset. The system writes the arguments and keeps the record.
The problem is not a shortage of campaign ideas. The problem is that in most companies nothing forces the bear case, the unit math, and a dated prediction into writing before the spend is committed — so weak campaigns launch, tired ones drift, and a year later nobody can check which calls were good.
The fix is borrowed from family-office investment committees. Twelve specialist agents each hold a written charter: a mandate, an input whitelist and blacklist, a fixed output format capped at 600 words. Eight write first-pass memos in isolation — none sees another's conclusions. A chief skeptic attacks the assembled stack. A CMO agent decides last through a five-step checklist it cannot step outside: vetoes bind, the economics hurdle binds, the budget cap is a formula. A recorder journals every run. On a GO, a producer drafts the assets, gated per-asset by the same veto officers.
Everything is plain markdown. State lives in campaigns/ and journal/; company
facts live only in config/; every number lives in one rails file. No accounts, no services —
the repo and your agent are the whole stack.
[NEEDS SOURCE: …] placeholdersFourteen chairs, four real power levels. Advisors argue and are forbidden to decide; veto chairs block; one chair decides inside the rails; one human — you — rules on everything.
| # | Agent | Power | One line |
|---|---|---|---|
| 1 | market-intelligence-analyst | advisory | Campaign thesis, ICP evidence, competitor context, conviction 1–5 |
| 2 | devils-advocate | mandatory dissent | Strongest case against; steelman, three attack axes, pre-mortem; never endorses |
| 3 | funnel-economics-specialist | advisory | Story-blind math: required leads, cost vs. pasted benchmarks, pipeline-to-spend, hurdle gap |
| 4 | market-climate-strategist | advisory | Buying-climate call with a dated window; never reads internal funnel data |
| 5 | brand-risk-officer | veto | Worst case with number + mechanism; metric stop + thesis stop; max unvalidated spend; brand asset gate |
| 6 | portfolio-architect | veto | Channel concentration, segment fatigue, calendar, brand-vs-demand corridor |
| 7 | compliance-privacy-officer | veto at asset gate | Screens against your stated profile; ends in "confirm with legal counsel" items |
| 8 | budget-treasury-officer | advisory | Reserve floor, committed vs. uncommitted, cash calls, fundable amount |
| 9 | chief-marketing-officer | decision | GO x% / NO-GO / WAIT-WITH-TRIGGER via five-step checklist, inside vetoes and rails |
| 10 | launch-planner | advisory | Gated tranches, channel split, frequency caps, the asset brief |
| 11 | decision-recorder | mandatory | Journal for every run; overrides logged verbatim; quarterly audit |
| 12 | chief-skeptic | mandatory dissent | Attacks the stack: load-bearing assumptions, correlated errors, break signals |
| 13 | content-producer | production | Drafts emails, ads, landing pages, social, collateral from approved messaging + sourced facts |
| 14 | campaign-committee-orchestrator | chair | Chairs both protocols, writes every memo under isolation discipline, never decides |
Every limit lives in one file, budget-rules.md, each value tagged
(Default – edit to taste.). Tune them once; every chair obeys. Where a charter repeats a number, the
rails file wins.
Sizing is a formula. Conviction converts to budget mechanically; nobody argues past a cap, including the CMO agent — its charter forbids exceeding it by any amount.
Clone, fill
config/, personalize, smoke-test, run your first campaign, produce, audit. Every command and file
path, in order.
A complete fictional run: the intake, the memos, the math that killed the GO, the WAIT trigger, the production leg. Ships in the repo as the smoke test.
adaptingWhat to change and what never to touch. Worked example: a managed service provider — different KPI, segments, rails, and channels.
The repo ships generic with a fictional fixture. Nothing real
enters it until you fill config/ and say personalize the marketing office.
Not legal, compliance, or financial advice. The compliance officer screens against the profile you wrote and ends every memo with "confirm with legal counsel" items. It never green-lights.
Not a sending tool. Every run ends at files in campaigns/
and journal/. Nothing is dispatched, published, scheduled, or posted. Shipping is a human act.
Not a decision-maker. The CMO agent's GO is a recommendation. You approve, modify, reject, or override — in writing, on the record.
The return is measurable: after a year of journal entries, the quarterly audits show — in your own numbers — whether your campaign decisions and your overrides added or destroyed value. Next step: clone the repo and run the smoke test. It uses only fictional data and walks the whole process before anything real is committed.