About pr-to-lint-rule
A skill that turns recurring PR review comments into automated lint rules. It detects the project language and toolchain, generates a rule, updates CLAUDE.md, and runs tests for verification.
Key features
- 01Detect project language and lint tool
- 02Generate a matching lint rule
- 03Update the CLAUDE.md annotation block
- 04Run tests to verify the rule
Use cases
- 01Disallow direct imports from a library module
- 02Require the project’s custom logger
- 03Prevent unwrap() in production code
- 04Require withAuth for API routes
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ zernie/ vigiles --skill pr-to-lint-ruleAfter installing, type/pr-to-lint-rulein Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
CLAUDE.mdCLAUDE.md.spec.tsfrontmatter-CLAUDE.mdexperimental-emit/emit-server.mjsREADME.mdrun-emit.mjsscore-emits.mjsexperimental-emit/records/emit-tool.jsonemits-2026-08-13.jsonlprose-baseline-2026-08-13.jsonrate-limit-event.jsontrials-2026-08-13.jsonlharness/agent-loop.harness.mjschecks-dogfood.harness.mjscompiled-hook-inprocess.harness.mjsharness/dogfood/adversarial-gate.eval.mjscode-quality.trigger.eval.mjsdebug-my-harness.trigger.eval.mjsedit-spec.trigger.eval.mjsgenerate-logo.trigger.eval.mjslanding-site.trigger.eval.mjsreview-docs.trigger.eval.mjsreviewer-ab.eval.mjsscreenshot.trigger.eval.mjsship-a-feature.trigger.eval.mjsharness/dogfood/reviewer-ab/prose/.claude-plugin/plugin.jsonharness/dogfood/reviewer-ab/prose/agents/code-reviewer.mdharness/dogfood/reviewer-ab/spec/.claude-plugin/plugin.jsonharness/dogfood/reviewer-ab/spec/agents/code-reviewer.mdcode-reviewer.md.spec.tsDetails
From the project READMEConvert a recurring PR review comment into an automated lint rule.
Arguments
$ARGUMENTS — A natural language description of the pattern to enforce. Examples:
- "we keep telling people not to import directly from antd, use our design system barrel file instead"
- "people forget to use our custom logger instead of console.log"
- "don't use unwrap() in production code, use expect() or proper error handling"
- "API route handlers must use the withAuth wrapper"
Instructions
You are generating an automated lint rule from a recurring code review pattern. Follow these steps:
Step 1: Detect the Project Language and Toolchain
Look at the repository to determine:
- Primary language (JS/TS, Python, Rust, Go, Ruby, etc.)
- Linter in use (ESLint, Ruff, Clippy, golangci-lint, RuboCop, etc.)
- Testing framework (Vitest, Jest, pytest, cargo test, etc.)
- Existing custom rules (to match conventions)
If the language or linter cannot be confidently detected, ask the user which language and linter to target before generating anything.
Step 2: Generate the Lint Rule
Based on the detected (or user-specified) language, generate the appropriate rule type.
For JavaScript/TypeScript, generate an ESLint rule using the AST visitor pattern with meta and create(context).
Step 3: Update CLAUDE.md
Add the annotation block. See docs/spec-format.md for the correct format.
Step 4: Verify
Run npm test to ensure the new rule and tests pass.