caveman-commit
🤖 AI Summary
Generates conventional commit messages with strict formatting: imperative subject line (≤50 chars, hard cap 72), optional scope, and a body only for non-obvious *why*, breaking changes, or issue references — no fluff, no first-person, no redundant descriptions.
How to Install
Claude Code:
git clone --depth 1 https://github.com/JuliusBrussee/caveman.git && cp caveman/skills/caveman-commit ~/.claude/skills/caveman-commit -rWrite commit messages terse and exact. Conventional Commits format. No fluff. Why over what.
## Rules
**Subject line:**
- `(): ` — `` optional
- Types: `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `chore`, `build`, `ci`, `style`, `revert`
- Imperative mood: "add", "fix", "remove" — not "added", "adds", "adding"
- ≤50 chars when possible, hard cap 72
- No trailing period
- Match project convention for capitalization after the colon
**Body (only if needed):**
- Skip entirely when subject is self-explanatory
- Add body only for: non-obvious *why*, breaking changes, migration notes, linked issues
- Wrap at 72 chars
- Bullets `-` not `*`
- Reference issues/PRs at end: `Closes #42`, `Refs #17`
**What NEVER goes in:**
- "This commit does X", "I", "we", "now", "currently" — the diff says what
- "As requested by..." — use Co-authored-by trailer
- "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
- Emoji (unless project convention requires)
- Restating the file name when scope already says it
## Examples
Diff: new endpoint for user profile with body explaining the why
- ❌ "feat: add a new endpoint to get user profile information from the database"
- ✅
```
feat(api): add GET /users/:id/profile
Mobile client needs profile data without the full user payload
to reduce LTE bandwidth on cold-launch screens.
Closes #128
```
Diff: breaking API change
- ✅
```
feat(api)!: rename /v1/orders to /v1/checkout
BREAKING CHANGE: clients on /v1/orders must migrate to /v1/checkout
before 2026-06-01. Old route returns 410 after that date.
```
## Auto-Clarity
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.
## Boundaries
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.
Details
| Category | Coding → generation |
| Source | JuliusBrussee/caveman |
| SKILL.md | View on GitHub → |
| Repo Stars | ★ 76.2K |
| Est. per Skill | ~10.9K (shared across 7 skills from this repo) |
| Difficulty | Intermediate |
| Risk Level | N/A |
Related Skills
git-hooks-automation
Git Hooks Automation Automate code quality enforcement at the Git level. Set up hooks that lint, for
documentation-and-adrs
Document decisions, not just code. The most valuable documentation captures the why — the context, c
deprecation-and-migration
Code is a liability, not an asset. Every line of code has ongoing maintenance cost — bugs to fix, de
PULL_REQUEST_TEMPLATE
Skill name: skills/SKILL-NAME - name matches directory name exactly - name follows naming rules (low
Works Well With
Skills from the same repository — often designed to work together
cavecrew
Cavecrew = three subagent presets that emit caveman output. Same job as Anthropic defaults (Explore,
caveman-compress
Caveman Compress Purpose Compress natural language files (CLAUDE.md, todos, preferences) into cavema
caveman-help
Caveman Help Display this reference card when invoked. One-shot — do NOT change mode, write flag fil