From maigo
Drafts concise, user-impact Git commit messages from staged changes, avoiding PR-description motivation. Works for new commits, amend, and squash/rewrite messages.
How this skill is triggered — by the user, by Claude, or both
Slash command
/maigo:commit-messageThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- mkdocs-include-start -->
Consumers: any task that drafts a commit message — manual git commit, git commit --amend on an unreleased local-branch commit, squash messages, branch-rewrite scripts, agent-drafted commits.
Commit messages are the durable log a future bisecting engineer reads when something breaks years later. The reviewer reads the PR description; the future maintainer reads the commit log. They serve different audiences, and the failure mode of drafting agents is to conflate them.
Common failures:
"Initialize Dag bundles in CLI get_dag function") instead of user-impact ("Fix airflow dags test command failure without serialized Dags").## Why paragraph. git log becomes harder to scan, not easier.This skill encodes the short, durable style. It pairs with github-title-description: the PR body carries motivation and test plan; the commit body carries durable facts + pointers.
git diff --staged, or the contents of the impending change if not yet staged.git log <base>..HEAD --pretty=format:'%h %s%n%b' --no-merges. Match the existing subject style on amend; do not change the framing just because a polish round happened.pyproject.toml has [tool.commitizen] → Conventional Commits expected..cz.toml / .cz.json / cz.yaml → Conventional Commits expected.commitlint.config.js / .commitlintrc* → usually Conventional Commits.feat(scope): form, the amend keeps it; if HEAD is freeform, stay freeform. Do not introduce Conventional Commits prefixes where they were not already in use, and do not strip them from a repo that uses them."Refactor auth.py" is bad; "Reject empty emails at signup" is good.| Bad | Good |
|---|---|
update temporal.py and tests | Support timezone in SDK temporal partition mappers |
Initialize Dag bundles in CLI get_dag function | Fix airflow dags test failure without serialized Dags |
WIP fix | Stop retry storm on 5xx from upstream |
address review comments | Reject empty emails before hashing |
The body is for the future bisecting engineer, not the current reviewer:
git show).github-title-description).git log and need no network round-trip to read, unlike the PR conversation which requires a GitHub fetch.| Anti-pattern | Why it's wrong |
|---|---|
Repeating the PR ## Why paragraph | Duplicates content one click away in the PR; bloats git log; ages poorly |
| File list — "Refactors X, renames Y, extracts helper Z" | Internal-perspective; the diff already lists files |
| Decision narrative — "After discussion we chose A over B" | Belongs in PR review thread, not commit log |
| No body at all on a breaking change | The break + newsfragment pointer must be on the commit |
| Restating the subject as the body | Adds bytes without adding signal |
When polishing review-driven changes on an unreleased local-branch commit, default to git commit --amend rather than stacking a "address review" follow-up commit. After amending, rewrite the subject + body in line with this skill — do not let the original "draft" message survive into the squash-merge just because nobody looked at it again.
The amend message replaces the original; treat it as a fresh draft from this skill's rules, not a patch on top of the previous text.
<subject — one line, ≤70 chars, user-impact>
<body — ≤3 sentences or compact bullets; forward pointers explicit; omit entirely if nothing durable to add>
Provide the raw text to the caller. Do not wrap in a code fence by default (the caller usually pipes it into git commit -F - or git commit --amend -F - and an outer fence breaks that). If the caller explicitly asks for a quoted form, fence it then.
When the caller presents the commit message to the user as a deliverable (rather than piping it directly to git commit), follow skills/copyable-deliverable — wrap it in a single fenced code block so the user can copy the raw text without reformatting.
Co-Authored-By trailer. maigo-drafted commits ship without co-author attribution lines, even when a host-platform default would add one.github-title-description.git add strategy, hunk staging) — caller's job.git commit — this skill only drafts text.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub lee-w/maigo --plugin maigo