PluginBench
Skill
Pass
Audit score 90

ce-commit

everyinc/compound-engineering-plugin

Create well-crafted git commits with clear, value-communicating messages.

What is ce-commit?

This skill creates local git commits from staged or unstaged changes with explicit file lists and outcome-focused messages. Use it when you need to save work with a repo-appropriate commit message—no push or PR.

  • Gathers repository context (branch, recent commit style, default branch) before committing
  • Creates feature branches automatically if on detached HEAD or default branch
  • Matches project commit conventions or uses conventional commits (type: description)
  • Splits changes into logical commits when files address distinct concerns
  • Stages named files only and writes commit messages to avoid shell parsing issues
  • Reports commit hashes and subjects after completion

How to install ce-commit

npx skills add https://github.com/everyinc/compound-engineering-plugin --skill ce-commit
Claude Code
Cursor
Windsurf
Cline

How to use ce-commit

  1. 1.Run the skill when you have staged or unstaged changes to commit
  2. 2.The skill gathers context automatically (branch, recent commits, default branch)
  3. 3.Review the proposed commit message and confirm it matches your intent
  4. 4.The skill stages named files and creates the commit with the message
  5. 5.Check the reported commit hash and subject to verify success

Use cases

Good for
  • Save a bug fix with a clear message explaining what was remedied
  • Commit a new feature with proper conventional commit formatting
  • Split related but distinct changes into separate logical commits
  • Ensure commits stay off the default branch by auto-creating feature branches
  • Preserve uncommitted files by excluding specific paths from the commit
Who it's for
  • Developers working with git repositories
  • Teams following conventional commit conventions
  • Anyone needing consistent, well-documented commit history

ce-commit FAQ

What if I'm on the default branch?

The skill automatically creates a feature branch from your changes and commits there instead, preventing work from being left only on main/master.

Can I exclude certain files from the commit?

Yes, use the `exclude:<paths>` option in your invocation; those files will remain uncommitted and noted in the report.

Does this skill push or create a pull request?

No, it only creates local commits. Use `ce-commit-push-pr` for the full workflow including push and PR creation.

How does it choose between 'fix' and 'feat' in conventional commits?

It defaults to `fix:` when both fit (remedying broken or missing behavior), and reserves `feat:` for new capabilities. You can override this choice.

What if there are multiple logical changes?

The skill can split them into 2–3 separate commits at the file level if the changes clearly address distinct concerns; otherwise it creates one commit.

Full instructions (SKILL.md)

Source of truth, from everyinc/compound-engineering-plugin.


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.

CommandPurposeNon-zero / empty means
git statusWorking-tree stateNot a git repo — stop
git diff HEADUncommitted changesUnborn repo / no commits yet
git branch --show-currentCurrent branchEmpty = detached HEAD
git log --oneline -10Recent message styleUnborn repo — no history
git rev-parse --abbrev-ref origin/HEADRemote default branchNo 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

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

  2. 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).

  3. 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.

  4. 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.

  5. 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.

  6. 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)
  7. 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:

git add file1 file2 file3
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.

  1. Confirm — git status; report hash(es) and subject(s).