agentleFS
haiderstudiohaiderstudio/commit-message-skill/skills/commit-message/SKILL.md

commit-message

Skill0 starsChanged 13 days agoMITView on GitHub

Write a Conventional Commits message from a real diff. Use when a user asks to write, fix, or review a commit message, or to turn a set of changes into a clear commit. Works from the actual diff and the files it touches, never from a vague summary, and refuses messages that say nothing.

  • Commits and pushes

62 other projects use a version of this, 1 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use pr-description, changelog and 9 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • MicrosoftSkill

    pr-description

    Draft Nacelle PR titles, pull request descriptions, commit titles, commit descriptions, and squash commit messages. Use when asked for PR or commit wording, a branch summary, or a PR description that can be used in a commit. Omit validation sections from commit bodies and remove filler.

    Also in 9 projects that use this

  • HashiCorpSkill

    changelog

    Add a `.changelog/<PR_NUMBER>.txt` entry for a GitHub Pull Request, commit, and push.

    Also in 3 projects that use this

  • GitHubSkill

    refactor

    Surgical code refactoring to improve maintainability without changing behavior. Covers extracting functions, renaming variables, breaking down god functions, improving type safety, eliminating code smells, and applying design patterns. Less drastic than repo-rebuilder; use for gradual improvements.

    Also in 3 projects that use this

  • GoogleSkill

    code-review

    Adversarial systems, concurrency, memory-model, and architecture code review protocol. Use this skill whenever asked to review code, PRs, diffs, or branches in Filament.

    Also in 7 projects that use this

  • GoogleSkill

    grilling

    Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.

    Also in 3 projects that use this

  • OpenAISkill

    brainstorming

    You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.

    Also in 3 projects that use this

  • +2 more from google

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 11 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 51 edited versions we read keep these.

  • 11

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Write a commit message a stranger can trust: what changed, why, and whether anything breaks — derived from the diff itself.

    line 8
  2. Distinctive:

    Use it when the user asks to:

    line 13
  3. Distinctive:

    Write a commit message for changes they have already made.

    line 14
  4. Distinctive:

    Do not use it to describe changes you have not seen.

    line 22
  5. Distinctive:

    Do not use it as a release-notes writer, a changelog writer, or a code reviewer.

    line 24
  6. Distinctive:

    Do not use it to commit anything by itself.

    line 26
  7. Distinctive:

    Do not use it to invent a reason for a change.

    line 28
  8. Distinctive:

    Every claim in the message must be traceable to a line in the diff.

    line 155
  9. Distinctive:

    Never invent a ticket number, an issue link, a test result, or a reason the diff does not show.

    line 158
  10. Distinctive:

    Never claim tests pass unless they were actually run, and never claim a change is safe, minor, or non-breaking without checking the diff …

    line 160
  11. Distinctive:

    Never run git commit, git push, or any command that records the change.

    line 163

“Common” is measured: kept by at least 6 in 10 of the 51 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

commit-message

Write a commit message a stranger can trust: what changed, why, and whether anything breaks — derived from the diff itself.

When to use this skill

Use it when the user asks to:

  • Write a commit message for changes they have already made.
  • Fix a vague commit message ("fixed stuff", "updates", "wip") into one that says what actually changed.
  • Review a commit message against the diff it describes.
  • Split one large set of changes into separate, honest commits.

When NOT to use it

  • Do not use it to describe changes you have not seen. Read the diff first; a summary from memory is not a diff.
  • Do not use it as a release-notes writer, a changelog writer, or a code reviewer. Those are separate jobs with their own rules.
  • Do not use it to commit anything by itself. This skill writes the message; the user runs the commit, after reading the message.
  • Do not use it to invent a reason for a change. If the diff does not show why, say so and ask — do not fill the gap with a guess.

Workflow

1. Read the real diff, in this order

  1. List every file the diff touches, with added and removed lines.
  2. Group the changes by what they do, not by which file they sit in. One behaviour change is one commit; a mixed diff is split, not summarised into one blurry message.
  3. Note anything the diff alone cannot explain: a ticket number, a user-visible reason, a test result. Those stay out of the message unless the user supplies them.

2. Pick the type and the scope from the diff

