{"id":"f551461e-fb83-43d7-9494-efc414526780","shortId":"Hg9rRW","kind":"skill","title":"setup-pre-commit","tagline":"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","description":"# Setup Pre-Commit Hooks\n\n## Pre-loaded context\n\nBefore proceeding, use the Read tool to read `package.json`, and Glob tool to detect:\n- Lock file: `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lockb`\n- Prettier config: `.prettierrc`, `.prettierrc.*`, `prettier.config.*`\n\n## What This Sets Up\n\n- **Husky** pre-commit hook\n- **lint-staged** running Prettier on all staged files\n- **Prettier** config (if missing)\n- **typecheck** and **test** scripts in the pre-commit hook (if they exist)\n\n## Workflow\n\n1. **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.\n\n2. **Install devDependencies**:\n   ```\n   husky lint-staged prettier\n   ```\n\n3. **Initialize Husky**:\n   ```bash\n   npx husky init\n   ```\n   This creates `.husky/` dir and adds `prepare: \"husky\"` to package.json.\n\n4. **Create `.husky/pre-commit`** (no shebang needed for Husky v9+):\n   ```\n   npx lint-staged\n   <pm> run typecheck\n   <pm> run test\n   ```\n   Replace `<pm>` with detected package manager. If repo has no `typecheck` script in package.json, omit that line and tell the user. Same for `test`.\n\n5. **Create `.lintstagedrc`**:\n   ```json\n   {\n     \"*\": \"prettier --ignore-unknown --write\"\n   }\n   ```\n\n6. **Create `.prettierrc`** (only if no Prettier config exists):\n   ```json\n   {\n     \"useTabs\": false,\n     \"tabWidth\": 2,\n     \"singleQuote\": true,\n     \"trailingComma\": \"all\"\n   }\n   ```\n\n7. **Verify**:\n   - `.husky/pre-commit` exists and is executable\n   - `.lintstagedrc` exists\n   - `prepare` script in package.json is `\"husky\"`\n   - Prettier config exists\n   - Run `npx lint-staged` to confirm it works\n\n8. **Commit** all changed/created files: `Add pre-commit hooks (husky + lint-staged + prettier)`\n   This runs through the new pre-commit hooks -- a good smoke test.\n\n## Rules\n\n- Never overwrite existing Prettier config\n- Never overwrite existing `.husky/pre-commit` without asking user first\n- Always use detected package manager consistently\n- Husky v9+ doesn't need shebangs in hook files\n- `prettier --ignore-unknown` skips files Prettier can't parse (images, etc.)\n- Pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests\n\n## Error Handling\n\n- No `package.json` found -- report and stop\n- Existing `.husky/pre-commit` -- ask user before overwriting\n- `husky init` fails -- check node_modules exists, suggest running install first\n- `npx lint-staged` verification fails -- check Prettier is installed, check `.lintstagedrc` syntax\n- No `typecheck` or `test` scripts -- omit from hook, tell user which were skipped\n\n## See Also\n\n- [validate-code](../validate-code/SKILL.md) -- run lint/typecheck/tests manually\n- [commit](../commit/SKILL.md) -- create git commits following repo style","tags":["setup","pre","commit","agent","skills","helderberto","agent-skills","ai-tools","antigravity","claude-code","cursor","developer-tools"],"capabilities":["skill","source-helderberto","skill-setup-pre-commit","topic-agent-skills","topic-ai-tools","topic-antigravity","topic-claude-code","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-markdown","topic-plugin","topic-sdlc","topic-skills","topic-tracer-bullet"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/helderberto/agent-skills/setup-pre-commit","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add helderberto/agent-skills","source_repo":"https://github.com/helderberto/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (2,819 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:09:14.707Z","embedding":null,"createdAt":"2026-05-18T13:14:54.946Z","updatedAt":"2026-05-18T19:09:14.707Z","lastSeenAt":"2026-05-18T19:09:14.707Z","tsv":"'/commit/skill.md':410 '/validate-code/skill.md':405 '1':124 '2':144,231 '3':152 '4':169 '5':209 '6':218 '7':236 '8':263 'add':26,164,268 'also':401 'alway':305 'ask':24,302,359 'bash':155 'bun':138 'bun.lockb':82,137 'changed/created':266 'check':18,366,380,384 'code':404 'commit':4,10,29,36,44,57,95,118,264,271,285,334,409,413 'commit-tim':43 'config':84,107,225,252,296 'configur':37 'confirm':260 'consist':310 'context':62 'creat':160,170,210,219,411 'default':139 'detect':76,125,188,307 'devdepend':146 'dir':162 'doesn':313 'error':349 'etc':331 'execut':242 'exist':122,226,239,244,253,294,299,357,369 'fail':365,379 'fals':229 'fast':340 'file':78,105,130,267,319,325 'first':304,339,373 'follow':414 'formatting/typechecking/testing':46 'found':353 'full':345 'git':412 'glob':73 'good':288 'handl':350 'hook':11,30,58,96,119,272,286,318,394 'huski':7,32,92,147,154,157,161,166,176,250,273,311,363 'husky/pre-commit':171,238,300,358 'ignor':215,322 'ignore-unknown':214,321 'imag':330 'init':158,364 'initi':153 'instal':145,372,383 'json':212,227 'line':201 'lint':14,39,98,149,180,257,275,337,376 'lint-stag':13,38,97,148,179,256,274,336,375 'lint/typecheck/tests':407 'linter':52 'lintstagedrc':211,243,385 'load':61 'lock':77,129 'manag':127,190,309 'manua':53 'manual':408 'miss':109 'modul':368 'need':174,315 'never':292,297 'new':282 'node':367 'npm':132,141 'npx':156,178,255,374 'omit':199,392 'overwrit':293,298,362 'packag':126,189,308 'package-lock.json':79,131 'package.json':71,168,198,248,352 'pars':329 'pnpm':134 'pnpm-lock.yaml':80,133 'pre':3,9,28,35,56,60,94,117,270,284,333 'pre-commit':8,27,34,55,93,116,269,283,332 'pre-load':59 'prepar':165,245 'prettier':16,83,101,106,151,213,224,251,277,295,320,326,381 'prettier.config':87 'prettierrc':85,86,220 'proceed':64 'read':67,70 'replac':186 'repo':192,415 'report':354 'rule':291 'run':51,100,182,184,254,279,335,371,406 'script':113,196,246,391 'see':400 'set':5,90 'setup':2,31,33,54 'setup-pre-commit':1 'shebang':173,316 'singlequot':232 'skill' 'skill-setup-pre-commit' 'skip':324,399 'smoke':289 'source-helderberto' 'stage':15,40,99,104,150,181,258,276,338,342,377 'staged-on':341 'stop':356 'style':416 'suggest':370 'syntax':386 'tabwidth':230 'tell':203,395 'test':20,112,185,208,290,348,390 'time':45 'tool':68,74 'topic-agent-skills' 'topic-ai-tools' 'topic-antigravity' 'topic-claude-code' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-markdown' 'topic-plugin' 'topic-sdlc' 'topic-skills' 'topic-tracer-bullet' 'trailingcomma':234 'true':233 'type':17 'typecheck':110,183,195,346,388 'unclear':143 'unknown':216,323 'use':21,49,65,306 'user':23,205,303,360,396 'usetab':228 'v9':177,312 'valid':403 'validate-cod':402 'verif':378 'verifi':237 'want':42 'without':301 'work':262 'workflow':123 'write':217 'yarn':136 'yarn.lock':81,135","prices":[{"id":"2677a51d-60d5-47da-a54f-fb9bf5533d27","listingId":"f551461e-fb83-43d7-9494-efc414526780","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"helderberto","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:54.946Z"}],"sources":[{"listingId":"f551461e-fb83-43d7-9494-efc414526780","source":"github","sourceId":"helderberto/agent-skills/setup-pre-commit","sourceUrl":"https://github.com/helderberto/agent-skills/tree/main/skills/setup-pre-commit","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:54.946Z","lastSeenAt":"2026-05-18T19:09:14.707Z"}],"details":{"listingId":"f551461e-fb83-43d7-9494-efc414526780","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"helderberto","slug":"setup-pre-commit","github":{"repo":"helderberto/agent-skills","stars":8,"topics":["agent-skills","ai","ai-tools","antigravity","claude-code","cursor","developer-tools","gemini-cli","markdown","plugin","sdlc","skills","tracer-bullet"],"license":"mit","html_url":"https://github.com/helderberto/agent-skills","pushed_at":"2026-05-14T11:37:47Z","description":"My personal SDLC toolbelt for AI coding agents — PRD to ship.","skill_md_sha":"049d428ef02cd191b12b341b9fffee1f1b2c69b9","skill_md_path":"skills/setup-pre-commit/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/helderberto/agent-skills/tree/main/skills/setup-pre-commit"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"setup-pre-commit","description":"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 manually or writing tests."},"skills_sh_url":"https://skills.sh/helderberto/agent-skills/setup-pre-commit"},"updatedAt":"2026-05-18T19:09:14.707Z"}}