Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configures pre-commit hooks for linting, type checking, formatting, and testing. Use when setting up a new project or adding quality gates to an existing one.
.claude/skills/athola-precommit-setup/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 12% | 0% |
Configure a three-layer pre-commit quality system that enforces linting, type checking, and testing before every commit.
per-component quality checks
The system is organised in three layers, each with a different cost / coverage tradeoff:
(50-200ms total). Lints and type-checks every staged file.
lint, typecheck, and test (10-30s total). Only the components touched by the staged files are run.
structure and pattern checks (varies). Catches violations that generic linters miss.
This layering keeps the fast feedback loop fast while still catching the slow / project-specific bugs before they land.
The detailed configuration patterns are in modules; load only the ones you need:
modules/standard-hooks.md: Layer 1 patterns forPython, Rust, and TypeScript (load when configuring base linters).
modules/component-level-hooks.md: Layer 2 monoreposcripts and pre-commit wiring (load when project has multiple components / plugins).
modules/validation-hooks.md: Layer 3 custom hooksand SKIP patterns (load when enforcing project conventions beyond linting).
modules/ci-integration.md: GitHub Actions workflowplus a complete .pre-commit-config.yaml example (load when wiring CI to mirror local checks).
modules/troubleshooting.md: timing tables, cacheclearing, hook-failure recovery (load when hooks are slow or failing).
\\\bash
python3 plugins/attune/scripts/attune_init.py \\ --lang python \\ --name my-project \\ --path .
mkdir -p scripts chmod +x scripts/run-component-.sh \\\
Create pyproject.toml with strict type checking:
\\\toml tool.mypy] python_version = "3.12" warn_return_any = true warn_unused_configs = true disallow_untyped_defs = true strict = true
tool.mypy.overrides]] module = "plugins." strict = true \\\
\\\toml tool.pytest.ini_options] testpaths = "tests"] pythonpath = "src"] addopts = "-v", # Verbose output "--strict-markers", # Strict marker enforcement "--cov=src", # Coverage for src/ "--cov-report=term", # Terminal coverage report ]
markers = "slow: marks tests as slow (deselect with '-m \\"not slow\\"')", "integration: marks tests as integration tests", ] \\\
\\\bash
uv sync --extra dev
uv run pre-commit install
uv run pre-commit run --all-files
git add . git commit -m "feat: add feature"
\\\
For full quality checks (CI/CD, monthly audits):
\\\bash #!/bin/bash
set -e
echo "=== Running Full Quality Checks ==="
./scripts/run-component-lint.sh --all ./scripts/run-component-typecheck.sh --all ./scripts/run-component-tests.sh --all
echo "=== All Quality Checks Passed ===" \\\
Pre-commit hooks run in this fixed order; all must pass for the commit to succeed:
Start with strict settings from the beginning: they are easier to maintain over time. Configure type checking with strict = true in pyproject.toml, set up testing early (include pytest in pre-commit), and document the reason whenever you must skip a hook.
Use a gradual adoption strategy. Start with global checks (Layer 1), then add component-specific checks (Layer 2) once legacy issues are resolved. Use --no-verify only for true emergencies and document why.
Standardize per-component Makefiles for lint, typecheck, and test targets. Centralize common settings in a root pyproject.toml while allowing per-component overrides. Automate change detection so commits stay fast, and use progressive disclosure (summary first, detail on failure).
Skill(attune:project-init): Full project initializationSkill(attune:workflow-setup): GitHub Actions setupSkill(attune:makefile-generation): Generate componentMakefiles
Skill(pensive:shell-review): Audit shell scripts forexit-code and safety issues
hooks (formatting, linting), CI checks (tests, coverage), and PR review gates (code quality, security).
.pre-commit-config.yaml exists at the project root with hooks covering at minimumLayer 1 (whitespace, YAML/TOML/JSON syntax, global linting).
uv run pre-commit run --all-files exits 0 after the configuration is installed,confirming all hooks pass on the current codebase state.
git commit with a staged change triggers the pre-commit hooks automatically (verifiedby uv run pre-commit install exit code 0 and presence of .git/hooks/pre-commit).
--no-verify bypass is absent from the project's documented workflows; if one isfound in existing scripts, it is flagged as a violation rather than silently accepted.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,484 | 14,580 | -12% | 1 | 1 | 0% | 3,006 | 4,515 | +50% | 0 | 0 | — |
case-02 | fail→fail | 17,959 | 16,127 | -10% | 1 | 1 | 0% | 3,206 | 4,600 | +43% | 0 | 0 | — |
case-03 | fail→pass | 21,193 | 12,156 | -43% | 1 | 1 | 0% | 3,830 | 4,055 | +6% | 0 | 0 | — |
case-04 | fail→pass | 14,275 | 10,761 | -25% | 1 | 1 | 0% | 2,198 | 3,255 | +48% | 0 | 0 | — |
case-05 | fail→pass | 18,253 | 11,739 | -36% | 1 | 1 | 0% | 3,004 | 3,622 | +21% | 0 | 0 | — |
case-06 | pass→pass | 11,006 | 4,231 | -62% | 1 | 1 | 0% | 1,543 | 2,244 | +45% | 0 | 0 | — |
case-07 | fail→pass | 11,594 | 1,792 | -85% | 1 | 1 | 0% | 1,736 | 1,951 | +12% | 0 | 0 | — |
case-08 | fail→pass | 12,708 | 3,165 | -75% | 1 | 1 | 0% | 2,102 | 2,167 | +3% | 0 | 0 | — |
case-09 | fail→pass | 11,731 | 2,441 | -79% | 1 | 1 | 0% | 1,779 | 2,072 | +16% | 0 | 0 | — |
case-10 | fail→pass | 8,684 | 2,167 | -75% | 1 | 1 | 0% | 1,525 | 2,027 | +33% | 0 | 0 | — |
case-11 | fail→pass | 12,111 | 2,392 | -80% | 1 | 1 | 0% | 1,845 | 2,093 | +13% | 0 | 0 | — |
case-12 | fail→pass | 13,261 | 5,738 | -57% | 1 | 1 | 0% | 2,115 | 2,652 | +25% | 0 | 0 | — |
case-13 | fail→pass | 11,545 | 5,984 | -48% | 1 | 1 | 0% | 1,821 | 2,661 | +46% | 0 | 0 | — |
case-14 | fail→pass | 14,970 | 6,888 | -54% | 1 | 1 | 0% | 2,211 | 2,727 | +23% | 0 | 0 | — |
case-15 | pass→pass | 10,761 | 5,737 | -47% | 1 | 1 | 0% | 1,895 | 2,710 | +43% | 0 | 0 | — |
case-16 | pass→pass | 9,844 | 4,041 | -59% | 1 | 1 | 0% | 1,751 | 2,398 | +37% | 0 | 0 | — |
case-17 | pass→pass | 7,241 | 3,916 | -46% | 1 | 1 | 0% | 1,307 | 2,381 | +82% | 0 | 0 | — |
case-18 | fail→pass | 22,298 | 9,979 | -55% | 1 | 1 | 0% | 4,312 | 3,526 | -18% | 0 | 0 | — |
case-19 | fail→pass | 3,247 | 2,410 | -26% | 1 | 1 | 0% | 536 | 2,101 | +292% | 0 | 0 | — |
case-20 | fail→fail | 15,311 | 6,695 | -56% | 1 | 1 | 0% | 2,380 | 2,717 | +14% | 0 | 0 | — |
case-21 | fail→pass | 10,239 | 3,152 | -69% | 1 | 1 | 0% | 1,751 | 2,254 | +29% | 0 | 0 | — |
case-22 | fail→fail | 13,033 | 9,252 | -29% | 1 | 1 | 0% | 1,967 | 3,094 | +57% | 0 | 0 | — |
case-23 | fail→pass | 14,579 | 6,755 | -54% | 1 | 1 | 0% | 2,098 | 2,736 | +30% | 0 | 0 | — |
case-24 | fail→pass | 15,928 | 10,637 | -33% | 1 | 1 | 0% | 2,477 | 3,513 | +42% | 0 | 0 | — |
case-25 | fail→pass | 7,237 | 3,719 | -49% | 1 | 1 | 0% | 1,299 | 2,320 | +79% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +72 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.