React Router Release Notes Prep
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
Create conventional commit messages by analyzing staged changes.
$ npx skills add unxed/f4 --skill aif-commit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install unxed/f4 aif-commit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/aif-commit .claude/skills/aif-commit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .claude/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/unxed/f4/tree/main/.agents/skills/aif-commitType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add unxed/f4 --skill aif-commit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install unxed/f4 aif-commit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/aif-commit .agents/skills/aif-commit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .agents/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add unxed/f4 --skill aif-commit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install unxed/f4 aif-commit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/aif-commit .cursor/skills/aif-commit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .cursor/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/unxed/f4.git --path .agents/skills/aif-commit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add unxed/f4 --skill aif-commit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install unxed/f4 aif-commit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/aif-commit .gemini/skills/aif-commit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .gemini/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install unxed/f4 aif-commitInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add unxed/f4 --skill aif-commit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/aif-commit .github/skills/aif-commit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .github/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add unxed/f4 --skill aif-commit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install unxed/f4 aif-commit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/unxed/f4.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/aif-commit .opencode/skills/aif-commit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "aif-commit" agent skill from https://github.com/unxed/f4/tree/main/.agents/skills/aif-commit into .opencode/skills/aif-commit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "aif-commit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
aif-commitCreate conventional commit messages by analyzing staged changes.
Aif Commit is an agent skill from unxed/f4. 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".
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Commit messages. It works with Git. The repository describes itself as: dual pane like a charm. The licence is BSD-3-Clause.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit ede2640. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobBash(git *)AskUserQuestionQuestionsFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
conventionalcommits.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Aif Commit loads about 3.6k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 1,739 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from unxed/f4 at commit ede2640, republished under its BSD-3-Clause licence (© unxed). 1,739 words, ~3,580 tokens.
.claude/skills/aif-commit/SKILL.md (or your agent's skills folder).Generate commit messages following the Conventional Commits specification.
FIRST: Read .ai-factory/config.yaml if it exists to resolve:
paths.description, paths.architecture, paths.rules_file, paths.roadmap, paths.rules, paths.plan, and paths.planslanguage.ui for prompts and commit message conventionsworkflow.plan_id_format for read-only active plan discovery (slug default; sequential uses numbered full-plan lookup)git.enabled, git.create_branches, and git.skip_push_after_commit for active plan discovery and post-commit push behaviorrules.base plus any named rules.<area> entriesIf config.yaml doesn't exist, use defaults:
.ai-factory/ for context artifacts, .ai-factory/PLAN.md for paths.plan, .ai-factory/plans/ for paths.plansen (English)workflow.plan_id_format: sluggit.enabled: true, git.create_branches: trueskip_push_after_commit: falseRead .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:
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
git status to see staged filesgit diff --cached to see staged changesResolve Active Plan Context (Read-Only, Optional)
@<plan-file-or-directory> argument, when the argument starts with @paths.planspaths.plans, or a single ultra bundle therepaths.plan@, keep treating it as commit scope/context.@<plan-file> syntax remains valid; the broader form additionally
accepts an ultra directory or its index.md.git branch --show-current when git.enabled = true/ with - to get <branch-stem>workflow.plan_id_format = sequential, use Glob for both
paths.plans/[0-9][0-9][0-9][0-9]_<branch-stem>.md and
paths.plans/[0-9][0-9][0-9][0-9]_<branch-stem>/index.mdindex.md
contains exactly one <!-- aif:plan-mode:ultra -->WARN [aif-commit] when
multiple valid candidates exist; if both shapes share the highest prefix,
prefer ultrapaths.plans/<branch-stem>/index.md then
paths.plans/<branch-stem>.md; Read the directory entrypoint before
selection, ignore it unless it contains exactly one ultra marker, and
warn and prefer ultra if both valid shapes exist*.md full plans plus direct child */index.md
entrypoints containing <!-- aif:plan-mode:ultra -->; exclude the resolved fast-plan
path and do not count phase files.index.md as ultra, Read it and require exactly one
<!-- aif:plan-mode:ultra -->; otherwise STOP with a plan-integrity error.<!-- aif:plan-mode:ultra -->; ignore unrelated */index.md files.## Commit Plan, keep current staged-diff behavior unchanged.Use Commit Plan Grouping When Available
If active plan contains ## Commit Plan, parse:
after tasks 1-3 or tasks 4-6Read the plan's ## Tasks or ## Implementation Tasks section to map task ranges to task descriptions and any Files: hints.
For an ultra plan, resolve every task in the current commit group to its
Phase Index/details link, read each corresponding phase file, and build the
staged-path mapping from its ## Files to Change table plus the complete
## Task N specifications. Reading only index.md is insufficient.
If one phase contains tasks from multiple commit groups, use the individual
## Task N sections to distinguish file/hunk ownership; do not assign the
phase's entire file table to every group without task-level evidence.
Compare staged files/hunks with planned groups before changing staging:
git diff --cached --name-onlygit diff --cached when a file may span multiple groupsFiles: hints are guidance, not executable instructionsIf 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 in git diff --name-only.
When one file spans multiple planned groups, use hunk-level staging (git add -p or git 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 groupingFollow 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.
Run Context Gates (Read-Only)
paths.rules_file + rules.base + named rules.<area>) for commit conventionsROADMAP.md, RULES.md) are WARN, not blockers/aif-rules-check; keep /aif-commit gate labels at WARN / ERRORDetermine 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 tasksIdentify Scope
src/auth/ → auth)Generate Message
<type>(<scope>): <subject>
<body>
<footer>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 objectWhen invoked:
Check for staged changes
Analyze the diff content
Resolve optional active plan context and use ## Commit Plan grouping when available
Run read-only context gates and summarize findings as WARN/ERROR
If commit type is feat/fix/perf and 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. CancelHandle user response:
AskUserQuestion, then return to step 7 with the new messageExecute git commit with the confirmed message
Post-commit push handling:
If git.skip_push_after_commit = true in resolved config:
Otherwise (default behavior), offer to push:
git status -sbgit push -u origin <branch>git pushAskUserQuestion: Push to remote?
Options:
1. Push now
2. Skip pushgit push -u origin <branch>git pushIf argument provided (e.g., /aif-commit auth):
/aif-commit has no implicit strict mode — context gates are warning-first unless user explicitly requests blocking behavior## Commit Plan, keep current staged-diff behavior unchanged.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 groupingHandle user response:
AskUserQuestion, then return to step 2 with the new planBefore 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 with git reset HEAD, then stage and commit each group separately using git 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 -p or git 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
Co-Authored-By or any other trailer attributing authorship to the AI. Commits must not contain AI co-author lines© unxed, BSD-3-Clause. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/aif-commit of unxed/f4.
Open the folder on GitHubat commit ede2640
Aif Commit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Aif Commit this skillunxed/f4 | 240 | — | ~3.6k | Automated safety check: Pass | BSD-3-Clause | |
| React Router Release Notes Prepremix-run/react-router | 57k | — | ~1.1k | Automated safety check: Pass | MIT | |
| ToolJet Multi-Repo CommitToolJet/ToolJet | 41k | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 | |
| Git Workflow and Versioningaddyosmani/agent-skills | 102k | 2 repos | ~3.5k | Automated safety check: Notes | MIT | |
| React Router Pull Request Creatorremix-run/react-router | 57k | — | ~2.5k | Automated safety check: Pass | MIT | |
| Verdaccio Pull Request Workflowverdaccio/verdaccio | 18k | — | ~1.9k | Automated safety check: Pass | MIT |
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
ToolJet/ToolJet
Commits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order.
addyosmani/agent-skills
Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.
remix-run/react-router
Packages finished React Router work into a draft pull request: branch, commit, push, a written PR body and the right GitHub labels.
verdaccio/verdaccio
Takes a change through a verdaccio pull request: branch, local checks, changeset, title and body, labels, CI and review rounds, and ports to other release lines.
saleor/saleor
Commits changes in the Saleor codebase and works through pre-commit hook failures from ruff, mypy, the GraphQL schema check and the migrations check.
unxed/f4
Comprehensive documentation guide for Golang projects, covering godoc comments, README, CONTRIBUTING, CHANGELOG, Go Playground, Example tests, API docs, and llms.txt.
unxed/f4
Golang code style conventions — line length and breaking, variable declarations, control flow clarity, when comments help vs hurt.
unxed/f4
Comprehensive guide for Go database access — parameterized queries, struct scanning, NULLable columns, transactions, isolation levels, SELECT FOR UPDATE, connection pool, batch processing, context…
unxed/f4
Security audit checklist based on OWASP Top 10 and best practices.
unxed/f4
Go (Golang) naming conventions — covers packages, constructors, structs, interfaces, constants, enums, errors, booleans, receivers, getters/setters, functional options, acronyms, test functions, and…
unxed/f4
Golang concurrency design — goroutine lifecycle and leak prevention, channels and select, channel ownership and direction, sync.Mutex/RWMutex/sync.Map/sync.Once/atomics, errgroup, singleflight…
Works with
Categories
Create conventional commit messages by analyzing staged changes. Aif Commit is an agent skill from unxed/f4. Create conventional commit messages by analyzing staged changes.
Aif Commit fits situations like: user says commit; tasks that involve Commit messages.
Run `npx skills add unxed/f4 --skill aif-commit -a claude-code`. Or copy the skill folder (.agents/skills/aif-commit in unxed/f4) into .claude/skills/aif-commit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add unxed/f4 --skill aif-commit -a codex`. Or copy the skill folder (.agents/skills/aif-commit in unxed/f4) into .agents/skills/aif-commit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add unxed/f4 --skill aif-commit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/aif-commit, .gemini/skills/aif-commit, .github/skills/aif-commit and .opencode/skills/aif-commit in your project.
Going by SKILL.md and its folder, Aif Commit needs the command-line tools its instructions call (git). Its frontmatter pre-approves these tools: Read, Glob, Bash(git *), AskUserQuestion, Questions.
SKILL.md names 1 domain. As links in the text: conventionalcommits.org. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Aif Commit is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Aif Commit: React Router Release Notes Prep (remix-run/react-router, 57k stars), ToolJet Multi-Repo Commit (ToolJet/ToolJet, 41k stars), Git Workflow and Versioning (addyosmani/agent-skills, 102k stars) and React Router Pull Request Creator (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
unxed (a GitHub user) maintains it in unxed/f4, which has 240 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on October 7, 2026.
Source: unxed/f4 on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.