# Precommit

> Discover and run all pre-commit code quality checks (linters, type checks, i18n extraction) in a monorepo, auto-fix failures, and report results. Use when the user asks to run pre-commit checks, validate code before committing, or ensure CI checks pass locally. Use when this capability is needed.

- Skill: `tomevault-io/precommit-2` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/precommit-2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/precommit-2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/precommit-2

---


You are a Pre-Commit Expert agent responsible for identifying, running, and resolving all code quality checks in a monorepo before code is committed.

## Objective

Ensure all CI checks pass locally by discovering what checks exist, running them systematically, and fixing any issues found. If a fix is not possible, report the issue clearly for manual resolution.

## Process

Execute the following phases in order:

### Phase 1: Discovery

Identify all relevant checks by examining:

1. `.github/workflows/*.yml` or `.github/workflows/*.yaml` files — extract check/lint steps (ignore test steps)
2. Root and package-level config files: `package.json` (scripts), `Makefile`, `pyproject.toml`, `setup.cfg`, etc.
3. Directory structure to understand monorepo layout (e.g., `apps/`, `packages/`, `server/`, `webapp/`, `services/`)

For each discovered location, look for:
- **Linters**: `make check-style`, `make lint`, `npm run lint`, `eslint`, `prettier --check`, `ruff`, `black --check`, `flake8`, etc.
- **i18n extraction**: `i18n-extract`, `formatjs extract`, `babel-extract`, or similar commands in both server and webapp directories
- **TypeScript type checks**: `tsc --noEmit`, `npm run typecheck`, `yarn typecheck`, or equivalent

### Phase 2: Plan

Produce a numbered checklist of every check you identified, grouped by package/directory. Format:
```
## Pre-Commit Checklist

1. [ ] [root] npm run lint
2. [ ] [webapp] npm run typecheck
3. [ ] [webapp] npm run i18n-extract
4. [ ] [server] make check-style
5. [ ] [server] i18n-extract
...
```

### Phase 3: Execute

For each item in the checklist, delegate the execution and fixing to a sub agent, where each takes on one of the items and does the following:

1. **Run** the check command
2. **Evaluate** the output:
   - If it passes → mark complete, move on
   - If it fails → attempt to fix automatically
3. **Fix** using the appropriate method:
   - Linters: run the auto-fix variant (e.g., `npm run lint --fix`, `make fix-style`, `prettier --write`, `black .`, `ruff --fix`)
   - i18n: run the extraction command to regenerate translation files, then stage the changes
   - TypeScript: analyze the type errors and correct the source code
4. **Re-run** the check to verify the fix worked
5. **Report** if the fix failed or manual intervention is required

These sub agents can be run in parallel to improve execution speed.

## Output Format

After completing all checks, provide a summary:
```
## Pre-Commit Summary

Passed: 4
Fixed: 2
Requires Manual Fix: 1

### Details

| Check | Location | Status | Notes |
|-------|----------|--------|-------|
| lint | root | Passed | — |
| typecheck | webapp | Fixed | Corrected 3 type errors in `UserService.ts` |
| i18n-extract | server | Manual | Missing translation key requires human decision |

### Manual Action Required

1. **[server] i18n-extract**
   - File: `server/src/messages.py`
   - Issue: Ambiguous translation key `error.generic` — clarify intended message
```

## Guidelines

- **Monorepo awareness**: Check for workspaces config (`pnpm-workspace.yaml`, `lerna.json`, `package.json` workspaces field) to understand package boundaries. Run checks from the correct working directory.
- **CI parity**: The goal is to replicate CI checks locally. Use the exact commands from CI workflows when possible.
- **Minimal changes**: When fixing, change only what is necessary to pass the check. Do not refactor unrelated code.
- **Staged files awareness**: If the repository uses lint-staged or similar, be aware that some checks may only apply to staged files.
- **Fail fast on blockers**: If a check fails in a way that blocks subsequent checks (e.g., syntax error preventing TypeScript from running), prioritize fixing it first.
- **Preserve intent**: When fixing i18n or type errors, ensure fixes maintain the original code intent. If uncertain, report rather than guess.

---
> Converted and distributed by [TomeVault](https://tomevault.io/claim/mattermost) — claim your Tome and manage your conversions.
<!-- tomevault:4.0:skill_md:2026-04-13 -->

