Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Game-development PM method for turning game vision into Experience, Mainstays, Features, Levels, Tasks, Iters, heatmaps, MVP scope, and validation plans.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 124% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 135% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 118% | 0% |
Use Air's PM method to plan game development from the farthest clearly foreseeable player experience back into trackable work. The method is especially useful for indie or small hybrid teams where design, tech, art, and production decisions must stay visible and reversible.
This skill follows the common SKILL.md Agent Skills layout and can be used by Claude Code, Codex, and other agents that read skill directories.
Write a concise Experience (E) statement:
Do not begin with a feature list. Features serve the experience.
Create Mainstay entries for the game's highest-level supports. A Mainstay is a core pillar/basket that cannot easily be placed under another game concept.
Examples:
M-A Core combat loopM-B Streaming room / audience loopM-C Level progressionM-D Meta progressionM-Tech Technical/system dependencySpecial Mainstays can represent system dependencies. For simple projects, call them Tech; for complex projects, split them into Net, Audio, Graphic, Pst, etc.
Create Feature entries under each Mainstay.
F-*: user-facing features that directly create player-perceived gameplay.C-*: capability features that support gameplay across multiple Mainstays, such as networking, save systems, audio recognition, build pipelines, or performance tooling.Each Feature should have:
F-A1, F-B3, C-NET-1Use Levels to express quality and validation state.
| Level | Meaning | Goal | |---|---|---| | L1 | Concept case: words, sketches, paper prototype | Team consensus and early tradeoffs | | L2 | Concept prototype: temporary assets, graybox, procedural art | Verify "is it fun / does it work?" | | L3 | Implementation: stable code, UI, formal assets | Non-specialists can experience it; production viability | | L4 | Polish: performance, feel, balance, bug fixing | Shippable or "boutique" quality |
Do not push one Feature from L1 to L4 while neighboring core Features are still unknown. Prefer filling the same Level across the relevant Mainstays/Features before deepening.
Only at the Task layer should work become directly executable.
Task fields:
T-FA1-1A Task should no longer require major conceptual decomposition. If it still does, promote that thinking back to Feature or L1 work.
Each Iter should contain some part of all relevant pillars, with a different Level emphasis. The game should remain "whole", even when rough.
For each Iter, define:
Example pattern:
Iter 0: foundation, repo/tooling/project management table.Iter 1: simplest playable loop, raise core loop Features to L2.Iter 2: add first strategy/build layer, upgrade some previous Features to L3.Iter 3: add level/session structure, prove rhythm.Iter 4+: expand new Features from L1/L2 while polishing old Features to L3/L4.markdown## Experience - Farthest foreseeable player experience: - Player actions: - Emotional arc: - Concrete user story: - Designer/system differences: - Key assumptions: - Lowest-cost validation: - Rollback signal:
markdown| Mainstay ID | Name | Description | Experience role | Owner | |---|---|---|---|---| | M-A | | | | |
markdown| Feature ID | Name | Mainstay | Type F/C | Depends on | Current L | Target L | Owner | Iter | Status | Evidence | |---|---|---|---|---|---|---|---|---|---|---| | F-A1 | | M-A | F | | L1 | L2 | | Iter 1 | Todo | |
markdown| Task ID | Task | Feature | Type | Owner | Iter | Status | Definition of Done | |---|---|---|---|---|---|---|---| | T-FA1-1 | | F-A1 | Programming | | Iter 1 | Todo | |
markdown## Iter N: Name - Goal: - Target experience: - Focus Mainstays: - Features raised: - Tasks: - Output: - Validation: - Rollback condition:
When reviewing a plan, check:
F and capability C where useful?Represent progress as a matrix:
Look for uneven color fields. A small cool island surrounded by warm unknowns usually means premature production depth. A healthy project gradually cools across the map while preserving a whole playable shape.
For the 3D cubic map renderer:
L1 to L4 evidence, not a raw task-count stack.target_level to expose the next visible stone; target gaps should stay visible in reviews.blocked as a risk state even when the Feature is already at L2 or above.Use this canonical Feature data shape when creating a live project board, Feishu Sheet/Base, CSV, or JSON:
csvmainstay_id,mainstay_name,feature_id,feature_name,type,depends_on,current_level,target_level,owner,iter,status,evidence M-A,Filming Core,F-A1,Wieldable camera aiming,F,,L3,L4,Steven,Iter 4,in progress,https://... M-Tech,Tech Capability,C-NET-1,Fusion peer ownership,C,,L2,L4,Justin,Iter 4,blocked,
Field rules:
mainstay_id: M-A, M-B, M-Tech, etc.feature_id: F-A1 for player-facing Features, C-NET-1 for capability Features.type: F for user-facing gameplay, C for capability/system support.current_level / target_level: L1, L2, L3, L4.status: todo, in progress, done, blocked or Chinese equivalents.evidence: link to concept docs, builds, QA notes, videos, PRDs, or playable proof.Use the bundled script when a user asks for a visible global progress heatmap. Resolve the skill directory from the current agent runtime when possible. In Claude Code, prefer ${CLAUDE_SKILL_DIR}. In Codex, use the installed skill path or the repository checkout path.
bashpython3 ${CLAUDE_SKILL_DIR:-.}/scripts/render_heatmap.py \ ${CLAUDE_SKILL_DIR:-.}/examples/sample_features.csv \ --title "CAM DOWN! Global PM Heatmap" \ --output /tmp/camdown_pm_heatmap.html
The script accepts CSV or JSON and outputs a single HTML file that can be opened locally or uploaded to Feishu/Miaoda. It intentionally has no external dependencies.
Use the cubic renderer when the user wants an interactive pillar/cube view that can be shared as one file without running a local terminal server.
bashpython3 ${CLAUDE_SKILL_DIR:-.}/scripts/render_cubic_map.py \ ${CLAUDE_SKILL_DIR:-.}/examples/sample_features.csv \ --title "CAM DOWN! Air PM Cubic Map" \ --output /tmp/camdown_pm_cubic_map.html
The cubic renderer accepts the same CSV feature rows as render_heatmap.py. It also accepts nested JSON in the form {"mainstays":[...]} with features and optional tasks. The generated HTML embeds its JavaScript runtime, data, CSS, and app code, so the file can be opened directly from disk with no server after generation.
For "real-time" team usage, use Feishu Base/Sheet as the source of truth:
scripts/render_heatmap.py for a 2D map or scripts/render_cubic_map.py for a self-contained 3D cubic map.Do not treat the heatmap as a replacement for PM judgment. Use it to reveal imbalance, missing owners, blocked capability dependencies, and premature polish.
Be practical, not bureaucratic. Favor simple tables, concrete experience stories, and explicit tradeoffs. Push back when a plan spends expensive art/production effort before validating the underlying experience. Treat special demos, investor builds, and exhibitions as valid "tilted" Iters, but name the tilt so the team does not confuse it with healthy baseline production.
Other measured skills in the registry, with their headline benchmark lift.