unikit-gd-spec
Create and own the master game design document (GAME.md — the authored one-pager plus the generated [gen] system/flow maps) and the GD-IDS.yaml facts registry — the top-level, big-picture layer of the GDD and the machine interface the code side reads. Use it to write the master spec from a concept or dialogue, import an existing GDD (a file path or URL), edit GAME.md content ("change a pillar", "rework the monetization stance", "tweak the loop stack"), pitch the game ("pitch" → PITCH.md), re-decompose the systems ("remap"), and — importantly — to add a new system to the design map ("let's add a new system", "add a crafting system to the game design", "add this to the GDD"). This is the structural, map-level layer plus GAME.md content edits. To write or fill in the detailed parameters of one existing system, use /unikit-gd-system; to apply one edit spanning several zones at once use /unikit-gd-apply; to invent a brand-new game concept use /unikit-gd-brainstorm.
- License 许可
- MIT
- 最近更新
- 2026-11-08
- Stars
- ★ 22
- Forks
- 1
01 前言 Front Matter
- name
- unikit-gd-spec
- metadata
- { "author": "unikit", "version": "1.0", "category": "game-design" }
- description
- Create and own the master game design document (GAME.md — the authored one-pager plus the generated [gen] system/flow maps) and the GD-IDS.yaml facts registry — the top-level, big-picture layer of the GDD and the machine interface the code side reads. Use it to write the master spec from a concept or dialogue, import an existing GDD (a file path or URL), edit GAME.md content ("change a pillar", "rework the monetization stance", "tweak the loop stack"), pitch the game ("pitch" → PITCH.md), re-decompose the systems ("remap"), and — importantly — to add a new system to the design map ("let's add a new system", "add a crafting system to the game design", "add this to the GDD"). This is the structural, map-level layer plus GAME.md content edits. To write or fill in the detailed parameters of one existing system, use /unikit-gd-system; to apply one edit spanning several zones at once use /unikit-gd-apply; to invent a brand-new game concept use /unikit-gd-brainstorm.
- allowed-tools
- [ "Read", "Write", "Edit", "Glob", "Grep", "Bash(ls *)", "Bash(find *)", "Bash(wc *)", "Bash(date *)", "WebFetch", "AskUserQuestion" ]
- argument-hint
- [path-to-existing-GDD | URL | free-form description] (mode inferred; no flags)
- user-invocable
- true
- disable-model-invocation
- false
02 资源文件 6
- 参考文档references/mode-add-system.md4.5 KB
- 参考文档references/mode-create.md12.4 KB
- 参考文档references/mode-edit.md2.4 KB
- 参考文档references/mode-import.md2.8 KB
- 参考文档references/mode-pitch.md854 B
- 参考文档references/mode-remap.md1.7 KB
03 SKILL.md 正文
Game Design — Master Spec & System Map
Author the whole-game truth and the map of every system. This skill owns the
spec / map zone in .unikit/gamedesign/ (gd-principles → Zone Ownership):
GAME.md— the one-page master GDD. This skill owns both halves: the authored one-pager (premise, pillars, loop stack, win/lose intent, monetization stance, non-goals) and the generated[gen]maps at the bottom (## System Map [gen]/## Flow Map [gen]/## Funnel [gen]), which are mechanical read-only re-renders ofGD-IDS.yaml. Both content edits to its sections and structure edits (which systems exist, remap) live here — there is no separate editor skill.GD-IDS.yaml— the machine-truth registry of pillars, systems, flows, and facts, and the interface the code side reads (unikit-plan/unikit-verify/unikit-explore).
Optionally it produces PITCH.md. Per-system detail (systems/<slug>.md) is
not this skill's job — that is unikit-gd-system; player-action flows
(flows/<slug>.md) are unikit-gd-flow's; content types
(content-types/CT-<slug>.md) are unikit-gd-content's. This skill remains the
single writer of the system roster: a flow's GOAL → SYS or a content type's
belongs_to that needs a missing system routes back here for add-system.
User questions. Right before your first question to the user, not earlier, read .unikit/system/user-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.
Language Awareness — BLOCKING PRE-REQUISITE
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md
and apply it to all output and artifacts (fall back to English if it is missing) —
including the rule to translate concepts, not transliterate jargon.
gd-principles → "Language" adds the game-design specifics: which IDs and stored
field values stay English. Do not announce 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.
Bootstrap — Working Contract & Domain Knowledge (MANDATORY)
Before any authoring, silently load — do NOT narrate the loading:
.unikit/system/gamedesign/gd-principles.md— the cross-skill core: the zone-ownership model and routing rule, the collaborative protocol (Question → Options → Decision → Draft → Approval, Explain → Capture), the one-way design→code boundary, the facts-registry / ID conventions, the language rules, and the anti-patterns. Plus, from the samegamedesign/folder, the shards this skill needs:gd-authoring.md(the section-cycle authoring contract + the delta discipline, incl. the GAME.md carve-out this skill implements) andgd-lifecycle.md(the lifecycle & status spine). This skill never re-specifies those mechanics — it applies them. If the core file is missing, warn the user thatgd-principlesis not installed (unikit-ai update) and continue with the protocol summarized above as a fallback..unikit/memory/gamedesign/RULES_INDEX.md— the domain knowledge index. Load the core rules relevant to master-spec work on demand by theirLoad Whencolumn — most oftenframeworks(MDA, SDT/PENS, Flow),player-motivation(Quantic Foundry),core-loops, andmonetization-ethics(for the Monetization Stance). Re-read at skill start; never rely on a prior conversation's cache. Obey the index's Rule-Loading Discipline: load byLoad When, load a reference only from its parent rule's> **References**:, and never glob the memory tree (.unikit/memory/gamedesign/**) to discover rules..unikit/RULES.md(if present) — project overrides, highest priority. Rule topics: load the topic files listed under its## TopicswhoseLoad whenmatches the design work at hand — the concept, system, flow or content type; when unsure, load..unikit/DESCRIPTION.mdand.unikit/ROADMAP.md(optional) — project constraints and milestones; routing context only.- Schema guard (clean break — no automatic migration). When
GD-IDS.yamlalready exists it MUST beversion: 2. If it is stillversion: 1, STOP and report: the design workspace is on the pre-v2 layout — v2 dropped the standalone markdown system-index that v1 kept beside the registry and now renders the maps read-only intoGAME.md(## System Map [gen]/## Flow Map [gen]/## Funnel [gen]); there is no automatic migration. Tell the user to bumpGD-IDS.yamltoversion: 2, fold any rows from the legacy system-index into GAME.md's## System Map [gen], and delete that legacy index file before re-running. Create mode (noGD-IDS.yamlyet) skips this check.
One-way boundary: this skill never reads .unikit/code/, project source, or
build artifacts. Importing a GDD reads only the document the user points at.
<!-- unikit:extension-point:bootstrap -->
Input
$ARGUMENTS — a single positional value, free-form, in any language. It may be a
file path or URL to an existing GDD, or a description / intent. There
are no flags: the mode is inferred (see Step 0). Ambiguity is always resolved
by asking — never by guessing.
Workflow
Step 0: Resolve Mode (no flags)
Mode is a function of the artifact state on disk and the intent in the
prompt (gd-principles "never guess" rule). Resolve in this order:
-
The argument is a file path or URL (contains
/, ends in.md/.markdown, exists on disk, or starts withhttp) → Import mode. Confirm the target with the user if the path is uncertain. -
The prompt asks for a pitch ("pitch", "питч", "one-pager to sell it") → Pitch mode.
-
The prompt asks to rebuild / re-derive the system map ("remap", "rebuild the map", "пересобери карту", "re-decompose systems") and
GAME.mdexists → Remap mode. -
The prompt asks to add one system ("add a/new system", "let's add a crafting system", "add this to the GDD", "добавь систему", or it names a system absent from the roster) and
GAME.mdexists → Add-System mode. This is distinct from Remap: Remap re-derives the whole map, Add-System grafts one named system onto the existing map and never touches the authored one-pager. (It is the route the internal design lens hands a new mechanic to — seereferences/mode-add-system.md.) -
The prompt asks to change GAME.md content ("change/rework/tune a pillar, the fantasy, a loop, the monetization stance, an anti-pillar, win/lose intent…") and
GAME.mdexists → Edit mode. This is the content-edit zone the spec owns (absorbed under zone-ownership: there is no separateimproveskill). Editing GAME.md's authored sections is Edit; re-deriving the roster is Remap/Add-System. -
GAME.mddoes not exist (check.unikit/gamedesign/GAME.md) and no import path → Create mode. -
GAME.mdexists and the intent is none of the above → ambiguous. Ask:The question tool of your agent (`AskUserQuestion`): GAME.md already exists. What do you want to do? Options: 1. Edit GAME.md content — change a pillar / fantasy / loop / stance (Recommended) 2. Rebuild the system map — re-derive the roster from GAME.md 3. Add one system to the map 4. Create a pitch (PITCH.md)Importing a different GDD is not an option here: an argument that is a path or a URL already selects Import (Step 0 item 1), and anything else the user wants goes in the free-text answer.
Announce the resolved mode in one line, then proceed to Step 2 (load the matching mode body).
Step 1: Ensure the Workspace
Create .unikit/gamedesign/ (and systems/, flows/, concepts/, researches/,
reviews/ as needed) if missing. Get today's date in YYYY-MM-DD (date +%F).
If GD-IDS.yaml does not yet exist, you will create it from the canonical structure
described below (the version: 2 registry); never overwrite an existing registry
value silently.
Step 2: Load the Mode Body
With the mode resolved (Step 0) and the workspace ensured (Step 1), load the matching mode body on demand and follow it — do not keep all six mode bodies in context:
| Mode | Reference body |
|---|---|
| Create | {{skills_dir}}/{{self_name}}/references/mode-create.md (also holds Phase A + Phase B, reused below) |
| Import | {{skills_dir}}/{{self_name}}/references/mode-import.md |
| Edit | {{skills_dir}}/{{self_name}}/references/mode-edit.md |
| Remap | {{skills_dir}}/{{self_name}}/references/mode-remap.md |
| Add-System | {{skills_dir}}/{{self_name}}/references/mode-add-system.md |
| Pitch | {{skills_dir}}/{{self_name}}/references/mode-pitch.md |
Import / Remap / Add-System reuse Phase A / Phase B from mode-create.md — load
that reference too when a body points to it. The shared Regen-on-Write contract
(below) and the Final report (below) stay here; every mode body returns to them.
Genre Profile — Create Seed
In Create mode (and only Create — a fresh GAME.md from a concept/dialogue),
this skill resolves and seeds a genre profile. The user never types a genres
command — the spec drives the CLI (the skill-runs-CLI precedent: /unikit Step 9.2
rules install). Full mechanics live in references/mode-create.md → Resolve the
genre profile (seed); in brief:
- Resolve (best-fit). Read the descriptive
genre:hint from the seedCONCEPT.md(a human intent, not a catalog id). Open the catalog withunikit-ai genres list(its output is authoritative — there is NO genre→id map in this skill), and semantically best-fit the hint to a profile byname/aliases/summary(e.g. «симулятор ломбарда» →tycoon). The hint may deliberately not equal any id. - Install + record. Run
unikit-ai genres install <id>(idempotent — driven by this skill, not the user), then write the resolved id into the GAME.md header> **genre_profile**: <id>(distinct from the descriptivegenre:intent in CONCEPT). Read the installed profile JSON (.unikit/system/gamedesign/genres/<id>.json). - Seed interview. Seeds (
seed_systems/seed_content_types/seed_entities/seed_resources) are proposals, never auto-written — run a subtractive multi-select + add questions, with per-CTscale.confidenceis the pre-fill knob (high → pre-check more, low → ask more). Kept seeds apply through the existing owner paths: systems → Phase B / spec Add-System; content → route to/unikit-gd-contentadd-CT; RES/TRACK/KNOB → their zone-owner. - Universal baseline. No
genre:hint, no concept, or no profile fits closely → author WITHOUT a profile (treat asconfidence: low— ask more, assume less), leavegenre_profile:empty, install nothing.
The profile is read-only. Every divergence (a dropped seed, an added field, a
custom CT) lands in GD-IDS — the project's custom configuration is GD-IDS (import
from the profile + augment at spec), NEVER an edit to the profile JSON. The genre
layer dissolves into the registry, so verify stays genre-blind and only
unikit-gd-review reads the profile (its completeness lens).
Regen-on-Write — ## System Map [gen]
GAME.md's ## System Map [gen] block is a mechanical re-render of GD-IDS.yaml
systems (the RULES_INDEX model) — never hand-authored. unikit-gd-spec is its
primary writer: after any write that changes the roster or a system's registry
metadata (Create Phase B, Add-System, Remap, and a roster-affecting Edit), re-render
the block as the last step:
- Read
GD-IDS.yamlsystems. - Group by
category(omit empty categories); within a group sort bytier(MVP → Vertical Slice → Alpha → Full Vision) then design order. - One row per system:
ID | System | Tier | Status | Ver | Depends | Doc.Statusmirrorsdoc_status, overridden bydeprecated(from thestatusfield) and by the code-setimplemented(display-only — design never authors it;gd-lifecycle→ Lifecycle & Status). Append the· partial (n/m)suffix when the system'sSYSTEM.mdcarries ≥1<!-- deferred -->(the canonical render format fromgd-lifecycle— the same suffixunikit-gd-verifyemits, so spec's regen-on-write never drops· partialbefore the next verify).Veris—untilskeleton.Docissystems/SYS-<slug>.md.
- Replace only the content between
<!-- gen:system-map -->and<!-- /gen:system-map -->; never touch the authored one-pager above it. Full map (one row per system); collapse to a single grouped table only as an escape hatch for very large rosters (150+).
The ## Flow Map [gen] / ## Funnel [gen] blocks (rendered by unikit-gd-flow, the
Flow axis) and the ## Content Map [gen] block (rendered by unikit-gd-content, the
Content axis) are out of this skill's scope — leave their template scaffold
untouched; this skill renders only ## System Map [gen]. unikit-gd-verify
independently re-renders a stale [gen] block when its freshness check trips
(gd-lifecycle → Lifecycle & Status) — the render is deterministic, so all writers
always agree.
Final: Compact Report & Next Steps
After artifacts are written, show a compact report (TIER A — gd-principles →
Language: names lead, ids are parenthetical copy-paste tags, status is a plain phrase;
no summary document, no report file):
Mode: <create | import | edit | remap | add-system | pitch>
Workspace: .unikit/gamedesign/
Written:
- GAME.md (vN — <still a draft | approved>) — incl. ## System Map [gen] re-rendered
- GD-IDS.yaml (<P> pillars, <N> systems)
- [SOURCE.md / PITCH.md when applicable]
System map: <N> systems — <M> MVP, … ; design order: <name> (SYS-<slug>), <name> (SYS-<slug>), …
Then recommend the next step (do not auto-invoke):
- 🧩 Detail the first MVP system — /unikit-gd-system <SYS-slug>
- 🔍 Review the master spec (fresh session) — /unikit-gd-review
Ownership Boundaries
- Owns: all of
GAME.md— the authored one-pager (its content edits under the GAME.md carve-out and its structure: which systems exist, remap) and its generated## System Map [gen]block (the primary regenerator). Owns the system roster (Create + Import Phase B, Add-System, Remap) andGD-IDS.yamlpillars + systems; optionalPITCH.md; importSOURCE.md. Owns theGD-IDSresearch:pointer (written in Add-System when seeded from an explore brief) —unikit-gd-explorenever writes it. Owns the genre-profile resolve (Create seed): best-fit the CONCEPTgenre:hint to a profile, driveunikit-ai genres install <id>, and write the resolved> **genre_profile**:id into GAME.md (the user never types agenrescommand; the profile is read-only — divergence → GD-IDS). - Not this skill: per-system GDDs (
systems/<slug>.md) →unikit-gd-system; player-action flows (flows/<slug>.md) and the## Flow Map [gen]/## Funnel [gen]renders →unikit-gd-flow; content types (content-types/CT-<slug>.md) and the## Content Map [gen]render →unikit-gd-content(a content type registers itself — there is no add-content here); ideation / concepts →unikit-gd-brainstorm; research briefs →unikit-gd-explore. - Never: write without explicit approval; change a
GD-IDS.yamlvalue silently; delete or renumber an ID; read the code workspace or project source.
Quick Reference
/unikit-gd-spec <description> → create GAME.md (one-pager + maps) + GD-IDS.yaml
/unikit-gd-spec ./path/to/GDD.md → import an existing GDD (extract, keep SOURCE.md)
/unikit-gd-spec https://… → import from a URL
/unikit-gd-spec change PIL-2's design test → edit GAME.md content (GAME.md carve-out)
/unikit-gd-spec remap the systems → re-derive the map (GAME.md must exist)
/unikit-gd-spec add a crafting system → add-system: graft one system onto the map → seam to detail
/unikit-gd-spec pitch this game → produce PITCH.md
04 同仓库更多 Skills
unikit
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". On a set-up project it offers the actions to choose from.
unikit-verify
Verify a completed implementation against the plan in .unikit/code/plans/. 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 /unikit-implement completes, or when the user says "verify", "check the work", "did we miss anything". For code review use /unikit-review instead.
unikit-todo
Manage the project's TODO list in .unikit/TODO.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 /unikit-plan, /unikit-implement, or /unikit-execute.
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. "/unikit-review should also flag TODO comments", "/unikit-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 /unikit-fix always add logging here", "the implement skill should do X differently", "add a skill rule for /unikit-commit". Use "validate" to find stale overrides against updated base skills. For a general coding convention (not tied to one skill) use /unikit-rules; to derive rules from past mistakes use /unikit-evolve.
unikit-rules
Add a short, project-specific rule, convention, or override to .unikit/RULES.md — the quick-capture inbox for this project's rules (common rules always load; topic files in .unikit/rules/ load when the work matches), automatically loaded by /unikit-implement (later promotable via /unikit-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/stack 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/document framework usage, use /unikit-memory; for architecture decisions use ARCHITECTURE.md.
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/promotes local knowledge-base rules from .unikit/memory/ 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 <id>" to scope to one knowledge-base module. This skill ONLY orchestrates the CLI (`unikit-ai rules *`) — it never edits .unikit.json or .unikit/memory/ sources directly.