setup-pre-commit
Files in this skill
Section titled “Files in this skill”| File | What it does | Flags |
|---|---|---|
| agents/openai.yaml | Codex metadata for the skill: display name “Setup Pre-Commit” and short description “Add pre-commit quality checks”. |
name: setup-pre-commitdescription: Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.Setup Pre-Commit Hooks
Section titled “Setup Pre-Commit Hooks”What This Sets Up
Section titled “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
1. Detect package manager
Section titled “1. Detect package manager”Check for package-lock.json (npm), pnpm-lock.yaml (pnpm), yarn.lock (yarn), bun.lockb (bun). Use whichever is present. Default to npm if unclear.
2. Install dependencies
Section titled “2. Install dependencies”Install as devDependencies:
husky lint-staged prettier3. Initialize Husky
Section titled “3. Initialize Husky”npx husky initThis creates .husky/ dir and adds prepare: "husky" to package.json.
4. Create .husky/pre-commit
Section titled “4. Create .husky/pre-commit”Write this file (no shebang needed for Husky v9+):
npx lint-stagednpm run typechecknpm run testAdapt: Replace npm with detected package manager. If repo has no typecheck or test script in package.json, omit those lines and tell the user.
5. Create .lintstagedrc
Section titled “5. Create .lintstagedrc”{ "*": "prettier --ignore-unknown --write"}6. Create .prettierrc (if missing)
Section titled “6. Create .prettierrc (if missing)”Only create if no Prettier config exists. Use these defaults:
{ "useTabs": false, "tabWidth": 2, "printWidth": 80, "singleQuote": false, "trailingComma": "es5", "semi": true, "arrowParens": "always"}7. Verify
Section titled “7. Verify”-
.husky/pre-commitexists and is executable -
.lintstagedrcexists -
preparescript in package.json is"husky" -
prettierconfig exists - Run
npx lint-stagedto verify it works
8. Commit
Section titled “8. Commit”Stage all changed/created files and commit with message: Add pre-commit hooks (husky + lint-staged + prettier)
This will run through the new pre-commit hooks: a good smoke test that everything works.
- Husky v9+ doesn’t need shebangs in hook files
prettier --ignore-unknownskips files Prettier can’t parse (images, etc.)- The pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests
Original Markdown source
---name: setup-pre-commitdescription: Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing.---
# Setup Pre-Commit Hooks
## 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
## Steps
### 1. Detect package manager
Check for `package-lock.json` (npm), `pnpm-lock.yaml` (pnpm), `yarn.lock` (yarn), `bun.lockb` (bun). Use whichever is present. Default to npm if unclear.
### 2. Install dependencies
Install as devDependencies:
```husky lint-staged prettier```
### 3. Initialize Husky
```bashnpx husky init```
This creates `.husky/` dir and adds `prepare: "husky"` to package.json.
### 4. Create `.husky/pre-commit`
Write this file (no shebang needed for Husky v9+):
```npx lint-stagednpm run typechecknpm run test```
**Adapt**: Replace `npm` with detected package manager. If repo has no `typecheck` or `test` script in package.json, omit those lines and tell the user.
### 5. Create `.lintstagedrc`
```json{ "*": "prettier --ignore-unknown --write"}```
### 6. Create `.prettierrc` (if missing)
Only create if no Prettier config exists. Use these defaults:
```json{ "useTabs": false, "tabWidth": 2, "printWidth": 80, "singleQuote": false, "trailingComma": "es5", "semi": true, "arrowParens": "always"}```
### 7. Verify
- [ ] `.husky/pre-commit` exists and is executable- [ ] `.lintstagedrc` exists- [ ] `prepare` script in package.json is `"husky"`- [ ] `prettier` config exists- [ ] Run `npx lint-staged` to verify it works
### 8. Commit
Stage all changed/created files and commit with message: `Add pre-commit hooks (husky + lint-staged + prettier)`
This will run through the new pre-commit hooks: a good smoke test that everything works.
## Notes
- Husky v9+ doesn't need shebangs in hook files- `prettier --ignore-unknown` skips files Prettier can't parse (images, etc.)- The pre-commit runs lint-staged first (fast, staged-only), then full typecheck and tests