From code-lint
Run all configured linters across the full project, including whole-project-only linters. Use when user says "/lint", "lint project", or "run linters".
How this skill is triggered — by the user, by Claude, or both
Slash command
/code-lint:lintThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run configured linters across the full project. Includes whole-project-only linters (brakeman, clippy) that don't run in the PostToolUse hook.
Run configured linters across the full project. Includes whole-project-only linters (brakeman, clippy) that don't run in the PostToolUse hook.
/lint — Run all enabled linters on the full project/lint ruby — Run only Ruby linters/lint reek — Run only the reek linter/lint semgrep — Run only Semgrep (tool linter)/lint --fix — Run autofix on all files first, then lintArguments after /lint are parsed as:
--fix → run autofix commands before lintingPROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
PROJECT_HASH=$(echo "$PROJECT_DIR" | tr '/' '-' | sed 's/^-//')
CONFIG_FILE="$HOME/.claude/code-lint/$PROJECT_HASH/config.json"
If no config exists, tell the user to run /setup-lint first.
Read and parse the config JSON.
Parse arguments to determine what to run:
--fix → enable autofix modeFor each enabled linter in scope:
Find all matching files (using file_patterns), excluding paths that match exclude_patterns. Run the linter on all matching files at once (most linters accept multiple files or directories).
cd "$PROJECT_DIR"
# If --fix mode, run autofix first
bundle exec rubocop -A --fail-level=error .
# Then run the lint check
bundle exec rubocop .
Run these against the project root:
cd "$PROJECT_DIR"
bundle exec brakeman -q
cargo clippy -- -D warnings
After running per-language linters, check the tool_linters section of the config. For each enabled tool linter:
If the argument to /lint matches a tool linter name (e.g. /lint semgrep), run only that tool linter.
For Semgrep, build the command with configured rulesets:
cd "$PROJECT_DIR"
# Build --config flags from rulesets array
# e.g. rulesets: ["p/default", "p/security-audit"] → --config p/default --config p/security-audit
semgrep scan --quiet --config p/default --config p/security-audit .
# With --fix mode:
semgrep scan --autofix --quiet --config p/default .
Respect exclude_patterns — pass each value as a --exclude flag (these are path prefixes/globs, not regex):
semgrep scan --quiet --config p/default --exclude "node_modules/" --exclude "vendor/" .
For each linter, capture:
Group results by language and linter:
## Lint Results
**Project:** /path/to/project
### Ruby (42 files)
**rubocop** — 3 issues
app/models/user.rb:15:5 Style/GuardClause: Use guard clause
app/models/user.rb:28:3 Metrics/MethodLength: Method too long (15/10)
app/services/auth.rb:8:1 Layout/EmptyLines: Extra blank line
**reek** — 1 issue
app/models/user.rb:10 FeatureEnvy: process refers to config more than self
**brakeman** — No issues
### Shell (5 files)
**shellcheck** — No issues
---
**Summary:** 4 issues found (3 rubocop, 1 reek)
If issues were found and autofix is available:
Read the relevant reference docs for fix patterns:
${CLAUDE_PLUGIN_ROOT}/references/ruby-patterns.md${CLAUDE_PLUGIN_ROOT}/references/js-ts-patterns.md${CLAUDE_PLUGIN_ROOT}/references/python-patterns.md${CLAUDE_PLUGIN_ROOT}/references/go-patterns.md${CLAUDE_PLUGIN_ROOT}/references/rust-patterns.md${CLAUDE_PLUGIN_ROOT}/references/markdown-patterns.md${CLAUDE_PLUGIN_ROOT}/references/html-patterns.md${CLAUDE_PLUGIN_ROOT}/references/shell-patterns.md${CLAUDE_PLUGIN_ROOT}/references/semgrep-patterns.mdIf CLAUDE_PLUGIN_ROOT is not set, find references relative to this SKILL.md (two directories up: ../../references/).
/setup-lintnpx claudepluginhub ericboehs/claude-plugins --plugin code-lintAutomates format-lint-resolve pipelines for code editing tasks. Discovers linters from pyproject.toml/.pre-commit-config.yaml/package.json, fixes ruff/mypy/bandit issues, ensures quality before completion.
Configures modern linting: Biome for JavaScript/TypeScript, Ruff for Python, Clippy for Rust. Detects projects, migrates from ESLint/Flake8, checks versions, adds pre-commit integration.