Unikit commit
AI-Powered Code Toolkit for Game Engines
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.
One thing to look at
- 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.
What its author says it does
Copied from the file, not written here
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.
SKILL.md
8.8 KB, 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)