Unikit commit
Create conventional commit messages for {{engine_name}} projects by analyzing staged changes. Handles engine-specific concerns like companion file pairing, binary assets, and plan task references. ALWAYS use this skill when the user asks to commit, save changes, or create a commit. Trigger phrases include "commit", "create commit", "commit this", "save changes", "save my work". Even if the user simply says "commit" or asks you to commit after finishing a task — invoke this skill, do NOT commit manually via git.From its SKILL.md
npx -y skills add NintendaDev/unikit-ai --skill unikit-commitAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- reads credentialsReads from 2 credential sources: `.env` and 1 more.
- 16 stars16 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 8 commands, including `git status` and 7 more.
SKILL.md
8.8 KB, ~2.0k tokens by cl100k_base, as published. Nobody here has run it
{{engine_name}} Commit Generator
Generate commit messages following the Conventional Commits specification, with {{engine_name}}-specific safety checks.
Language Awareness — BLOCKING PRE-REQUISITE
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md
and apply its rules to ALL subsequent output.
If the file is missing or unreadable, fall back to English.
Do not produce any user-facing output until language rules are loaded.
Do not announce, confirm, or mention the language setting.
Workflow
-
Analyze Changes
- Run
git statusto see staged files - Run
git diff --cachedto see staged changes - If nothing staged, show warning and suggest staging
- Run
-
{{engine_name}} Safety Checks
Run these checks before generating the commit message. Report findings as
WARNorERROR.a) Engine companion files Some engines require companion/metadata files for every asset. Read
.unikit/DESCRIPTION.mdto determine if the current engine has such a mechanism. If yes:- If a new file is staged, its companion is also staged (and vice versa)
- If a file is deleted, its companion is also deleted (and vice versa)
- Orphaned companion files (no matching asset) →
ERROR, suggest staging the missing counterpart or removing the orphan - Missing companion for a new asset →
ERROR, suggest staging it If the engine has no companion file mechanism — skip this check.
b) Engine-ignored directories If any staged file matches a path that should be ignored by the engine (check the project's
.gitignore) →ERROR. These are engine-generated directories that should never be committed. Suggest unstaging them.c) Binary asset awareness Run
git diff --cached --numstat— files shown as- - <path>are binary. If staged changes include binary files, warn the user about binary content in the commit. These files don't diff well — just note their presence so the user is aware.d) Secrets check Never commit files that likely contain secrets (
.env,credentials.json, API keys in config files). If detected →ERROR. -
Context Check (Read-Only)
- Read
.unikit/ARCHITECTURE.md(if present) to verify staged changes don't violate module boundaries or dependency rules defined there - Read
.unikit/ROADMAP.md(if present) to check milestone alignment — forfeat/fix/perfcommits, check if changes relate to an unchecked milestone and suggest mentioning it in the commit body - Read
.unikit/skill-context/unikit-commit/SKILL.md(if present) — project-specific rules accumulated by/unikit-evolve. Treat as overrides: skill-context wins over general rules on conflict - Missing optional files (
ROADMAP.md) areWARN, not blockers - These are lightweight checks — flag only clear violations as
WARN, don't block the commit - Never modify these files
- Read
-
Plan Task Linkage
- Check if
.unikit/code/plans/contains an active plan (look forTASKS.md) - If a plan exists and staged changes clearly relate to a planned task, suggest referencing the phase/task number in the commit message body (e.g., "Phase 8, tasks 8.1-8.3")
- This is optional — suggest it, don't require it
- Check if
-
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
- Derive from file paths using the project's module/folder structure (see
.unikit/ARCHITECTURE.md):- Module directories → module name in kebab-case (e.g.,
Wallets/→wallets,MiniGames/→mini-games) - Feature directories → feature name (e.g.,
Gameplay/→gameplay,Application/→app)
- Module directories → module name in kebab-case (e.g.,
- Use argument as scope if provided
- Omit scope if changes span multiple unrelated areas
- Derive from file paths using the project's module/folder structure (see
-
Generate Message
- Keep subject line under 72 characters
- Conventional Commits prefix (
type(scope):) is always in English — only the description text after the colon uses the configured language - 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(wallets): add currency conversion system
Bug fix with body:
fix(mini-games): handle null item reference in slider game
The slider mini-game could crash when item config was missing
the difficulty curve. Added null check with fallback to default.
Fixes #42
Refactor with plan reference:
refactor(characters): extract customer behavior into state machine
Migrated customer logic from monolithic Update to NodeCanvas FSM.
Phase 3, tasks 3.1-3.4
Breaking change:
feat(inventory)!: migrate to Opsive UIS item categories
BREAKING CHANGE: item definitions now use CategoryID instead of TypeEnum
Behavior
When invoked:
-
Check for staged changes
-
Run {{engine_name}} safety checks (meta pairing, ignored dirs, binary assets, secrets)
-
Run lightweight context checks against
.unikit/docs -
If errors found — list them and ask user whether to proceed or fix first
-
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. CancelBased on choice:
- Commit as is → proceed to step 7
- Edit message → ask the user for the corrected message via
AskUserQuestion, then return to step 6 with the new message - Cancel → do NOT commit → STOP
-
Execute
git commitwith the confirmed message -
Post-commit push handling:
-
If
git.skip_push_after_commit = truein.unikit/config.yaml:- 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., /unikit-commit wallets):
- Use it as the scope
- Or as context for the commit message
Splitting Unrelated Changes
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 groupingBased on choice:
- Yes, split as suggested → proceed to step 3
- No, commit everything together → proceed to step 4 (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
-
Unstage all:
git reset HEAD -
Stage and commit each group separately using
git add <files>+git commit -
After all commits are done, run Post-commit push handling (Step 8) — respects
git.skip_push_after_commit
Important
- Review large diffs carefully before committing
- Treat
.unikit/ARCHITECTURE.mdas read-only context - NEVER add
Co-Authored-Byor any other trailer attributing authorship to the AI. Commits must not contain AI co-author lines - Conventional Commits prefix (
type(scope):) is always in English; the subject and body text use the language from.unikit/config.yaml(language.artifacts)
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.