mcpField
H
human-commit

human-commit

github.com/b4r7xDevelopment037 installsUpdated 12w ago
Repository

About human-commit

A skill that generates Git commit messages for developers by reading staged or working-tree changes and checking recent commit style. It returns three options based on the change scope and nature, and flags potential breaking changes.

Key features

  1. 01Read Git diffs and file status
  2. 02Match recent commit style
  3. 03Identify change type and scope
  4. 04Generate three commit message options
  5. 05Flag potential breaking changes

Use cases

  1. 01Write a message for staged code changes
  2. 02Summarize the theme of a large diff
  3. 03Match new commits to repository conventions

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/b4r7x/agent-skills --skill human-commit

After installing, type/human-commitin Claude Code to confirm it loaded.

Details

From the project README

Human Commit

Reads git changes and generates commit messages that sound like a real developer wrote them.

Workflow

Step 1 — Read the diff
git diff --cached 2>/dev/null

If output is empty (nothing staged), fall back to:

git diff HEAD 2>/dev/null

Also check what files are involved:

git status --short 2>/dev/null

If the diff is longer than ~500 lines, don't try to analyze it raw. First identify the top changed files:

git diff --cached --stat 2>/dev/null || git diff HEAD --stat 2>/dev/null

Then focus analysis on the most-changed files and the overall theme, not every line.

Step 1b — Detect repo commit style
git log --oneline -5 2>/dev/null

Look at the last 5 commits. If most follow Conventional Commits format (type(scope): subject or type: subject), the repo uses CC. If they're plain lowercase sentences, stick to plain style. Match the existing style — don't introduce a new one.

Step 2 — Analyze the changes

Identify:

  • What files changed and in what area (auth, UI, deps, config, tests, etc.)
  • The nature of the change (fix, add, remove, move, update, refactor)
  • Whether there's an obvious "why" (bug, cleanup, new feature, maintenance)
  • Scope (for monorepos): if changed files are under packages/, apps/, or named workspaces, infer scope from the directory name (e.g., packages/auth/ → scope auth)
  • Breaking changes: if the diff removes exported functions, renames public interfaces, changes function signatures, or bumps a major version, flag it — the message may need a BREAKING CHANGE footer
Step 3 — Generate 3 options

Output exactly 3 commit message options. Each on its own line, in a code block.

Style rules (adapt to repo style detected in Step 1b):

If the repo uses Conventional Commits (detected in Step 1b):

  • Use type(scope): subject format — fix, feat, refactor, chore, docs, test, build
  • Scope is optional; include it if changed files suggest a clear scope
  • Subject lowercase, imperative mood, ≤72 chars
  • If a breaking change was detected: add blank line + BREAKING CHANGE: <what changed>

If the repo uses plain style (or no clear pattern):

  • Lowercase subject line
  • Subject ~50 chars (up to 72 is fine)
  • No conventional commit prefixes — fix tokens not expiring not fix: resolve token expiry
  • Imperative mood — "fix X" not "fixed X" or "fixes X"

Both styles:

  • Skip obvious filler — not "update code to fix the issue with the login"
  • Optional body — add a blank line + 1-2 lines only if the change genuinely needs explanation (lines ≤72 chars)

Anti-patterns to avoid:

  • ❌ implement JWT token validation middleware with expiry checking
  • ❌ refactor: extract authentication logic into separate service module
  • ❌ fix: resolve issue with user authentication token expiration handling
  • ✅ fix tokens not expiring
  • ✅ move auth to its own file
  • ✅ bump deps
  • ✅ add dark mode toggle
  • ✅ fix login redirect on mobile

Output Format

Plain style:

Option 1: fix tokens not expiring
Option 2: auth middleware wasn't checking expiry
Option 3: fix expired jwt tokens still passing through

Conventional Commits style:

Option 1: fix(auth): tokens not expiring on check
Option 2: fix(auth): jwt expiry not validated
Option 3: fix: expired tokens still passing auth middleware

With a body (when useful):

Option 2: reorganize auth module

pulled jwt logic out, the file was getting too long

With a breaking change footer:

Option 1: refactor(api): rename user endpoints

BREAKING CHANGE: /users/:id renamed to /users/:userId

Pick the best option as Option 1.

Comments

Markdown supported