Agentic-loop commit
Commit code with conventional commit messages tied to task context. Never skips hooks.
install
source · Clone the upstream repo
git clone https://github.com/allierays/agentic-loop
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/allierays/agentic-loop "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/commit" ~/.claude/skills/allierays-agentic-loop-commit && rm -rf "$T"
manifest:
.claude/skills/commit/SKILL.mdsource content
Commit Changes
Create a well-structured git commit with a conventional commit message derived from the current task context.
Rules
- NEVER use
. Pre-commit hooks exist for a reason. If hooks fail, fix the issues and retry.--no-verify - NEVER use
orgit add -A
unless every changed file is relevant. Stage files by name.git add . - NEVER amend a previous commit unless the user explicitly asks for it.
Step 1: Understand What Changed
Run these in parallel:
— see all changed, staged, and untracked filesgit status
— see unstaged changesgit diff
— see already-staged changesgit diff --cached
— see recent commit style for this repogit log --oneline -5
Review the changes and identify:
- Which files are related to the current task
- Which files are unrelated noise (editor configs, lock files from unrelated installs, etc.)
- Whether any files contain secrets,
content, or credentials — never commit those.env
Step 2: Find the Task Context
Look for task context to derive the commit message from. Check in order:
- Ralph PRD story — if there's an active story, check
for the current story ID and title. The commit message should reference this..ralph/progress.txt - Recent conversation — what did the user ask you to do? Use that as the commit description.
- The diff itself — if no other context, derive the purpose from the actual code changes.
Step 3: Craft the Commit Message
Use conventional commits format matching this repo's style:
type(scope): concise description of WHY
Types (pick the right one)
| Type | When to use |
|---|---|
| New feature or capability |
| Bug fix |
| Maintenance, deps, config, version bumps |
| Adding or fixing tests |
| Documentation only |
| Code restructuring, no behavior change |
| Formatting, whitespace, naming |
| CI/CD pipeline changes |
Scope
- If working on a Ralph story: use the story ID — e.g.,
feat(story-3): add user auth - If working on a specific module: use the module name — e.g.,
fix(loop): handle empty config - If broad/cross-cutting: omit scope — e.g.,
chore: bump version to 3.28.0
Message rules
- Start with lowercase after the colon
- Focus on why, not what — the diff shows what
- Keep the first line under 72 characters
- If more detail is needed, add a blank line and a body paragraph
Examples from this repo
feat: add Working Principles to CLAUDE.md and plansDirectory to settings feat(story-3): add user authentication with JWT fix: bash 3.2 unbound variable when run_loop called with no args chore: bump version to 3.27.1 test(api): add integration tests for /users endpoint refactor: extract verification into separate modules
Step 4: Stage and Commit
- Stage only the relevant files by name — do NOT use
orgit add -Agit add . - Show the user the proposed commit message and list of staged files before committing
- Ask if the message looks right using AskUserQuestion with options:
- "Looks good, commit it"
- "Let me edit the message" (then ask for their preferred message)
- Run the commit — use a HEREDOC for the message:
git commit -m "$(cat <<'EOF' type(scope): message here EOF )"
- Run
after to confirm it succeededgit status
Step 5: Handle Hook Failures
If pre-commit hooks fail:
- Read the hook output carefully
- Fix the issues the hooks identified (lint errors, secrets detected, etc.)
- Re-stage the fixed files
- Commit again — same message, same process, NO
--no-verify
If hooks auto-fix files (e.g., prettier, eslint --fix):
- Review the auto-fixes
- Stage the auto-fixed files
- Retry the commit
If you cannot resolve hook failures after 5 attempts, stop and explain the issue to the user. Do NOT bypass hooks.
Notes
- If the user says "just commit it" or similar, still follow the process — just skip the AskUserQuestion confirmation
- If there are no changes to commit, say so and stop
- Group related changes into one commit; suggest splitting if changes are unrelated
- When in doubt about the type,
for new things,feat
for broken things,fix
for everything elsechore