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
- 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
Diff: breaking API change
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.
Output Report
After all main skill tasks complete, write a propose draft to the wiki.
Steps
1. Build the filename:
- Format:
DDMMYY-<ten>.md
DDMMYY = today (e.g., 020626 for 2 June 2026)
<ten> = 2–4 kebab-case words summarising what was done (e.g., landing-page-coteccons, brand-kit-fintech, ingest-auth-spec)
2. Write llmwiki/wiki/draft/cave/DDMMYY-<ten>.md:
# DDMMYY-<ten>
**Type:** draft
**Status:** proposed
**Tags:** <skill-name>, output-report
**Proposed:** YYYY-MM-DD
## What
<One sentence — what this skill invocation produced or decided>
## Output
<Key artefacts, files created/modified, or decisions made>
## Files
| File | Action |
|------|--------|
| `path/to/file` | created / modified |
## Notes
- Invoked via: `/<skill-name>` skill
## Origin
- **Draft:** `wiki/draft/cave/DDMMYY-<ten>.md`
- **Commit:** _(filled by verify-before-commit)_
- **Date promoted:** _(filled by verify-before-commit)_
3. Update wiki index & log:
llmwiki/wiki/index.md — append one row: | [DDMMYY-<ten>](draft/cave/DDMMYY-<ten>.md) | draft | YYYY-MM-DD |
llmwiki/wiki/log.md — append: ## YYYY-MM-DD — <skill-name> — <ten>
Skip only when the skill produces zero artefacts and zero decisions (e.g., a pure display mode like /caveman-stats).
1---2name: caveman-commit3description: 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.4---56Write commit messages terse and exact. Conventional Commits format. No fluff. Why over what.78## Rules910**Subject line:**11- `<type>(<scope>): <imperative summary>` — `<scope>` optional12- Types: `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `chore`, `build`, `ci`, `style`, `revert`13- Imperative mood: "add", "fix", "remove" — not "added", "adds", "adding"14- ≤50 chars when possible, hard cap 7215- No trailing period16- Match project convention for capitalization after the colon1718**Body (only if needed):**19- Skip entirely when subject is self-explanatory20- Add body only for: non-obvious *why*, breaking changes, migration notes, linked issues21- Wrap at 72 chars22- Bullets `-` not `*`23- Reference issues/PRs at end: `Closes #42`, `Refs #17`2425**What NEVER goes in:**26- "This commit does X", "I", "we", "now", "currently" — the diff says what27- "As requested by..." — use Co-authored-by trailer28- "Generated with Claude Code" or any AI attribution29- Emoji (unless project convention requires)30- Restating the file name when scope already says it3132## Examples3334Diff: new endpoint for user profile with body explaining the why35- ❌ "feat: add a new endpoint to get user profile information from the database"36- ✅37 ```38 feat(api): add GET /users/:id/profile3940 Mobile client needs profile data without the full user payload41 to reduce LTE bandwidth on cold-launch screens.4243 Closes #12844 ```4546Diff: breaking API change47- ✅48 ```49 feat(api)!: rename /v1/orders to /v1/checkout5051 BREAKING CHANGE: clients on /v1/orders must migrate to /v1/checkout52 before 2026-06-01. Old route returns 410 after that date.53 ```5455## Auto-Clarity5657Always 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.5859## Boundaries6061Only 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.6263---6465## Output Report6667After all main skill tasks complete, write a propose draft to the wiki.6869### Steps7071**1. Build the filename:**72- Format: `DDMMYY-<ten>.md`73- `DDMMYY` = today (e.g., `020626` for 2 June 2026)74- `<ten>` = 2–4 kebab-case words summarising what was done (e.g., `landing-page-coteccons`, `brand-kit-fintech`, `ingest-auth-spec`)7576**2. Write** `llmwiki/wiki/draft/cave/DDMMYY-<ten>.md`:7778```79# DDMMYY-<ten>80**Type:** draft81**Status:** proposed82**Tags:** <skill-name>, output-report83**Proposed:** YYYY-MM-DD8485## What86<One sentence — what this skill invocation produced or decided>8788## Output89<Key artefacts, files created/modified, or decisions made>9091## Files92| File | Action |93|------|--------|94| `path/to/file` | created / modified |9596## Notes97- Invoked via: `/<skill-name>` skill9899## Origin100- **Draft:** `wiki/draft/cave/DDMMYY-<ten>.md`101- **Commit:** _(filled by verify-before-commit)_102- **Date promoted:** _(filled by verify-before-commit)_103```104105**3. Update wiki index & log:**106- `llmwiki/wiki/index.md` — append one row: `| [DDMMYY-<ten>](draft/cave/DDMMYY-<ten>.md) | draft | YYYY-MM-DD |`107- `llmwiki/wiki/log.md` — append: `## YYYY-MM-DD — <skill-name> — <ten>`108109> Skip only when the skill produces zero artefacts and zero decisions (e.g., a pure display mode like `/caveman-stats`).