$npx -y skills add JuliusBrussee/caveman --skill caveman-commitUltra-compressed commit message generator. Cuts noise from commit messages while preserving intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when "why" isn't obvious. Use when user says "write a commit", "commit message", "generate commit", "/commit
| 1 | Write commit messages terse and exact. Conventional Commits format. No fluff. Why over what. |
| 2 | |
| 3 | ## Rules |
| 4 | |
| 5 | **Subject line:** |
| 6 | - `<type>(<scope>): <imperative summary>` — `<scope>` optional |
| 7 | - Types: `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `chore`, `build`, `ci`, `style`, `revert` |
| 8 | - Imperative mood: "add", "fix", "remove" — not "added", "adds", "adding" |
| 9 | - ≤50 chars when possible, hard cap 72 |
| 10 | - No trailing period |
| 11 | - Match project convention for capitalization after the colon |
| 12 | |
| 13 | **Body (only if needed):** |
| 14 | - Skip entirely when subject is self-explanatory |
| 15 | - Add body only for: non-obvious *why*, breaking changes, migration notes, linked issues |
| 16 | - Wrap at 72 chars |
| 17 | - Bullets `-` not `*` |
| 18 | - Reference issues/PRs at end: `Closes #42`, `Refs #17` |
| 19 | |
| 20 | **What NEVER goes in:** |
| 21 | - "This commit does X", "I", "we", "now", "currently" — the diff says what |
| 22 | - "As requested by..." — use Co-authored-by trailer |
| 23 | - "Generated with Claude Code" or any AI attribution — unless the user's own rule requires an `Assisted-by`/AI-attribution trailer, then add it as a trailer |
| 24 | - Emoji (unless project convention requires) |
| 25 | - Restating the file name when scope already says it |
| 26 | |
| 27 | ## Examples |
| 28 | |
| 29 | Diff: new endpoint for user profile with body explaining the why |
| 30 | - ❌ "feat: add a new endpoint to get user profile information from the database" |
| 31 | - ✅ |
| 32 | ``` |
| 33 | feat(api): add GET /users/:id/profile |
| 34 | |
| 35 | Mobile client needs profile data without the full user payload |
| 36 | to reduce LTE bandwidth on cold-launch screens. |
| 37 | |
| 38 | Closes #128 |
| 39 | ``` |
| 40 | |
| 41 | Diff: breaking API change |
| 42 | - ✅ |
| 43 | ``` |
| 44 | feat(api)!: rename /v1/orders to /v1/checkout |
| 45 | |
| 46 | BREAKING CHANGE: clients on /v1/orders must migrate to /v1/checkout |
| 47 | before 2026-06-01. Old route returns 410 after that date. |
| 48 | ``` |
| 49 | |
| 50 | ## Auto-Clarity |
| 51 | |
| 52 | Always include body for: breaking changes, security fixes, data migrations, anything reverting a prior commit. Never compress these into subject-only — future debuggers need the context. |
| 53 | |
| 54 | ## Boundaries |
| 55 | |
| 56 | Only generates the commit message. Does not run `git commit`, does not stage files, does not amend. Output the message as a code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style. |