The delivery platform where AI does the building and machinery — not vigilance — enforces the standard. This guide explains why it exists, how work moves through it, and what it asks of you.
AI can now write software far faster than any person can read it. That sounds like a productivity story, but it is really a trust story: when the code arrives faster than you can check it, the bottleneck stops being the building and becomes the believing. Most teams answer that with heroics — a founder reading every line, a senior engineer staying up late, a growing pile of “we’ll test it properly later.” Heroics don’t scale, and they fail quietly on the one bad day.
COPS is the other answer. It treats quality as an engineering problem rather than a discipline problem: rails that make the right path the easy path, gates that physically refuse the wrong one, and evidence — signed, hashed, tied to the exact version of the code — that lets you trust the result without re-doing the work.
It began as internal tooling with a modest goal: help us ship more, safely. It worked well enough that the machinery itself became the product. This guide is written so that an intelligent person without a software background can operate it and ship work to the same standard we do — and, once the public installer lands, install it themselves — because the standard lives in the machinery, not in the operator’s head.
The operating premise
Never trust a claim you can verify, and never require a human to verify what a machine can prove. People decide what and whether; machinery proves that it was done right.
What COPS is
COPS is an operating system for AI-assisted delivery. AI models write the code, review the code, and shepherd it through checks; COPS supplies the three things raw AI doesn’t have:
Rails
One way through
COPS enforces that every change travels the same five-stage pipeline — review, quality check, ship, bot review, land — each stage a packaged procedure, not a habit. Work that skips a stage arrives at the merge gate without evidence, and is refused — so quality never depends on someone remembering to be careful.
Evidence
Proof, not promises
Each completed stage signs a receipt bound to the exact version of the code it checked. Receipts link into a chain, and the chain is verified — by machine — before anything merges. “It was reviewed” is a checkable fact here, never a recollection.
Gates
Refusal by default
Merging — the moment a change joins the main codebase — is refused on a broken or missing chain. Anything destructive or irreversible stops and asks a human, with the exact target named. When the system can’t classify a situation, it fails closed — it holds and escalates rather than guessing.
Everything else — which AI writes, which AI reviews, which checks run for which kind of change — is configuration on top of those three ideas.
Where COPS sits
COPS did not appear in a vacuum, and it does not replace the excellent tools it grew up alongside. It is one layer in a deliberate stack, and knowing the boundaries tells you what each piece is for — and who COPS is actually aimed at.
The stack, bottom to top
The host harness — Claude Code and its peer AI CLIs. This is the raw capability: agents that can read, write, run, and reason. Powerful, and on its own entirely trust-based.
Workflow skills — G-Stack. Packaged procedures for the shape of delivery: how to review a plan, run QA, ship, deploy. G-Stack answers “what are the steps?” so no one improvises a release from memory.
Process-discipline skills — Matt Pocock’s skills. Craft inside a step: test-driven development, structured debugging, grilling a plan before a line is written, keeping a domain vocabulary. They answer “how is good work actually built?”
COPS. The enforcement and evidence layer over all of it: receipts proving each stage ran on the exact version claimed, gates refusing merges the evidence doesn’t support, the lifecycle and its honest endings. COPS answers the question the other layers can’t: “how do I know all of that really happened?”
Where they divide, in practice
When two layers could both claim a moment, the boundary is simple: workflow steps belong to G-Stack; discipline inside a step belongs to the process skills; proof belongs to COPS. A ship follows G-Stack’s procedure, is built test-first per the process skills, and is merged only because the COPS chain verifies. The layers compose; none substitutes for another.
Where COPS diverges
Skills and workflows are ultimately conventions — superb ones, but an agent (or a person) can skip a convention on a bad day and nothing stops them. COPS exists precisely for that day. Its receipts, gates, and terminal states assume good intent and verify anyway. That is the divergence: the other layers make quality easy; COPS makes cutting it visible and refusable.
And the code host’s own guardrails?
A fair question: GitHub already offers branch protection, required checks, and merge queues — doesn’t that cover it? Those verify that named checks passed, and COPS builds on them rather than competing with them: they are the server-side substrate its enforcement targets. What they don’t hold is everything this guide has been describing — who did each stage, in what order, on which exact version, with what disclosed provenance; independent multi-model review orchestrated as a loop that terminates; a lifecycle with honest endings; and holds that reach a human instead of a task silently rotting in a queue. Branch protection knows a checkbox went green. COPS can show you the case file.
Who it’s aimed at: the skills ecosystems serve any developer working with AI. COPS is aimed at the person accountable for the output — a founder, an operator, a small studio — who wants AI-built software shipped unattended to a standard they can defend, without personally re-checking every line. If you need to be able to say “here is the proof” rather than “I’m fairly sure,” you are who this is for.
Where work begins
The pipeline you’ll meet in the next section starts at “claim a ticket” — but the journey starts earlier, and the early part is where quality is actually decided. Nothing in COPS is picked up on a whim:
Every piece of work is a written ticket, in one tracker. One list, owned by the team, with dependencies declared. The platform’s own journals and ledgers are never allowed to become a second to-do list — a rule we enforce on ourselves, because shadow queues are where accountability goes to die.
Significant work gets a plan — and the plan gets grilled. Before implementation, the plan is stress-tested from several angles: strategy, engineering, operator experience, plus an independent review from a different AI model entirely. Findings amend the plan, in writing.
The owner approves a fingerprinted plan. Approval binds to a hash of the exact text. Amend the plan later and the hash changes — which reopens approval. A plan can never quietly drift from what was signed.
Only then does a ticket become claimable — and the lifecycle in Figure 1 takes over.
For small, unambiguous work the ceremony shrinks to fit — a clear ticket and a clean pipeline run. The principle doesn’t shrink: the work is defined before it is begun, and the definition has an owner.
How a task moves
Work enters as a ticket and leaves as shipped, verified software. In between it occupies exactly one state at a time, and every move between states is recorded. This is not bureaucratic decoration — it is what makes an unattended system safe: at any moment, anyone (or any machine) can ask where is this task, and how did it get there? and receive a provable answer.
Figure 1The delivery lifecycle. One state at a time, every transition recorded. There are exactly four final outcomes — Delivered, Merged-degraded, Abandoned, Failed-escalated — and one pause, Held for a human. There is no state called “quietly stuck”: anything the system cannot classify lands in Failed-escalated by construction — the classifier has no other place to put it — with a notification to you.
Three things in that picture matter more than the boxes:
The loop is expected. Reviewers finding problems is the system working. Each fix produces a new commit, and every check re-verifies against it — nothing is allowed to pass on the strength of an old version’s green light.
The pause is a feature. When the system meets a decision it isn’t entitled to make — something irreversible, ambiguous, or expensive — it holds and tells you. The mechanism is strict: a hold must record its notification as delivered, and an undeliverable notification forces the task into Failed-escalated rather than letting it wait unheard. Silent parking is banned.
The endings are honest. A merge whose live proof failed is not called success; it is called Merged, degraded and escalated. Naming failure precisely is what makes the successes believable.
Who checks the work
The heart of the methodology is a rule you already know from every other high-stakes field: the one who did the work never certifies the work. A model reviewing its own code inherits its own blind spots — it re-reads its mistakes as intentions. So COPS staffs each change like a case, with independent minds at every step.
Figure 2Adversarial verification. The writer produces one exact commit; independent verifiers — a different model, the CodeRabbit review bot, and an outside-voice second opinion — each scrutinise it independently. Their findings are work, not commentary: each one is fixed or explicitly answered, and the change only converges when nothing remains open.
Two habits make this loop terminate instead of running forever. First, a stopping rule is set before the round starts (“checks green and every thread resolved → merge; anything raised after that becomes a ticket”) — because a sufficiently keen reviewer can always find one more nitpick. Second, fixes for a round are batched into one commit, so the reviewers re-read one new version, not a drizzle of ten.
The evidence layer
Everything above could be done on trust — and would then be worth nothing on the day someone (a human or a model) cuts a corner. So each completed stage signs a receipt: a small structured record naming the stage, the executor, the time, and — crucially — the fingerprint of the exact code version it checked. Receipts link, each one binding to its predecessor, forming a chain the merge gate verifies mechanically.
Figure 3The receipt chain (first three links shown — the chain continues through the bot-loop and landing stages, five in all). Each stage’s receipt carries a hash of its predecessor and binds to the exact commit it verified. The merge gate re-checks the whole chain against the current commit — so evidence can never be borrowed from an older version of the code, and a broken chain refuses with its reason named.
Three properties are worth understanding even if you never look at a receipt:
Staleness is structural, not scheduled. Evidence binds to a commit fingerprint. The moment anyone pushes a fix, there is a new fingerprint with no evidence — so the system cannot honestly merge unreviewed changes on the back of an old approval. Nobody has to remember to re-check; the arithmetic does it. (One migration-era honesty: the legacy local chain additionally enforces a ten-minute freshness window, which per-commit server evidence is in the process of retiring. It has expired otherwise-valid chains during honest pauses — the remedy is a fresh review of the current version, never a back-dated one.)
Provenance is disclosed, never laundered. Every receipt says how it came to exist — signed live at completion, replayed from cached evidence for an unchanged stage, or repaired manually by an operator. A repair is fine; a repair dressed up as a first pass is the exact fraud the chain exists to catch.
Receipts are linkage, bots are substance. A receipt proves the process ran in order on the right version. The independent judgment of the work itself comes from the reviewers and the automated checks — witnesses the author doesn’t control. The two together are what “verified” means here.
What the evidence proves — and what it doesn’t
A page that asks you to trust receipts owes you the boundaries of that trust, stated before you ask.
What a receipt proves: that a named stage completed, in order, bound to the exact code version, with its provenance disclosed, and that the whole chain re-verified at merge time. What it doesn’t: the quality of the work itself — that judgment comes from the independent reviewers and the automated checks, witnesses the author doesn’t control. Receipts are honest bookkeeping; the bots and checks are the substance.
The trust boundary, honestly
Today, receipts are signed and the enforcing gates run on the operator’s own machine. That means COPS currently protects you from mistakes, drift, and cut corners — an agent or operator skipping a stage, merging on stale evidence, forgetting a check — by making the skip visible and the merge refusable. It does not yet make bypass impossible for a determined operator on their own machine, and this guide won’t pretend otherwise. The target architecture closes that gap by moving enforcement server-side — required checks on the code host that no local machine controls — and is rolling out repo by repo on an observe → advise → enforce ladder. The code host’s own web merge button is part of the same story: enrolled repositories close it with the host’s protection rules, the very substrate the server-side enforcement builds on.
What about a misled AI?
Assume a model will eventually be fooled — by a poisoned document, a malicious dependency, a cleverly worded issue. The design answer is not “our models are too smart for that.” It is that a fooled model still hits the same walls a careless one does: gates that fail closed, destructive actions that stop for a fresh human approval with the exact target named, one-way doors that hold, and evidence that makes a skipped or forged stage visible after the fact. COPS does not claim a model can’t be deceived — only that a deceived model cannot merge without evidence or destroy without a human’s explicit, per-action yes.
The honest numbers
Running in daily production across ten repositories on its reference machine, through multiple release cycles of its own tooling.
The gate layer is itself guarded by 1,100+ automated tests; the new lifecycle module adds 1,373 more, including an exhaustive proof over every state/event pair.
The merge gate fires for real: genuine merges have been refused for incomplete or expired chains — the guardrails are load-bearing, not ornamental.
Bot-review convergence on recent releases improved from six rounds to one as the loop’s briefs and stopping rules hardened.
Running cost: two review-bot/model-CLI subscriptions and API usage — a senior engineer’s tooling budget, not a payroll line.
The 3 a.m. question: when production is down and the chain is broken, there is a documented fallback — a fresh review of the current version plus green required checks — and every override is itself logged. Administrative force-merge is denied outright. There is no silent override, by design.
When the system needs you
Most of the time the pipeline runs without you. It interrupts for exactly the decisions it is not entitled to make — and every interruption arrives as a notification, states its reason, and waits. Here is the complete vocabulary of those moments:
Moment
What it means
What you do
PLAN APPROVAL
Before any real implementation starts, the reviewed plan is presented with a fingerprint (hash) of the exact text you’re approving. If the plan changes later, the fingerprint changes and approval is required again — the plan can never drift silently from what you signed.
Read it. Approve it, amend it, or reject it. Your approval is bound to that fingerprint.
HELD FOR A HUMAN
The pipeline met a judgment call — a one-way door (an action that can’t be undone), a review round that stopped converging, a gate it couldn’t classify. Work is parked safely, nothing is lost.
Read the stated reason, decide, signal. The task resumes exactly where it paused.
DESTRUCTIVE ACTION
Something irreversible — deleting, overwriting, an action against live infrastructure or a whole fleet of repositories. These always stop, with the exact target named. Approval is never standing; it is for this action, on this target, now.
Confirm the named target is what you intend, or refuse. When in doubt, refuse — a held task costs minutes.
FAILED — ESCALATED
An invariant broke or evidence couldn’t be verified. The system froze the task rather than improvising. This is rare, and it is the system telling the truth.
Don’t force it through. Read the trail (it’s complete), fix the cause or hand it to someone technical, and let the pipeline re-verify.
MERGE AUTHORITY
Repositories declare who may authorise the final merge. Some allow the machinery to merge on a fully verified chain; others require a fresh human go-ahead, bound to the exact version being merged. Absent that authority, the task holds — it never falls through to merging by default.
Where your say-so is required, you give it per-merge, with the version fingerprint in front of you.
Fail-closed, in one sentence
Whenever the machinery is unsure whether it may proceed, the answer is always no, hold, and ask — never “probably fine.”
A shipping day
By the time the first command below is typed, the work has already been defined, planned, approved, claimed, and built — test-first, in an isolated lane (a private working copy of the code) — per Where work begins and How a task moves above. The commands are the proving half of the journey, and they are typed into your Claude Code session: each /command invokes a full packaged procedure that runs the stage and signs its receipt. You invoke the stage; you never perform it from memory. In order:
Stage
Command
What actually happens
1 · Review
/review
An independent model reads the finished change against the codebase and the plan. Findings become fixes before anything goes further.
2 · QA
/qa
The change is exercised — tests run, the product is actually driven, documentation coverage is checked. “It runs” is not QA.
3 · Ship
/ship
Version and changelog are updated, the change is pushed, and the pull request opens — the moment the work goes public to the review bots.
4 · Bot loop
/pr-loop
Every bot finding from every source — inline comments, review bodies, statuses — is fixed, answered, and resolved, round by round, until the reviewers have nothing left.
5 · Land
/land-and-deploy
The chain is verified against the final version, the merge executes pinned to that exact fingerprint, deployment runs, and a live check proves it’s really working.
What “green” means when you’re asked to trust it: every required check passed on the final version of the code, every reviewer finding was resolved, the receipt chain verifies end-to-end against that same version, and the live proof came back healthy. If any of those is missing, the system will have told you which one and why — that’s the difference between this green and a dashboard’s green.
Installing
Honesty first: today, COPS installs from this repository by an operator who has done it before, and the installer enrols one repository at a time. A one-command public installer is on the roadmap as part of the open-source release; this section will be rewritten — and re-certified — when it lands.
What installation actually does, in plain terms:
Machine layer. A set of guard hooks is installed once per machine. These are the gates — they intercept risky actions (merges, destructive commands) everywhere, regardless of which project you’re in.
Repository (project) layer. Each project you enrol gets its configuration: which checks are required, what the merge authority is, which paths the guardrails watch. Enrolment is explicit — COPS never assumes a repository wants managing.
Verification. The installer proves itself: it re-runs with a verify flag and shows every gate firing on a harmless test before you trust it with real work.
The one discipline installation asks of you afterwards: keep the installed layer current. Upgrades are deliberate re-runs of the installer, and the platform’s own telemetry will tell you when an enrolled repository is running behind.
What you need
A Mac, today. The machinery itself is portable in principle — shell scripts, git, and the GitHub command-line tool — but credential custody uses the macOS Keychain and several scripts assume Mac conventions. macOS is the only environment the platform has been proven in. Linux is plausible and unproven; Windows is not supported. Cross-platform support is an open-source-release workstream, not a promise.
Claude Code as the host harness, with the peer AI CLIs (for independent review lanes) and a CodeRabbit subscription for the pull-request bot.
A GitHub account — the tracker, the pull requests, and the server-side evidence all live there.
Git, the GitHub CLI, Node 22+, and pnpm — the toolchain COPS runs on. The installer checks for these rather than assuming them.
How this guide stays true
A guide to a system of receipts should not itself be taken on faith. This document is a controlled document, maintained under the same doctrine as the code:
Certified against a commit. The plate at the top and bottom names the exact repository version this guide was checked against. If the plate’s commit is old, treat the guide as suspect — exactly as the merge gate treats a stale receipt.
Hashed in a ledger. The fingerprint (SHA-256) of this file is recorded on the platform’s certification ledger at every revision — a document cannot honestly carry its own hash inside itself, so the ledger holds it. Candour about the current limit: that ledger lives in the private tracker today, so a public reader cannot yet check it — it becomes public with the open-source release, at which point verification is one line in a terminal (shasum -a 256 on the saved page, compared against the ledger entry). Until then, the plate tells you what was certified and when; the proof is internal.
Re-certified on change. Any shipped change that alters operator-facing behaviour — a stage, a gate, a command, the install — owes this guide an update in the same breath, and the revision plate ticks forward with it.
If you find the guide and the system disagreeing, the system is right and the guide has a defect — report it to the author, and the ledger will show the correction land as a new certified revision.
Glossary
commit / fingerprint
One exact, immutable version of the code, identified by a cryptographic ID. Every piece of evidence in COPS binds to one of these — never to “the code” in general.
receipt
A signed, structured record that a pipeline stage completed — naming the stage, the executor, the time, its provenance, and the commit it verified.
chain
The linked sequence of receipts for one change, each carrying a hash of its predecessor. Verified mechanically before merge.
gate
A machine check that can refuse an action outright — most importantly the merge gate. Gates fail closed: unsure means no.
merge
The moment a proposed change joins the main codebase — the irreversible step every gate exists to protect. In COPS, merges execute pinned to an exact commit fingerprint, so a change that moved after its verification is rejected.
pull request (PR)
The public proposal of a change, where the review bots and checks do their work before anything joins the main codebase.
CI / checks
The automated test and verification jobs that run against every version of a change. “Required checks” must pass on the final version, no exceptions.
worktree / lane
An isolated working copy where one task is built without disturbing anything else. Lanes let several tasks proceed in parallel, safely.
hold
The paused state — Held for a human — where the pipeline parks a task to ask you something. Always accompanied by a notification; resumable exactly where it stopped.
terminal state
One of the four honest endings of a task: Delivered, Merged-degraded, Abandoned, Failed-escalated. Nothing ends anywhere else.
churn
Repeating an expensive step without getting anywhere new — the failure mode of unattended AI work. COPS measures it, reports it, and steers out of it.
live proof / canary
Evidence that the deployed change is actually working in the real environment — the difference between “merged” and “delivered.”
operator
You: the person who sets direction, approves plans, answers holds, and holds merge authority where a repository requires it.