aif-commit
Skill10 starsChanged 6 months agoMITView on GitHub
Create conventional commit messages by analyzing staged changes. Generates semantic commit messages following the Conventional Commits specification. Use when user says "commit", "save changes", or "create commit".
- Commits and pushes
4 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- letuhao/lore-weaveword for word, first seen Oct 17, 2026
- unxed/f4edited, first seen Oct 8, 2026
- lee-to/ai-factoryedited, first seen Sep 22, 2026
- hightemp/go_computer_use_mcp_serveredited, first seen Mar 21, 2026
Other versions4 projects use a version of this.
Word for word · 1
- letuhao/lore-weave★ 35100% same
Edited · 3
- lee-to/ai-factory★ 1.2k40% same
- unxed/f4★ 26184% same
- hightemp/go_computer_use_mcp_server★ 277% same
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository59 other files it gives its agents.
- AGENTS.mdAGENTS.md
- site-docs/AGENTS.mdAGENTS.md
- web/AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- docs/CLAUDE.mdCLAUDE.md
- web/CLAUDE.mdCLAUDE.md
- aif-architectureSkill
- aif-best-practicesSkill
- aif-build-automationSkill
- aif-ciSkill
- aif-commitSkill
- aif-distillationSkill
- aif-dockerizeSkill
- aif-docsSkill
- aif-evolveSkill
- aif-exploreSkill
- aif-fixSkill
- aif-groundedSkill
- aif-implementSkill
- aif-improveSkill
- aif-loopSkill
- aif-planSkill
- aif-qaSkill
- aif-referenceSkill
- aif-reviewSkill
- aif-roadmapSkill
- aif-rules-checkSkill
- aif-rulesSkill
- aif-security-checklistSkill
- aif-skill-generatorSkill
- aifSkill
- aif-verifySkill
- generate-claudemdSkill
- aif-architectureSkill
- aif-best-practicesSkill
- aif-build-automationSkill
- aif-ciSkill
- aif-distillationSkill
- aif-dockerizeSkill
- aif-docsSkill
- aif-evolveSkill
- aif-exploreSkill
- aif-fixSkill
- aif-groundedSkill
- aif-implementSkill
- aif-improveSkill
- aif-loopSkill
- aif-planSkill
- aif-qaSkill
- aif-referenceSkill
- aif-reviewSkill
- aif-roadmapSkill
- aif-rules-checkSkill
- aif-rulesSkill
- aif-security-checklistSkill
- aif-skill-generatorSkill
- aifSkill
- aif-verifySkill
- generate-claudemdSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
56 rules. 28 are common, 5 are distinctive, and 23 are very specific to this project.
28
Common
Most of the 3 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
23
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 15
FIRST: Read .ai-factory/config.yaml if it exists to resolve:
- Very specific: line 22
If config.yaml doesn't exist, use defaults:
- Common: line 35
Treat them as project-level overrides for this skill's general instructions
- Very specific: line 36
When a skill-context rule conflicts with a general rule written in this SKILL.md,
- Very specific: line 38
When there is no conflict, apply both: general rules from SKILL.md + project rules from skill-context
- Common: line 39
Do NOT ignore skill-context rules even if they seem to contradict this skill's defaults — they exist because the project's experience …
- Common: line 46
Enforcement: After generating any output artifact, verify it against all skill-context rules.
- Common: line 47
If any rule is violated — fix the output before presenting it to the user.
- Common: line 50
Run git status to see staged files
- Common: line 51
Run git diff --cached to see staged changes
- Common: line 52
If nothing staged, show warning and suggest staging
- Very specific: line 60
If the argument does not start with @, keep treating it as commit scope/context.
- Very specific: line 64
when workflow.plan_id_format = sequential, use Glob for paths.plans/[0-9][0-9][0-9][0-9]_<branch-stem>.md first
- Very specific: line 65
if multiple sequential matches exist, use the highest-numbered match and emit WARN [aif-commit] multiple sequential plans for <branch>: …
- Very specific: line 66
if no sequential match exists, fall back to paths.plans/<branch-stem>.md
- Very specific: line 67
If git mode is off, branch lookup cannot resolve, or no branch-based plan exists, check whether paths.plans contains exactly one full-plan …
- Very specific: line 68
If no active plan resolves or the active plan has no ## Commit Plan, keep current staged-diff behavior unchanged.
- Common: line 69
Never modify the active plan from this command.
- Very specific: line 72
If active plan contains ## Commit Plan, parse:
- Common: line 73
commit group number/name
- Very specific: line 76
Read the plan's ## Tasks or ## Implementation Tasks section to map task ranges to task descriptions and any Files: hints.
- Common: line 78
use staged file paths from git diff --cached --name-only
- Common: line 79
use staged hunk evidence from git diff --cached when a file may span multiple groups
- Common: line 81
If files cannot be mapped to groups, stop and ask the user to adjust grouping.
- Common: line 82
Before using whole-file staging, compare grouped files with unstaged worktree paths from git diff --name-only.
- Very specific: line 83
Only use git add <files> when each planned group has a disjoint file set and no grouped file appears in git diff --name-only.
- Common: line 84
When one file spans multiple planned groups, use hunk-level staging (git add -p or git apply --cached) for each group.
- Common: line 85
If grouped files overlap unstaged worktree paths, preserve and apply the original cached patch per group (git diff --cached + git apply …
- Distinctive: line 86
If hunk-level staging cannot be applied confidently, stop before changing staging and ask the user to adjust grouping or commit everything …
- Common: line 87
When a usable grouping exists, ask:
- Common: line 103
Check the resolved architecture and description artifacts (use paths from config) to catch obvious scope/boundary drift
- Common: line 104
Check the resolved RULES.md and roadmap artifacts (use paths from config) to catch rule and milestone alignment issues
- Very specific: line 105
Check rules hierarchy (resolved paths.rules_file + rules.base + named rules.<area>) for commit conventions
- Common: line 107
Never modify context artifacts from this command
- Very specific: line 108
If the user wants a standalone rules-only pass, suggest /aif-rules-check.
- Common: line 128
Keep subject line under 72 characters
- Common: line 129
Use imperative mood ("add" not "added")
- Common: line 130
Don't capitalize first letter after type
- Common: line 131
No period at end of subject
- Common: line 171
Check for staged changes
- Very specific: line 174
Run read-only context gates and summarize findings as WARN/ERROR
- Very specific: line 175
If commit type is feat/fix/perf and roadmap exists, check milestone linkage.
- Very specific: line 197
If git.skip_push_after_commit = true in resolved config:
- Very specific: line 202
If the branch has no upstream, use: git push -u origin <branch>
- Very specific: line 214
if branch has no upstream → git push -u origin <branch>
- Very specific: line 218
If argument provided (e.g., /aif-commit auth):
- Common: line 219
Use it as the scope
- Common: line 224
Never commit secrets or credentials
- Distinctive: line 227
Treat the resolved architecture, roadmap, RULES.md, description, and plan artifacts as read-only context in this command
- Common: line 229
If staged changes contain unrelated work (e.g., a feature + a bugfix, or changes to independent modules), suggest splitting into separate …
- Distinctive: line 246
Before changing staging, confirm whether each planned group has a disjoint file set, whether any file spans multiple groups, and whether …
- Very specific: line 247
If every group has a disjoint file set and no grouped file appears in git diff --name-only, unstage all with git reset HEAD, then stage and …
- Common: line 248
If grouped files overlap unstaged worktree paths, preserve each group's original cached patch before unstaging and re-apply only that patch …
- Distinctive: line 249
If one file spans multiple groups, use hunk-level staging for each group: stage only that group's hunks with git add -p or git apply …
- Distinctive: line 250
If hunk-level staging or cached-patch application cannot be applied confidently, stop before changing staging and ask the user to adjust …
- Very specific: line 252
NEVER add Co-Authored-By or any other trailer attributing authorship to the AI.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Conventional Commit Generator
Generate commit messages following the Conventional Commits specification.
Workflow
FIRST: Read .ai-factory/config.yaml if it exists to resolve:
- Paths:
paths.description,paths.architecture,paths.rules_file,paths.roadmap,paths.rules,paths.plan, andpaths.plans - Language:
language.uifor prompts and commit message conventions - Workflow:
workflow.plan_id_formatfor read-only active plan discovery (slugdefault;sequentialuses numbered full-plan lookup) - Git preference:
git.enabled,git.create_branches, andgit.skip_push_after_commitfor active plan discovery and post-commit push behavior - Rules hierarchy:
rules.baseplus any namedrules.<area>entries
If config.yaml doesn't exist, use defaults:
- Paths:
.ai-factory/for context artifacts,.ai-factory/PLAN.mdforpaths.plan,.ai-factory/plans/forpaths.plans - Language:
en(English) - Workflow:
workflow.plan_id_format: slug - Git:
git.enabled: true,git.create_branches: true - Git preference:
skip_push_after_commit: false
Read .ai-factory/skill-context/aif-commit/SKILL.md — MANDATORY if the file exists.
This file contains project-specific rules accumulated by /aif-evolve from patches,
codebase conventions, and tech-stack analysis. These rules are tailored to the current project.
How to apply skill-context rules:
- Treat them as project-level overrides for this skill's general instructions
- When a skill-context rule conflicts with a general rule written in this SKILL.md, the skill-context rule wins (more specific context takes priority — same principle as nested CLAUDE.md files)
- When there is no conflict, apply both: general rules from SKILL.md + project rules from skill-context
- Do NOT ignore skill-context rules even if they seem to contradict this skill's defaults — they exist because the project's experience proved the default insufficient
- CRITICAL: skill-context rules apply to ALL outputs of this skill — including the commit message format and conventions. If a skill-context rule says "commits MUST follow format X" or "message MUST include Y" — you MUST comply. Generating a commit message that violates skill-context rules is a bug.
Enforcement: After generating any output artifact, verify it against all skill-context rules. If any rule is violated — fix the output before presenting it to the user.
- Analyze Changes
- Run
git statusto see staged files - Run
git diff --cachedto see staged changes - If nothing staged, show warning and suggest staging
- Run
- Resolve Active Plan Context (Read-Only, Optional)
- Resolve active plan using this read-only priority:
@<plan-file>argument, when the argument starts with@- branch-based full plan in
paths.plans - single full plan in
paths.plans - fast plan at
paths.plan
- If the argument does not start with
@, keep treating it as commit scope/context. - For branch-based full plan lookup:
- get current branch with
git branch --show-currentwhengit.enabled = true - replace every
/with-to get<branch-stem> - when
workflow.plan_id_format = sequential, useGlobforpaths.plans/[0-9][0-9][0-9][0-9]_<branch-stem>.mdfirst - if multiple sequential matches exist, use the highest-numbered match and emit
WARN [aif-commit] multiple sequential plans for <branch>: <list>; using <chosen> - if no sequential match exists, fall back to
paths.plans/<branch-stem>.md
- get current branch with
- If git mode is off, branch lookup cannot resolve, or no branch-based plan exists, check whether
paths.planscontains exactly one full-plan markdown file. - If no active plan resolves or the active plan has no
## Commit Plan, keep current staged-diff behavior unchanged. - Never modify the active plan from this command.
- Resolve active plan using this read-only priority:
- Use Commit Plan Grouping When Available
- If active plan contains
## Commit Plan, parse:- commit group number/name
- task range, such as
after tasks 1-3ortasks 4-6 - suggested conventional commit message
- Read the plan's
## Tasksor## Implementation Taskssection to map task ranges to task descriptions and anyFiles:hints. - Compare staged files/hunks with planned groups before changing staging:
- use staged file paths from
git diff --cached --name-only - use staged hunk evidence from
git diff --cachedwhen a file may span multiple groups - task ranges and
Files:hints are guidance, not executable instructions
- use staged file paths from
- If files cannot be mapped to groups, stop and ask the user to adjust grouping.
- Before using whole-file staging, compare grouped files with unstaged worktree paths from
git diff --name-only. - Only use
git add <files>when each planned group has a disjoint file set and no grouped file appears ingit diff --name-only. - When one file spans multiple planned groups, use hunk-level staging (
git add -porgit apply --cached) for each group. - If grouped files overlap unstaged worktree paths, preserve and apply the original cached patch per group (
git diff --cached+git apply --cached), use hunk-level staging, or stop before changing staging. - If hunk-level staging cannot be applied confidently, stop before changing staging and ask the user to adjust grouping or commit everything together.
When a usable grouping exists, ask:
AskUserQuestion: Active plan contains a Commit Plan. How should these staged changes be committed? Options: 1. Follow Commit Plan 2. Commit everything together 3. Adjust grouping- Follow Commit Plan → confirm the planned groups and messages, then proceed through user-confirmed multi-commit staging/commit flow.
- Commit everything together → ignore plan grouping for this run and continue with the current single-message flow.
- Adjust grouping → ask the user for the adjusted grouping, then validate it against staged files before committing.
- If active plan contains
- Run Context Gates (Read-Only)
- Check the resolved architecture and description artifacts (use paths from config) to catch obvious scope/boundary drift
- Check the resolved RULES.md and roadmap artifacts (use paths from config) to catch rule and milestone alignment issues
- Check rules hierarchy (resolved
paths.rules_file+rules.base+ namedrules.<area>) for commit conventions - Missing optional files (
ROADMAP.md,RULES.md) areWARN, not blockers - Never modify context artifacts from this command
- If the user wants a standalone rules-only pass, suggest
/aif-rules-check; keep/aif-commitgate labels atWARN/ERROR
- Determine Commit Type
feat: New featurefix: Bug fixdocs: Documentation onlystyle: Code style (formatting, semicolons)refactor: Code change that neither fixes a bug nor adds a featureperf: Performance improvementtest: Adding or modifying testsbuild: Build system or dependenciesci: CI configurationchore: Maintenance tasks
- Identify Scope
- From file paths (e.g.,
src/auth/→auth) - From argument if provided
- Optional - omit if changes span multiple areas
- From file paths (e.g.,
- Generate Message
- Keep subject line under 72 characters
- Use imperative mood ("add" not "added")
- Don't capitalize first letter after type
- No period at end of subject
Format
<type>(<scope>): <subject>
<body>
<footer>Examples
Simple feature:
feat(auth): add password reset functionalityBug fix with body:
fix(api): handle null response from payment gateway
The payment API can return null when the gateway times out.
Added null check and retry logic.
Fixes #123Breaking change:
feat(api)!: change response format for user endpoint
BREAKING CHANGE: user endpoint now returns nested profile objectBehavior
When invoked:
- Check for staged changes
- Analyze the diff content
- Resolve optional active plan context and use
## Commit Plangrouping when available - Run read-only context gates and summarize findings as
WARN/ERROR - If commit type is
feat/fix/perfand roadmap exists, check milestone linkage; if missing, warn and suggest adding linkage in commit body/footer - Propose a commit message
Confirm with the user before committing:
AskUserQuestion: Proposed commit message: <type>(<scope>): <subject> Options: 1. Commit as is 2. Edit message 3. Cancel- Handle user response:
- Commit as is → proceed to step 9
- Edit message → ask the user for the corrected message via
AskUserQuestion, then return to step 7 with the new message - Cancel → stop, do NOT commit. End the workflow
- Execute
git commitwith the confirmed message - Post-commit push handling:
- If
git.skip_push_after_commit = truein resolved config:- Skip push prompt entirely
- End workflow after successful local commit
Otherwise (default behavior), offer to push:
- Show branch/ahead status:
git status -sb - If the branch has no upstream, use:
git push -u origin <branch> - Otherwise:
git push
AskUserQuestion: Push to remote? Options: 1. Push now 2. Skip push- Push now → execute push command based on upstream status:
- if branch has no upstream →
git push -u origin <branch> - otherwise →
git push
- if branch has no upstream →
- Skip push → end the workflow
- Show branch/ahead status:
If argument provided (e.g., /aif-commit auth):
- Use it as the scope
- Or as context for the commit message
Important
- Never commit secrets or credentials
- Review large diffs carefully before committing
/aif-commithas no implicit strict mode — context gates are warning-first unless user explicitly requests blocking behavior- Treat the resolved architecture, roadmap, RULES.md, description, and plan artifacts as read-only context in this command
- If no active plan resolves or the active plan has no
## Commit Plan, keep current staged-diff behavior unchanged. - If staged changes contain unrelated work (e.g., a feature + a bugfix, or changes to independent modules), suggest splitting into separate commits:
- Show which files/hunks belong to which commit
Confirm split plan with the user:
AskUserQuestion: Split into separate commits? Options: 1. Yes, split as suggested 2. No, commit everything together 3. Let me adjust the grouping- Handle user response:
- Yes, split as suggested → proceed to step 4
- No, commit everything together → proceed to step 5 (propose single commit message)
- Let me adjust the grouping → ask the user for the adjusted grouping via
AskUserQuestion, then return to step 2 with the new plan
- Before changing staging, confirm whether each planned group has a disjoint file set, whether any file spans multiple groups, and whether grouped files overlap unstaged worktree paths from
git diff --name-only. - If every group has a disjoint file set and no grouped file appears in
git diff --name-only, unstage all withgit reset HEAD, then stage and commit each group separately usinggit add <files>+git commit. - If grouped files overlap unstaged worktree paths, preserve each group's original cached patch before unstaging and re-apply only that patch with
git apply --cached; otherwise use hunk-level staging or stop before changing staging. - If one file spans multiple groups, use hunk-level staging for each group: stage only that group's hunks with
git add -porgit apply --cached, commit, then repeat for the next group. - If hunk-level staging or cached-patch application cannot be applied confidently, stop before changing staging and ask the user to adjust grouping or commit everything together.
- Offer to push only after all commits are done
- NEVER add
Co-Authored-Byor any other trailer attributing authorship to the AI. Commits must not contain AI co-author lines
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

