Eight agents that run a client marketing account end to end, with separation of powers built into who is allowed to edit what.
~6,700 lines. Every client fact lives in one config file; the agents contain none.
Point a capable model at a client account and it will happily produce a month of content, report that everything went well, and be wrong in ways nobody catches until the client does. Not because it's careless — because a single agent that produces work, judges it, and reports on its own performance has no independent check anywhere in the loop.
So the fleet is built as a separation of powers. The constraint that makes it work is boring and structural:
The gate that judges work cannot edit it. The agent that learns from the week cannot change the rules.
Both brand-qa-gate and retro are defined without the Edit tool. Not by convention — they physically cannot modify what they assess. A reviewer that can fix its own findings stops being a reviewer.
| Agent | Owns | Notably cannot |
|---|---|---|
mops-orchestrator |
The calendar, the dependency graph, the gate register, the approval batch | Publish anything |
mops-brand-qa-gate |
The terminal 16-check pass; returns PASS / FAIL / HOLD with file, line and rule invoked | Edit. It judges; it never fixes |
mops-measurement |
Every figure. The baseline freeze, the UTM registry, the ledger | Be overruled on a number by any other agent |
mops-research-intel |
Evidence supply — competitor reads, SERP capture, buyer intelligence | Publish |
mops-instagram-engine |
Short-form and feed production | Approve its own output |
mops-linkedin-engine |
Company and spokesperson production, ICP lists, outreach drafts | Send anything |
mops-local-visibility |
Business profile, NAP unification, directories, reviews | Skip the gate order |
mops-retro |
The learning loop — proposes amendments from what actually happened | Edit. It proposes; a human applies |
Every figure is tagged, and an untaggable figure is refused.
CONFIRMED (measured, sourced), PROXY (a stand-in, labelled as one), CANNOT CONFIRM (access is missing — and the report says so), TARGET (a goal, never a result). One agent owns this and may refuse a number it cannot source. A proxy is never silently promoted to a confirmed figure — that promotion is the single most common way an honest report becomes a dishonest one.
Gates fail closed.
Sixteen gates, G01–G16, each with an owner. Work that depends on a gate does not start until it clears. The config key that makes this real is absent_reads_as: BLOCKED — a gate with no recorded state reads as blocked, not as fine. Missing evidence is not permission.
The retro proposes; it never applies. It reads the closed week, extracts escaped defects and outcome patterns, and writes proposed amendments with the current text quoted beside the replacement. It writes no rule, promotes no pattern, and adds no gate check. A person decides.
cp client-profile.example.yml client-profile.ymlclient-profile.yml is the only place a client fact may exist — 23 sections covering identity, people, canonical NAP, channels and handles, sacred assets, banned words, target queries, competitors, ICP, cadence, per-channel export specs, evidence rules, approval, gates, KPIs and escalation.
No agent hardcodes a business name, an address, a handle, a competitor or a product vocabulary. An agent that needs a fact the schema lacks escalates to add a key — it never inlines the fact. client-profile.yml is gitignored; the example is not.
Placeholders resolve as {{client.name}}, {{channels.instagram.handle}}, {{gates.register_path}}.
docs/ARCHITECTURE.md— the naming, the config contract, the numbered invariants, and why each existsclient-profile.example.yml— the full schema, commentedagents/mops-orchestrator.md— how a brief becomes dispatched, gated workagents/mops-brand-qa-gate.md— the 16 checks, and what each one refuses
This was extracted from a fleet that ran one real account, then rewritten as a template. It has been used in anger in exactly one configuration, so treat the channel-specific engines as a starting point rather than a finished product — the parts that have genuinely been proven are the gating, the measurement discipline and the separation of powers.
The Edit-less tool lists are the load-bearing detail. If you adapt this and grant those two agents editing rights, you have kept the shape and thrown away the mechanism.
MIT licensed.