linter-docs — Claude Code skill: deep linter reference
A reference for rules in ESLint, Ruff, Pylint, RuboCop, Stylelint and Clippy. Use it when writing or debugging a vigiles enforce() rule.
npx skills add zernie/vigiles --skill linter-docs -a claude-codeWhat linter-docs does
The skill opens a per-linter file with exact rule names, AST selectors, config details and auto-fix behaviour. Six files ship inside: eslint.md, ruff.md, pylint.md, rubocop.md, stylelint.md, clippy.md. ESLint gets a plugin table and type-aware rules, Ruff covers 800+ reimplemented rules plus selection in pyproject, Pylint covers its plugin table and the astroid AST, RuboCop covers gems and the node pattern DSL, Stylelint covers the PostCSS AST and SCSS, Clippy covers lint groups and configuration.
This is a reference, not an action. The skill carries disable-model-invocation: true, so it never fires on its own — you open the file you need by hand. Reach for it when you want the exact rule name, or when a rule is reported missing or disabled and you need to know why. The strengthen and edit-spec skills read these files when matching a guidance rule to a real linter rule.
JVM and Go linters — detekt, ktlint, Checkstyle, golangci-lint — plus Cedar are cross-referenced by enforce() but have no deep-dive file here. Their capabilities and known limits live in docs/linter-support.md. Two limits worth knowing before you dig: ktlint is format-only, and Checkstyle enabled-state is whitelist-only. Writing a rule for Go or JVM? Skip this skill and go straight to docs/linter-support.md.
What it helps with
- find the exact ESLint rule name for a case
- work out why vigiles reports a rule as disabled
- configure Ruff rule selection in pyproject
- get the node pattern DSL right in RuboCop
- match a guidance rule to a real linter rule
Example prompts for the agent
- Open
eslint.mdand find the rule that bansanyin function arguments - I need to write an
enforce()rule for Ruff — show me how rule selection works inpyproject - Why does vigiles treat this Pylint rule as missing? Check
pylint.md
How to install linter-docs
1Skills CLI (Vercel)
npx skills add zernie/vigiles --skill linter-docs -a claude-code2Manually: put the files in place
~/.claude/skills/linter-docs/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/linter-docs/
1Skills CLI (Vercel)
npx skills add zernie/vigiles --skill linter-docs -a codex2Manually: put the files in place
.agents/skills/linter-docs/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add zernie/vigiles --skill linter-docs -a cursor2Manually: put the files in place
.cursor/skills/linter-docs/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install zernie/vigiles linter-docs2Manually: put the files in place
.github/skills/linter-docs/SKILL.md1Skills CLI (Vercel)
npx skills add zernie/vigiles --skill linter-docs -a gemini-cli2Platform CLI
gemini skills install https://github.com/zernie/vigiles --path skills/linter-docsManually: put the files in place
.devin/skills/linter-docs/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add zernie/vigiles --skill linter-docs -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about linter-docs
How do I install linter-docs in Claude?
Run npx skills add zernie/vigiles --skill linter-docs -a claude-code. The skill file then lands at ~/.claude/skills/linter-docs/SKILL.md.
What does linter-docs do?
It gives you rule names, AST selectors, config and auto-fix details for six linters, so you can author and debug vigiles enforce() rules.
Does the skill run on its own?
No. It sets disable-model-invocation: true, so it acts as a reference you open manually.
Source text
SKILL.md · MIT
--- name: linter-docs description: Deep linter reference for authoring or debugging a vigiles enforce() rule — plugin tables, AST selectors, type-aware rules, auto-fix, and edge cases for ESLint, Ruff, Pylint, RuboCop, Stylelint, and Clippy. Use when you need the exact rule name or config for a specific linter, not for running a linter. (JVM/Go linters — detekt, ktlint, Checkstyle, golangci-lint — and Cedar have no deep-dive file yet; their reference lives in docs/linter-support.md.) disable-model-invocation: true --- Reference material for the linters vigiles cross-references. Open the file for the linter you're working with when you need exact rule names, AST selectors, or config details to author an `enforce()` rule (or diagnose why one is reported missing or disabled). | Linter | Reference | | --------- | -------------------------------------------------------------------------------------- | | ESLint | [`eslint.md`](eslint.md) — plugin table, AST selectors, type-aware rules, auto-fix | | Ruff | [`ruff.md`](ruff.md) — 800+ reimplemented rules, selection, auto-fix, pyproject config | | Pylint | [`pylint.md`](pylint.md) — plugin table, astroid AST, type inference, custom checkers | | RuboCop | [`rubocop.md`](rubocop.md) — gem table, node pattern DSL, auto-correct, custom cops | | Stylelint | [`stylelint.md`](stylelint.md) — plugin table, PostCSS AST, custom rules, SCSS | | Clippy | [`clippy.md`](clippy.md) — Rust lint groups and configuration | **JVM/Go linters (detekt, ktlint, Checkstyle, golangci-lint) and Cedar** are cross-referenced by `enforce()` but have no deep-dive file here yet — their capabilities, config surfaces, and known limits (e.g. ktlint is format-only, Checkstyle enabled-state is whitelist-only) are documented in [`docs/linter-support.md`](../../docs/linter-support.md). These are read by the `strengthen` and `edit-spec` skills when matching a guidance rule to a real linter rule. This skill is user-invoked (a reference, not an action), so it never fires on its own — open the relevant file directly.
© zernie · MIT · zernie/vigiles