Gitmoji
Generate a copyable commit message in the https://gitmoji.dev/ convention: infer the dominant change intent, select exactly one gitmoji, match unicode versus shortcode style, and write an imperative subject plus optional body.
When to invoke
- "Write a gitmoji commit for these changes."
- "Gitmoji this diff."
- "Which gitmoji should I use?"
- "Add an emoji to my commit message."
- "This project uses gitmoji-style commits."
Message format
<intention> [scope?][:?] <message>
| Field |
Rule |
intention |
Exactly one gitmoji expressing the goal of the commit. |
scope |
Optional codebase area in parentheses; use only if the existing history uses scopes or it clarifies the change. |
message |
Brief imperative phrase, lowercase start, no trailing period. |
| body |
Optional; include only when the why is not obvious from the subject or when documenting a breaking change. |
Examples:
✨ add multi-tenant support to the billing service
🐛 (auth) prevent token refresh loop on expired sessions
♻️ (api): extract pagination logic into shared helper
Emoji selection
Consult references/gitmoji-reference.md before final selection because the full official list has 75 gitmojis and a more specific choice may exist.
| Emoji |
Shortcode |
Use when |
| ✨ |
:sparkles: |
Introduce features. |
| 🐛 |
:bug: |
Fix a bug. |
| 🚑️ |
:ambulance: |
Critical production hotfix. |
| 📝 |
:memo: |
Add or update documentation. |
| ♻️ |
:recycle: |
Refactor without behavior change. |
| ✅ |
:white_check_mark: |
Add, update, or pass tests. |
| ⚡️ |
:zap: |
Improve performance. |
| 🎨 |
:art: |
Improve structure or formatting of code. |
| 🔥 |
:fire: |
Remove code or files. |
| 🔒️ |
:lock: |
Fix security or privacy issues. |
| ⬆️ |
:arrow_up: |
Upgrade dependencies. |
| 🔧 |
:wrench: |
Add or update configuration files. |
| 💄 |
:lipstick: |
Add or update UI/style files. |
| 💥 |
:boom: |
Introduce breaking changes. |
| 🚨 |
:rotating_light: |
Fix compiler or linter warnings. |
| 🌐 |
:globe_with_meridians: |
Internationalization or localization. |
Procedure
- Work from the provided diff, staged files, modified paths, or plain description.
- If the repository style is unknown and history is available, inspect
git log --oneline -10 to choose unicode versus shortcode and scope style.
- Identify the dominant intent. If the change mixes unrelated feature, fix, refactor, test, and docs work, choose the dominant intent and suggest splitting commits.
- Prefer specific emojis over generic ones: typo ✏️ instead of 🐛, file move 🚚 instead of ♻️, trivial fix 🩹 instead of 🐛, security 🔒️ over bug.
- Write a subject under 72 characters including the emoji when possible.
- Add a body only for rationale, breaking changes, or context that does not fit the subject.
- Output the message in a code block and one short explanation. Do not execute
git commit.
Style decisions
| Situation |
Rule |
| Unicode history |
Default to unicode, e.g. ✨ add dark mode. |
| Shortcode history |
Match shortcode, e.g. :sparkles: add dark mode. |
| Tests |
Use ✅ for passing tests; use 🧪 only for intentionally failing tests such as a TDD red step. |
| Hotfix |
Use 🚑️ only for urgent production fixes; ordinary bugs are 🐛. |
| Formatting |
Use 🎨 for code structure/formatting; use 💄 for visual UI/style files. |
| Breaking change |
Use 💥 and document the break in the body. |
| Revert |
Use ⏪️ with a subject referencing the reverted commit. |
| Merge |
Use 🔀 merge branch '<name>' into <target>. |
| Initial commit |
Use 🎉 begin project. |
| Work in progress |
Use 🚧 and say what remains. |
| No obvious match |
Re-scan references/gitmoji-reference.md, then fall back to ✨, 🐛, or ♻️. |
Limits
- Do not run
git commit or any other mutating git command.
- If the project follows plain Conventional Commits from https://www.conventionalcommits.org/ without emojis, use the
git-commit skill instead.
- If the convention is ambiguous, ask for recent history or inspect
git log --oneline -10 when allowed.
Progressive disclosure and bundled resources
references/gitmoji-reference.md: complete official gitmoji list; read it before choosing a final emoji.
Compatibility terminology
Preserve these baseline terms when they appear in user input, existing files, logs, or migration output; they are included to keep legacy wording, commands, paths, and API names recognizable during execution.
adding/updating
commit-message-storyteller
feat:
fix:
non-critical
re-triggered
staged/modified
well-formed
Shortcode style may be preferred on GitHub or GitLab when repository history uses codes such as :sparkles:.
Output template
## Gitmoji commit message
```text
<emoji or shortcode> (<optional-scope>) <imperative subject>
<optional body>
Why:
Style matched: unicode | shortcode | unknown
## Quality gate
- [ ] Exactly one gitmoji or shortcode starts the subject.
- [ ] The selected emoji matches the dominant intent and was checked against `references/gitmoji-reference.md`.
- [ ] Unicode versus shortcode style matches existing history when evidence is available.
- [ ] Subject is imperative, concise, lowercase after the emoji unless a proper noun requires capitalization, and has no trailing period.
- [ ] Mixed unrelated changes are called out as candidates for separate commits.
- [ ] No git command that mutates history is executed.
## References
- [gitmoji](https://gitmoji.dev)
- [gitmoji with trailing slash](https://gitmoji.dev/)
- [Conventional Commits](https://www.conventionalcommits.org/)
1---2name: gitmoji3description: Generate commit messages that follow the gitmoji convention (https://gitmoji.dev) by choosing the single best emoji or shortcode for a diff, staged change, or plain-language change description. Use when asked to write a gitmoji commit, add an emoji to a commit message, choose a gitmoji, gitmoji this change, or follow a gitmoji-style commit history. Generates the message only and does not run git commands.4license: MIT5---67<!-- Generated from harness/github-copilot/skills/gitmoji/SKILL.md by harness/claude-code/scripts/convert_from_copilot.py. Edit the source, not this file. -->89# Gitmoji1011Generate a copyable commit message in the https://gitmoji.dev/ convention: infer the dominant change intent, select exactly one gitmoji, match unicode versus shortcode style, and write an imperative subject plus optional body.1213## When to invoke1415- "Write a gitmoji commit for these changes."16- "Gitmoji this diff."17- "Which gitmoji should I use?"18- "Add an emoji to my commit message."19- "This project uses gitmoji-style commits."2021## Message format2223```text24<intention> [scope?][:?] <message>25```2627| Field | Rule |28| --- | --- |29| `intention` | Exactly one gitmoji expressing the goal of the commit. |30| `scope` | Optional codebase area in parentheses; use only if the existing history uses scopes or it clarifies the change. |31| `message` | Brief imperative phrase, lowercase start, no trailing period. |32| body | Optional; include only when the why is not obvious from the subject or when documenting a breaking change. |3334Examples:3536```text37✨ add multi-tenant support to the billing service38🐛 (auth) prevent token refresh loop on expired sessions39♻️ (api): extract pagination logic into shared helper40```4142## Emoji selection4344Consult `references/gitmoji-reference.md` before final selection because the full official list has 75 gitmojis and a more specific choice may exist.4546| Emoji | Shortcode | Use when |47| --- | --- | --- |48| ✨ | `:sparkles:` | Introduce features. |49| 🐛 | `:bug:` | Fix a bug. |50| 🚑️ | `:ambulance:` | Critical production hotfix. |51| 📝 | `:memo:` | Add or update documentation. |52| ♻️ | `:recycle:` | Refactor without behavior change. |53| ✅ | `:white_check_mark:` | Add, update, or pass tests. |54| ⚡️ | `:zap:` | Improve performance. |55| 🎨 | `:art:` | Improve structure or formatting of code. |56| 🔥 | `:fire:` | Remove code or files. |57| 🔒️ | `:lock:` | Fix security or privacy issues. |58| ⬆️ | `:arrow_up:` | Upgrade dependencies. |59| 🔧 | `:wrench:` | Add or update configuration files. |60| 💄 | `:lipstick:` | Add or update UI/style files. |61| 💥 | `:boom:` | Introduce breaking changes. |62| 🚨 | `:rotating_light:` | Fix compiler or linter warnings. |63| 🌐 | `:globe_with_meridians:` | Internationalization or localization. |6465## Procedure66671. Work from the provided diff, staged files, modified paths, or plain description.682. If the repository style is unknown and history is available, inspect `git log --oneline -10` to choose unicode versus shortcode and scope style.693. Identify the dominant intent. If the change mixes unrelated feature, fix, refactor, test, and docs work, choose the dominant intent and suggest splitting commits.704. Prefer specific emojis over generic ones: typo ✏️ instead of 🐛, file move 🚚 instead of ♻️, trivial fix 🩹 instead of 🐛, security 🔒️ over bug.715. Write a subject under 72 characters including the emoji when possible.726. Add a body only for rationale, breaking changes, or context that does not fit the subject.737. Output the message in a code block and one short explanation. Do not execute `git commit`.7475## Style decisions7677| Situation | Rule |78| --- | --- |79| Unicode history | Default to unicode, e.g. `✨ add dark mode`. |80| Shortcode history | Match shortcode, e.g. `:sparkles: add dark mode`. |81| Tests | Use ✅ for passing tests; use 🧪 only for intentionally failing tests such as a TDD red step. |82| Hotfix | Use 🚑️ only for urgent production fixes; ordinary bugs are 🐛. |83| Formatting | Use 🎨 for code structure/formatting; use 💄 for visual UI/style files. |84| Breaking change | Use 💥 and document the break in the body. |85| Revert | Use ⏪️ with a subject referencing the reverted commit. |86| Merge | Use 🔀 `merge branch '<name>' into <target>`. |87| Initial commit | Use 🎉 `begin project`. |88| Work in progress | Use 🚧 and say what remains. |89| No obvious match | Re-scan `references/gitmoji-reference.md`, then fall back to ✨, 🐛, or ♻️. |9091## Limits9293- Do not run `git commit` or any other mutating git command.94- If the project follows plain Conventional Commits from https://www.conventionalcommits.org/ without emojis, use the `git-commit` skill instead.95- If the convention is ambiguous, ask for recent history or inspect `git log --oneline -10` when allowed.9697## Progressive disclosure and bundled resources9899- `references/gitmoji-reference.md`: complete official gitmoji list; read it before choosing a final emoji.100101## Compatibility terminology102103Preserve these baseline terms when they appear in user input, existing files, logs, or migration output; they are included to keep legacy wording, commands, paths, and API names recognizable during execution.104105- `adding/updating`106- `commit-message-storyteller`107- `feat:`108- `fix:`109- `non-critical`110- `re-triggered`111- `staged/modified`112- `well-formed`113114Shortcode style may be preferred on GitHub or GitLab when repository history uses codes such as `:sparkles:`.115116## Output template117118```markdown119## Gitmoji commit message120121```text122<emoji or shortcode> (<optional-scope>) <imperative subject>123124<optional body>125```126127**Why:** <one sentence explaining why this gitmoji matches the dominant intent>128**Style matched:** unicode | shortcode | unknown129```130131## Quality gate132133- [ ] Exactly one gitmoji or shortcode starts the subject.134- [ ] The selected emoji matches the dominant intent and was checked against `references/gitmoji-reference.md`.135- [ ] Unicode versus shortcode style matches existing history when evidence is available.136- [ ] Subject is imperative, concise, lowercase after the emoji unless a proper noun requires capitalization, and has no trailing period.137- [ ] Mixed unrelated changes are called out as candidates for separate commits.138- [ ] No git command that mutates history is executed.139140## References141142- [gitmoji](https://gitmoji.dev)143- [gitmoji with trailing slash](https://gitmoji.dev/)144- [Conventional Commits](https://www.conventionalcommits.org/)