Skip to main content

setup-pre-commit

Set up Husky pre-commit hooks with lint-staged, Prettier, type checking, and tests in the current repo. Use when adding pre-commit hooks, configuring lint-staged, or adding commit-time formatting/typechecking/testing.

Source facts

Repository
stolinski/s-stack
Last source activity
June 25, 2026 at 16:27
Detected SKILL.md language
English
Stars
90
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
setup-pre-commit
description
Set up Husky pre-commit hooks with lint-staged, Prettier, type checking, and tests in the current repo. Use when adding pre-commit hooks, configuring lint-staged, or adding commit-time formatting/typechecking/testing.
# Setup Pre-Commit Hooks Set up a repo-appropriate Husky pre-commit hook using the existing package manager and scripts. Prefer the smallest change that fits the repo. ## What This Sets Up - Husky pre-commit hook. - `lint-staged` running Prettier on staged files. - Prettier config only if the repo does not already have one. - Existing typecheck/check and test scripts in the pre-commit hook when available. ## Process ### 1. Inspect The Repo Read `package.json` and check for lockfiles: - `package-lock.json` - npm. - `pnpm-lock.yaml` - pnpm. - `yarn.lock` - yarn. - `bun.lock` or `bun.lockb` - bun. Use the package manager already used by the repo. Default to npm only if unclear. Check existing scripts before writing the hook. Prefer, in order: - Type checking: `typecheck`, `check`. - Tests: `test`, `test:unit`. - Formatting: `format`, otherwise `lint-staged` with Prettier. ### 2. Install Dependencies Install these as dev dependencies using the detected package manager: ```text husky lint-staged prettier ``` Skip dependencies already present. ### 3. Initialize Husky Use the package-manager equivalent of Husky init. For npm: ```bash npx husky init ``` This creates `.husky/` and usually adds `prepare: "husky"` to `package.json`. ### 4. Write `.husky/pre-commit` Use the detected package manager's runner. Example for npm: ```bash npx lint-staged npm run typecheck npm run test ``` Adapt the script names to what actually exists in `package.json`. If the repo has no typecheck/check or test script, omit that line and mention it in the final response. Husky v9+ hook files do not need a shebang. ### 5. Configure Lint-Staged Create `.lintstagedrc` only if no lint-staged config already exists: ```json { "*": "prettier --ignore-unknown --write" } ``` If a lint-staged config already exists, preserve it and make the smallest needed edit. ### 6. Configure Prettier Create `.prettierrc` only if no Prettier config exists. Use these defaults: ```json { "useTabs": false, "tabWidth": 2, "printWidth": 80, "singleQuote": false, "trailingComma": "es5", "semi": true, "arrowParens": "always" } ``` If the repo already has a Prettier config, do not replace it. ### 7. Verify Verify the setup before finishing: - `.husky/pre-commit` exists and is executable. - `prepare` script in `package.json` is present. - lint-staged config exists. - Prettier config exists or the repo intentionally relies on defaults. - Run the package-manager equivalent of `lint-staged` if feasible. ## Rules - Do not create a commit unless the user explicitly asks. - Do not overwrite an existing formatting, lint-staged, or hook setup. - If the hook would be too slow because the repo has expensive tests, ask before adding the full test command. - Keep the final response factual: files changed, scripts added, and verification run.
View on GitHub