Commit Message Generator
Automatically generate conventional commit messages for staged changes.
Philosophy
Commit messages are the history and documentation of your code's evolution.
Core Beliefs
- Commits Tell a Story: Each commit should explain what changed and why
- Conventional Format Enables Automation: Structured messages power changelogs and semantic versioning
- Clarity Over Brevity: A clear 2-line message beats a cryptic 5-word one
- Context Matters: Messages should be understandable months later without additional context
Why Conventional Commits
- Automated Changelogs: Generate release notes from commit history
- Semantic Versioning: Determine version bumps (major/minor/patch) automatically
- Better Searchability: Find specific types of changes quickly
- Team Communication: Consistent format aids code review and collaboration
When to Use This Skill
Activate this skill when the user:
- Mentions "commit", "committing", "staged changes", or "ready to commit"
- Shows
git addorgit statusoutput with staged changes - Asks "what should my commit message be?"
- Says "I need to commit my changes"
- Asks for help writing commit messages
Decision Framework
Before generating a commit message, ask yourself:
Is This Ready to Commit?
- ✅ Yes - Staged changes represent a single logical unit of work
- ❌ No - Multiple unrelated changes staged → Suggest splitting into separate commits
- ⚠️ Maybe - Large changeset → Review to ensure it's cohesive
What Type of Change Is This?
- New functionality →
feattype - Bug fix →
fixtype - Code improvement without behavior change →
refactortype - Documentation only →
docstype - Tests only →
testtype - Multiple types → Suggest splitting commits
What Scope Makes Sense?
- Module/component name - For focused changes (e.g.,
auth,api,ui) - Feature area - For cross-cutting changes (e.g.,
validation,logging) - No scope - For global changes (e.g., dependencies, config)
Should This Be Multiple Commits?
Split if staged changes include:
- ✅ Unrelated features or fixes
- ✅ Refactoring + new feature (split: refactor first, feature second)
- ✅ Multiple bug fixes
- ❌ Feature + tests (keep together)
- ❌ Feature + documentation (keep together)
Decision Tree
User mentions commit
↓
Check: Staged changes?
↓ Yes
Check: Multiple unrelated changes?
↓ No
Check: Follows conventional commits pattern?
↓ Generate message
↓
Review with user → Commit
Workflow
1. Check for Staged Changes
git status
git diff --staged
If no staged changes, inform the user and suggest staging files first.
2. Analyze Recent Commits for Style
git log --oneline -10
Learn the repository's commit message conventions.
3. Generate Conventional Commit Message
Format: <type>(<scope>): <description>
Types:
feat- New featurefix- Bug fixdocs- Documentation changesstyle- Code style changes (formatting, semicolons, etc.)refactor- Code refactoring (no functional changes)test- Adding or updating testschore- Build process, dependency updates, etc.perf- Performance improvementsci- CI/CD changes
Example:
feat(auth): add two-factor authentication support
- Implement TOTP-based 2FA
- Add backup codes generation
- Include recovery flow for lost devices
- Update user profile settings UI
4. Drupal/WordPress-Specific Patterns
Drupal:
- Config changes:
feat(config): add user profile field configuration - Module work:
fix(custom_module): correct permission check in access callback - Hooks:
refactor(hooks): simplify hook_form_alter implementation
WordPress:
- Theme work:
style(theme): improve mobile navigation styles - Plugin work:
fix(plugin): correct ACF field validation - Blocks:
feat(blocks): add testimonial Gutenberg block
5. Present to User for Approval
Show the generated commit message in a clear code block and ask:
"Here's a commit message based on your staged changes. Would you like me to commit with this message, or would you like to modify it?"
Wait for explicit user approval (e.g., "approve", "yes, commit", or an edited version) before running git commit. Never add Co-Authored-By: Claude… to commit messages.
6. Execute Commit (only after approval)
git commit -m "commit message here"
Or for multi-line messages:
git commit -m "$(cat <<'EOF'
feat(auth): add two-factor authentication support
- Implement TOTP-based 2FA
- Add backup codes generation
- Include recovery flow
EOF
)"
Integration with CMS Cultivator
This skill is invoked directly by the main session when the user mentions committing — there is no orchestrator agent in between. The skill works the same way whether triggered conversationally ("I'm ready to commit") or explicitly ("generate a commit message").
The companion pr-create skill picks up where this one ends — once you've committed, ask to "create a PR" and pr-create will generate the PR description from your commits.
Best Practices
- Analyze the actual changes - Don't just use file names, understand what changed
- Be specific in scope - Use module name, component name, or feature area
- Include breaking changes - Add
BREAKING CHANGE:footer if applicable - Reference tickets - Include ticket numbers if found in branch name
- Follow project conventions - Match the existing commit style
Example Interactions
Example 1: Simple fix
User: "I fixed the login bug, ready to commit"
[Skill analyzes git diff]
Skill: "I'll generate a commit message for your login fix..."
Generated:
fix(auth): resolve session timeout on remember-me login
- Correct cookie expiration logic
- Add test coverage for remember-me flow
Would you like me to commit with this message?
Example 2: Feature addition
User: "Staged my changes, need to commit"
[Skill analyzes extensive changes]
Skill: "I see you've added a new dashboard widget. Here's a commit message..."
Generated:
feat(dashboard): add performance metrics widget
- Create new widget component
- Add database query for metrics
- Include responsive design
- Add widget to admin dashboard page