plugins/attune/skills/precommit-setup/SKILL.md
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.
npx skillsauth add athola/claude-night-market precommit-setupInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Configure a three-layer pre-commit quality system that enforces linting, type checking, and testing before every commit.
The system is organised in three layers, each with a different cost / coverage tradeoff:
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 for
Python, Rust, and TypeScript (load when configuring base
linters).modules/component-level-hooks.md: Layer 2 monorepo
scripts and pre-commit wiring (load when project has
multiple components / plugins).modules/validation-hooks.md: Layer 3 custom hooks
and SKIP patterns (load when enforcing project conventions
beyond linting).modules/ci-integration.md: GitHub Actions workflow
plus a complete .pre-commit-config.yaml example (load
when wiring CI to mirror local checks).modules/troubleshooting.md: timing tables, cache
clearing, 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 component
MakefilesSkill(pensive:shell-review): Audit shell scripts for
exit-code and safety issues.pre-commit-config.yaml exists at the project root with hooks covering at minimum
Layer 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 (verified
by 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 is
found in existing scripts, it is flagged as a violation rather than silently accepted.data-ai
Models a business in its own language. Use when the domain has real business rules to capture.
research
Generate diverse solution candidates with category-spanning ideation methods and rotation. Use when stuck on a design or fighting repetitive LLM output.
development
Generates and self-executes a diff-derived test plan for a PR. Use when validating PR changes before merge. Do not use for code review; use sanctum:pr-review.
development
Ramps implementation ambition a notch only after the prior increment is understood. Use when building a feature you must understand, not just ship.