Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

ce-commit — Claude Code skill: commits with clear messages

Automatically creates git commits with meaningful messages, splitting changes into logical chunks. Use when you need to save staged or unstaged files without pushing.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add EveryInc/compound-engineering-plugin --skill ce-commit -a claude-code
Open on GitHub

What ce-commit does

The ce-commit skill creates local commits from your working tree. It first gathers context: repo status, uncommitted changes, current branch, and the style of recent messages. If you're on the default branch or in detached HEAD, it creates a feature branch so your work doesn't stay on main.

The message follows your project's convention: if the history shows conventional commits, it uses fix: or feat:; otherwise it matches the existing pattern. The subject describes the outcome ("Fix double-submit on checkout"), not the file list. If the work links to a plan, it appends the unit ID in parentheses ((U3)). Files are staged explicitly by name, avoiding accidental commits of forgotten changes.

When changes clearly split into separate concerns, it makes separate commits. Once done, it reports commit hashes and subjects; the tree is clean.

What it helps with

  • Create a commit with a meaningful message in one step, no manual formatting
  • Split diverse changes into separate logical commits
  • Avoid leaving work only on the default branch

Example prompts for the agent

  • Commit my changes with a clear message
  • Make separate commits from staged files, split by feature
  • Save current changes, creating a branch if needed

How to install ce-commit

1Skills CLI (Vercel)

npx skills add EveryInc/compound-engineering-plugin --skill ce-commit -a claude-code

2Manually: put the files in place

~/.claude/skills/ce-commit/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ce-commit/

From the same set21

The whole set →
ce-brainstorm EveryInc Turns vague ideas into a structured requirements plan through dialogue. Separates product decisions from code. Claude Code CX Codex Cursor +1 3,900installs ce-compound EveryInc A skill that captures non-obvious reasoning from solved problems as durable project knowledge. Use it when the final code works but the logic behind it might vanish when the next person reads the code. Claude Code CX Codex Cursor +1 3,700installs ce-plan EveryInc Builds structured technical implementation plans without touching production code. Useful when scoping features before passing work to execution agents. Claude Code CX Codex Cursor +1 3,700installs ce-code-review EveryInc Reviews a named diff or pull request for bugs, regressions, tests, and project standards. Use it for a current branch review or a specific PR. Claude Code CX Codex Cursor +1 3,700installs ce-work EveryInc Executes a plan document or build spec end-to-end with local verification. Ideal for implementing features without reopening architectural debates. Claude Code CX Codex Cursor +1 3,600installs ce-doc-review EveryInc This skill reviews requirements, plans, and specs through role-based reviewers. Use it to catch consequential issues in an existing document and apply fixes within the granted authority. Claude Code CX Codex Cursor +1 3,600installs ce-debug EveryInc Finds the root cause of a bug from trigger to symptom and applies a test-first fix. Useful when investigating broken behavior or failing CI logs. Claude Code CX Codex Cursor +1 3,500installs lfg EveryInc Takes a request from intake to a finished result and opens a pull request for code changes. Use it when the user explicitly wants autonomous end-to-end work. Claude Code CX Codex Cursor +1 3,500installs

Similar

hunk-review modem-dev Controls live Hunk diff review sessions via CLI to inspect focus, navigate hunks and lines, and post inline review comments. Claude Code CX Codex Cursor +1 1,800installs context-mode-ops mksglu This skill coordinates GitHub work and releases through 10-20 dynamic subagents. Use it for issue triage, PR reviews, adapter checks, and branch sync. Claude Code CX Codex Cursor +1 1,700installs pr-feedback-quality-gate nexu-io Skill for tracking pull request feedback, resolving merge conflicts, and validating fixes. Runs read-only cross-review before commit to catch issues in follow-up changes. Claude Code CX Codex Cursor +1 1,800installs ctx-upgrade mksglu A skill that pulls the latest context-mode from GitHub, rebuilds the plugin, reinstalls it globally, and reconfigures hooks. Run once, get a checklist of results. Claude Code CX Codex Cursor +1 1,600installs triage Matt Pocock This skill moves issues and external PRs through triage states, verification, and agent briefs. It fits maintainers managing an issue queue. Claude Code 990,453installs code-review Matt Pocock Reviews changes from a chosen reference point against repository standards and the originating spec. Use it for a branch, PR, or work in progress. Claude Code 789,521installs implement Matt Pocock Implements work from a specification or tickets, following a test-driven flow and ending with review and a commit. Use it when a coding task needs a defined delivery routine. Claude Code 774,700installs git-guardrails-claude-code Matt Pocock This skill adds a Claude Code hook that stops risky Git commands before they run. Use it when an agent must not push or discard working-tree changes. Claude Code 499,069installs

Questions about ce-commit

How do I install ce-commit in Claude Code?

