| name | Commit: Batch |
| description | {{ ๐ซ๐ซ๐ซ }} Split uncommitted changes into granular commits. |
| when_to_use | When several unrelated changes have piled up uncommitted and a single commit would bundle them โ split into one logical commit per change. |
| model | haiku |
| effort | low |
| disable-model-invocation | true |
| allowed-tools | ["Bash(git:*)"] |
Current state
git status --short
git diff --stat HEAD
Steps
- The current state above was captured at invocation; run
git diff HEAD on specific files only where the stat alone can't tell you what a change is.
- Analyse the changes and group them into logical commit units โ each group should represent a single coherent change (e.g. one feature, one fix, one refactor).
- Present the proposed commit plan as a numbered list:
- Group name / files involved
- Suggested commit message (conventional commits format)
- Await approval โ stop here and do not proceed until the user responds:
- If approved, execute commits sequentially. For each group:
- Stage only the files listed for that group (
git add <files>)
- Commit with the proposed message
- Confirm success before moving to the next group
- If changes requested, revise the plan and repeat from step 3.
- After all commits, push to upstream.
Grouping Guidelines
- Prefer smaller, atomic commits over large ones
- Keep unrelated changes in separate commits even if they touch the same area
- Config/dependency changes separate from feature code
- Test changes alongside the code they test (same commit), unless the test is independent
- Generated files (lockfiles, build artefacts) get their own commit if significant
- Subject line: imperative mood, lowercase, no period, max 50 chars (`add feature` not `added feature` or `adds feature`)
- Body: explain *what* and *why*, not *how*; wrap at 72 chars