Committing Code
Overview
Every commit message uses conventional commits with gitmoji. The format is consistent, scannable, and conveys intent at a glance.
Format
<emoji> <type>: <short description>
<body — what changed and why>
Co-Authored-By: Claude <agent> <noreply@anthropic.com>
The short description is imperative mood, lowercase, no period. The body uses bullet points for multiple changes.
Gitmoji Reference
| Emoji | Type | When to use |
|---|---|---|
| 🎉 | feat |
Initial commit / first commit in a repo |
| ✨ | feat |
New feature or capability |
| 🐛 | fix |
Bug fix |
| ♻️ | refactor |
Code restructuring without behavior change |
| 📝 | docs |
Documentation only |
| 🔧 | chore |
Config, tooling, non-code changes |
| ✅ | test |
Adding or updating tests |
| 🚀 | perf |
Performance improvement |
| 🔥 | chore |
Removing code or files |
| 🏗️ | refactor |
Architectural change |
| 💄 | style |
UI/cosmetic change |
| 🔒 | security |
Security fix |
| ⬆️ | chore |
Dependency upgrade |
| 🚚 | refactor |
Moving or renaming files |
Examples
Good:
✨ feat: add user authentication with JWT
- Add login/logout endpoints in auth.controller.ts
- Add JWT middleware for protected routes
- Add refresh token rotation
- Add auth integration tests
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🐛 fix: prevent race condition in websocket reconnect
The reconnect logic was firing multiple times when the connection
dropped during a message send, causing duplicate subscriptions.
Added a mutex guard around the reconnect path.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
♻️ refactor: rename getUserById to fetchUser across codebase
Aligns with the fetch* naming convention for async data access.
Updated all call sites, tests, and type definitions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bad:
updated stuff # No type, no emoji, vague
feat: Add Feature # No emoji, capitalized
✨ feat: add feature. # Trailing period
🐛✨ fix/feat: stuff # Multiple types
Rules
- One type per commit. If changes span multiple types, split into multiple commits.
- Body explains WHY, not just WHAT. The diff shows what changed — the message explains the reasoning.
- Use bullet points in the body when listing multiple changes.
- Always include Co-Authored-By when the commit was AI-assisted.
- Use HEREDOC for multi-line messages to preserve formatting:
git commit -m "$(cat <<'EOF' ✨ feat: add new feature Body text here. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> EOF )"
Commit Frequency
Commit early and often:
- After each logical unit of work (one feature, one fix, one refactor)
- After adding a new file or skill
- After updating documentation alongside code changes
- Never batch unrelated changes into a single commit
Pre-Commit Checklist
Before committing, verify:
- README.md is updated if the change affects user-facing documentation (new features, skills, APIs, installation steps)
- AGENTS.md is updated if the change affects project structure, conventions, or available skills
- Documentation changes are part of the same commit as the code they describe — not a separate "docs" commit after the fact