home / skills / laurigates / claude-plugins / configure-pre-commit

configure-pre-commit skill

/configure-plugin/skills/configure-pre-commit

This skill checks and configures pre-commit hooks to align with project standards and automate setup.

npx playbooks add skill laurigates/claude-plugins --skill configure-pre-commit

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
6.1 KB
---
model: opus
created: 2025-12-16
modified: 2026-02-10
reviewed: 2025-12-16
description: Check and configure pre-commit hooks for project standards
allowed-tools: Glob, Grep, Read, Write, Edit, Bash, AskUserQuestion, TodoWrite, WebSearch, WebFetch
argument-hint: "[--check-only] [--fix] [--type <frontend|infrastructure|python>]"
name: configure-pre-commit
---

# /configure:pre-commit

Check and configure pre-commit hooks against project standards.

## When to Use This Skill

| Use this skill when... | Use another approach when... |
|------------------------|------------------------------|
| Setting up or validating pre-commit hooks | Project doesn't use pre-commit framework (use git hooks directly) |
| Checking compliance with project standards | Just running hooks manually (use `pre-commit run` command) |
| Installing project-type-specific hooks | Hooks are already properly configured |
| Migrating to pre-commit framework | Simple project with no quality checks needed |
| Updating hook configurations for detected tools | Need to disable pre-commit entirely |

## Context

- Pre-commit config: !`test -f .pre-commit-config.yaml && echo "EXISTS" || echo "MISSING"`
- Project standards: !`test -f .project-standards.yaml && echo "EXISTS" || echo "MISSING"`
- Project type in standards: !`grep -m1 "^project_type:" .project-standards.yaml 2>/dev/null`
- Has terraform: !`find . -maxdepth 2 \( -name '*.tf' -o -type d -name 'terraform' \) -print -quit 2>/dev/null`
- Has helm: !`find . -maxdepth 2 -type d -name 'helm' -print -quit 2>/dev/null`
- Has package.json: !`test -f package.json && echo "EXISTS" || echo "MISSING"`
- Has pyproject.toml: !`test -f pyproject.toml && echo "EXISTS" || echo "MISSING"`

## Parameters

Parse from `$ARGUMENTS`:

- `--check-only`: Report status without offering fixes
- `--fix`: Apply all fixes automatically without prompting
- `--type <type>`: Override project type detection (`frontend`, `infrastructure`, `python`)

## Execution

Execute this pre-commit compliance check:

### Step 1: Detect project type

1. Read `.project-standards.yaml` for `project_type` field if it exists
2. If not found, auto-detect:
   - **infrastructure**: Has `terraform/`, `helm/`, `argocd/`, or `*.tf` files
   - **frontend**: Has `package.json` with vue/react dependencies
   - **python**: Has `pyproject.toml` or `requirements.txt`
3. Apply `--type` flag override if provided

### Step 2: Check configuration file

1. If `.pre-commit-config.yaml` is missing: report FAIL, offer to create from template
2. If it exists: read and parse the configuration

### Step 3: Verify hook versions against latest releases

**CRITICAL**: Before flagging outdated hooks, verify latest releases using WebSearch or WebFetch:

