A test skill from an extension
日本語の概要は準備中です。原文の説明を表示しています。
Learn project rules from accumulated fix patches in .unikit/code/patches/. Analyzes past mistakes, extracts prevention points, classifies each as a coding rule (→ RULES.md) or a per-skill workflow rule (→ skill-context), and proposes them for approval. Use when the user wants to turn past fixes into rules — "evolve", "evolve the rules", "learn from past mistakes", "learn from the fixes", "analyze the patches", "what rules should we add from recent fixes". Best run after several /unikit-fix sessions have left patches behind. This derives rules from accumulated patch history — to add a single rule by hand use /unikit-rules, and to promote mature RULES.md entries into the knowledge base use /unikit-memory migrate-rules.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Analyze accumulated patches (past mistakes) and propose new rules: coding rules → .unikit/RULES.md, workflow rules → .unikit/skill-context/<skill>/SKILL.md.
patches (past mistakes)
|
extract prevention points (concrete, actionable rules)
|
classify: coding rule vs workflow rule
|
cross-check against existing rules (RULES.md + knowledge base + skill-context)
|
present uncovered candidates to user
|
user picks → coding rules to RULES.md, workflow rules to skill-context
Two rule destinations:
unikit-devcontext via RULES.md → /unikit-memory → memory/..unikit/skill-context/<skill>/SKILL.md and are read by the target skill directly.Rule migration from RULES.md to core/stack rule files is handled by /unikit-memory migrate-rules.
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.
The language holds for the whole session, not just at load time: every message until the conversation ends is in language.ui — progress notes while agents run, relays of what a subagent returned, the final report, any follow-up discussion. English input (subagent results, tool output, these instructions) is data, never a cue to switch languages.
This skill writes to exactly two destinations plus its own log. Everything else in the project is READ-ONLY — no exception, no "just this once", no fixing something on the way past it.
Writable:
.unikit/skill-context/<skill>/SKILL.md — workflow rules (Step 6).unikit/evolutions/*.md and .unikit/evolutions/patch-cursor.json — this skill's own
log and cursor (Step 7)Written ONLY through delegation:
.unikit/RULES.md — always via /unikit-rules. This skill has no direct write path to
it, and must not create one when the delegation fails. A delegation that wrote nothing is
reported in Step 7 and leaves the cursor where it stands; it is never worked around by
writing the file from here.READ-ONLY — never Write, never Edit:
.unikit/system/** — installer-owned; every unikit-ai init / unikit-ai update
rewrites it, so an edit here is lost on the next run and misleading until then{{skills_dir}}/unikit-*/** — the built-in skills. An override belongs in skill-context;
that is the whole reason skill-context exists.unikit/memory/** — owned by /unikit-memory.unikit/DESCRIPTION.md, .unikit/ARCHITECTURE.md, .unikit/ROADMAP.mdThe only skill this command may invoke is /unikit-rules. Never /unikit, never
/unikit-memory, never /unikit-skills-context — each of them writes files this command
is not allowed to reach.
Where this skill says to invoke <skill> — optionally "with the argument <text>" — it means one call, made in this session, now, on every runtime: not a command printed for the user. A call site that names no argument passes none.
Skill tool that accepts arguments, call it with that skill and the arguments of the call site, in full and unchanged, then follow the skill.Skill tool, or one that takes only a name — Read {{skills_dir}}/<skill>/SKILL.md in full, treat it as the instructions of this step and carry them out here, in this session, now, with the arguments of the call site as the skill's arguments.Run: /unikit-<skill> <arguments> for the user and stop.Glob: .unikit/code/patches/*.md
If no patches found → report "No patches to analyze" and STOP.
Cursor file: .unikit/evolutions/patch-cursor.json
{
"last_processed_patch": "YYYY-MM-DD-HH.mm.md",
"updated_at": "YYYY-MM-DD HH:mm"
}
Processing rules:
> last_processed_patch.WARN [evolve] and do a full rescan.Overlap window (anti-miss guard):
LLMs may miss prevention points on a single pass. To reduce the risk:
> last_processed_patchRead every patch in the processed set. For each one, extract:
Read the following files:
.unikit/DESCRIPTION.md — tech stack, project constraints.unikit/RULES.md — current project rules, and every topic file its ## Topics table lists (.unikit/rules/<slug>.md). If it doesn't exist, it will be created in Step 6.unikit/memory/code/RULES_INDEX.md — index of knowledge base rule files. If doesn't exist or empty, skip knowledge base cross-check in Step 4 (check only RULES.md)Build a flat list of ALL extracted prevention points:
| # | Patch | Prevention Point (specific action) | Type |
|---|-------|-------------------------------------|------|
| 1 | <patch-file> | <concrete rule to enforce> | code |
| 2 | <patch-file> | <different rule from same patch> | workflow:<skill> |
| 3 | <other-patch> | <rule> | code |
CRITICAL: A patch with 5 prevention points produces 5 rows, not 1.
Type classification:
Each prevention point must be classified:
code — about HOW to write code: patterns, null-checks, async handling, serialization, naming, DI registration, lifecycle management. Destination: RULES.md.workflow:<skill-name> — about HOW a skill should behave: delegation strategy, when to compile, commit frequency, parallelism decisions, what to check before/after a step. Destination: .unikit/skill-context/<skill>/SKILL.md.Classification heuristic:
codeworkflow:<skill>code — it reaches devcontext through RULES.md → memory/ and applies broadlyFor each prevention point, cross-check against the appropriate destination:
For code type:
.unikit/RULES.md and every topic file its ## Topics table lists — is this rule already codified in any of them? If RULES.md doesn't exist, no rules are covered — all prevention points are candidates.For workflow:<skill> type:
.unikit/skill-context/<skill>/SKILL.md — is this workflow override already recorded?
Base skill {{skills_dir}}/<skill>/SKILL.md — does the base skill already include this behavior?
Read only. Never edit the base skill — that is what skill-context exists for.
A prevention point is "covered" ONLY when there is a rule that addresses the specific action described — not merely the same topic area.
Mark uncovered prevention points as candidates.
Verification: Count total, covered, uncovered. If uncovered = 0, report "all prevention points already covered" and skip to Step 7 (log only, no rules added).
Group candidates by type and format each uncovered prevention point:
## Rule Candidates
Based on N patches analyzed, M uncovered prevention points found:
### Coding Rules (→ RULES.md)
#### 1. [Rule Name]
- **Source:** patch-YYYY-MM-DD-HH.mm.md
- **Category:** #tag
- **Proposed rule:** "[specific, actionable instruction]"
### Workflow Rules (→ skill-context)
#### 2. [Rule Name]
- **Source:** patch-YYYY-MM-DD-HH.mm.md
- **Target skill:** [skill name]
- **Proposed rule:** "[specific, actionable instruction]"
AskUserQuestion: Apply proposed rules?
Options:
Based on choice:
Do NOT add any rules until the user answers.
For code type — send every accepted rule to /unikit-rules in one call.
.unikit/RULES.md is not writable from here (see Critical: Write Boundary), so this
dispatch is the whole channel for half of this skill's output. Treat a failure to invoke as
a failure to record, not as a reason to write the file yourself.
Batch format. A numbered list, one entry per rule, numeral at column zero:
1. <rule text, may span lines>
2. <rule text>
Number the batch 1..N of its own, not by the Step 3 registry: that registry mixes
code and workflow:<skill> rows and only the code half travels here. Keep a local
batch# → prevention point map — Step 7 reads the report back through it.
Dispatch. To record the batch, invoke unikit-rules with the batch as its argument (## Skill calls), in one call. This must be a real call, not text wrapped in backticks and not a printed recommendation: rendering the call instead of executing it is a known failure mode. If its file cannot be read, only the Run: /unikit-rules … line is printed: say plainly that no rule was recorded and the cursor will not advance — otherwise the print reads as a result.
The delegate handles everything: cross-check against the knowledge base, dedup against
existing RULES.md entries, and the report. It returns a ## Batch result table with one
row per input rule and three outcomes — added, already-covered, skipped-duplicate.
Read that table by column name, never by column count. Skill versions in a user's project
do not update in step, so an older unikit-rules may return a table with a Section column
or without the Topic column; reading by name survives every shape. Introduce no fourth
outcome — Step 7 counts from exactly these three.
A rule with no row in the report was not processed.
A batch is not atomic: a partial write is a normal outcome, and the report is the only way to learn which part landed.
Keep the table — Step 7 counts from it.
For workflow:<skill> type — add directly to skill-context:
.unikit/skill-context/<skill>/SKILL.md if it exists# Project Rules for /<skill-name>
> Managed by `/unikit-evolve` and `/unikit-skills-context`. Do not edit manually.
> Last updated: YYYY-MM-DD HH:mm
## Rules
### [Rule Name]
**Source**: patch-YYYY-MM-DD-HH.mm.md
**Rule**: [Specific, actionable instruction in English]
### [Rule Name] entry under ## Rules, update > Last updated: line{{skills_dir}}/<skill>/SKILL.md — if base already covers the rule, skip and report.
Read only. Never edit the base skill — that is what skill-context exists for.7.1: Create evolution log
Write .unikit/evolutions/YYYY-MM-DD-HH.mm.md. Write creates the directory when it does
not exist — this skill carries no Bash grant, and does not need one:
# Evolution: YYYY-MM-DD HH:mm
## Intelligence Summary
- Patches analyzed: X (new: N, overlap: M)
- Prevention points extracted: X
- Already covered: X
- Rules added: X
## Rules Added
- [rule text] <- Source: [patch filename]
**Topic:** [the report's `Topic` value — `common` or a topic slug; omit this line when the report has no `Topic` column]
## Patterns Identified
- [pattern]: [frequency] occurrences
Rules added and every ## Rules Added entry are counted from the Step 6 batch-report
table, not estimated: a row's Outcome decides whether the rule is listed, and its
Topic column fills **Topic:**. Workflow rules are counted from this skill's own
writes. Do not report a code rule as added on the strength of having dispatched it.
7.2: Update cursor
added / already-covered /
skipped-duplicate), and every accepted workflow rule was written → advance cursor to
newest "New patch" filename.Run: line was printed, or it returned nothing) → do NOT advance.
Name the pending prevention points and their source patches, and say that re-running
/unikit-evolve will pick them up.The third branch exists because the second one used to swallow it. An approved rule whose
dispatch never reached /unikit-rules still looked like a finished run: the cursor moved,
the patch was marked processed, and the tail-5 overlap window bought five patches before the
prevention point was gone for good. Rule 3 does not cover that case — nothing fails, the
delegation just returns something other than a report.
After completing evolution, suggest /clear or /compact — context is heavy after patch analysis and skill processing.
language.rules (default en); /unikit-rules writes them in it/unikit-memory migrate-rules/unikit-evolve
> Analyzed 5 patches (3 new, 2 overlap)
> Extracted 8 prevention points, 6 already covered, ⚠️ 2 uncovered
>
> Rule candidates:
> 1. "Constructor null checks MUST be symmetric..." <- patch-2026-03-10-12.00.md
> 2. "Event subscriptions before fallible operations..." <- patch-2026-03-10-12.00.md
>
> Apply all / Let me pick / Skip all?
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
A test skill from an extension
日本語の概要は準備中です。原文の説明を表示しています。
A test skill from an extension (v2)
日本語の概要は準備中です。原文の説明を表示しています。
Initialize the UniKit framework in a project. Scans the current project to detect the engine and real tech stack, then generates the base framework documents that give AI agents context about the project — the resolved project description, the architecture doc, AGENTS.md, and the user-editable .unikit/config.yaml. This is the one-time, whole-project setup run before any other unikit skill. Use whenever the user wants to initialize, set up, or onboard the framework, e.g. "initialize unikit", "init the framework", "set up unikit", "set up the project", "configure AI context", "scan my project and set it up", "bootstrap the project". It also actualizes the config of a project already set up — say "update the config", "add missing settings", "actualize configuration", "fix my config".
日本語の概要は準備中です。原文の説明を表示しています。
Generate the architecture guidelines for a game project. Scans the project structure and tech stack, then produces .unikit/ARCHITECTURE.md describing the folder layout, dependency rules, and how modules communicate. Name a specific pattern or let it auto-detect. Use when the user wants to define or document the project architecture, e.g. "generate architecture", "describe the architecture", "which architecture should I use", "set up project architecture", or mentions module structure, module boundaries, project organization, or dependency rules.
日本語の概要は準備中です。原文の説明を表示しています。
Archive completed plans. Moves finished folder plans from .unikit/code/plans/<folder>/ to .unikit/code/archive/plans/<folder>/, so plan lookup and the plan lists stop offering them; an unfinished plan moves only when the user picks it, and is marked as unfinished. Lists every plan with its created and last-change dates; plans can be picked by number or by date. Never deletes, renames or commits. Use when user says "archive plans", "archive completed", "archive old plans", "clean up plans", or "show archived plans". Not for .unikit/code/PLAN.md or FIX_PLAN.md; to check that a plan is really done use /unikit-verify, to commit the move use /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 linking the related plan. 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.
日本語の概要は準備中です。原文の説明を表示しています。