Multi-language code quality gate with auto-detection and linters.
npx skills add https://github.com/notque/vexjoy-agent --skill universal-quality-gate
Language-agnostic code quality checking system. Automatically detects project languages via marker files and runs appropriate linters, formatters, and static analysis tools for each detected language.
This skill implements a Detect, Check, Report pattern for multi-language code quality enforcement:
Key Principles:
| Language | Marker Files | Tools |
|----------|--------------|-------|
| Python | pyproject.toml, requirements.txt | ruff, mypy, bandit |
| Go | go.mod | gofmt, golangci-lint, go vet |
| JavaScript | package.json | eslint, biome |
| TypeScript | tsconfig.json | tsc, eslint, biome |
| Rust | Cargo.toml | clippy, cargo fmt |
| Ruby | Gemfile | rubocop |
| Java | pom.xml, build.gradle | PMD |
| Shell | *.sh, *.bash | shellcheck |
| YAML | *.yml, *.yaml | yamllint |
| Markdown | *.md | markdownlint |
Run the quality gate check against the current project:
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py
This command automatically:
For pre-commit validation (fastest):
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --staged
Checks only git-staged files, enabling rapid feedback on recent changes.
For auto-fixing (when issues are found):
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --fix
Auto-corrects fixable issues (formatting, imports, etc.), then re-run Step 1 to verify.
For focused checking (single language):
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --lang python
Narrows scope when debugging language-specific issues.
For verbose details:
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py -v
Shows expanded diagnostic output for troubleshooting.
PASSED output:
============================================================
Quality Gate: PASSED
============================================================
Languages: python, javascript
Files: 15
Tool Results:
[+] python/lint: passed
[+] python/format: passed
[-] python/typecheck: skipped (Optional tool not installed)
[+] javascript/lint: passed
[+] javascript/format: passed
Quality gate passed: 4/5 tools OK (1 skipped)
Gate passes when all required tools succeed. Skipped optional tools do not block.
FAILED output:
============================================================
Quality Gate: FAILED
============================================================
Languages: python, go
Files: 8
Tool Results:
[X] python/lint: FAILED
hooks/example.py:42:1: F841 local variable 'x' is assigned but never used
hooks/example.py:56:1: F401 'os' imported but unused
[+] python/format: passed
[+] go/format: passed
[X] go/lint: FAILED
main.go:15:2: S1000: should use for range instead of for select
Pattern Matches:
[WARNING] hooks/example.py:78: Silent exception handler - add explanatory comment
Quality gate failed: 2 tool(s) reported issues, 1 error pattern(s)
Review marked failures [X] first. Pattern matches [WARNING] are informational.
For auto-fixable issues:
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --fixgit diff to verify correctnessFor manual fixes:
Once quality gate passes with zero required-tool failures:
Pre-commit validation (fastest path):
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --staged
# If fails → fix issues → re-run
# If passes → git commit
Full repo audit:
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py
# Review all findings by language
# Fix by category: required failures → warnings → patterns
# Re-run after each batch of fixes
Language-specific validation:
python3 ~/.claude/skills/code-quality/universal-quality-gate/scripts/run_quality_gate.py --lang python
# Use when debugging a specific language's toolchain
# Narrows output and speeds iteration
To add language support without editing the script, modify the language registry:
// hooks/lib/language_registry.json
{
"new_language": {
"extensions": [".ext"],
"markers": ["config.file"],
"tools": {
"lint": {
"cmd": "linter {files}",
"fix_cmd": "linter --fix {files}",
"description": "Language linter",
"required": true
}
}
}
}
The quality gate script automatically detects and uses new registry entries on next run.
Cause: No changed files detected or no language markers found in project
Solution:
--staged, ensure files are staged with git addCause: A required linter tool is not installed on the system
Solution:
pip install ruff mypy banditgo install github.com/golangci/golangci-lint/cmd/golangci-lint@latestnpm install --save-dev eslint biomecargo install clippy (usually pre-installed with rustup)language_registry.json if you cannot install itCause: Tool taking longer than 60-second timeout (usually large file sets or performance issues)
Solution:
--staged to check only changed files instead of the entire project--lang to check one language at a timeCause: Multiple conflicting linter configurations in the project (e.g., .eslintrc and biome.json)
Solution:
language_registry.jsonPattern Matches like "Silent exception handler" or "Debug print" are informational warnings. They do not fail the gate. Review them and decide whether to fix:
[WARNING] entries identify failure modes but don't block commits--no-patterns to skip pattern scanning if these are not relevantWhen a tool is marked optional and not installed:
[-] language/tool: skipped (Optional tool not installed)hooks/lib/
quality_gate.py # Shared core library
language_registry.json # Language configurations
skills/code-quality/universal-quality-gate/
SKILL.md # This file
scripts/
run_quality_gate.py # Skill entry point (thin wrapper)
This skill uses the shared quality gate library from hooks/lib/ for on-demand code quality checking.
Multi-language linting: Language configurations in hooks/lib/language_registry.json
Related skills:
code-linting for single-language lint/format taskssystematic-code-review for comprehensive code review beyond lintingtest-driven-development for full validation with testsKey principle: Quality gates catch syntax and style issues. They do not replace:
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation
Use when completing tasks, implementing major features, or before merging to verify work meets requirements
Execute git commit with conventional commit message analysis, intelligent staging, and message generation. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping
Comprehensive GitHub code review with AI-powered swarm coordination
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid overcomplication, make surgical changes, surface assumptions, and define verifiable success criteria.
Use this skill to review code. It supports both local changes (staged or working tree) and remote Pull Requests (by ID or URL). It focuses on correctness, maintainability, and adherence to project standards.
Refactor bloated AGENTS.md, CLAUDE.md, or similar agent instruction files to follow progressive disclosure principles. Splits monolithic files into organized, linked documentation.
Create high-quality git commits: review/stage intended changes, split into logical commits, and write clear commit messages (including Conventional Commits). Use when the user asks to commit, craft a commit message, stage changes, or split work into multiple commits.
Take notque/universal-quality-gate from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip, npm, cargo, go.
Without those the skill loads but fails at the first command.