--- name: commit description: Use when creating git commits. Groups changes into atomic, single-purpose commits. allowed-tools: - Grep - Glob - Read - Write - Edit - Bash(git status:*) - Bash(git diff:*) - Bash(git branch:*) - Bash(git log:*) - Bash(git stash:*) - Bash(git add:*) - Bash(git restore:*) - Bash(git mv:*) - Bash(git rm:*) - Bash(git apply:*) - Bash(git commit:*) - Read(//tmp/**) - Write(//tmp/**) - Edit(//tmp/**) context: fork user-invocable: true model: sonnet --- # Overview Creating clean, atomic commits that follow best practices for version control hygiene. The core principle is **one logical change per commit** - each commit should represent a single, coherent, easily revertable modification that can stand alone. ## Instructions **ALWAYS `cd` to project root before git commands. NEVER use `git -C`.** Execute git commands directly without explanatory preamble. Commit immediately without confirmation prompts (never use interactive mode). 1. **Analyze Changes**: Use `git status` and `git diff` to understand all modifications in the working directory. Categorize changes by: - STRUCTURAL: Code reorganization, renaming, refactoring without behavior changes - BEHAVIORAL: New features, bug fixes, functionality changes - DOCUMENTATION: README updates, comment changes, documentation files - CONFIGURATION: Build files, dependencies, environment settings 2. **Group Logically**: Organize changes into logical units where each unit: - Addresses a single purpose or problem - Structure changes to be atomic and easily revertable for safe rollback - Would make sense to revert as a unit 3. **Stage Changes**: Use appropriate staging strategy: - Whole file: `git add ` - Hunk-by-hunk: `git diff > /tmp/patch.diff`, edit the patch to keep only specific hunks, then `git apply --cached /tmp/patch.diff` - NEVER use `git reset` to unstage - use `git restore --staged` if needed 4. **Handle Pre-commit Hooks**: If hooks complain about unstaged changes: - Stash unstaged changes first: `git stash push -p -m "temp: unstaged changes"` (select hunks to stash) - Or stash all unstaged: `git stash push --keep-index -m "temp: unstaged changes"` - Commit, then restore: `git stash pop` 5. **Create Atomic Commits**: For each logical group: - Write clear, descriptive commit messages following conventional format - Keep first line under 50 characters - Include context in body when necessary - IMPORTANT: DO NOT run any linter/formatter before committing. Commit exactly what the user changed ## Attribution Include in every commit: ``` 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude ```