🧱 commit-craft
Turn messy changes into clean, atomic Conventional Commits. A free, open-source Agent Skill for Claude Code, Cline, Cursor, Codex and 75+ AI agents.
Install commit-craft
# Claude Code (all 51 skills)
/plugin install all-skills --marketplace milad-ahmd/agent-skills
# Cursor, Codex, Cline, Windsurf, Copilot + 75 more agents
npx skills add milad-ahmd/agent-skills --skill commit-craft
# Shell installer
curl -fsSL https://raw.githubusercontent.com/milad-ahmd/agent-skills/main/install.sh | bash -s -- commit-craftIncluded in packs: indie-hacker-pack, developer-pack
What to say to your agent
Commit my changesSplit these changes into clean commits
When it triggers
Turns messy working-tree changes into clean, atomic Conventional Commits, splitting unrelated changes into separate commits with clear messages. Use when the user asks to commit, write a commit message, split changes into commits, or clean up git history before a PR.
Full skill instructions (SKILL.md)
Commit Craft
Make the git history something reviewers enjoy reading.
Workflow
- Inspect state (read-only):
``bash git status --porcelain git --no-pager diff --stat; git --no-pager diff git --no-pager diff --cached git --no-pager log --oneline -15 # learn the repo's existing message style ``
- Group changes by intent, not by file. One commit = one reason to change (a feature, a fix, a refactor, docs, deps, formatting). Formatting-only and dependency bumps always go in their own commits.
- Propose the plan first and wait for confirmation:
```text
- feat(auth): add refresh-token rotation → src/auth/token.ts, src/auth/session.ts
- test(auth): cover refresh-token rotation → tests/auth/token.test.ts
- chore(deps): bump jsonwebtoken to 9.0.2 → package.json, package-lock.json
```
- Execute each commit with explicit paths (
git add <paths>, orgit add -pfor files containing mixed intents), thengit commit. - Show the final
git log --onelinefor the new commits.
Message format (Conventional Commits)
<type>(<optional scope>): <imperative summary, ≤ 72 chars, no period>
<optional body: WHY the change was made, wrapped at 72 chars>
<optional footer: BREAKING CHANGE: ..., Closes #123>
Types: feat, fix, refactor, perf, test, docs, style, build, ci, chore, revert.
Rules
- If the repo already uses a different convention (for example gitmoji or ticket prefixes), follow the repo.
- Use the imperative mood ("add", not "added" or "adds"). Describe behaviour, not files.
- Never commit secrets,
.envfiles, build output or huge binaries. Warn instead. - Never run
git push,rebase,reset --hardor--amendon pushed commits unless the user explicitly asks. - Mark breaking changes with
!(for examplefeat(api)!:) and add aBREAKING CHANGE:footer.
View source on GitHub ⭐ Star the collection