Help us improve
Share bugs, ideas, or general feedback.
From RGR
Creates a Locked Intent Boundary artifact to fix human intent before planning, preventing agents from redefining goals. Use before any build/remove/replace/migrate/refactor task or when turning discussion into a master PRD.
npx claudepluginhub kingbootoshi/rgr --plugin rgrHow this skill is triggered — by the user, by Claude, or both
Slash command
/rgr:intent-contractThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You produce one small artifact the human reads in under a minute and signs: a **Locked Intent Boundary** that fixes intent before any planning. From it you derive the plan, the proofs, and the change-surface audit. The executor implements only inside the boundary and can never edit, weaken, reinterpret, or supersede it. The human reviews the boundary, never the plan, because the plan and the di...
Transforms approved Intents into executable TDD phased plans requiring tests first (happy/bad/edge/security/leak/damage) per phase with CLI E2E gates. Use after /intent-review for TaskSwarm.
Transforms ambiguous or high-impact product/engineering changes into scoped, verifiable acceptance criteria before or alongside implementation. Use to de-risk features, migrations, security changes, or agent handoffs.
Builds manifests to plan work, scope tasks, spec requirements, and break down complex tasks before coding. Converts needs into deliverables, invariants, and verification criteria for features, bugs, refactors.
Share bugs, ideas, or general feedback.
You produce one small artifact the human reads in under a minute and signs: a Locked Intent Boundary that fixes intent before any planning. From it you derive the plan, the proofs, and the change-surface audit. The executor implements only inside the boundary and can never edit, weaken, reinterpret, or supersede it. The human reviews the boundary, never the plan, because the plan and the diff are both checked against the boundary mechanically.
Done = every required after-state is proven AND every invariant is proven AND every diff operation is authorized AND no forbidden substitute occurred AND no stop condition is active.
Intent drift. An instruction-following executor is handed a goal, authors its own definition of done, and at any friction point reshapes that definition toward whatever it can complete and verify, then grades the result against its own reshaped version. The human's actual intent is never the thing checked.
This is one bug with two faces, and the faces are not "additive" and "destructive":
Same bug. So this is ONE mechanism, never a deletion tool with a general case bolted on. Deletion is just one kind of change.
Silence authorizes nothing. A blocker never authorizes a narrower destination.
Silence-means-expendable killed Supabase. Blocker-becomes-a-v1-split killed ARK. Both die under this single rule. For an existing surface, silence usually means preserve; for a new surface, silence means not authorized; for an unknown discovered surface, silence means stop.
Every Intent Boundary, trivial or huge, is the same six field types. Rigor changes the number of rows and the strength of proofs, never the shape.
operation = DELETE.Statuses are closed-class: MET / NOT_PROVEN / FAILED / SUBSTITUTED / BLOCKED. There is no "basically done," no "v1 complete," no "works except," unless the boundary explicitly authorizes it.
There is no destructive/additive branch. That split was the wrong abstraction — ARK proves additive work drifts through substitution, narrowing, v1-splitting, missing-primitive bypass, and fake proofs just as hard as deletion. Every task uses the same six fields. You scale the detail, not the mechanism.
Score five axes 0-2; the total picks how much detail the same fields carry:
Rigor levels:
Key distinction that keeps trivial work light: for an untouched surface, preservation is proven for free by the change-surface audit ("it wasn't changed"). Only a touched preserved surface needs a behavior proof.
BLOCKED: plan/boundary contradiction, not "the boundary wins silently."rgr verify --ci --replay --intent-lock in CI (authoritative), or scripts/audit-change-surface.sh locally (portable fallback): every diff op must map to an AC row. Plus proof-coverage (every D/I has a proof) and plan-ID (every task cites IDs).LOCKED INTENT BOUNDARY — <goal> risk: L<n>
raw request: <verbatim>
D-001 <what must become true, observable>
N-001 <tempting near-solution that is NOT acceptable>
I-001 <what must still work, by name>
I-002 ...
authorized changes (every diff op must map here):
AC-001 <surface> DELETE because D-001 forbidden: <nearby>
AC-002 <surface> MODIFY because I-001 forbidden: DELETE
AC-003 <surface> ADD|MODIFY because D-001
proofs:
P-001 proves D-001 by <observable>
P-002 proves I-001 by <behavior smoke, not "route exists">
A-001 every diff op is authorized (rgr verify --intent-lock; or audit-change-surface.sh)
stop/relock: missing primitive · unclassified surface · impossible proof ·
wider scope · substitute path · plan/boundary contradiction => STOP
red-team: the most dangerous boundary-compliant-but-intent-violating
reading is <X>; this boundary blocks it via <mechanism + proof>.
See TEMPLATE.md for the full machine-layer skeleton.
Every change — add, modify, delete, rename — must map to a signed AC row whose operation matches, or the build fails. This is the difference between prose and a brake: "do not change unrelated code" is a sentence a surgical follower reconciles away; a failing exit code is arithmetic it cannot argue with. It catches a feature deleted without authorization (Supabase) and a non-authorized path quietly added (an ARK-style bypass) with the same rule.
Two ways to run it, one principle:
rgr. Compile the boundary's A6 rows into a signed, hash-pinned IntentLock and enforce it with rgr verify --ci --replay --intent-lock <trusted-out-of-tree-path> --expect-intent-sha256 <H>. rgr verifies the behavior proofs (Red-Green-Replay) AND the scope audit in ONE verdict, computed by CI against a lock the executor cannot forge. The in-tree .rgr copy is evidence, never authority — CI reads the trusted lock from a path the agent doesn't control, hash/signature-verifies it, then audits the real git diff --no-renames --name-status <lockedBase>...HEAD against it. Tampering the in-tree copy buys nothing; a dirty tree or a non-ancestor base fails closed. (rgr ships this skill alongside its own — see the rgr repo's skills/.)scripts/audit-change-surface.sh ac-manifest.txt <base>. The same op-to-row check over git diff --name-status, no dependency. Use it as a local pre-check, or where rgr is not installed. It is a diagnostic, never the gate — a verdict the agent can run is a verdict the agent can skip.The rule is identical in both: silence authorizes nothing, every diff op maps to a locked row, deny rows fail on contact, and the audit runs against committed HEAD on a clean tree (uncommitted ops are refused, not ignored).
Hold this design to the standard it imposes. A prior guardrail we wrote drifted on its own residual ambiguity within the hour, so close these explicitly:
apps/** MODIFY/DELETE") let a model drive a truck through. Keep rows operation-specific, with linked IDs and forbidden-nearby examples.The Locked Intent Boundary overrides the plan, worker briefs, always-loaded global instructions (AGENTS.md / CLAUDE.md), and reviewer suggestions for the duration of this task. An always-loaded file that grants a permission the boundary denies must lose — the model otherwise reconciles toward the permission, which is how cross-layer contradictions cause drift.
This does not magically know the human's intent. It forces intent into a small external object before execution and makes drift from that object mechanically detectable. A boundary that encodes the wrong intent still executes the wrong thing — which is exactly why the human signs a one-screen artifact with a red-team line, before any plan exists.
The signed boundary, the proof manifest, the phase packets, and the enforcement — an IntentLock enforced by rgr verify --ci --replay --intent-lock in CI (authoritative), or the portable audit script locally. The package is executor-agnostic: any fast model runs against the same locked boundary and the same proofs, and the verdict is computed by something the executor does not control. The gate lives in the artifacts and the CI court, not in a watching mind.