setup-pre-commit
Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests. Use when user asks to "add pre-commit hooks", "setup husky", "setup pre-commit", "configure lint-staged", or wants commit-time formatting/typechecking/testing. Don't use for running linters manua
What it does
Setup Pre-Commit Hooks
Pre-loaded context
Before proceeding, use the Read tool to read package.json, and Glob tool to detect:
- Lock file:
package-lock.json,pnpm-lock.yaml,yarn.lock,bun.lockb - Prettier config:
.prettierrc,.prettierrc.*,prettier.config.*
What This Sets Up
- Husky pre-commit hook
- lint-staged running Prettier on all staged files
- Prettier config (if missing)
- typecheck and test scripts in the pre-commit hook (if they exist)
Workflow
-
Detect package manager from lock file:
package-lock.json(npm),pnpm-lock.yaml(pnpm),yarn.lock(yarn),bun.lockb(bun). Default to npm if unclear. -
Install devDependencies:
husky lint-staged prettier -
Initialize Husky:
npx husky initThis creates
.husky/dir and addsprepare: "husky"to package.json. -
Create
.husky/pre-commit(no shebang needed for Husky v9+):npx lint-staged <pm> run typecheck <pm> run testReplace
<pm>with detected package manager. If repo has notypecheckscript in package.json, omit that line and tell the user. Same fortest. -
Create
.lintstagedrc:{ "*": "prettier --ignore-unknown --write" } -
Create
.prettierrc(only if no Prettier config exists):{ "useTabs": false, "tabWidth": 2, "singleQuote": true, "trailingComma": "all" } -
Verify:
.husky/pre-commitexists and is executable.lintstagedrcexistspreparescript in package.json is"husky"- Prettier config exists
- Run
npx lint-stagedto confirm it works
-
Commit all changed/created files:
Add pre-commit hooks (husky + lint-staged + prettier)This runs through the new pre-commit hooks -- a good smoke test.
Rules
- Never overwrite existing Prettier config
- Never overwrite existing
.husky/pre-commitwithout asking user first - Always use detected package manager consistently
- Husky v9+ doesn't need shebangs in hook files
prettier --ignore-unknownskips files Prettier can't parse (images, etc.)- Pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests
Error Handling
- No
package.jsonfound -- report and stop - Existing
.husky/pre-commit-- ask user before overwriting husky initfails -- check node_modules exists, suggest running install firstnpx lint-stagedverification fails -- check Prettier is installed, check.lintstagedrcsyntax- No
typecheckortestscripts -- omit from hook, tell user which were skipped
See Also
- validate-code -- run lint/typecheck/tests manually
- commit -- create git commits following repo style
Capabilities
Install
Quality
deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (2,819 chars)