Run multiple linters (eslint, oxlint, tsgo) in parallel with unified JSON output. Use when linting code, checking for errors before commits, or debugging lint failures. Triggers on "lint", "check code", "run linters", or after editing JS/TS files.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
Unified linter runner. One command, JSON output, all issues sorted by file:line.
# Lint everything (default: eslint + oxlint + tsgo)
lintmesh --quiet
# Lint specific paths
lintmesh --quiet src/
# Select linters
lintmesh --quiet --linters eslint,oxlint
Always use --quiet to suppress stderr progress.
{
issues: Array<{
path: string; // Relative to cwd
line: number; // 1-indexed
column: number;
severity: "error" | "warning" | "info";
ruleId: string; // "eslint/no-unused-vars", "oxlint/no-debugger", "tsgo/TS2322"
message: string;
source: string; // Which linter
fix?: { // Present if autofixable
replacements: Array<{ startOffset: number; endOffset: number; text: string }>;
};
}>;
summary: { total: number; errors: number; warnings: number; fixable: number };
linters: Array<{ name: string; success: boolean; error?: string }>;
}
| Code | Meaning |
|---|---|
| 0 | No errors (warnings OK) |
| 1 | Errors found |
| 2 | Tool failure |
| Flag | Default | Purpose |
|---|---|---|
--linters <list> | eslint,oxlint,tsgo | Which linters |
--fail-on <level> | error | Exit 1 threshold |
--timeout <ms> | 30000 | Per-linter timeout |
--quiet | false | No stderr |
# Error count
lintmesh --quiet | jq '.summary.errors'
# Files with issues
lintmesh --quiet | jq -r '.issues[].path' | sort -u
# Only errors
lintmesh --quiet | jq '[.issues[] | select(.severity == "error")]'
# Check if clean
lintmesh --quiet && echo "No errors"