Types, and what each one means:

  • feat — a new user-facing capability.
  • fix — a bug fix for existing behaviour.
  • docs — documentation only.
  • style — formatting only; no behaviour change.
  • refactor — code restructured with no behaviour change.
  • perf — a performance improvement.
  • test — tests only.
  • chore — build, tooling, or maintenance with no product change.
  • build — build system or dependency changes.
  • ci — continuous-integration configuration only.
  • revert — undoing an earlier commit (name that commit).

Scope is the area the diff actually touches, in one lowercase word taken from the changed paths: auth for src/auth/, billing for src/billing/, docs for documentation files. If the diff spans several unrelated areas, that is a sign it should be split, not a reason to drop the scope.

3. Write the subject line

Format: type(scope): subject, all lowercase except proper nouns, no trailing full stop, 72 characters or fewer.

The subject must name the change in the imperative mood ("add", "fix", "remove", "raise") and must be checkable against the diff: a reader with the diff in front of them should be able to point at the lines that prove the subject true. Subjects that fail this test — "fix stuff", "update code", "various changes", "wip" — are refused, with the exact reason, not rewritten into a prettier version of the same vagueness.

4. Add a body only when the diff needs explaining

A body is two to four lines, and it explains why the change was made and what it changes for the reader, never a line-by-line retelling of the diff (the diff already shows that). Leave the body out entirely when the subject plus the diff is already clear — a one-line typo fix needs no body.

5. Flag breaking changes in the footer, never in passing

A change is breaking when it removes or renames a public function, changes a file format, drops a supported option, or changes behaviour a caller depends on. Mark it exactly like this:

BREAKING CHANGE: <what breaks and what the caller must do instead>

A breaking change is never hidden inside the body, and a non-breaking change never carries the flag. If the diff might break something but you cannot tell from the diff alone, say that plainly and ask the user — do not guess either way.

6. Report in this fixed format

  1. The message, in a code block, ready to paste.
  2. One line per refused draft, if any, naming the draft and the exact rule it broke.
  3. Anything the message deliberately leaves out (a ticket number, a test result, a reason not visible in the diff), listed by name, with why it was left out.

Good examples

A bug fix, scope taken from the changed path:

fix(auth): reject expired tokens instead of refreshing them

A new feature with a body that explains why:

feat(billing): add monthly usage summary to the invoice page

Customers asked for a single place to see what they used before
paying. The summary reads the same usage records the invoice
already totals, so the two can never disagree.

A breaking change, flagged in the footer:

feat(api): rename list_users to list_customers

BREAKING CHANGE: list_users is removed. Callers must use
list_customers, which takes the same arguments.

Bad examples (do not write like this)

fix stuff

It names no area, no behaviour, and no fix. Nothing in a diff could prove or disprove it.

update code and improve things

Two vague verbs, no subject, no scope. A reader cannot tell what was updated or what improved.

feat: added new feature

The type is right and everything else is missing: no scope, no feature named, and the past tense where the imperative belongs.

fix(auth): fix the bug and also update the docs and bump deps

Three unrelated changes in one message. Split it into three commits, one message each.

Output rules

  • Output one message per commit, each in its own code block.
  • Every claim in the message must be traceable to a line in the diff. If it cannot be traced, leave it out and list it as deliberately omitted.
  • Never invent a ticket number, an issue link, a test result, or a reason the diff does not show.
  • Never claim tests pass unless they were actually run, and never claim a change is safe, minor, or non-breaking without checking the diff for callers it affects.
  • Never run git commit, git push, or any command that records the change. Writing the message is the whole job; committing is the user's decision, after reading it.

Limits and safety rules

  • This skill reads diffs and file paths only. It sends nothing anywhere, stages nothing, and commits nothing.
  • It does not rewrite history, amend a commit, or force-push. A message for an already-made commit is a suggestion for the next one, not a rewrite of the past.
  • It does not work from a remembered or summarised change. If there is no diff, the report says so and stops at that fact; it does not invent one.
  • Local fixture diffs (see examples/sample-diff.diff) cannot prove a live reason or a live test result. A walkthrough run on fixtures marks those items as deliberately omitted, exactly as the sample messages do.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.