Files
holocron/plugins/kyberforge/skills/pc-run/SKILL.md
Defame1297 ec54a8100a feat(kyberforge): add pc-author and pc-run pre-commit skills
## Why
Pre-commit config management was entirely manual — no skill existed to
help create, modify, or validate `.pre-commit-config.yaml`, or to run,
install, and maintain the pre-commit setup. These two skills close that
gap with clear scope separation: authoring vs. execution.

## Implementation Notes
- `pc-author` owns `.pre-commit-config.yaml` only (no hook publishing,
  no install). Runs `pre-commit validate-config` after every write.
  Shallow file-extension scan drives proactive hook recommendations;
  rev staleness is flagged against `references/hooks-by-language.md`
  rather than hardcoded versions. Remove path reverts on failure.
- `pc-run` owns install, run, autoupdate, gc, and clean. Defaults to
  `--all-files`. Install warns about existing `.git/hooks/` files being
  overwritten by `-f`. Clean requires HITL confirmation. Failure
  interpretation delegates to `references/failure-patterns.md`.
- Provenance wired to `plugins/kyberforge/docs/research/docs/pre-commit/`.
- Both skills resolve via the existing `"skills/"` glob in `plugin.json`.

## Impact
Two new slash commands available after `claude plugin install kyberforge@holocron`:
`/pc-author` and `/pc-run`.

Refs: #12

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P87CiC58Ru2PPWYTeXtjHT
2026-06-27 22:32:54 +00:00

4.9 KiB

name, description, compatibility, metadata, allowed-tools
name description compatibility metadata allowed-tools
pc-run Use when the user wants to run pre-commit hooks, install git hooks, update hook versions, or maintain the pre-commit cache. Triggers on: "run pre-commit", "run all hooks", "check everything passes", "install hooks", "wire hooks into git", "update hook versions", "autoupdate", "bump revs", "clean the cache", "rebuild environments", "gc", "why is my hook failing", "hooks aren't running". Do not use for creating or editing `.pre-commit-config.yaml` — use `pc-author` for that. Requires pre-commit installed and available on PATH.
category source_keys
devtools
context7-pre-commit-com
pre-commit-com
Bash Read

Gotchas

  • Hooks not running on git commit almost always means pre-commit install was never run in this clone. Git hooks are per-clone — they are not committed to the repo.
  • When a hook modifies files (e.g. trailing-whitespace, end-of-file-fixer), the commit is blocked intentionally — the staged version is stale. The fix is git add -u && git commit. Do NOT call pre-commit install -f here; that is for overwriting existing hooks, not re-staging.
  • pre-commit autoupdate modifies .pre-commit-config.yaml in-place. Re-read the file after calling it to show the user the updated rev values.
  • The SKIP env var requires exact hook id values, comma-separated, no spaces: SKIP=check-yaml,gitleaks git commit -m "msg". A space after the comma silently skips nothing.
  • A stages mismatch — hook stage not installed — means the hook was added to the config but pre-commit install was not re-run with the correct -t flags. Hooks in stages not listed under default_install_hook_types will never fire.

Route

Determine intent from the user's request, then execute the matching operation:

User intent Operation
"run", "check", "verify", "test hooks" pre-commit run --all-files (default)
"staged", "simulate commit" pre-commit run (staged files only)
"install", "set up hooks", "wire into git" pre-commit install — see Install
"pre-create environments", "install-hooks", "warm cache" pre-commit install-hooks — see Install
"remove hooks", "uninstall", "tear down pre-commit" pre-commit uninstall
"autoupdate", "update versions", "bump revs" pre-commit autoupdate
"gc", "garbage collect" pre-commit gc
"clean", "wipe cache", "rebuild from scratch" pre-commit clean — see Clean

If the intent is ambiguous, default to pre-commit run --all-files.

Run

Default: pre-commit run --all-files. Never silently run staged-only.

pre-commit run --all-files

When hooks fail, read the output and:

  1. Identify which hook failed and the specific cause. Be concrete: "gitleaks blocked config.json (high-entropy string on line 12)", not just "gitleaks failed".
  2. Suggest a concrete next step. Common patterns are in references/failure-patterns.md.
  3. Do NOT auto-fix code files. Do NOT modify .pre-commit-config.yaml. Those are the user's or pc-author's responsibility.

If the user asks to run only staged files: pre-commit run (no --all-files). If the user names a specific hook: pre-commit run <hook-id>.

Install

Only run when the user explicitly asks to install or set up hooks.

Before running, check for existing hook files:

ls .git/hooks/

If any hook files exist (e.g. a hand-written pre-commit), pre-commit install will refuse and exit with an error — it will not overwrite them without -f. If files are present, warn the user: "Existing hook files found at .git/hooks/<names>. Running pre-commit install -f will replace them permanently. Proceed?" Wait for confirmation before using -f.

pre-commit install

Re-run with -t flags when default_install_hook_types was changed or when hooks in non-default stages aren't firing:

pre-commit install -t pre-commit -t pre-push -t commit-msg

To pre-create all hook environments without running hooks (useful for CI warm-up or first-time setup):

pre-commit install-hooks

To remove pre-commit from .git/hooks/ entirely:

pre-commit uninstall

Autoupdate

pre-commit autoupdate

After it completes, read .pre-commit-config.yaml and report which rev values changed. If the user wants to pin to exact SHAs (for reproducibility): pre-commit autoupdate --freeze.

Clean and GC

gc — removes only unused cached environments. Safe to run at any time:

pre-commit gc

clean — wipes the entire cache at ~/.cache/pre-commit. All hook environments will be re-downloaded on next run. Require explicit confirmation before running:

"This will wipe the entire pre-commit cache. All hook environments will be re-downloaded on next run. Proceed?"

Wait for the user to say yes before executing:

pre-commit clean