git-commit-message – Coding skill for AI agents
Generates conventional-commit messages from staged changes: type prefix + English imperative subject (≤50 chars) + optional body explaining why. Use when the user asks to write, generate, or polish a git commit message.
Install the git-commit-message skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/git-commit-message-d5eab.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /git-commit-message – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/git-commit-message-d5eab.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $git-commit-message – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/git-commit-message-d5eab.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /git-commit-message – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/git-commit-message-d5eab.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /git-commit-message – then describe the task you want done.
SKILL.md content
Git Commit Message Generation
Generate a commit message from the actual staged changes (git diff --cached). The message must let a reader know "what changed and why" without opening the diff.
When to Use
- Use when the user asks to write, generate, or polish a git commit message.
- Use when staged changes need a conventional-commit message with a why-focused body.
Workflow
1. Look at the changes: run git status --short, git diff --cached --stat, and git diff --cached to confirm there is something staged. If staging is empty, use an explicitly supplied diff or change description when available and label that evidence; otherwise request the intended changes. Do not stage files implicitly.
2. Pick a type: choose exactly one type prefix based on the changes (if one commit mixes types, ask the user to split it):
feat: new featurefix: bug fixdocs: documentation onlyrefactor: refactor (behavior unchanged)test: add or change testschore: build, dependencies, misc
3. Write the subject: format type: English imperative phrase, ≤50 characters. Start with a verb: "Add…", "Fix…", "Remove…", "Unify…". Ban empty subjects like "update code", "some changes", "fix bug".
4. Write the body (optional but recommended): 1–3 lines explaining *why*, not a play-by-play of *how*. Bug fixes must state the trigger conditions; features should describe the user-visible change.
5. Output: return the message in the format requested. If supplying a shell command, quote it safely: commit text containing $(), backticks, or quotes must not execute as shell code. For a multiline message prefer writing it verbatim to a temporary file and using git commit -F <message-file>.
Rules
- The subject is for skimmers; the body is for future-you in three months. Keep the two jobs separate.
- A change mixing a feature and a refactor should become two commits, not one
featthat papers over the mess. - No meta-commentary in the message ("generated by AI", etc.) — the message is about the change, nothing else.
Minimal example (runnable)
# 1. Look at the changes first
git status --short
git diff --cached --stat
# 2. Suppose the change: added CAPTCHA verification to the login endpoint
# Generated commit:
git commit -m "feat: add CAPTCHA verification to login endpoint" -m "Blocks automated credential stuffing; CAPTCHA valid 5 minutes, account locks 10 minutes after 3 failures."Another example (bug fixes must state trigger conditions):
git commit -m "fix: keep order-list filters across pagination" -m "Trigger: filter first, then turn the page. Cause: page turns dropped the query params."Limitations
- Only writes the message. Staging, splitting, committing and pushing remain the user's decision, and the skill never runs
git commiton its own. - The 50-character subject and imperative-mood conventions are the common default; repositories with their own commit convention (Gitmoji, Jira prefixes, project overrides) take precedence over this skill.
- It reads the staged diff, so it cannot describe intent that the diff alone does not show. When the "why" is not inferable, the skill asks instead of inventing it.
- Generated or vendored changes (lockfiles, minified output) are summarized collectively rather than listed line by line.
Anti-patterns
- ❌ Writing a message for an empty staging area: no
git diff --cached, no commit message. - ❌ Catch-all
chore: labeling every feat and fix aschoreuntil the type system means nothing. - ❌ Novel-length subjects:
feat: add a really useful feature that greatly improves the user experience— the subject says *what*, leave praise to the user. - ❌ Body as implementation log: "first changed line 20 of a.py, then b.py…" — the diff already shows that; the body explains why.
Related skills
- git-hooks-automation – Master Git hooks setup with Husky, lint-staged, pre-commit framework, and commitlint…
- git-pr-review – Generate a concise and structured PR description from commit history with minimal token…
- git-pr-workflows-git-workflow – Orchestrate review, tests, commits, branch pushes, and pull-request creation with…
- git-pr-workflows-onboard – You are an **expert onboarding specialist and knowledge transfer architect** with deep…
- git-pr-workflows-pr-enhance – Improve pull request descriptions, reviewability, change scope, and supporting…
- git-pushing – Safely stage, commit, and push intended git changes with conventional commit messages…
- git-workflow – Implement Git branching strategies, PR workflows, and release management patterns.
- git-workflow-and-versioning – Structures git workflow practices. Use when making any code change. Use when committing…