Guardrails for Claude Code and Codex, enforced rather than suggested.
Features
-
New skill:
/riprap:vet. It drives/riprap:reviewand the fixes that review asks
for through a bounded number of cycles, and stops at the merge gate with the pull request
ready for a human./riprap:reviewreports once and stops by design, so somebody still
has to apply the fixes, push them, and ask again — and done by hand that loop reliably
loses one of three things. The fix is never pushed, so the next pass reads code it cannot
see and reports the finding again. Or review and remediation collapse into one turn, and
the findings become indistinguishable from the changes made in response to them. Or
nobody notices that the same finding has now been raised three times, which is not a
review converging but two parties disagreeing.It ends by handing over, never by merging. A loop that ends in a merge is the
arrangementmerge-gates.mdwas written against — the same party writing, judging and
merging — with more rounds in front of it, and more rounds do not fix a blind spot that
is structural.It is expensive: on the order of twenty agents and more than an hour for a single
pull request, because every cycle fans the review angles out into their own contexts. A
deliberate choice for a change worth that, not a default. -
The first workflow riprap ships into a repository. On Claude Code the skill is backed
by.claude/workflows/riprap-vet.js, which carries the parts a model cannot be relied on
to hold across a long turn: the cycle count as a loop bound rather than an intention, the
recurrence test as arithmetic over finding slugs rather than recall, and review and
remediation in genuinely separate contexts. It also dispatches the review angles itself,
one agent per angle, because a single context that has just cleared correctness is not an
independent reader of simplicity — it has already decided the change is sound. Codex has
no workflow runtime today and runs the skill directly.
Internal
.claude/workflows/riprap-*is now inside riprap's namespace, in the manifest builder
and the installer alike — including the prune walk, so a workflow riprap stops shipping is
removed rather than left in place. A root that installs as owned but prunes as a seed is a
half-namespace, and the file it leaves behind goes on running with nobody aware of it.bin/testnow parses every payload workflow under the same wrapping the host's
runtime applies. Nothing else in the tree reads these files, so a syntax error would pass
lint, pass the manifest check, pass CI, and surface for the first time in somebody else's
repository.- The tech-footprint guardrail exempts
riprap-vet.js. It is the only file riprap
installs whose extension carries a technology signal. Without the exemption, installing
riprap either refuses its own first commit in a repository with an established stack, or —
in one with no stack yet — establishesjspermanently and waves through every.jsadded
afterwards.
Install
/plugin marketplace add influpert/riprap
/plugin install riprap@influpert
/riprap:install
Codex CLI:
codex plugin marketplace add https://github.com/influpert/riprap.git
codex plugin add riprap@influpert
Existing users: update riprap through your active host's plugin manager, start a fresh
session, then rerun /riprap:install to refresh the repository payload.
Licensed under PolyForm Perimeter 1.0.1. See riprap.dev/license.