A test skill from an extension
日本語の概要は準備中です。原文の説明を表示しています。
Perform a code review on {{engine_name}} {{engine_code_language}} code. Checks for bugs, security issues, performance problems, and best practices against the project's coding rules, design principles, and framework-specific conventions. Supports four modes — staged changes, a pull request, a commit range, or individual files. Use when the user says "review code", "check my code", "code review", "review PR", "review staged changes", "review these commits", or "is this code okay". Optional +check flag validates findings via a fresh-context subagent.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Analyze {{engine_code_language}} code against the project's coding rules and produce a structured review report.
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 uses a named delegation alias for Agent(...) calls. The alias is the single
place where its delegate's agent type and call arguments are declared — call sites name
the alias and never carry a type or a model argument of their own.
Model argument. Before the first dispatch of an alias below, read .unikit/config.yaml
(a missing file, block or key is not an error) and settle the model argument once:
subagents.model.{{agent_id}} holds a model name — pass model: <name> with every call,
exactly as written (this runtime's own spelling of the model argument, if it differs).inherit, or is present and empty — pass no model argument; the agent runs on the
model of this session."{{agent_model_default}}"; an empty string
means pass no model argument.If the runtime rejects the model name, repeat that call once without the model argument and
report WARN [delegation] model "<name>" rejected — retried on the session model.
check-agent — fresh-context, read-only findings validator (+check). Expands to:
Agent({{agent_call_reader}} prompt: "<rendered VALIDATOR.md template>")
Whether the agent is read-only is this runtime's own claim, so the read-only contract
rides on the prompt rather than on the dispatch: keep references/VALIDATOR.md's
read-only paragraph ("You never modify a file and never run a command that changes state") in whatever is sent.
Fallback: the validator is never replaced by inline analysis — see
references/CHECK-MODE.md (WARN [+check]: validator failed).
Read (they always apply):
.unikit/ARCHITECTURE.md — module boundaries, dependency rules.unikit/ROADMAP.md (if present) — milestone alignment.unikit/system/gate-result-contract.md — schema for the machine-readable unikit-gate-result block emitted in Step 5. If missing or unreadable, do not block: the Step 5 gate-result section is self-sufficient on the schema and degrades gracefully (see there).Read .unikit/memory/code/RULES_INDEX.md. Load rules:
.unikit/RULES.md first (highest priority). Rule topics: the root here; its topic files load in Step 3, by the reviewed files.all or contains {{self_name}} — read that file from .unikit/memory/code/core/ using the Read tool. Do NOT skip any matching row. Always re-read at skill start, never rely on prior conversation cacheRead .unikit/skill-context/{{self_name}}/SKILL.md if it exists — project-level overrides that win over this SKILL.md when conflicting.
Parse +check first. If $ARGUMENTS contains the +check token, strip it out (remember check = true) before running the routing chain below, so it is never mistaken for a file path or git ref. +check enables the fresh-context findings validator in Step 4.5; without it, that step is skipped entirely.
#N / PR URL (e.g. 123, #42, https://github.com/.../pull/123) → PR mode. Extract number from URL if needed@ → File mode (folder). Strip @, glob <path>/**/*.cs.cs → File mode (explicit files)git rev-parse --verify <arg>:
AskUserQuestion (staged / cancel / corrected ref)
@disambiguates folder paths from git refs with/.
git diff --cached → if empty, git diff → if empty, inform and stop.cs files, read full content for stack rule detectiongh pr view <N> --json title,body,baseRefName,headRefName,filesgh pr diff <N>.cs files, read full content for stack rule detectiongit rev-parse --verify. Invalid → ask usergit log --oneline --reverse <ref>..HEAD → if empty, inform and stopAskUserQuestion (all / last 20 / cancel)git diff --name-only <ref>..HEAD -- '*.cs' → read full content for stack rule detectiongit show <hash> --stat and git show <hash>.cs args: locate via Glob/find. Name without path → search entire project@folder args: Glob <folder>/**/*.cs. No results → report error, continue with othersNow that target code is available, scan it for framework markers from the Stack section of RULES_INDEX.md. Each entry lists which keywords/types indicate relevance ("Load When" column). Load only matching rule files. If no markers match — skip stack rules entirely.
Rule topics. In the same pass, load the topic files listed under ## Topics in .unikit/RULES.md whose Load when matches the reviewed files — their paths, types, area; when unsure, load (RULES_INDEX.md → Step 1). They apply in Step 4 together with the root's rules.
Apply all loaded rules (core + stack + project + ARCHITECTURE.md) uniformly, regardless of mode.
For each file or diff hunk, check:
Modules/ → Game/ forbidden)feat/fix/perf work, missing ROADMAP.md milestone link (suggestion only)Commits mode only — additionally per commit:
Record exact line numbers (or commit hash + file:line for diff modes) and relevant code snippets.
Always run these checks in addition to project rules. If a finding from the checklist contradicts a loaded project/core/stack rule or ARCHITECTURE.md (i.e. the code follows project conventions) — suppress the finding, it is not an issue.
Correctness:
Performance:
Best Practices:
Testing:
+check only)Run this step only when check = true (the +check flag was parsed in Step 2). Draft the full review internally first (all sections of Step 5, including the gate-result inputs), then — before rendering anything to the user — run the procedure in references/CHECK-MODE.md. It dispatches one fresh-context check-agent validator over the Findings table rows (one item per row; "Questions", "Positive notes", and per-commit findings are excluded), applies each keep/modify/drop verdict and any severity move across the four levels (🔴 Critical / 🟡 Warning / 🟠 Medium / 🟢 Suggestion), tracks the hidden / adjusted / reclassified counters, and recomputes the unikit-gate-result block (Step 5 "Machine-readable gate result") from the post-filter table.
When +check ran successfully, append one line after all review sections and before the unikit-gate-result fence:
Filtered: N hidden, M adjusted, K reclassified by +check
Fallback (do NOT inline-analyze): if the validator agent is unavailable/blocked or the dispatch fails, keep all findings as drafted, do NOT recompute the gate-result block (assemble it from the unfiltered table), and emit the single line WARN [+check]: validator failed (<reason>), all items kept as-is above the fence — never re-do the validator's work with Glob/Grep/Read. An unavailable validator is silently skipped; the user is never asked.
If +check is not set, skip this step entirely — no validator-related lines appear and the gate-result block is computed once from the full draft.
All modes use the same report structure. Mode-specific sections are marked below.
## Code Review Summary
<!-- PR mode only: -->
**PR:** #[number] — [title]
**Base:** [baseRefName] ← **Head:** [headRefName]
<!-- Commits mode only: -->
**Range:** `<ref>..HEAD`
**Commits Reviewed:** [count]
**Files Reviewed:** [count]
**Risk Level:** 🟢 Low / 🟡 Medium / 🔴 High
**Stack rules loaded:** [list or "none"]
<!-- Commits mode only: -->
### Per-Commit Notes
#### `<short-hash>` — <commit message>
- **Atomicity:** ✅ Good / ⚠️ Mixed concerns
- **Message accuracy:** ✅ Matches / ⚠️ Misleading
- **Issues:** [findings with severity markers, or "None"]
### Findings
| # | Severity | Location | Rule | Issue | Fix |
|---|----------|----------|------|-------|-----|
| 1 | 🔴/🟡/🟠/🟢 | file:L42 | Rule ref | What's wrong | How to fix |
### Code Fixes
<!-- For 🔴 and 🟡 findings, show: -->
**#1 — [issue title]** (`file:L42`)
```csharp
// ❌ Current
<problematic code>
// ✅ Fixed
<corrected code>
```
### Questions
[Ambiguous code or design decisions that need clarification from the author]
### Summary
- **Critical:** [count] | **Warning:** [count] | **Medium:** [count] | **Suggestion:** [count]
- **Top issues:** 3 most impactful to fix first
- **Positive notes:** Good patterns observed
Mirror of
unikit-verifyStep 4.4 (the canonical template). This section copies that one field-for-field — the only differences are"gate": "review"and the projection source (the Findings table below, instead of verify's task-audit + context gates). The graceful-degradation wording and the last-fence rule are kept textually identical to verify's so a single guard locks both; if verify's wording changes, this must change in lockstep.
After the human-readable review above, append exactly one fenced unikit-gate-result JSON block. Use the schema loaded from .unikit/system/gate-result-contract.md in Step 1.
Last fence wins: the unikit-gate-result block MUST be the LAST fenced block in this skill's output — orchestrators parse only the last one. Any earlier fence (the example below, quoted prior output) is illustrative and is not the gate result.
Projection (review): derive the fields from the Findings table:
"gate": always "review"."status":
fail — the table has at least one blocking finding (🔴 Critical or 🟡 Warning).warn — no blocking findings, but the table has 🟠 Medium / 🟢 Suggestion rows.pass — the table is empty (no findings)."blocking": true only when status is fail."blockers": include only the 🔴 Critical and 🟡 Warning rows, each { "id", "severity", "file", "summary" }. Use stable ids (review-finding-<row#>). severity is error for these blocking rows (warning only when policy escalates). 🟠 Medium / 🟢 Suggestion rows stay in the human table, never in blockers."affected_files": the files the review actually evaluated or cited (not unrelated repo files); empty array when none apply."suggested_next.command": from the allowlist in gate-result-contract.md — /unikit-fix (code must change), /unikit-rules (a rules-gate finding needs a writer update), /unikit-architecture (architecture drift), /unikit-roadmap (roadmap drift), /unikit-commit (clean — natural next step), or null.When +check ran (Step 4.5), this projection runs over the post-filter table and suggested_next.reason notes the +check counters; on +check whole-dispatch failure the block is assembled from the unfiltered table and is not recomputed.
{
"schema_version": 1,
"gate": "review",
"status": "pass",
"blocking": false,
"blockers": [],
"affected_files": [],
"suggested_next": {
"command": "/unikit-commit",
"reason": "Review found no blocking issues."
}
}
The fenced block contains JSON only — no comments, trailing commas, or prose inside it.
Graceful degradation: if .unikit/system/gate-result-contract.md is missing or unreadable, do not hard-fail — emit the block from the inline schema in this section; if even that is not possible, skip the block and append the single line WARN [gate-result]: contract asset unavailable.
/unikit-review — review staged changes
/unikit-review PlayerController.cs — review specific file
/unikit-review @Assets/Scripts/Player — review folder recursively
/unikit-review @Assets/Scripts/Player @Assets/Modules/Wallets — review multiple folders
/unikit-review 123 or /unikit-review #42 — review PR by number
/unikit-review https://github.com/org/repo/pull/123 — review PR by URL
/unikit-review master — review commits vs master
/unikit-review v1.0.0 — review commits vs tag
/unikit-review feature/day-loop — review commits vs branch
Tip: Context is heavy after review. Consider
/clearor/compactbefore continuing.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
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.
日本語の概要は準備中です。原文の説明を表示しています。