
Project Health
Capture gotchas and patterns into CLAUDE.md or .claude/rules right after every git commit so agent context stays accurate.
Overview
Project-health is a journey-wide agent skill that triggers post-commit prompts to persist learnings into CLAUDE.md or .claude/rules—usable whenever a solo builder needs to lock in agent context before moving on.
Install
npx skills add https://github.com/jezweb/claude-skills --skill project-healthWhat is this skill?
- Hookify bash hook fires on git commit with a warn action that prompts context capture before the next task
- Pairs commit-time reminder with Session Capture mode to update CLAUDE.md or .claude/rules
- Documents global ~/.claude hook path or per-project .claude hookify.local.md placement
- Fallback CLAUDE.md line for teams without hookify installed
- Uses fresh post-commit context and aligns with git log for when patterns were recorded
- Commit-time bash hook pattern on git commit
- Dual persistence targets: CLAUDE.md and .claude/rules
Adoption & trust: 1.2k installs on skills.sh; 841 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You discover repo-specific gotchas during a commit-worthy task but never write them down, so the agent repeats the same mistakes next session.
Who is it for?
Solo developers on Claude Code who commit often and want automatic nudges to maintain living project memory without a separate notes ritual.
Skip if: Teams that do not use git commits as checkpoints, or workflows where hookify/bash hooks are disallowed without a CLAUDE.md fallback.
When should I use this skill?
After git commit or when setting up hookify context-capture-reminder for Session Capture / project-health workflow.
What do I get? / Deliverables
After each git commit, the agent updates CLAUDE.md or rule files with new patterns or confirms nothing needed capture, keeping project health current.
- hookify.context-capture-reminder.local.md hook config
- Updated CLAUDE.md or .claude/rules entries
- Documented capture decision after each commit
Recommended Skills
Journey fit
Useful at every journey phase - explore requirements and options before committing to a direction.
Where it fits
After committing a feature, record API quirks and env vars in .claude/rules before starting the next story.
When committing a fix from code review, persist the lint or test command that actually worked locally.
On a hotfix commit, document production-only behavior so the agent does not suggest dev-only flags.
After first spike commit, capture setup steps that differ from README defaults.
How it compares
Use instead of ad-hoc 'remember this' chat messages when you want commit-gated, file-backed agent rules.
Common Questions / FAQ
Who is project-health for?
Indie builders using Claude Code who want commit-time reminders to update CLAUDE.md and .claude/rules so agent context matches how the repo really works.
When should I use project-health?
Use it across Build, Ship, and Operate whenever you finish work with a git commit—after features, fixes, refactors, or docs—so fresh learnings are captured before the next task; also at project kickoff when seeding hooks and rules.
Is project-health safe to install?
It adds local hookify markdown and edits project docs; review the Security Audits panel on this Prism page and inspect hook patterns so only intended git commit commands trigger warnings.
SKILL.md
READMESKILL.md - Project Health
# Recommended Hook: Context Capture on Commit Automatically remind Claude to capture learnings after every git commit. This pairs with Mode 1 (Session Capture) — the hook triggers the prompt, the skill handles the capture. ## Setup Create this file at `~/.claude/hookify.context-capture-reminder.local.md` for global coverage, or `project/.claude/hookify.context-capture-reminder.local.md` for a single project: ```markdown --- name: context-capture-reminder enabled: true event: bash pattern: git\s+commit action: warn --- Context check: Were any patterns, gotchas, or commands discovered during this work that should be captured to CLAUDE.md or .claude/rules/? If yes, update them now before moving on. If nothing new was learned, carry on. ``` ## How It Works 1. You finish work and commit 2. The hook fires after the `git commit` Bash call 3. Claude pauses to consider whether anything learned during this work should be persisted 4. If yes, Claude updates CLAUDE.md or creates/updates a `.claude/rules/` file 5. If nothing new, Claude continues ## Why Commit Time? - Context is fresh — you just finished the work - You're creating a permanent record anyway - Natural checkpoint before moving to the next task - Pairs with `git log` for tracing when a pattern was discovered ## Requires This hook uses the [hookify](https://github.com/jezweb/claude-skills) plugin for Claude Code. If you don't have hookify, you can add the same reminder as a line in your CLAUDE.md: ```markdown ## Workflow - Before committing: check if any discoveries should be captured to CLAUDE.md or .claude/rules/ ``` # Permission Presets Curated permission presets for `settings.local.json`. Each preset is a JSON array of permission strings grouped with `//` comments. Compose presets by stacking: Universal Base + language preset + deployment preset + extras. ## Syntax Reference | Pattern | Meaning | |---------|---------| | `Bash(git *)` | Space before `*` = word boundary. Matches `git status` but not `gitk`. **Preferred syntax.** | | `Bash(git*)` | No space = prefix match. Matches `git status` AND `gitk`. | | `Bash(nvidia-smi)` | Exact match — no arguments. Use for bare commands. | | `WebFetch` | Blanket web fetch (all domains) | | `WebFetch(domain:example.com)` | Domain-scoped web fetch | | `WebSearch` | Blanket web search | | `mcp__servername__*` | All tools on one MCP server | | `mcp__servername__tool_name` | One specific MCP tool | | `Read(.claude/**)` | Read files in project's .claude/ (recursive) | | `Edit(~/Documents/**)` | Edit files under home Documents (recursive) | | `Read(//tmp/**)` | Read from absolute path (`//` = filesystem root) | ### Format Notes - **Deprecated**: `Bash(git:*)` colon syntax still works but prefer space syntax `Bash(git *)` - **"Don't ask again"** prompt uses legacy colon format (e.g. `node:*`) — it's equivalent but looks different - **Comments**: `"// --- Section ---"` strings in the allow array are ignored and useful for organisation - **Not hot-reloaded**: Changes to `settings.local.json` require a session restart. "Don't ask again" bypasses this because it injects into the running session directly. **Critical**: Project `settings.local.json` **SHADOWS** global settings (does not merge). If a project has its own allow list, the global allow list is ignored entirely for that project. Shell operators (`&&`, `||`, `;`) are handled safely — `Bash(git *)` won't match `git add && rm -rf /`. --- ## Universal Base Every project gets these. Version control, file operations, and basic tools needed for all development. ```json "// --- Version Control ---", "Bash(git *)", "Bash(gh *)", "Bash(gh repo *)", "Bash(gh issue *)", "Bash(gh pr *)", "Bash(gh api *)", "Bash(gh search *)", "Bash(gh run *)", "Bash(gh release *)", "// --- File Operations ---", "Bash(cd *)", "Bash(ls *)", "Bash(pwd *)", "Bash(cat *)", "Bash(head *)", "Bash(tail *)", "Bash(less *)", "Bash(more *)", "Bash(wc *)", "Bash(sort *)", "Bash(mkdir *)", "Bash(mktemp *