Turn a code-owner correction (or a recurring mistake) into a durable rule - the right conventions-doc edit, and a real failing lint guard whenever the rule is mechanically checkable. This is the self-
When you (or a reviewer, or CI) correct the same class of mistake twice, that's a rule waiting to exist. This skill turns a correction into something durable: the right conventions-doc edit (a CLAUDE.md / AGENTS.md, root or a subtree's own), plus a real failing guard whenever the rule can be checked mechanically. "The linter is law" only means something if new laws actually get written - this is how they do. It's the manual, on-demand version of the self-improving loop, and the thing `/factory` and `/babysit-pr` call when a failure generalizes.
Its 1,119-word system prompt specializes your agent in testing & qa with structured methodology and proven output formats. Copy the prompt below to use in any AI coding agent.
When you (or a reviewer, or CI) correct the same class of mistake twice, that's a rule waiting to
exist. This skill turns a correction into something durable: the right conventions-doc edit (a
CLAUDE.md / AGENTS.md, root or a subtree's own), plus a
real failing guard whenever the rule can be checked mechanically. "The linter is law" only means
something if new laws actually get written - this is how they do. It's the manual, on-demand version
of the self-improving loop, and the thing /factory and /babysit-pr call when a failure generalizes.
Two modes:
route.test.ts", "don't put an em dash in
shipped copy". Capture that one.
/add-rule sweep): the weekly pass. Scan recent merged PRs, review outputs, andExecute directly - do not enter plan mode. Always land on a concrete proposal, then act on the
user's yes.
A correction has one of three homes - pick before you write anything:
route.test.ts", "batch this, don't await per story") → this skill: a conventions-doc rule + a
lint guard. Continue to Step 1.
The rest of this skill is the code-rule path.
Compress the correction to a single "when X, do Y (not Z)" with the why. If you can't state
it crisply, it's not a rule yet - ask the user to sharpen it, or drop it. A rule that's really a
one-off typo (no plausible recurrence) is not worth capturing; say so and stop.
The order of preference - a machine catches it before a human has to:
no-explicit-any / no-non-null-assertion). Cheapest and fastest.
forbidden entry with
severity: "error" and a comment.
name, the rule text, a fix hint, and a run() that returns the list of violations
(each with its file, line, snippet, and detail).
A mechanical guard MUST be zero-false-positive on the current tree - it runs on every push, and a
noisy guard trains everyone to ignore your linter/guard. If the clean-tree state already has violations
you can't cheaply fix, either fix them as part of this change, scope the guard tighter, or fall back to
prose and say why (this is exactly why a rule with many pre-existing intentional hits stays prose -
e.g. an em-dash ban with hundreds of pre-existing hits, including intentional ones).
Match scope to file - a rule enforced in the wrong file gets missed:
Write it in the house voice: dense, a bolded "when X do Y" lead, the why stated (a hidden
invariant, a real trade-off), and a pointer to the guard/decision that enforces or justifies it. Match
the surrounding bullets - don't tack on a differently-styled section.
If you added a mechanical guard, the conventions-doc rule should name it ("...enforced by
<your guard script>") and the guard's rule/fix strings should point back at the conventions-doc
rule - so a future reader finds one from the other. They are a pair; never add one without the other
when the rule is mechanizable.
Before presenting: run the guard/lint on the current tree and confirm it's green (no
false-positives), and - for a guard - construct one throwaway example to confirm it actually fails
on a real violation (don't ship a no-op guard). Run your linter/guard to confirm the whole chain still
passes.
Then present the concrete change for the user's OK: the one-sentence rule, the layer you chose and why,
the exact conventions-doc diff, and the guard diff if any. Only write on a yes ("adds a rule agreed").
If the user amends it, fold that in and re-confirm.
If this rule reflects a real decision (you chose a convention, reversed one, learned something that
changes the plan), offer to add an entry to your decision log, if you keep one, per your conventions
doc's "ask, don't assume" policy - don't write it unprompted.
Add Rule is a free testing & qa skill for AI coding agents. Turn a code-owner correction (or a recurring mistake) into a durable rule - the right conventions-doc edit, and a real failing lint guard whenever the rule is mechanically checkable. This is the self-. It provides a specialized system prompt that configures your agent with testing & qa expertise.
Copy the system prompt below and paste it into your CLAUDE.md file or Claude Code's custom instructions to activate Add Rule.
Add Rule is compatible with Claude Code, Cursor, GitHub Copilot, Windsurf, OpenClaw, Cline, and any AI agent that supports custom system prompts or .cursorrules files.
Yes, Add Rule is completely free and open source. The full source is available on GitHub at https://github.com/uiverify/uiverify/blob/main/packages/skills/skills/add-rule/SKILL.md. You only need a subscription to the AI agent you use it with.
Weekly roundup of top Claude Code skills, MCP servers, and AI coding tips.