--- name: commit-msg description: > Generate git commit messages following project style. Use when user wants to create a commit or asks for a commit message. argument-hint: "[optional-scope-or-description]" disable-model-invocation: true allowed-tools: - Bash(git *) - Bash(date *) - Bash(cp *) - Read - Grep - Glob - Write --- When generating commit messages, always follow this process: 0. **Check for staged changes**: if `git diff --staged` is empty, STOP and tell the user "nothing is staged!" with a reminder to `git add` before invoking this skill. 1. **Gather context** from the staged diff and recent history: - Staged changes: !`git diff --staged --stat` - Recent commits: !`git log --oneline -5` 2. **Analyze the diff**: understand what files changed and the nature of the changes (new feature, bug fix, refactor, etc.) 3. **Write the commit message** following these rules: **Use the accompanying style guide:** - See [style-guide-reference.md](style-guide-reference.md) for detailed analysis of past commits in this repo. **Subject Line Format:** - Present tense verbs: Add, Drop, Fix, Use, Move, Adjust, etc. - Target 50 chars (hard max: 67) - Backticks around ALL code elements (classes, functions, modules, vars) - Specific about what changed **Body Format (optional - keep simple if warranted):** - Max 67 char line length - Use `-` bullets for lists - Section markers: `Also,` `Deats,` `Other,` `Further,` - Abbreviations: msg, bg, ctx, impl, mod, obvi, tn, fn, bc, var, prolly - Casual yet technically precise tone - Never write lines with only whitespace **Common Opening Patterns:** - New features: "Add `feature` to `module`" - Removals: "Drop `attr` from `class`" - Bug fixes: "Fix `issue` in `function`" - Code moves: "Move `thing` to `new_location`" - Adoption: "Use `new_tool` for `task`" - Minor tweaks: "Adjust `behavior` in `component`" 4. **Write to TWO files**: - `.claude/__commit_msg.md` * with `` from `date -u +%Y%m%dT%H%M%SZ` or similar filesystem-safe format. * and `` from `git log -1 --format=%h` first 7 chars. - `.claude/git_commit_msg_LATEST.md` (overwrite) 5. **Always include credit footer**: When no part of the patch was written by `claude`, ``` (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code ``` when some or all of the patch was written by `claude` instead use, ``` (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code ``` Keep it concise. Match the tone of recent commits. For simple changes, use subject line only.