Commit Message Skill
Generate consistent, informative commit messages following the Conventional Commits specification.
When to Use This Skill
- •User asks to "commit", "write a commit message", or "prepare commit"
- •User has staged changes and mentions commits
- •Before any
git commitcommand
Process
- •Analyze changes: Run
git diff --stagedto see what's being committed - •Identify the type: Determine the primary change category
- •Find the scope: Identify the main area affected
- •Write the message: Follow the format below
Commit Message Format
code
<type>(<scope>): <description> [optional body] [optional footer(s)]
Types
| Type | Description | Example |
|---|---|---|
feat | New feature | feat(auth): add OAuth2 login |
fix | Bug fix | fix(api): handle null response |
docs | Documentation only | docs(readme): add setup instructions |
style | Formatting, no code change | style: fix indentation |
refactor | Code change, no new feature/fix | refactor(db): extract query builder |
perf | Performance improvement | perf(search): add result caching |
test | Adding/fixing tests | test(auth): add login unit tests |
build | Build system changes | build: update webpack config |
ci | CI configuration | ci: add GitHub Actions workflow |
chore | Maintenance tasks | chore(deps): update dependencies |
revert | Revert previous commit | revert: feat(auth): add OAuth2 |
Scope
The scope should be a noun describing the section of the codebase:
- •
auth,api,db,ui,config - •Feature names:
search,checkout,dashboard - •Or omit if change is broad
Subject Line Rules
- •Use imperative mood: "add" not "added" or "adds"
- •Don't capitalize first letter after colon
- •No period at the end
- •Max 72 characters total
Body (when needed)
- •Separate from subject with blank line
- •Explain what and why, not how
- •Wrap at 72 characters
- •Use bullet points for multiple changes
Footer (when needed)
- •
BREAKING CHANGE:for breaking changes - •
Fixes #123to close issues - •
Refs #456to reference without closing
Examples
Simple feature
code
feat(search): add fuzzy matching support Implement Levenshtein distance algorithm for typo tolerance in search queries. Configurable via FUZZY_THRESHOLD env var.
Bug fix with issue reference
code
fix(cart): prevent duplicate items on rapid clicks Add debounce to add-to-cart button and check for existing items before insertion. Fixes #234
Breaking change
code
feat(api)!: change response format to JSON:API BREAKING CHANGE: API responses now follow JSON:API spec. All clients need to update their parsers. - Wrap data in `data` object - Move metadata to `meta` object - Add `links` for pagination
Multiple related changes
code
refactor(auth): consolidate authentication logic - Extract JWT handling to dedicated service - Move session management from controller to middleware - Add refresh token rotation This prepares for the upcoming OAuth2 integration.
Output
When generating a commit message:
- •Show the staged changes summary
- •Propose the commit message
- •Explain the type/scope choice if non-obvious
- •Ask if the user wants to proceed or modify