name: semantic-commit description: Commit staged changes using Semantic Commit format.
Semantic Commit
Contract
Prereqs:
- Run inside a git work tree.
-
gitavailable onPATH. -
zshavailable onPATH(scripts arezsh -f). -
git-commit-context-jsonavailable (viaCODEX_COMMANDS_PATHor$CODEX_HOME/commands). -
git-scopeavailable for commit summary output (optional; fallback isgit show --stat).
Inputs:
- Staged changes (
git add ...) forstaged_context.sh. - Prepared commit message via stdin (preferred),
--message, or--message-fileforcommit_with_message.sh.
Outputs:
-
staged_context.sh: prints staged context bundle to stdout (JSON + patch). -
commit_with_message.sh: creates a git commit and prints a commit summary to stdout.
Exit codes:
-
0: success -
2: no staged changes (for scripts that require staged input) - non-zero: invalid usage / missing prerequisites / git failures
Failure modes:
- Not in a git repo or no staged changes.
-
git-commit-context-jsonnot found (falls back to rawgit diff). -
git commitfails (hooks, conflicts, or repo state issues).
Setup
- Run inside the target git repo
- Prefer using the scripts below; they resolve required commands directly (no sourcing)
Scripts (only entrypoints)
- Get staged context (stdout):
$CODEX_HOME/skills/tools/devex/semantic-commit/scripts/staged_context.sh - Commit with a prepared message, then print a commit summary (stdout):
$CODEX_HOME/skills/tools/devex/semantic-commit/scripts/commit_with_message.sh- Prefer piping the full multi-line message via stdin
- Do not call other helper commands directly; treat these scripts as the stable interface
Workflow
Rules:
-
Never run
git addon your own; do not stage files the user has not explicitly staged - For end-to-end automation flows that must stage changes without user intervention, use
semantic-commit-autostageinstead - Use staged changes only; do not infer from unstaged/untracked files
- If
staged_context.shfails, report its error output and do not proceed to committing
Follow Semantic Commit format
Use the exact header format:
type(scope): subject
Rules:
- Use a valid type (feat, fix, refactor, chore, etc.)
- Use a concise scope that matches the changed area
- Keep the subject lowercase and concise
- Keep the full header under 100 characters
Write the body correctly
Rules:
- Insert one blank line between header and body
- Start every body line with "- " and a capitalized word
- Keep each line under 100 characters
- Keep bullets concise and group related changes
- Do not insert blank lines between body items
- For small or trivial changes, the body is optional; if included, use a single bullet and avoid restating the subject
Commit execution
- Generate the full commit message from
staged_context.shoutput - Commit by piping the full message into
commit_with_message.sh(it preserves formatting) - Capture the exit status in
rcorexit_code(do not usestatus) - If the commit fails, report the error and do not claim success
Input completeness
- Full-file reads are not required for commit message generation
- Base the message on staged context only
- Only read full files if the diff/context is insufficient to describe the change accurately
Example
refactor(members): simplify otp purpose validation logic in requestOtp
- Merged duplicated member existence checks into a single query
- Reordered conditional logic for better readability
Output and clarification rules
- If type, scope, or change summary is missing, ask a concise clarifying question and do not commit
- Always run
commit_with_message.shfor committing (it will print the commit summary on success) - On script failure: include exit code + stderr in the response, and do not claim success
- On success: include the script stdout (commit summary) in a code block
chat Comments (0)
Sign in to join the discussion and leave a comment.
Skill Details
GitHub Stars
2
GitHub Forks
0
Created
Jan 2026
Last Updated
8 months ago
tools
tools git workflows
Related Skills
Build your own?
Join 12,000+ developers contributing to the Claude ecosystem.
No comments yet. Be the first to share your thoughts!