Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates conventional commit messages from staged changes. Use when committing and needing a well-formatted message. Do not use for full PR prep; use pr-prep.
.claude/skills/athola-commit-messages/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-11 | ✗→✓ | ▲ Improved | 55% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 24% | 0% |
| case-15 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-03 | ✓→✗ | ▼ Worse | 70% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 82% | 0% |
git status -sbgit diff --cached --statgit diff --cachedgit log --oneline -5leyline:sem-integration):sem diff --staged --json for entity-level changes
If nothing is staged, tell the user and stop.
When sem output is available, use entity names (function, class, method) in the commit subject and body instead of parsing raw diff hunks. For example, "add function validate_webhook_url" instead of "add validation logic to notify.py".
feat, fix, docs, refactor,test, chore, style, perf, ci) and optional scope.
<type>(<scope>): <imperative summary> (50 chars max)discussion trailer below
3a. Discussion trailer: when the change resolves a finding from the Discussions board, add a trailer on its own line:
Addresses-Discussion: #654 Addresses-Discussion: #604, #610
This is the only signal scripts/reconcile_discussions.py accepts as proof a finding is done. It posts the resolution comment and closes the discussion, so the board stops carrying work that is already finished.
Only add it when this commit resolves the finding. Prose that merely names a discussion is read as a mention and is never written back. That distinction is load-bearing: 6b28aa1a says "posted 13 insights to discussions #424-#436", which is the commit that opened those discussions. A trailer there would have announced "Addressed" on findings nobody had looked at yet.
Cite a discussion in the body for context as often as it helps. Reserve the trailer for resolution.
alternatives:
| Reject | Use instead | |--------|-------------| | leverage, utilize | use | | seamless | smooth | | comprehensive | complete | | robust | solid | | facilitate | enable | | streamline | simplify | | optimize | improve | | delve | explore | | multifaceted | varied | | pivotal | key | | intricate | detailed |
Also reject: "it's worth noting", "at its core", "in essence", "a testament to"
4a. Character-level slop check: load shared/output-hygiene.md (Contract A) and strip these markers. Inline fallback if that module is absent:
| Marker | Replace with | |--------|--------------| | "+" as a prose conjunction | and (keep + in versions/code) | | em-dash — | colon, period, comma, or rewrite | | -- as prose punctuation | colon or rewrite | | arrows -> / → as connectors | to / into | | smart quotes “ ” ‘ ’ | straight " and ' |
4b. Subject-matter check (Contract B): describe the change by its reader-facing effect. Name neither the AI origin nor the specific marker removed. Do NOT write remove AI slop, de-slop, AI-generated content, AI phrasing, replace em-dashes, or remove smart quotes. Test: if the subject only makes sense as "I cleaned up AI output", rewrite it. For example docs: clarify the setup section, not style: replace em-dashes with colons.
./commit_msg.txt and preview.git commit --no-verify or -nconfirms HEAD advanced (git rev-parse HEAD before and after) before reporting the commit as landed. An auto-fixing hook aborts the commit while printing a tail that reads like success, so hook output is not evidence. See discussion #614.
commit_msg.txt written to the working directory containingthe drafted conventional commit message
<type>(<scope>): <summary> format andis at most 50 characters
utilize, seamless, comprehensive, robust, etc.) appear in the message
+ as proseconjunction, no smart quotes, no -> as prose connector
"nothing staged" without producing a commit message
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 6,708 | 6,332 | -6% | 1 | 1 | 0% | 980 | 1,785 | +82% | 0 | 0 | — |
case-02 | pass→pass | 3,746 | 6,422 | +71% | 1 | 1 | 0% | 545 | 1,702 | +212% | 0 | 0 | — |
case-03 | pass→fail | 10,077 | 5,270 | -48% | 1 | 1 | 0% | 885 | 1,506 | +70% | 0 | 0 | — |
case-04 | fail→fail | 3,247 | 5,480 | +69% | 1 | 1 | 0% | 325 | 1,502 | +362% | 0 | 0 | — |
case-05 | fail→fail | 15,735 | 4,180 | -73% | 1 | 1 | 0% | 217 | 1,496 | +589% | 0 | 0 | — |
case-06 | fail→fail | 2,614 | 3,952 | +51% | 1 | 1 | 0% | 280 | 1,484 | +430% | 0 | 0 | — |
case-07 | pass→pass | 16,247 | 2,278 | -86% | 1 | 1 | 0% | 1,617 | 1,632 | +1% | 0 | 0 | — |
case-08 | pass→pass | 9,104 | 3,115 | -66% | 1 | 1 | 0% | 1,626 | 1,823 | +12% | 0 | 0 | — |
case-09 | pass→pass | 5,755 | 2,476 | -57% | 1 | 1 | 0% | 903 | 1,750 | +94% | 0 | 0 | — |
case-10 | pass→pass | 8,783 | 4,341 | -51% | 1 | 1 | 0% | 1,282 | 1,961 | +53% | 0 | 0 | — |
case-11 | fail→pass | 7,494 | 3,239 | -57% | 1 | 1 | 0% | 1,138 | 1,763 | +55% | 0 | 0 | — |
case-12 | pass→pass | 6,639 | 3,957 | -40% | 1 | 1 | 0% | 1,117 | 1,886 | +69% | 0 | 0 | — |
case-13 | pass→pass | 5,916 | 1,961 | -67% | 1 | 1 | 0% | 900 | 1,495 | +66% | 0 | 0 | — |
case-14 | fail→pass | 9,049 | 3,249 | -64% | 1 | 1 | 0% | 1,415 | 1,750 | +24% | 0 | 0 | — |
case-15 | fail→pass | 12,098 | 3,948 | -67% | 1 | 1 | 0% | 1,962 | 1,863 | -5% | 0 | 0 | — |
case-16 | pass→pass | 7,143 | 2,899 | -59% | 1 | 1 | 0% | 1,128 | 1,676 | +49% | 0 | 0 | — |
case-17 | pass→pass | 5,743 | 3,436 | -40% | 1 | 1 | 0% | 957 | 1,806 | +89% | 0 | 0 | — |
case-18 | pass→pass | 5,128 | 4,170 | -19% | 1 | 1 | 0% | 807 | 1,927 | +139% | 0 | 0 | — |
case-19 | pass→pass | 3,832 | 2,813 | -27% | 1 | 1 | 0% | 603 | 1,674 | +178% | 0 | 0 | — |
case-20 | pass→pass | 7,429 | 3,112 | -58% | 1 | 1 | 0% | 860 | 1,721 | +100% | 0 | 0 | — |
case-21 | pass→pass | 5,193 | 3,116 | -40% | 1 | 1 | 0% | 791 | 1,675 | +112% | 0 | 0 | — |
case-22 | pass→pass | 6,198 | 1,384 | -78% | 1 | 1 | 0% | 1,007 | 1,443 | +43% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 18 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.