Skip to content
Development
Skill

/caveman-commit

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",

From plugin
stevesolun-ctx
58516 skills3 agents2 hooks
Install
$ npx -y skills add stevesolun/ctx --skill caveman-commit --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/caveman-commit

Context preview

The summary Claude sees to decide when to auto-load this skill.

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",

SKILL.md

caveman-commit.SKILL.md
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
  • 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.

Read more
Ships withstevesolun-ctx

Find the cheapest AI coding setup that actually works on your repo. CTX Fit analyzes your repository, tests promising AI coding configurations against real tasks in it, and produces the winning configuration as a reviewable change — in your working tree with

Get the whole plugin

Other skills on stevesolun-ctx.