commit
SkillCommunicationStage changes and create a commit with a properly formatted message. Use for /commit, or saving work locally — not sharing it (/push) or opening a pull request (/pr).
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the commit skill
What this skill tells your AI
The instructions your AI receives, as published by egregore-labs/egregore in .codex/skills/commit/SKILL.md and read by ahel’s review.
Stage changes and commit with a message.
When to invoke
User says: "/commit", "commit this", "stage and commit", "save this change locally"
Not this: sharing your commit with others → /push · opening a pull request → /pr
Message (optional): $ARGUMENTS
Loom routing
Skip this section if your prompt contains LOOM-EXECUTOR — you are the executor; run the skill as specced below. Full protocol: .claude/context/loom.md.
- Resolve:
ROUTE=$(bash bin/loom.sh route commit), thenDECISION_ID=$(printf '%s\n' "$ROUTE" | jq -r '.decision_id // empty'). - If
mode≠delegate, or the user signalled depth ("deep", "think hard",--deep) → run this skill inline as normal. On a depth override, printbash bin/loom.sh footer commit --overrideafter the output and set"override":truein telemetry. - Otherwise delegate: spawn the Agent tool with
subagent_type: "loom-executor",model= the route'stier, prompt =LOOM-DECISION-ID: $DECISION_IDon its own first line, thenLOOM-EXECUTOR: Execute .claude/skills/commit/SKILL.md, plus the user's arguments and any context the spec needs from the session. Print the executor's final output verbatim, then print the output ofbash bin/loom.sh footer commit. - If the spawn fails or the executor's first line is
LOW_CONFIDENCE:— triage the reason: needs-user-interaction or a main-loop-only tool → take over and finish this skill inline (no escalation); genuine uncertainty or failure → reassignROUTE=$(bash bin/loom.sh escalate commit "<reason>"), refreshDECISION_IDfromROUTE, then re-spawn once on the new tier carrying the returned decision ID (sticky for this session). - Telemetry (fire-and-forget):
bash bin/telemetry.sh emit "command" '{"command":"commit","routed":true,"mode":"delegate","model":"<actual>","route_tier":"<table tier>","class":"<class>","escalated":<bool>,"override":<bool>,"source":"<source>"}' 2>/dev/null &
Before anything else
Resolve BASE_BRANCH through bin/lib/config.sh → _get_base_branch (pass the managed repo name when applicable). Check git branch --show-current. If on a protected branch ($BASE_BRANCH, develop, main, or master):
→ Use the resolved base branch (default "develop")
→ Create a working branch: git fetch origin $BASE_BRANCH --quiet && git checkout --no-track -b dev/{author}/{topic-slug} origin/$BASE_BRANCH
→ Tell the user: "Creating a working branch for this..." — never mention git commands to the user.
→ Then proceed with the commit.
What to do
- Show modified and untracked files
- Stage relevant files (ignore build artifacts)
- Compose the message per the convention below — suggest one derived from the diff, or take the user's and align it to the convention
- Create the commit
Message convention
Full spec: .claude/context/commit-format.md. Wording:
.claude/context/git-language.md. The short form:
-
Subject
type(scope): imperative summary— ≤ 72 chars (aim ≤ 50), lowercase, no trailing period. Same grammar and type set as PR titles. It completes "if applied, this commit will ___". -
Body (when the diff cannot explain its own motivation): blank line after the subject, wrapped at 72, what and why — never how.
-
Agent-authored commits end with a trailer block as the final paragraph:
SID=$(cat .egregore-session-id 2>/dev/null) git commit -m "feat(mcp): add API key authentication" -m "Egregore-Session: $SID Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>"Omit the
Egregore-Sessionline when the file is absent; use your harness's own identity line. Humans committing by hand skip trailers. -
One logical change per commit — split when the parts are independently revertable.
Example
> /commit
Checking changes...
Modified files:
src/mcp/auth.py (+42, -3)
src/mcp/server.py (+8, -2)
tests/test_auth.py (+28, new file)
Untracked:
src/mcp/__pycache__/ (ignored ✓)
Staging modified files...
git add src/mcp/auth.py src/mcp/server.py tests/test_auth.py
Enter commit message (or I can suggest one):
> feat(mcp): add API key authentication
git commit -m "feat(mcp): add API key authentication" # + trailer block
✓ Committed (abc1234)
Changes committed locally. Run /push to share, or /pr when ready for review.
With message argument
> /commit docs(readme): fix typo
Staging and committing...
git add -A
git commit -m "docs(readme): fix typo"
✓ Committed (def5678)
Next
Run /push to share, or keep working and commit again.
Signals
- GitHub stars
- 288
- Forks
- 21
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
commit-egregore-labs- Source
- github.com/egregore-labs/egregore