1. **pre-commit-hooks**: [GitHub releases](https://github.com/pre-commit/pre-commit-hooks/releases)
2. **conventional-pre-commit**: [GitHub releases](https://github.com/compilerla/conventional-pre-commit/releases)
3. **biome**: [GitHub releases](https://github.com/biomejs/biome/releases)
4. **ruff-pre-commit**: [GitHub releases](https://github.com/astral-sh/ruff-pre-commit/releases)
5. **gitleaks**: [GitHub releases](https://github.com/gitleaks/gitleaks/releases)

### Step 4: Analyze compliance

Compare existing configuration against project standards (from `pre-commit-standards` skill):

**Required Base Hooks (All Projects):**
- `pre-commit-hooks` v5.0.0+ with: trailing-whitespace, end-of-file-fixer, check-yaml, check-json, check-merge-conflict, check-added-large-files
- `conventional-pre-commit` v4.3.0+ with commit-msg stage

**Frontend-specific:**
- `biome` (pre-commit) v0.4.0+
- `helmlint` (if helm/ directory exists)

**Infrastructure-specific:**
- `tflint`, `helmlint` (gruntwork v0.1.29+)
- `actionlint` v1.7.7+
- `helm-docs` v1.14.2+
- `gitleaks` v8.22.1+

**Python-specific:**
- `ruff-pre-commit` v0.8.4+ (ruff, ruff-format)
- `gitleaks` v8.22.1+

### Step 5: Generate compliance report

Print a report in this format:

```
Pre-commit Compliance Report
================================
Project Type: [type] ([detected|override])
Config File: .pre-commit-config.yaml ([found|missing])

Hook Status:
  [hook-name]     [version]   [PASS|WARN|FAIL] ([details])

Outdated Hooks:
  - [hook]: [current] -> [standard]

Overall: [N] issues found
```

### Step 6: Apply fixes (if requested)

If `--fix` flag is set or user confirms:

1. **Missing config file**: Create from standard template for detected project type
2. **Missing hooks**: Add required hooks with standard versions
3. **Outdated versions**: Update `rev:` values to standard versions
4. **Missing hook types**: Add `default_install_hook_types` with `pre-commit` and `commit-msg`

After modification, run `pre-commit install --install-hooks` to install hooks.

### Step 7: Update standards tracking

Update or create `.project-standards.yaml`:

```yaml
standards_version: "2025.1"
project_type: "[detected]"
last_configured: "[timestamp]"
components:
  pre-commit: "2025.1"
```

## Agentic Optimizations

| Context | Command |
|---------|---------|
| Check if pre-commit installed | `command -v pre-commit >/dev/null 2>&1 && echo "installed" \|\| echo "missing"` |
| Validate config syntax | `pre-commit validate-config .pre-commit-config.yaml 2>&1` |
| List configured hooks | `grep -E '^\s+- id:' .pre-commit-config.yaml 2>/dev/null \| sed 's/.*id:[[:space:]]*//'` |
| Check hook versions | `pre-commit autoupdate --freeze 2>&1` |
| Quick compliance check | `/configure:pre-commit --check-only` |
| Auto-fix configuration | `/configure:pre-commit --fix` |

## Flags

| Flag | Description |
|------|-------------|
| `--check-only` | Report status without offering fixes |
| `--fix` | Apply all fixes automatically without prompting |
| `--type <type>` | Override project type detection (frontend, infrastructure, python) |

## Error Handling

- **No git repository**: Warn but continue (pre-commit still useful)
- **Invalid YAML**: Report parse error, offer to replace with template
- **Unknown hook repos**: Skip (do not remove custom hooks)
- **Permission errors**: Report and suggest manual fix

## See Also

- `/configure:all` - Run all compliance checks
- `/configure:status` - Quick compliance overview
- `pre-commit-standards` skill - Standard definitions

Overview

This skill checks and configures pre-commit hooks to ensure projects meet defined standards. It detects project type, validates or creates .pre-commit-config.yaml, and reports mismatches or outdated hook versions. It can run in report-only mode or apply fixes automatically based on standard templates.

How this skill works

The skill reads project metadata (.project-standards.yaml) or auto-detects type from files like package.json, pyproject.toml, Terraform/Helm artifacts, then inspects .pre-commit-config.yaml presence and contents. It compares configured hooks and versions against required standards for base, frontend, infrastructure, and python projects, optionally verifying latest releases. When requested, it can create or update the config, install hooks, and update standards tracking.

When to use it

  • Setting up or validating pre-commit hooks for a repository
  • Migrating a project onto the pre-commit framework from manual git hooks
  • Enforcing baseline hooks and versions across repositories
  • Updating pre-commit hook revisions to match organizational standards
  • Running an automated compliance audit before CI/CD rollout

Best practices

  • Run with --check-only first to review findings before applying changes
  • Provide --type to override detection for edge cases or mixed repos
  • Keep .project-standards.yaml alongside project code to lock expected hooks
  • Validate YAML syntax and run pre-commit validate-config after edits
  • Do not remove custom or unknown hooks automatically; preserve project-specific behavior

Example use cases

  • A new repo needs a standard pre-commit config for Python (ruff, gitleaks) installed
  • A frontend project requires biome/helmlint hooks added and versions aligned
  • An infra repo with Terraform and Helm needs tflint, helmlint, actionlint, and gitleaks configured
  • Audit many repos in bulk with --check-only to report which need fixes
  • Auto-update outdated hook revs and run pre-commit install --install-hooks as part of onboarding

FAQ

What does --check-only do?

It generates a compliance report without changing files or installing hooks.

Will this remove custom hooks?

No. Unknown or custom hooks are skipped to avoid removing project-specific configuration.

How are hook versions validated?

The skill checks configured revs against standard versions and recommends updates; it can verify latest releases via web queries before flagging outdated hooks.