human-commit
npx skills add https://github.com/b4r7x/agent-skills --skill human-commit
Agent 安装分布
Skill 文档
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/â scopeauth) - 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 CHANGEfooter
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): subjectformat â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 expiringnotfix: 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.