Run npx skills add EveryInc/compound-engineering-plugin --skill ce-commit -a claude-code, then find SKILL.md at ~/.claude/skills/ce-commit/SKILL.md.

What does ce-commit do?

It creates local git commits with messages that match your project's style, splitting changes into logical chunks. It does not push or create PRs — use ce-commit-push-pr for that.

Will the skill leave my work on the default branch?

No. If you're on main, master, or another default branch, ce-commit automatically creates a feature branch and moves your changes there before committing.

Source text

SKILL.md · MIT
---
name: ce-commit
description: Create a git commit with a clear, value-communicating message. Use when the user asks to commit/save staged or unstaged changes with a repo-appropriate message.
---

# Git Commit

Create well-crafted local commit(s) from the current working tree. No push, no PR — use `ce-commit-push-pr` for the full ship flow.

**Done when:** each logical change is committed with an explicit file list and a message that states the outcome, and `git status` is clean of those changes. **Stop when:** the tree is clean (nothing to commit).

## Context

Gather context with each command as its **own** shell tool call (program + args only). Do **not** join with `;`, `&&`, `||`, pipes, `$(...)`, or redirects — that syntax fails under Windows PowerShell. A non-zero exit is a normal state to interpret, not a failure to suppress.

| Command | Purpose | Non-zero / empty means |
| --- | --- | --- |
| `git status` | Working-tree state | Not a git repo — stop |
| `git diff HEAD` | Uncommitted changes | Unborn repo / no commits yet |
| `git branch --show-current` | Current branch | Empty = detached HEAD |
| `git log --oneline -10` | Recent message style | Unborn repo — no history |
| `git rev-parse --abbrev-ref origin/HEAD` | Remote default branch | No `origin/HEAD` / bare `HEAD` — try `gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'`, else `main` |

Treat this as a snapshot. Re-read branch and staged set immediately before committing if anything may have changed.

**Default branch name:** strip a leading `origin/` from `origin/HEAD` (so `origin/trunk` → `trunk`). Use that bare name for all “on the default branch?” checks — never compare against `origin/<name>`.

## Workflow

0. **Gather** — run every Context command above (own shell call each), then continue.

1. **Nothing to commit** — if `git status` shows no staged, modified, or untracked files, report that and stop. Do not use `git diff HEAD` alone as cleanliness (it misses untracked files).

2. **Branch first** — if detached HEAD, or on the default branch (`main` / `master` / the bare default name above), create a feature branch from the change content (`git checkout -b <name>`), then re-read `git branch --show-current`. Do not ask — commit-only still must not leave work only on a detached HEAD or the default branch. If the derived name exists, pick a non-conflicting suffix.

3. **Convention** — match project commit conventions already in context; else match the recent log pattern; else conventional commits (`type(scope): description`). When using conventional commits and `fix`/`feat` both fit, default to `fix:` (remedying broken or missing behavior); reserve `feat:` for new capabilities. User override wins.

4. **Logical commits** — if changed files clearly split into distinct concerns, make separate commits (file level only, 2–3 max, no `git add -p`). If ambiguous, one commit.

5. **Message** — subject is imperative and names the outcome (what is now possible or fixed), not the file list. Body only when motivation or trade-offs are not obvious from the subject. When a plan Implementation Unit ID is already in hand for this commit (conversation, caller, or the files belong to one unit), append that unit's U-ID in parentheses — `(U3)` means unit 3. Do not hunt for a plan. Omit when the commit spans units, the unit is unclear, or no plan is in hand.

   - Bad: `Update checkout.rb` / `Add tests and fix stuff`
   - Good: `Fix double-submit on checkout`
   - Good: `Add per-subscription mute (U3)`

6. **Stage and commit** — stage **named files only** (never `git add -A` or `git add .`). Honor `exclude:<paths>` when the invocation carries it: those files stay uncommitted no matter what else changed; say in the report that they were left out. Write the full message — subject line, blank line, optional body — to a file outside the repo with your file-write tool, then stage and commit as two calls per commit group:

```bash
git add file1 file2 file3
```

```bash
git commit -F <message-file> -- file1 file2 file3
```

No shell parses the message with `-F`: a `$`, quotes, backticks, or a multi-line body pass through literally under any shell, with no quoting rules to satisfy. Git's normal whitespace cleanup still applies (trailing spaces trimmed, blank-line runs collapsed), which is fine for a commit message.

The trailing path list on `git commit` is required: a bare `git commit` takes the whole index, so anything already staged before this run (a caller's `exclude:` paths, or work the user staged and did not name) would ride into the commit. Naming the paths commits exactly the group and leaves other index entries alone.

7. **Confirm** — `git status`; report hash(es) and subject(s).

© EveryInc · MIT · EveryInc/compound-engineering-plugin

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor