name: commit description: Commit current changes with a clear, descriptive message argument-hint: [special instructions] disable-model-invocation: true metadata: internal: true
Commit Changes
Commit the current staged/unstaged changes with a well-crafted commit message.
Arguments
$ARGUMENTS can be used for special instructions, such as:
- Guiding the message: "emphasize the breaking change"
- Adding context: "this fixes issue #123"
- Requesting amend: "amend the previous commit"
Step 1: Gather Information
Run these commands in parallel to understand the changes:
- Git status:
git status --porcelain(check for staged/unstaged changes) - Staged diff:
git diff --cached(what will be committed if there are staged changes) - Unstaged diff:
git diff(what's modified but not staged) - Recent commits:
git log -5 --oneline(to match existing commit style)
Important checks:
- If no changes exist (nothing staged or unstaged), inform the user there's nothing to commit
- If there are unstaged changes but nothing staged, stage all changes with
git add -A(or ask user if they want to selectively stage) - If there are both staged and unstaged changes, ask user if they want to include unstaged changes
Step 2: Analyze Changes
Review the diff to understand:
- What changed (files, functions, features)
- Why it changed (bug fix, new feature, refactor, etc.)
- Impact (breaking changes, dependencies, configuration)
Step 3: Generate Commit Message
Message Guidelines
Subject line:
- Use imperative mood ("add feature" not "added feature")
- Keep under 50 characters (hard limit: 72)
- Don't end with a period
- Use lowercase for the first letter
Body (if needed for complex changes):
- Separate from subject with blank line
- Wrap at 72 characters
- Explain what and why, not how
- Use bullet points for multiple items
Footer (if needed):
- Reference issues:
Fixes #123,Closes #456
- Reference issues:
Examples
Simple change:
add user authentication endpoint
Change with body:
add rate limiting to public endpoints
- Implement token bucket algorithm
- Add configurable limits per endpoint
- Include rate limit headers in responses
Closes #234
Step 4: Create the Commit
Stage changes (if needed):
git add -AOr stage specific files if user requested selective staging.
Create commit using HEREDOC for proper formatting:
git commit -m "$(cat <<'EOF' <description> <body if needed> <footer if needed> EOF )"Verify the commit was created:
git log -1 --onelineReport the commit hash and message to the user.
Edge Cases
- No changes: Inform user there's nothing to commit
- Amend requested: Use
git commit --amend(only if explicitly requested in arguments) - Large changes: Suggest breaking into multiple commits if changes span unrelated areas
- Merge conflicts: Inform user and provide guidance on resolution
- Pre-commit hooks fail: Report the failure and suggest fixes