Written for whoever has to sign off on letting this near a repository. If that is you, the parts worth your scepticism are below.
Not a settings page, not a model’s judgement. A rule is a name, a grade, and the paths it applies to. Editing it is a pull request like any other: reviewable, diffable, revertible.
The highest matching rule wins, so adding a rule can only ever make something stricter unless you deliberately delete one.
The file itself is graded G4, and an agent is refused write access to it outright. Nothing that decides how an agent is judged can be edited by one.
# Grade precedence: G4 > G3 > G2 > G1.
# Unmatched changes default to G2.
## rule: dependency-bumps
grade: G1
paths_only: package.json, pnpm-lock.yaml, go.sum
## rule: database-migrations
grade: G4
paths: **/migrations/**, **/sql/**
description: Schema migrations against production data.
The grade a card was dispatched under describes what it said it would do. These run against what it did.
The diff is re-graded by the same ruleset. If it comes back riskier than the card was dispatched as, the decision to run it unattended was made on information that turned out to be wrong, so auto-merge is blocked and a person is asked.
This is what stops a styling card that quietly refactored auth.
A card declares the paths an agent may touch. Anything outside them is a violation whatever it grades: a clean, well-reviewed, entirely correct change in the wrong file is still refused.
The file list comes out of git, not out of the agent’s account of itself.
A runner is a process you start on hardware you own. It asks for work over outbound HTTPS and holds the connection open. No inbound ports, no VPN, no static IP.
Which means a Mac mini under a desk, an EC2 box and a Kubernetes pod all work the same way, behind NAT, and your source never has to leave your network.
Short-lived, scoped to the one repository, issued when a runner takes the work and expired long before it asks for more.
Configured on the runner, where it never reaches us. A key on the machine always beats one the server sends.
Claude Code and Codex ship as harnesses. Anything that reads a work order and answers with JSON can take their place.
Any one of them missing and the card is waiting for you in the morning instead, with the reason it stopped. The gate is the only thing that can merge. A review agent’s approval is an input to it, not a decision.