caveman-commit
juliusbrussee/caveman
Ultra-compressed commit messages in Conventional Commits format—terse, exact, why-focused.
What is caveman-commit?
Generates concise commit messages following Conventional Commits conventions. Keeps subjects under 50 characters, omits body text unless the reasoning is non-obvious, and strips all noise. Use when you need to write a commit message or invoke /caveman-commit.
- Formats commits as `<type>(<scope>): <summary>` with 10 types (feat, fix, refactor, perf, docs, test, chore, build, ci, style, revert)
- Enforces imperative mood and ≤50 char subject lines (hard cap 72)
- Includes body only for non-obvious reasoning, breaking changes, migrations, or issue references
- Removes fluff: no "this commit", pronouns, AI attribution, emoji, or file-name repetition
- Auto-triggers when staging changes or on explicit /caveman-commit invocation
How to install caveman-commit
npx skills add https://github.com/juliusbrussee/caveman --skill caveman-commitHow to use caveman-commit
- 1.Stage your changes with `git add`
- 2.Invoke the skill by typing "write a commit", "commit message", "generate commit", or `/caveman-commit`
- 3.Review the generated message in the code block output
- 4.Copy and paste the message into your `git commit -m` command or editor
- 5.Run `git commit` manually—the skill does not stage, commit, or amend automatically
Use cases
- Quickly generate clean commit messages for feature branches and bug fixes
- Document breaking API changes with required context for future maintainers
- Create terse commits for refactoring and performance improvements without verbose explanations
- Maintain consistent Conventional Commits style across a team or project
- Generate commit messages during rapid development without context-switching
- Developers working in teams with Conventional Commits standards
- Projects using automated changelog or release-note generation
- Engineers who want faster, noise-free commit history
- Teams practicing trunk-based or frequent-commit workflows
caveman-commit FAQ
Only when the *why* is non-obvious. Always include body for breaking changes, security fixes, data migrations, and reverts. Skip it for self-explanatory diffs.
No, unless your project convention explicitly requires it. The skill strips emoji and fluff by default.
No. It only generates the message as a code block. You copy and paste it, then run `git commit` yourself.
Say "stop caveman-commit" or "normal mode" to revert to verbose commit style.
No AI attribution is added unless your project's own rule requires an `Assisted-by` or similar trailer. The skill respects your project's conventions.
Full instructions (SKILL.md)
Source of truth, from juliusbrussee/caveman.
name: caveman-commit description: > Ultra-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", or invokes /caveman-commit. Auto-triggers when staging changes.
Write commit messages terse and exact. Conventional Commits format. No fluff. Why over what.
Rules
Subject line:
<type>(<scope>): <imperative summary>—<scope>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.
Related skills
More from juliusbrussee/caveman and the wider catalog.
caveman
Cut token usage ~75% with caveman-mode responses — full technical accuracy, zero fluff
caveman-review
Ultra-compressed code review comments: location, problem, fix. One line per finding.
caveman-compress
Compress memory files into caveman-speak to save input tokens while preserving code and structure.
caveman-help
Quick-reference card for caveman modes, skills, and commands—display on demand.
cavecrew
Delegate to compressed subagents—investigator, builder, reviewer—to keep main context lean across long sessions.
caveman-stats
Display real token usage and estimated savings for your Claude Code session.