AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Gitmoji Conventional

skill-morzecrew-agent-skills-gitmoji-conventional Β· by morzecrew

Format git commit messages and Pull Request titles as Conventional Commits 1.0.0 with a deterministic gitmoji prefix, including breaking changes (πŸ’₯ + ! + BREAKING CHANGE footer) and reverts. Use whenever generating or suggesting a commit message or PR title β€” "commit this", "write a commit", "commit message", "create PR", "open PR", "draft PR", "PR title", "squash and merge", "release commit" —…

β€” No reviews yet
0 installs
18 views
0.0% view→install

Install

$ agentstack add skill-morzecrew-agent-skills-gitmoji-conventional

βœ“ scanned Β· βœ“ verified, works with Claude Code, Cursor, and more.

Security review

βœ“ Passed

No issues found. Passed automated security review. Β· v0.1.0 How review works β†’

  • βœ“ Prompt-injection patterns
  • βœ“ Secret / credential exfiltration
  • βœ“ Dangerous shell & filesystem operations
  • βœ“ Untrusted network calls
  • βœ“ Known-malicious package signatures

What it can access

  • βœ“ Network access No
  • βœ“ Filesystem access No
  • βœ“ Shell / process execution No
  • βœ“ Environment & secrets No
  • βœ“ Dynamic code execution No

From automated source analysis of v0.1.0. β€œUsed” means the capability is present in the source β€” more access means more to trust, not that it’s unsafe.

View the full security report β†’

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-morzecrew-agent-skills-gitmoji-conventional)

Reliability & compatibility

βœ“ Security review passed
0 installs to date
β€” no reviews yet
● 18d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work β†’
Are you the author of Gitmoji Conventional? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Gitmoji + Conventional Commits

Format every commit message and PR title as:

[optional scope][!]:

The part after the emoji is plain Conventional Commits 1.0.0 β€” machine-parseable, so tooling can derive SemVer bumps and changelogs. The gitmoji prefix is a house extension that makes git log scannable by eye. The mapping is deterministic so two agents describing the same change produce the same subject.

✨ feat(api): add OAuth login support
πŸ› fix(auth): handle expired refresh tokens
♻️ refactor(cache): extract eviction policy

Use this skill when

  • Generating or suggesting a git commit message, for any prompt like "commit this", "write a commit", "commit message"
  • Generating or suggesting a Pull Request title β€” "create PR", "open PR", "draft PR", "what should the title be"
  • Preparing a release plan or PR summary that includes a commit message or title

Apply it even when the user mentions neither gitmoji nor Conventional Commits.

Do not use this skill when

  • The repository enforces a conflicting convention (commitlint config, CONTRIBUTING.md) β€” follow the repository
  • The user dictates the exact message verbatim
  • Writing changelog entries β€” use keep-a-changelog

Deterministic choice

  1. Identify the dominant change (see below).
  2. Pick the gitmoji for it from [references/gitmoji-mapping.md](references/gitmoji-mapping.md) β€” load it when choosing.
  3. Use the type mapped to that gitmoji. Never invent gitmoji or types.

Common pairs: ✨ feat, πŸ› fix, ♻️ refactor, ⚑️ perf, πŸ“ docs, βœ… test, πŸ‘· ci, πŸ“¦οΈ build, πŸ”§ chore, βͺ️ revert. Breaking is not a type: πŸ’₯ rides the underlying type with ! β€” πŸ’₯ feat!:, πŸ’₯ fix!: (see Breaking changes below) β€” so release grouping still reads the feat/fix underneath.

Mixed changes: pick the dominant type

One commit, one semantic story. When a change spans types, choose the type that would headline the release notes; everything else is supporting detail for the body. Tie-breaker priority, reflecting user impact:

fix > feat > perf > refactor > build > docs > test > chore

Incidental edits don't count: a feature commit that also touches its tests is ✨ feat, not βœ… test β€” the tests exist because of the feature. If two changes are genuinely independent, suggest splitting the commit instead of blending the subject.

Scope

Optional; a noun naming the affected area of the codebase, in parentheses: feat(parser):. Use it when it adds clarity (common: auth, api, core, cli, ui, deps, ci, db); omit it when the change is cross-cutting or the scope is not obvious. Never guess.

Description

  • Imperative mood ("add", not "added" or "adds") β€” reads as "this commit will add X"
  • Single line, ≀ 72 characters when possible
  • No trailing period, no leading list markers

| Wrong | Right | |---|---| | ✨ feat(api): Added OAuth login support. | ✨ feat(api): add OAuth login support | | - πŸ› fix: fixes bug | πŸ› fix(auth): reject expired tokens |

Breaking changes β€” end to end

A breaking change carries three coordinated signals, so no consumer of the log misses it:

  1. Gitmoji πŸ’₯ β€” the type stays whatever the change is (feat, fix, refactor…); πŸ’₯ replaces that type's usual emoji.
  2. ! immediately before the colon β€” feat(api)!:. Per the spec this alone marks the commit breaking; the description then carries the what.
  3. BREAKING CHANGE: footer β€” add it whenever the break needs more detail than the subject holds (what broke, what to do instead). MUST be uppercase; BREAKING-CHANGE: is an accepted synonym. A multi-line footer value indents its continuation lines with a leading space (git trailer folding) β€” an unindented continuation detaches from the token and the parseability is lost.
