From vigiles
Converts recurring PR review comments into automated lint rules with tests and config for ESLint, Ruff, RuboCop, Clippy, Stylelint, and more. Detects language/toolchain automatically.
npx claudepluginhub zernie/vigilesThis skill uses the workspace's default tool permissions.
Convert a recurring PR review comment into an automated lint rule.
Sets up ast-grep in TypeScript codebases with rules detecting anti-patterns, enforcing best practices, and preventing bugs. Creates sgconfig.yml, rule files, and tests for structural linting, legacy bans, and ratchet gates.
Reviews PR changes for correctness, security, performance; generates checklist for tests, rollout, compatibility; proposes CLAUDE.md rule updates.
Sets up strict production-grade ESLint configuration for TypeScript projects and systematically fixes all linting issues via auto-fix and manual remediation.
Share bugs, ideas, or general feedback.
Convert a recurring PR review comment into an automated lint rule.
$ARGUMENTS — A natural language description of the pattern to enforce. Examples:
You are generating an automated lint rule from a recurring code review pattern. Follow these steps:
Look at the repository to determine:
If the language or linter cannot be confidently detected (e.g. polyglot repo, no linter config, or multiple candidates), ask the user which language and linter to target before generating anything.
Based on the detected (or user-specified) language, generate the appropriate rule type:
Read the linter-specific reference doc before generating. Each doc covers existing plugins to check first, rule/lint anatomy, AST patterns, auto-fix safety, testing, and edge cases.
| Language | Linter | Reference doc |
|---|---|---|
| JavaScript/TypeScript | ESLint | ../linter-docs/eslint.md |
| Python | Ruff | ../linter-docs/ruff.md |
| Python | Pylint | ../linter-docs/pylint.md |
| Ruby | RuboCop | ../linter-docs/rubocop.md |
| Rust | Clippy | ../linter-docs/clippy.md |
| CSS | Stylelint | ../linter-docs/stylelint.md |
For all linters, follow this order:
no-restricted-* or equivalent rules that handle one-off patterns without custom codeIf a custom rule is needed, the reference doc provides: rule anatomy, AST node cheat sheet, auto-fix/suggest patterns, testing examples, and registration instructions.
No linter doc yet. Generate an analyzer using golang.org/x/tools/go/analysis with analysistest tests.
Generate the most idiomatic linting approach with test cases and integration instructions.
If the project uses v2 specs (has CLAUDE.md.spec.ts):
Add an enforce() rule to the spec file:
"<rule-id>": enforce("<linter>/<rule-name>", "<why>"),
Then run npx vigiles compile to regenerate CLAUDE.md.
If the project uses v1 (hand-written CLAUDE.md):
Append an annotation block:
### <Rule title — imperative, concise>
**Enforced by:** `<linter>/<rule-name>`
**Why:** <One sentence explaining the architectural reason>
Show the user:
Ask the user if they want you to write the files and update the spec/CLAUDE.md.