| name | aif-commit |
| description | Create conventional commit messages by analyzing staged changes. Generates semantic commit messages following the Conventional Commits specification. Use when user says "commit", "save changes", or "create commit". |
| argument-hint | [scope or context] |
| allowed-tools | Bash(git *) |
| disable-model-invocation | true |
Conventional Commit Generator
Generate commit messages following the Conventional Commits specification.
Workflow
-
Analyze Changes
- Run
git status to see staged files
- Run
git diff --cached to see staged changes
- If nothing staged, show warning and suggest staging
-
Determine Commit Type
feat: New feature
fix: Bug fix
docs: Documentation only
style: Code style (formatting, semicolons)
refactor: Code change that neither fixes a bug nor adds a feature
perf: Performance improvement
test: Adding or modifying tests
build: Build system or dependencies
ci: CI configuration
chore: Maintenance tasks
-
Identify Scope
- From file paths (e.g.,
src/auth/ → auth)
- From argument if provided
- Optional - omit if changes span multiple areas
-
Generate Message
- Keep subject line under 72 characters
- Use imperative mood ("add" not "added")
- Don't capitalize first letter after type
- No period at end of subject
Format
<type>(<scope>): <subject>
<body>
<footer>
Examples
Simple feature:
feat(auth): add password reset functionality
Bug fix with body:
fix(api): handle null response from payment gateway
The payment API can return null when the gateway times out.
Added null check and retry logic.
Fixes #123
Breaking change:
feat(api)!: change response format for user endpoint
BREAKING CHANGE: user endpoint now returns nested profile object
Behavior
When invoked:
- Check for staged changes
- Analyze the diff content
- Propose a commit message
- Ask for confirmation or modifications
- Execute
git commit with the message
- After a successful commit, offer to push:
- Show branch/ahead status:
git status -sb
- If the branch has no upstream, use:
git push -u origin <branch>
- Otherwise:
git push
- User choice:
If argument provided (e.g., $aif-commit auth):
- Use it as the scope
- Or as context for the commit message
Important
- Never commit secrets or credentials
- Review large diffs carefully before committing
- If staged changes contain unrelated work (e.g., a feature + a bugfix, or changes to independent modules), suggest splitting into separate commits:
- Show which files/hunks belong to which commit
- Ask for confirmation
- Unstage all:
git reset HEAD
- Stage and commit each group separately using
git add <files> + git commit
- Offer to push only after all commits are done
- Add Co-Authored-By for pair programming if mentioned