πŸ’₯ feat(api)!: redesign authentication API

BREAKING CHANGE: authentication endpoints now require OAuth2;
 API-key access is removed.

A breaking commit means MAJOR in the next release and must produce a changelog entry that names the break (keep-a-changelog).

Reverts

The spec deliberately leaves revert behavior open; use its recommended pattern β€” type revert with βͺ️, subject naming what is undone, and a Refs: footer with the reverted SHA(s):

βͺ️ revert: add OAuth login support

Reverts the OAuth rollout; provider quota blocks production logins.

Refs: 676104e

Body and footers (optional)

Add a body when the subject alone can't carry the context: multiple meaningful changes, non-obvious motivation, or bullet-style notes.

  • Blank line after the subject (and again before footers)
  • Bullets use - only; at most 4, each ≀ 80 characters, action-oriented β€” group or summarize beyond that
  • Wrap body lines at 72 characters β€” git log does not wrap for you
  • Footers follow the git trailer convention: Token: value or Token #value, multi-word tokens hyphenated. Supported here: BREAKING CHANGE:, Closes #123, Refs #123, Refs:
✨ feat(auth): add OAuth login

- add Google provider
- add GitHub provider
- store refresh tokens securely

The body is capped, and the cap is enforced

12 non-blank lines is the target; 20 is a hard failure. Footers and fenced blocks don't count, so evidence that must travel with the commit β€” a stack trace, a failing config, a benchmark table β€” goes in a fence.

The cap exists because commit bodies drift toward being documents, and the drift is one-directional: nobody has ever written too little and regretted it in git blame. Write for the person who lands here in two years asking "why is this line like this?", not for the reviewer who already has the diff open.

What belongs in a body
  • The motivation the diff cannot show β€” the constraint, the bug's mechanism, the rejected alternative
  • The consequence a reader would not predict from the change itself
  • What the change deliberately does not do, when the omission looks like an oversight
What does not
  • Session narrative. "Then I ran the tests, which found X, so I fixed Y." The tell: the body describes the author's activity rather than the code's new state. This belongs in the PR description.
  • Evidence dumps. Test counts, coverage percentages, mutation tallies. A reviewer wants these in the PR, where they are current; in git log they are fossils. Exception: a number that is the reason for the change ("p99 was 240ms against a 150ms bar").
  • Restating the subject in longer words, or listing files the diff already names.
  • Process commentary β€” which skill you followed, which pass found it, how many rounds it took.

If the explanation genuinely needs more room, it is not a commit body. Put it in an RFC, an issue, or the PR description, and let the commit link to it β€” one line, permanently resolvable, instead of twenty that age in place.

A long body is often a batching smell. Six paragraphs usually means six commits: if the body needs headings or a topic per paragraph, the "one commit, one semantic story" rule above is the actual finding.

SemVer signal

The type is what release tooling reads:

| Commit | Release impact | |---|---| | fix | PATCH | | feat | MINOR | | any type with ! or BREAKING CHANGE: | MAJOR | | other types | none by themselves |

Mislabeling a feature as chore hides it from the release; mislabeling a refactor as feat inflates the version. Choose the type for what the change does, not for how it felt to write.

Pull Request titles

Same format, tighter constraints β€” the title must drop into GitHub unedited:

  • Exactly one line: no body, bullets, or footers
  • No issue references unless the user explicitly asks
  • Mixed-change PRs get one primary semantic category, not an enumeration
  • Breaking PRs use ! in the title; migration notes go in the PR description, never the title

Checking a message

scripts/check_commit_msg.py validates the format β€” including the emoji↔type pairing, which it reads from references/gitmoji-mapping.md rather than restating:

python3 scripts/check_commit_msg.py --message "✨ feat(api): add OAuth login"
python3 scripts/check_commit_msg.py --range main..HEAD    # audit a branch
python3 scripts/check_commit_msg.py --file "$1"           # commit-msg hook

It catches wrong emoji/type pairs, unofficial gitmoji, the three breaking signals disagreeing, a lowercase or unfolded BREAKING CHANGE footer, past-tense descriptions, a body without its blank line, and a body over the hard cap. Subject length, the soft body cap and unwrapped body lines are warnings, not failures. As a commit-msg hook it turns this skill from advice into enforcement (see ratchet-what-you-build).

The body cap is enforced in the script rather than stated here for a reason: it was added because the prose rule above was being read, agreed with, and ignored in the same session. A rule enforced by memory drifts; see drift-to-gate.

Output

Output only the commit message or PR title β€” no explanations, no alternatives unless requested.

Related skills

  • keep-a-changelog β€” turning the same changes into user-facing CHANGELOG.md entries; breaking commits here require explicit break entries there.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source β€” we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.