Agent Skills › Git & Workflow › commit-craft

Git & Workflow

🧱 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-craft

Included in packs: indie-hacker-pack, developer-pack

What to say to your agent

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

  1. 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 ``

  1. 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.
  2. Propose the plan first and wait for confirmation:

```text

  1. feat(auth): add refresh-token rotation → src/auth/token.ts, src/auth/session.ts
  2. test(auth): cover refresh-token rotation → tests/auth/token.test.ts
  3. chore(deps): bump jsonwebtoken to 9.0.2 → package.json, package-lock.json

```

  1. Execute each commit with explicit paths (git add <paths>, or git add -p for files containing mixed intents), then git commit.
  2. Show the final git log --oneline for 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, .env files, build output or huge binaries. Warn instead.
  • Never run git push, rebase, reset --hard or --amend on pushed commits unless the user explicitly asks.
  • Mark breaking changes with ! (for example feat(api)!:) and add a BREAKING CHANGE: footer.

View source on GitHub ⭐ Star the collection

Related skills