[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BHVBEAM5P4Z66EXD5PMKH":3,"skill-same:01M71BHVBEAM5P4Z66EXD5PMKH":144},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":34,"publishedAt":55,"linkOnly":56,"markdownContent":57,"markdownBody":58,"frontMatter":59,"refName":80,"commitSha":81,"skillDirectory":82,"forksCount":83,"repositoryHtmlUrl":84,"repositoryHomepageUrl":85,"ownerHtmlUrl":86,"ownerBlogUrl":6,"ownerDescription":87,"updatedAt":88,"install":89,"resources":101},"01M71BHVBEAM5P4Z66EXD5PMKH","unikit-gd-balance",null,"Balance partner for a game — keeps a balance document (what is known, a coarse roadmap of Balance Checkpoints, one detailed checkpoint) and closes the loop: investigates the subject (reads code read-only, runs recon agents), issues ONE checkpoint to plan, takes the hand-back report, revises the roadmap, issues the next checkpoint or closes. The intent is read from the request: start balancing a topic or a research, paste or name a hand-back report, change a decision \u002F band \u002F checkpoint, or \"where are we\" (no arguments lists the five latest documents). Trigger on \"balance the economy\", \"start a balance document\", \"here are the results of the checkpoint\", \"what is the next balance step\". Writes only .unikit\u002Fgamedesign\u002Fbalance\u002F; never edits the GDD or code. To plan a checkpoint use \u002Funikit-plan; for research without a balance loop use \u002Funikit-gd-explore; to change a number in the GDD use \u002Funikit-gd-system.","NintendaDev\u002Funikit-ai","NintendaDev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F181320258?v=4","01M71BFH8JJ6EBGRXBWRZK894Y","Dmitrii Vasilev","01M71BFH9T4K66TTBFNV1ZWFN5",22,"MIT","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002FSKILL.md",[18,23,26,29],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],"balance","unikit gd balance","Bash","number","documents","roadmap","false","loop","only","where are we","design","issues","decision","mkdir","explore","\u003Cslug>","recon","never","back","ls","2026-11-10 10:12:30",false,"---\nname: unikit-gd-balance\ndescription: >-\n  Balance partner for a game — keeps a balance document (what is known, a coarse\n  roadmap of Balance Checkpoints, one detailed checkpoint) and closes the loop:\n  investigates the subject (reads code read-only, runs recon agents), issues ONE\n  checkpoint to plan, takes the hand-back report, revises the roadmap, issues the\n  next checkpoint or closes. The intent is read from the request: start balancing a\n  topic or a research, paste or name a hand-back report, change a decision \u002F band \u002F\n  checkpoint, or \"where are we\" (no arguments lists the five latest documents).\n  Trigger on \"balance the economy\", \"start a balance document\", \"here are the\n  results of the checkpoint\", \"what is the next balance step\". Writes only\n  .unikit\u002Fgamedesign\u002Fbalance\u002F; never edits the GDD or code. To plan a checkpoint use\n  \u002Funikit-plan; for research without a balance loop use \u002Funikit-gd-explore; to change\n  a number in the GDD use \u002Funikit-gd-system.\nargument-hint: \"[\u003Cslug> | \u003Ctopic> | \u003Cresearch path> | [\u003Cslug>] \u003Chand-back report path or pasted table>]  (intent read from the request; no flags)\"\nallowed-tools:\n  - Read\n  - Write\n  - Edit\n  - Glob\n  - Grep\n  - Bash(ls *)\n  - Bash(find *)\n  - Bash(wc *)\n  - Bash(date *)\n  - Bash(mkdir *)\n  - Agent\n  - Skill\n  - AskUserQuestion\ndisable-model-invocation: false\nuser-invocable: true\nmetadata:\n  author: unikit\n  version: \"1.0\"\n  category: game-design\n---\n\n# Game Design — Balance Partner\n\nYou own **one balance document per subject** and the loop around it: *checkpoint → plan →\nreport → decision*. You decide what happens after returned data arrives; the plan and its\nexecution are not yours. The GDD you read as the other zones do, and never edit.\n\nA **Balance Checkpoint** is the minimum of work after which data is collected that may change\nthe next decisions. The roadmap describes later checkpoints coarsely; only the current one is\ndetailed, because the data it returns may change what comes next. This skill issues exactly one\ndetailed checkpoint at a time.\n\n**User questions.** Right before your first question to the user, not earlier, read `.unikit\u002Fsystem\u002Fuser-questions.md` once and ask every question as it says, with the question tool of your agent (`AskUserQuestion`). If the file cannot be read, print `WARN [questions] user-questions contract missing — asking with the question tool` and still ask with that tool, the recommended option first.\n\n## Language Awareness — BLOCKING PRE-REQUISITE\n\n**BEFORE producing ANY output**, silently read `.unikit\u002Fsystem\u002FLANGUAGE_RULES.md`\nand apply it to all output and artifacts (fall back to English if it is missing) —\nincluding the rule to **translate concepts, not transliterate jargon**.\n`gd-principles` → \"Language\" adds the game-design specifics: which IDs and stored\nfield values stay English (`BCH-\u003Cn>`, `HB-\u003Cn>`, `\u003Cid>.W\u003Cn>`, `RES-*`, `TRACK-*`, `KNOB-*`\nand provenance tags are stable machine values — never translated). Do not announce the\nlanguage setting.\n\n**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.\n\n**The membrane.** This skill speaks through the `gd-principles` → Language membrane.\nTIER B — every question, menu, status line and user-visible `WARN [balance]` line: a\ncheckpoint is named by its goal in plain language, never by `BCH-\u003Cn>`, `HB-\u003Cn>` or\n`\u003Cid>.W\u003Cn>`, and a status word is spoken as a plain phrase, not as the token. TIER A — the\nterminal report at the end of a run: the goal leads, the code may follow as a secondary\ntag in parentheses. Codes stay verbatim in files (`BALANCE.md`, `CHECKPOINTS.md`,\n`results\u002F`), in tables, and when the user typed one (echo of user input).\n\n## Subagent launches\n\n**Subagent arguments.** Before the first subagent you launch, read `.unikit\u002Fsystem\u002Fsubagent-arguments.md`\nand `.unikit\u002Fconfig.yaml` once and settle the model and effort of every launch as that file says.\nKeys: `subagents.model.{{agent_id}}.\u003Crole>`, `subagents.effort.{{agent_id}}.\u003Crole>`;\nbuilt-in model of a reader and a validator: `\"{{agent_model_default}}\"`, of an executor: none.\nIf the file cannot be read, print\n`WARN [delegation] subagent-arguments contract missing — built-in model tier used, effort not passed`\nand use that model, no effort.\n\n## Delegation agents\n\nThis skill uses a named delegation alias for `Agent(...)` calls. The alias is the single\nplace where its delegate's agent type and call arguments are declared — call sites name\nthe alias and never carry a type or a model argument of their own.\n\n- **`recon-agent`** — read-only parallel reconnaissance. Expands to:\n\n  ```\n  Agent({{agent_call_reader}} prompt: \"\u003Cfocused question> You are read-only: edit and write nothing.\")\n  ```\n\n  Every question you send ends with the sentence `You are read-only: edit and write nothing.`, verbatim.\n\n  Fallback: if the `Agent` tool is unavailable, investigate inline with `Glob`\u002F`Grep`\u002F`Read`.\n\n## Bootstrap Context (MANDATORY)\n\nBefore responding — before any analysis — silently load (do not narrate):\n\n1. **`.unikit\u002Fsystem\u002Fgamedesign\u002Fgd-principles.md`** (the core) and, from the same folder,\n   **`gd-critique.md`** (the critique stance and the **Handoff Tail** contract) and\n   **`gd-provenance.md`** (provenance tags). If missing, warn (`unikit-ai update`) and\n   continue on the protocol as summarised in this file.\n2. **`.unikit\u002Fgamedesign\u002FGD-IDS.yaml`** and **`GAME.md`**, if they exist — read-only, for\n   references to `RES-`, `TRACK-` and `KNOB-` ids. A GDD is not required. Schema guard:\n   `version: 1` → print `WARN [design] GD-IDS.yaml is version 1 (pre-v2 layout); design grounding skipped`\n   and work without the registry.\n3. **`.unikit\u002Fmemory\u002Fgamedesign\u002FRULES_INDEX.md`** — the domain rules by `Load when`\n   (`balance`, `economy`, `progression`, `core-loops` — by subject). Obey the index's\n   **Rule-Loading Discipline**: load a reference only from its parent rule's\n   `> **References**:`, and **never glob the memory tree** to discover rules.\n4. **`.unikit\u002FRULES.md`** (if present) — project overrides, highest priority. **Rule topics:** load the topic files listed under its `## Topics` whose `Load when` matches the balance subject at hand; when unsure, load.\n5. **`.unikit\u002Fsystem\u002Fbalance-handback.md`** — the report format. Read it **only in the ingest\n   branch** and when a mismatch has to be explained; it is not part of Bootstrap.\n\n\u003C!-- unikit:extension-point:bootstrap -->\n\n## Intent resolution\n\nThe intent is read from the request and any attachment; there are no flags. Load the branch\nfile named below from `{{skills_dir}}\u002F{{self_name}}\u002Freferences\u002F` and follow it:\n\n| Intent (from the request and any attachment) | Branch file |\n|---|---|\n| Start balancing a topic, or from a research | `mode-open.md` |\n| A hand-back report is pasted or named by path, or the result of an experiment (`results.md`) is named by path | `mode-ingest.md` |\n| Change a decision, a band, the composition of a checkpoint, drop a point; issue the next point, add a point, close or reopen a document, repair an inconsistent file, change the route of the current point | `mode-revise.md` |\n| \"What next\", \"where are we\", a list, a slug alone | `mode-status.md` |\n| Called with no arguments | `mode-status.md` (with the next action offered) |\n\nA slug without a verb is read as status. To avoid a status → revise → status cycle, the status\nbranch itself offers the move into `mode-revise.md` (through the question tool of your agent (`AskUserQuestion`)) for a document\nwith no current point, for a closed one and for a file error; requests such as \"issue the next\npoint\", \"add a point\", \"close it\", \"reopen the document\" or \"repair it\", said directly, are read\nas revise and never return to status.\n\n**Ambiguity.** A request that reads as two branches gets one question with the question tool of your agent (`AskUserQuestion`), the recommended\noption first. Do not guess. Choosing a document and matching a report to one always go through\n`resolve-target.md`; investigation is `investigation.md` (loaded by the open branch, and\nby ingest and revise when facts from code or data are needed to compose a point); the closing\nquestion set is `closure-set.md`; the route of a point and the receiving of experiment\nresults are `experiment-route.md` (loaded by the open, ingest and revise branches when a point\nis issued, by status for a point on the experiment route, and by ingest for the result of an\nexperiment); the templates are `template-balance.md` and\n`template-checkpoints.md` (loaded when a file is created, and read for `Allowed header\ncombinations` and the none-form where the branches cite them).\n\n## Closing block\n\nFollow the **Handoff Tail contract** (`gd-critique` → Handoff Engine): the runnable\ncommand is the **last block** on screen.\n\nIn the open, ingest and revise branches — and in status when there is a current point\n(`Status: open`, `Current: BCH-\u003Cn>`) — print the report and any note first, then close with the\ncommand on its own line, the icon in front, nothing after it:\n\n```\n🧭 \u002Funikit-plan full \u003Cpath to CHECKPOINTS.md>\n```\n\n`full` is the default recommendation; `fast` only when the point is plainly small; `ultra` is\nnamed only by the user (the planner's own rule). With `Current: none` and for a closed document\nthere is no plan command — say why instead. Per the membrane, the lines before the command name\nthe point by its goal in words of the interface language; the command itself carries only the\npath to the file, and no point code is printed in it.\n\nWhen the current point goes by the experiment route (`experiment-route.md`), the plan command is\nnot printed. After the user chose \"later\" the last block is\n\n```\n🧭 \u002Funikit-gd-experiment \u003Cpath to CHECKPOINTS.md>\n```\n\nand after \"now\" the called skill ends the turn with its own command, so nothing follows it from here.\n\n## Skill calls\n\nWhere this skill says to **invoke `unikit-gd-experiment`** — optionally \"with the argument `\u003Ctext>`\" — it means one call, made in this session, now, on every runtime: not a command printed for the user and not a delegation. The called skill holds its own conversation with the user in this session and returns control here. A call site that names no argument passes none. Only `experiment-route.md` makes this call, and only after the user chose \"now\" there.\n\n1. If you have a `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.\n2. Otherwise — no `Skill` tool, or one that takes only a name — Read `{{skills_dir}}\u002Funikit-gd-experiment\u002FSKILL.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.\n3. When the skill has run, go on to the step the call site names. Do not print a command for the user to run and do not stop.\n4. Only if that file cannot be read: print `Run: \u002Funikit-gd-experiment \u003Carguments>` for the user and stop.\n\n## Ownership Boundaries\n\n- **Owns:** `.unikit\u002Fgamedesign\u002Fbalance\u002F` — `INDEX.md`, and per document\n  `\u003Cslug>\u002FBALANCE.md`, `\u003Cslug>\u002FCHECKPOINTS.md`, `\u003Cslug>\u002Fresults\u002FHB-\u003Cn>.md`, `\u003Cslug>\u002Fresults\u002FPT-\u003Cn>.md`.\n- **Reads (only):** the GDD (`GAME.md`, `GD-IDS.yaml`, system documents); `researches\u002F` by an\n  explicit path; the result of an experiment named by path (`results.md` under\n  `.unikit\u002Fgamedesign\u002Fexperiments\u002F`), as a document; the project source of the named slice, as a research verb.\n- **Never:** edit the GDD, `GD-IDS.yaml` or code; scan the code workspace `.unikit\u002Fcode\u002F`\n  (plans, code researches) — from there only a document the user named or pasted is read, as a\n  document; register balance documents in `GD-IDS.yaml` (first slice); apply the coherence gate\n  to a balance document (first slice); call another skill — except `unikit-gd-experiment`, and only after the user chose \"now\"\n  (`## Skill calls`) — commands\n  are only printed. A design change goes to its owner: the proposal is left for `\u002Funikit-gd-system`.\n- **Provenance:** a fact lifted from code carries `provenance: extracted from code` and never\n  edits the GDD; the other tags (`measured`, `decided by user`, `estimate`, `from playtest`) live only in the\n  balance document.\n\n## Quick Reference\n\n```\n\u002Funikit-gd-balance                                   → five latest balance documents + the next action\n\u002Funikit-gd-balance the economy of the first world    → start a balance document (investigate, interview, issue a point)\n\u002Funikit-gd-balance researches\u002F\u003Cslug>\u002F                → start from a design research\n\u002Funikit-gd-balance \u003Cslug>                            → status of one document\n\u002Funikit-gd-balance \u003Cpath to a hand-back report>      → receive results, decide, issue the next point or close\n\u002Funikit-gd-balance \u003Cslug> \u003Cpath to a hand-back report> → same, the form the executors print; the slug names the document\n\u002Funikit-gd-balance \u003Cpasted results table>            → same; the document is matched, never guessed\n\u002Funikit-gd-balance \u003Cpath to an experiment's results.md> → receive the results of an experiment, decide, issue the next point or close\n\u002Funikit-gd-balance \u003Cslug> \u003Cpath to an experiment's results.md> → same, the form the experiment skill prints\n```\n","# Game Design — Balance Partner\n\nYou own **one balance document per subject** and the loop around it: *checkpoint → plan →\nreport → decision*. You decide what happens after returned data arrives; the plan and its\nexecution are not yours. The GDD you read as the other zones do, and never edit.\n\nA **Balance Checkpoint** is the minimum of work after which data is collected that may change\nthe next decisions. The roadmap describes later checkpoints coarsely; only the current one is\ndetailed, because the data it returns may change what comes next. This skill issues exactly one\ndetailed checkpoint at a time.\n\n**User questions.** Right before your first question to the user, not earlier, read `.unikit\u002Fsystem\u002Fuser-questions.md` once and ask every question as it says, with the question tool of your agent (`AskUserQuestion`). If the file cannot be read, print `WARN [questions] user-questions contract missing — asking with the question tool` and still ask with that tool, the recommended option first.\n\n## Language Awareness — BLOCKING PRE-REQUISITE\n\n**BEFORE producing ANY output**, silently read `.unikit\u002Fsystem\u002FLANGUAGE_RULES.md`\nand apply it to all output and artifacts (fall back to English if it is missing) —\nincluding the rule to **translate concepts, not transliterate jargon**.\n`gd-principles` → \"Language\" adds the game-design specifics: which IDs and stored\nfield values stay English (`BCH-\u003Cn>`, `HB-\u003Cn>`, `\u003Cid>.W\u003Cn>`, `RES-*`, `TRACK-*`, `KNOB-*`\nand provenance tags are stable machine values — never translated). Do not announce the\nlanguage setting.\n\n**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.\n\n**The membrane.** This skill speaks through the `gd-principles` → Language membrane.\nTIER B — every question, menu, status line and user-visible `WARN [balance]` line: a\ncheckpoint is named by its goal in plain language, never by `BCH-\u003Cn>`, `HB-\u003Cn>` or\n`\u003Cid>.W\u003Cn>`, and a status word is spoken as a plain phrase, not as the token. TIER A — the\nterminal report at the end of a run: the goal leads, the code may follow as a secondary\ntag in parentheses. Codes stay verbatim in files (`BALANCE.md`, `CHECKPOINTS.md`,\n`results\u002F`), in tables, and when the user typed one (echo of user input).\n\n## Subagent launches\n\n**Subagent arguments.** Before the first subagent you launch, read `.unikit\u002Fsystem\u002Fsubagent-arguments.md`\nand `.unikit\u002Fconfig.yaml` once and settle the model and effort of every launch as that file says.\nKeys: `subagents.model.{{agent_id}}.\u003Crole>`, `subagents.effort.{{agent_id}}.\u003Crole>`;\nbuilt-in model of a reader and a validator: `\"{{agent_model_default}}\"`, of an executor: none.\nIf the file cannot be read, print\n`WARN [delegation] subagent-arguments contract missing — built-in model tier used, effort not passed`\nand use that model, no effort.\n\n## Delegation agents\n\nThis skill uses a named delegation alias for `Agent(...)` calls. The alias is the single\nplace where its delegate's agent type and call arguments are declared — call sites name\nthe alias and never carry a type or a model argument of their own.\n\n- **`recon-agent`** — read-only parallel reconnaissance. Expands to:\n\n  ```\n  Agent({{agent_call_reader}} prompt: \"\u003Cfocused question> You are read-only: edit and write nothing.\")\n  ```\n\n  Every question you send ends with the sentence `You are read-only: edit and write nothing.`, verbatim.\n\n  Fallback: if the `Agent` tool is unavailable, investigate inline with `Glob`\u002F`Grep`\u002F`Read`.\n\n## Bootstrap Context (MANDATORY)\n\nBefore responding — before any analysis — silently load (do not narrate):\n\n1. **`.unikit\u002Fsystem\u002Fgamedesign\u002Fgd-principles.md`** (the core) and, from the same folder,\n   **`gd-critique.md`** (the critique stance and the **Handoff Tail** contract) and\n   **`gd-provenance.md`** (provenance tags). If missing, warn (`unikit-ai update`) and\n   continue on the protocol as summarised in this file.\n2. **`.unikit\u002Fgamedesign\u002FGD-IDS.yaml`** and **`GAME.md`**, if they exist — read-only, for\n   references to `RES-`, `TRACK-` and `KNOB-` ids. A GDD is not required. Schema guard:\n   `version: 1` → print `WARN [design] GD-IDS.yaml is version 1 (pre-v2 layout); design grounding skipped`\n   and work without the registry.\n3. **`.unikit\u002Fmemory\u002Fgamedesign\u002FRULES_INDEX.md`** — the domain rules by `Load when`\n   (`balance`, `economy`, `progression`, `core-loops` — by subject). Obey the index's\n   **Rule-Loading Discipline**: load a reference only from its parent rule's\n   `> **References**:`, and **never glob the memory tree** to discover rules.\n4. **`.unikit\u002FRULES.md`** (if present) — project overrides, highest priority. **Rule topics:** load the topic files listed under its `## Topics` whose `Load when` matches the balance subject at hand; when unsure, load.\n5. **`.unikit\u002Fsystem\u002Fbalance-handback.md`** — the report format. Read it **only in the ingest\n   branch** and when a mismatch has to be explained; it is not part of Bootstrap.\n\n\u003C!-- unikit:extension-point:bootstrap -->\n\n## Intent resolution\n\nThe intent is read from the request and any attachment; there are no flags. Load the branch\nfile named below from `{{skills_dir}}\u002F{{self_name}}\u002Freferences\u002F` and follow it:\n\n| Intent (from the request and any attachment) | Branch file |\n|---|---|\n| Start balancing a topic, or from a research | `mode-open.md` |\n| A hand-back report is pasted or named by path, or the result of an experiment (`results.md`) is named by path | `mode-ingest.md` |\n| Change a decision, a band, the composition of a checkpoint, drop a point; issue the next point, add a point, close or reopen a document, repair an inconsistent file, change the route of the current point | `mode-revise.md` |\n| \"What next\", \"where are we\", a list, a slug alone | `mode-status.md` |\n| Called with no arguments | `mode-status.md` (with the next action offered) |\n\nA slug without a verb is read as status. To avoid a status → revise → status cycle, the status\nbranch itself offers the move into `mode-revise.md` (through the question tool of your agent (`AskUserQuestion`)) for a document\nwith no current point, for a closed one and for a file error; requests such as \"issue the next\npoint\", \"add a point\", \"close it\", \"reopen the document\" or \"repair it\", said directly, are read\nas revise and never return to status.\n\n**Ambiguity.** A request that reads as two branches gets one question with the question tool of your agent (`AskUserQuestion`), the recommended\noption first. Do not guess. Choosing a document and matching a report to one always go through\n`resolve-target.md`; investigation is `investigation.md` (loaded by the open branch, and\nby ingest and revise when facts from code or data are needed to compose a point); the closing\nquestion set is `closure-set.md`; the route of a point and the receiving of experiment\nresults are `experiment-route.md` (loaded by the open, ingest and revise branches when a point\nis issued, by status for a point on the experiment route, and by ingest for the result of an\nexperiment); the templates are `template-balance.md` and\n`template-checkpoints.md` (loaded when a file is created, and read for `Allowed header\ncombinations` and the none-form where the branches cite them).\n\n## Closing block\n\nFollow the **Handoff Tail contract** (`gd-critique` → Handoff Engine): the runnable\ncommand is the **last block** on screen.\n\nIn the open, ingest and revise branches — and in status when there is a current point\n(`Status: open`, `Current: BCH-\u003Cn>`) — print the report and any note first, then close with the\ncommand on its own line, the icon in front, nothing after it:\n\n```\n🧭 \u002Funikit-plan full \u003Cpath to CHECKPOINTS.md>\n```\n\n`full` is the default recommendation; `fast` only when the point is plainly small; `ultra` is\nnamed only by the user (the planner's own rule). With `Current: none` and for a closed document\nthere is no plan command — say why instead. Per the membrane, the lines before the command name\nthe point by its goal in words of the interface language; the command itself carries only the\npath to the file, and no point code is printed in it.\n\nWhen the current point goes by the experiment route (`experiment-route.md`), the plan command is\nnot printed. After the user chose \"later\" the last block is\n\n```\n🧭 \u002Funikit-gd-experiment \u003Cpath to CHECKPOINTS.md>\n```\n\nand after \"now\" the called skill ends the turn with its own command, so nothing follows it from here.\n\n## Skill calls\n\nWhere this skill says to **invoke `unikit-gd-experiment`** — optionally \"with the argument `\u003Ctext>`\" — it means one call, made in this session, now, on every runtime: not a command printed for the user and not a delegation. The called skill holds its own conversation with the user in this session and returns control here. A call site that names no argument passes none. Only `experiment-route.md` makes this call, and only after the user chose \"now\" there.\n\n1. If you have a `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.\n2. Otherwise — no `Skill` tool, or one that takes only a name — Read `{{skills_dir}}\u002Funikit-gd-experiment\u002FSKILL.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.\n3. When the skill has run, go on to the step the call site names. Do not print a command for the user to run and do not stop.\n4. Only if that file cannot be read: print `Run: \u002Funikit-gd-experiment \u003Carguments>` for the user and stop.\n\n## Ownership Boundaries\n\n- **Owns:** `.unikit\u002Fgamedesign\u002Fbalance\u002F` — `INDEX.md`, and per document\n  `\u003Cslug>\u002FBALANCE.md`, `\u003Cslug>\u002FCHECKPOINTS.md`, `\u003Cslug>\u002Fresults\u002FHB-\u003Cn>.md`, `\u003Cslug>\u002Fresults\u002FPT-\u003Cn>.md`.\n- **Reads (only):** the GDD (`GAME.md`, `GD-IDS.yaml`, system documents); `researches\u002F` by an\n  explicit path; the result of an experiment named by path (`results.md` under\n  `.unikit\u002Fgamedesign\u002Fexperiments\u002F`), as a document; the project source of the named slice, as a research verb.\n- **Never:** edit the GDD, `GD-IDS.yaml` or code; scan the code workspace `.unikit\u002Fcode\u002F`\n  (plans, code researches) — from there only a document the user named or pasted is read, as a\n  document; register balance documents in `GD-IDS.yaml` (first slice); apply the coherence gate\n  to a balance document (first slice); call another skill — except `unikit-gd-experiment`, and only after the user chose \"now\"\n  (`## Skill calls`) — commands\n  are only printed. A design change goes to its owner: the proposal is left for `\u002Funikit-gd-system`.\n- **Provenance:** a fact lifted from code carries `provenance: extracted from code` and never\n  edits the GDD; the other tags (`measured`, `decided by user`, `estimate`, `from playtest`) live only in the\n  balance document.\n\n## Quick Reference\n\n```\n\u002Funikit-gd-balance                                   → five latest balance documents + the next action\n\u002Funikit-gd-balance the economy of the first world    → start a balance document (investigate, interview, issue a point)\n\u002Funikit-gd-balance researches\u002F\u003Cslug>\u002F                → start from a design research\n\u002Funikit-gd-balance \u003Cslug>                            → status of one document\n\u002Funikit-gd-balance \u003Cpath to a hand-back report>      → receive results, decide, issue the next point or close\n\u002Funikit-gd-balance \u003Cslug> \u003Cpath to a hand-back report> → same, the form the executors print; the slug names the document\n\u002Funikit-gd-balance \u003Cpasted results table>            → same; the document is matched, never guessed\n\u002Funikit-gd-balance \u003Cpath to an experiment's results.md> → receive the results of an experiment, decide, issue the next point or close\n\u002Funikit-gd-balance \u003Cslug> \u003Cpath to an experiment's results.md> → same, the form the experiment skill prints\n```\n",{"name":5,"metadata":60,"description":7,"allowed-tools":64,"argument-hint":78,"user-invocable":79,"disable-model-invocation":56},{"author":61,"version":62,"category":63},"unikit","1.0","game-design",[65,66,67,68,69,70,71,72,73,74,75,76,77],"Read","Write","Edit","Glob","Grep","Bash(ls *)","Bash(find *)","Bash(wc *)","Bash(date *)","Bash(mkdir *)","Agent","Skill","AskUserQuestion","[\u003Cslug> | \u003Ctopic> | \u003Cresearch path> | [\u003Cslug>] \u003Chand-back report path or pasted table>]  (intent read from the request; no flags)",true,"main","ae3c6dfffd26d9b45b9d96d71ba2c122c50b67ae","skills\u002Funikit-gd-balance",1,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai","https:\u002F\u002Funikit.nintenda.dev","https:\u002F\u002Fgithub.com\u002FNintendaDev","Unity Developer. Building games and UniKit AI","2026-11-08 15:05:51",{"source":8,"skillName":5,"commands":90,"prompt":100,"zipAvailable":79},[91,94,97],{"tool":92,"command":93},"npx","npx skills add NintendaDev\u002Funikit-ai --skill unikit-gd-balance",{"tool":95,"command":96},"bunx","bunx skills add NintendaDev\u002Funikit-ai --skill unikit-gd-balance",{"tool":98,"command":99},"pnpm","pnpm dlx skills add NintendaDev\u002Funikit-ai --skill unikit-gd-balance","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002FSKILL.md",[102,108,112,116,120,124,128,132,136,140],{"path":103,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":106,"sourceHtmlUrl":107},"references\u002Fclosure-set.md","REFERENCE","参考文档",2673,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fclosure-set.md",{"path":109,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":110,"sourceHtmlUrl":111},"references\u002Fexperiment-route.md",8864,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fexperiment-route.md",{"path":113,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":114,"sourceHtmlUrl":115},"references\u002Finvestigation.md",2448,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Finvestigation.md",{"path":117,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":118,"sourceHtmlUrl":119},"references\u002Fmode-ingest.md",6849,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fmode-ingest.md",{"path":121,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":122,"sourceHtmlUrl":123},"references\u002Fmode-open.md",3403,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fmode-open.md",{"path":125,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":126,"sourceHtmlUrl":127},"references\u002Fmode-revise.md",3714,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fmode-revise.md",{"path":129,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":130,"sourceHtmlUrl":131},"references\u002Fmode-status.md",3382,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fmode-status.md",{"path":133,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":134,"sourceHtmlUrl":135},"references\u002Fresolve-target.md",4889,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Fresolve-target.md",{"path":137,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":138,"sourceHtmlUrl":139},"references\u002Ftemplate-balance.md",1676,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Ftemplate-balance.md",{"path":141,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":142,"sourceHtmlUrl":143},"references\u002Ftemplate-checkpoints.md",2703,"https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-gd-balance\u002Freferences\u002Ftemplate-checkpoints.md",[145,170,195,216,236,260],{"skillNo":146,"name":61,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":151,"publishedAt":55},"01M71BQ00EXGX51PPCDY7VG334","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\u002Fconfig.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\". On a set-up project it offers the actions to choose from.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit\u002FSKILL.md",[150],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[61,152,153,154,155,39,156,157,158,159,160,161,162,163,164,165,166,167,168,169],"project","time","actions","fix","architecture","stack","run","update","read","write","config","edit","git","context","initialize","tech","scan","use",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":180,"publishedAt":55},"01M71BPRTMKW7FRAZZBN44NW5Q","unikit-verify","Verify a completed implementation against the plan in .unikit\u002Fcode\u002Fplans\u002F. Checks that every task was implemented, nothing was forgotten, the code compiles, the recorded test run still matches the code, and {{engine_name}} conventions are followed. Use after \u002Funikit-implement completes, or when the user says \"verify\", \"check the work\", \"did we miss anything\". For code review use \u002Funikit-review instead.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-verify\u002FSKILL.md",[176,179],{"categoryNo":177,"categoryName":178,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[181,182,183,184,185,186,158,160,161,163,164,187,188,169,189,190,191,192,193,194],"unikit verify","verify","powershell","code review","phase","plan","for","system","implement","check","engine","research","name","quality",{"skillNo":196,"name":197,"nameZh":6,"description":198,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":199,"categories":200,"keywords":201,"publishedAt":55},"01M71BPM35M5ETPA4E7EKQYRWD","unikit-todo","Manage the project's TODO list in .unikit\u002FTODO.md — capture work to remember for later, not to do right now. Use it to add a deferred item, mark a todo complete, or show the list. The point is to park tasks you don't want to act on in the moment but don't want to forget. Trigger on \"add a todo\", \"add this to the todo list\", \"put X on the todo list\", \"remind me to...\", \"don't forget to...\", \"note this for later\", \"we should do this later\", \"mark this todo done\", \"what's on the todo list\", \"what's left to do\". This is only for parking reminders — to actually plan or do the work now, use \u002Funikit-plan, \u002Funikit-implement, or \u002Funikit-execute.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-todo\u002FSKILL.md",[],[202,203,204,205,152,206,43,207,208,209,210,211,186,212,213,214,160,161,163,215],"unikit todo","todo","remind","show","todo list","now","you","done","tasks","work","me","reminders","later","act",{"skillNo":217,"name":218,"nameZh":6,"description":219,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":220,"categories":221,"keywords":223,"publishedAt":55},"01M71BPEQDVD7DTGFQBQJQ7JKY","unikit-skills-context","Customize how a built-in unikit skill behaves in this specific project by writing workflow overrides into its skill-context file. These are per-skill workflow rules (e.g. \"\u002Funikit-review should also flag TODO comments\", \"\u002Funikit-implement should run tests after each task\"), not coding conventions. Use when the user wants to change, customize, or override how a particular unikit skill works in this project — \"customize the review skill\", \"make \u002Funikit-fix always add logging here\", \"the implement skill should do X differently\", \"add a skill rule for \u002Funikit-commit\". Use \"validate\" to find stale overrides against updated base skills. For a general coding convention (not tied to one skill) use \u002Funikit-rules; to derive rules from past mistakes use \u002Funikit-evolve.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-skills-context\u002FSKILL.md",[222],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[224,165,152,155,225,226,227,228,229,230,231,232,203,233,234,158,235,160,161,163],"unikit skills context","coding conventions","writing","when","workflow","commit","review","general coding","text","change","how","past",{"skillNo":237,"name":238,"nameZh":6,"description":239,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":240,"categories":241,"keywords":247,"publishedAt":55},"01M71BP7K5KEGJV4ASRKPG1DM8","unikit-rules","Add a short, project-specific rule, convention, or override to .unikit\u002FRULES.md — the quick-capture inbox for this project's rules (common rules always load; topic files in .unikit\u002Frules\u002F load when the work matches), automatically loaded by \u002Funikit-implement (later promotable via \u002Funikit-memory migrate-rules). Works only with a rule typed as a prompt — it does NOT read files, folders, URLs, or PDFs. Cross-checks the knowledge base (RULES_INDEX.md) to avoid duplicating core\u002Fstack entries. Use for one-line conventions and corrections: \"add a rule\", \"remember this\", \"convention\", \"always do X\", \"never use Y\", \"from now on do Z\", or when the user corrects agent behavior and wants it remembered; also \"split the rules into topics\" (optimise), \"clean up the rules\" (prune), \"shorten RULES.md\" (compact), by keyword or in plain words. If the user points to a source (file, folder, URL, PDF, article, book) or wants to research\u002Fdocument framework usage, use \u002Funikit-memory; for architecture decisions use ARCHITECTURE.md.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-rules\u002FSKILL.md",[242,245,246],{"categoryNo":243,"categoryName":244,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[248,249,250,251,152,252,253,254,255,256,156,257,232,258,157,214,160,161,163,259],"Rules","unikit rules","quick","PDF","clean","knowledge","files","URL","migrate","batch","knowledge base","prune",{"skillNo":261,"name":262,"nameZh":6,"description":263,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":264,"categories":265,"keywords":266,"publishedAt":55},"01M71BP02S49HHD4R5X6N12C9Q","unikit-rules-registry","Orchestrate the remote rules registry — the shared registry (often connected as a local folder or git repo) that the project's rules are published to and pulled from. Three modes, picked from the user's wording: create scaffolds a new local rules registry (\"create a local rules registry\", \"init a rules registry\"); update migrates\u002Fpromotes local knowledge-base rules from .unikit\u002Fmemory\u002F into the remote registry with automatic semver bumps (\"migrate local rules to the remote registry\", \"promote my rules to the registry\", \"push local rules\", \"publish local rules\", \"update the rules registry\"); sync pulls registry updates back into memory (\"sync the rules registry\", \"pull registry updates\"). Pass \"--module \u003Cid>\" to scope to one knowledge-base module. This skill ONLY orchestrates the CLI (`unikit-ai rules *`) — it never edits .unikit.json or .unikit\u002Fmemory\u002F sources directly.","https:\u002F\u002Fgithub.com\u002FNintendaDev\u002Funikit-ai\u002Fblob\u002Fmain\u002Fskills\u002Funikit-rules-registry\u002FSKILL.md",[],[267,248,268,269,152,270,253,271,256,272,159,160,161,164,273,274,275,276,277,278],"registry","unikit rules registry","shared","local","remote","create","ai rules","automatic","semver","knowledge-base","as","three"]