CtrlK
BlogDocsLog inGet started
Tessl Logo

prototype

Concept prototype — validate the core idea is worth designing before writing GDDs. Run right after /brainstorm and /setup-engine. Routes to HTML, Engine, or Paper path based on game type. Produces a throwaway build and a PROCEED/PIVOT/KILL verdict.

71

Quality

88%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Purpose

This is the concept prototype — a fast, throwaway build that answers one question: "Is this core idea actually fun to interact with?"

Default use — run right after /brainstorm and /setup-engine, before writing GDDs or architecture docs. Its verdict determines whether the concept is worth the investment of full design documentation.

Mid-production? You can also run this at any stage to test a specific mechanic, design change, or technical question. Pass --spike to activate spike mode: a lightweight ~4-hour build with no GDD prerequisites and no phase gate implications.

Already have GDDs and architecture complete? To validate the full game loop before committing to Production, run /vertical-slice instead.


Phase 1: Define the Question

Resolve the review mode (once, store for all gate spawns this run):

  1. If --review [full|lean|solo] was passed → use that
  2. Else read production/review-mode.txt → use that value
  3. Else → default to lean

Check for spike mode: If --spike was passed, skip to the Spike Mode section at the bottom of this skill.

Otherwise, use AskUserQuestion to confirm intent before proceeding:

  • Prompt: "How would you like to use this prototype session?"
  • Options:
    • Prototype this concept — build a throwaway build to validate the core idea is fun before writing GDDs (1–3 days)
    • Skip — concept already proven — I have enough evidence this works; log it and proceed directly to design
    • Mid-production spike — I'm already in Production and want to test a specific mechanic or technical question quickly (~4 hours, no phase gate implications)

If "Skip — concept already proven": Ask (plain text, not a widget): "What evidence do you have that the concept works?" Record the one-line answer, then stop. Note: "Concept prototype skipped — evidence: [answer]." Suggest next step: /map-systems or /design-system [mechanic].

If "Mid-production spike": skip to the Spike Mode section below.

If "Prototype this concept": continue with Phase 1 below.


A note on prototype strategy: The research on successful indie development is consistent — building 2-3 concept variants and letting the best one win is far more likely to succeed than iterating one concept until it works. This is your first prototype, not necessarily your only one. If this prototype produces a PIVOT verdict, consider whether to refine this concept OR start fresh with a different angle on the same game idea and prototype that instead.

Game jam as a prototype vehicle: If you're planning a concept prototype anyway, consider timing it to a game jam (Ludum Dare, GMTK Game Jam, Global Game Jam). Jams provide a forced timebox (48-72 hours), instant distribution to thousands of players who rate and review early builds, and a deadline that prevents scope creep by design. Many shipped games (Celeste, VVVVVV) began as jam prototypes. Not required — but worth considering if the timing is right.

Read the concept description from the argument. Before building anything, define the falsifiable hypothesis this prototype must answer:

"If the player [does X], they will feel [Y] — we will know this is true if [measurable signal Z]."

Good: "If the player swings on grapple hooks, traversal will feel fluid — we'll know if players chain 3+ swings without stopping within 2 minutes of picking it up."

Bad: "Does this feel fun?" ← not testable, not falsifiable.

If the concept is too vague to form a hypothesis, stop here. Ask the user to narrow the question before proceeding. A prototype without a clear question wastes time.

Also ask: "What is the riskiest assumption in this concept?" That is the first thing the prototype should test — not the easiest part, the riskiest.


Phase 2: Load Concept Context

Read design/gdd/game-concept.md if it exists. Extract:

  • Core fantasy (what the player is supposed to feel)
  • Core loop (the moment-to-moment action being tested)

Read CLAUDE.md and .claude/docs/technical-preferences.md for the engine and language in use.


Phase 3: Choose the Prototype Path

Select the prototype path. If --path [html|engine|paper] was passed, use that. Otherwise, use this quick-reference first, then read the full path details below:

GenreRecommended pathKey reason
Platformer / action / fighterEngineFeel IS the hypothesis; browser latency produces false results
Racing / sportsEngineSame — timing and physics feedback are the point
Top-down shooter / twin-stickEngineAim feel is timing-sensitive
Puzzle (logic)HTML or PaperTiming is not the point; logic and clarity are
Card gamePaper firstFastest iteration by hand before touching code
Narrative / visual novelPaper (Twine / Ink / Yarn Spinner)Story is the mechanic — test it without code overhead
Strategy / 4X / city builderPaper (spreadsheet sim)Validate economy and progression rules before building
Roguelike (systems-heavy)Paper → EngineValidate that the ruleset is interesting before building
Idle / clicker / incrementalHTMLTurn-based logic, no feel sensitivity required
Rhythm gamePaper first (design levels in audio)Design levels before the engine exists
RPG / open worldPaper → EngineSystems complexity: validate rules, then validate feel
Horror / atmosphericEngineAtmosphere requires real rendering

Rule of thumb: "Does this feel right?" → Engine. "Are these rules interesting?" → Paper. "Is this logic correct?" → HTML or Paper.

Path: HTML (browser-playable)

Best for: Puzzle games, card games, turn-based strategy, word games, idle games, top-down logic games. Anything where timing precision doesn't matter.

Reliability: ~85–90% one-shot. The agent writes a single self-contained HTML file the user opens in a browser — no install required.

Limitation — browser latency lies about game feel. Browsers introduce 50–133ms of rendering variance. This makes HTML prototypes fundamentally unreliable for action games, platformers, fighting games, or anything where input timing, jump arcs, or collision feel are what you're testing. If feel is the hypothesis, use the Engine path instead.

Alternative tools for this path: PICO-8 (extreme constraints, great for retro arcade concepts, web-export in one command), Phaser.js (more capable browser game framework, still no install needed), or Twine (narrative/choice-based games). These are faster than raw HTML for their respective genres — suggest them if appropriate.

Output: A single prototype.html (or PICO-8/Phaser equivalent) the user opens in any browser.

Distribution — the HTML path's biggest advantage: Unlike Engine prototypes, this build can reach real players globally in minutes. Use this actively:

  • itch.io — upload the file, share the link, get play counts and written feedback within hours. Free. The indie community plays rough builds here without expecting polish. This is genuine external validation at zero cost.
  • Loom + file share — share via Google Drive/Dropbox, ask someone to record their screen + audio with Loom while playing. You get a video of real first-impression reactions and confusion without synchronous scheduling.
  • r/playmygame or r/WebGames (Reddit) — active communities that specifically test early builds and give unsolicited honest feedback.
  • Game dev Discord servers (GMTK, Brackeys, GameDev.tv) — members test each other's prototypes routinely; an HTML file is the easiest possible ask.

Path: Engine (engine project)

Best for: Action games, platformers, physics-heavy games, anything where moment-to-moment feel IS the hypothesis. Use this when HTML latency would lie about the result.

Reliability: ~50–60% one-shot. Expect 2–4 rounds of iteration — this is normal, not a failure.

Limitation — requires engine installed and running. This path is a multi-turn collaborative loop:

  1. Agent writes the code
  2. User runs it in the engine
  3. User reports errors or observations
  4. Agent fixes and iterates

Sunk cost rule: If the user has been iterating for more than 2 hours without reaching a playable state, stop. The scope is too large or the question is wrong. Reframe the hypothesis and simplify aggressively, or switch to Paper path.

Output: A minimal runnable engine project in prototypes/[name]-concept/.

Lighter alternative — Love2D (Lua): If the project engine (Godot, Unity, Unreal) feels too heavy to stand up for a throwaway build, consider Love2D — a minimal 2D framework that installs in minutes, requires no project scaffolding, and renders natively with no browser latency. Used by many indie devs for rapid 2D action and platformer prototypes (Balatro prototyped in Love2D; Nuclear Throne's early builds used it). It sits between HTML overhead and full engine overhead: heavier than opening a browser, lighter than setting up a full engine project. Best for 2D action/platformer feel validation when the project engine is 3D-first or takes significant time to configure.


Path: Paper (rules document + play log)

Best for: Strategy games, card games, board game-style mechanics, economy systems, progression loops, any game where the logic can be simulated by hand. Works for any genre when you need to validate rules, not feel.

Reliability: 100%. No code, no engine, no install.

Limitation — cannot validate moment-to-moment feel. Paper prototypes prove that the rules are internally consistent and the decisions are interesting. They cannot tell you whether jumping feels right or whether explosions feel satisfying.

Paper playtest observation protocol (run this with 5+ people):

  1. Brief the rules once. Hand them the rule summary sheet. Then step back.
  2. Do NOT explain further. Do NOT help. Do NOT clarify. Confusion is data.
  3. Watch silently. Note every moment they slow down, re-read, or ask a question.
  4. After the session, ask one question only: "What was confusing?" — not "Did you like it?"
  5. Use fresh testers for each iteration. The same person cannot give new first-impression data.
  6. If 3+ testers hit the same confusion point, that rule is broken — redesign it before re-testing.

Output: A printable rules document + a completed play log showing one simulated session.

Narrative tools for this path: For dialogue-heavy and story-driven games, skip the generic rules doc — use a dedicated narrative scripting tool instead:

  • Twine — zero-code hypertext fiction; ideal for branching structure experiments and choice-impact testing
  • Ink (Inkle) — plain-text scripting language used in 80 Days, Heaven's Vault, and Overboard; exports directly to Unity and Godot
  • Yarn Spinner — dialogue scripting used in A Short Hike, DREDGE, and Night in the Woods; integrates natively with Unity and Godot

All three let you write and playtest branching dialogue in minutes. Key metric for narrative prototypes: time to first emotional beat — how many exchanges before the player feels something? If it takes more than 3-4 exchanges, the opening is too slow.


Assess which path best fits the hypothesis, then use AskUserQuestion with your recommendation pre-stated:

  • Prompt: "Which prototype path would you like to use? (Based on your concept, I'd recommend [path] — [one sentence reason].)"
  • Options:
    • HTML — browser prototype — puzzle, card, turn-based, strategy, idle. Opens by double-clicking, no install. 85–90% reliable. Not suitable for action games — browser latency lies about feel.
    • Engine — native prototype — action, platformer, physics, or anything where feel IS the hypothesis. 50–60% one-shot; 2–4 iteration rounds are normal. Requires engine installed.
    • Paper — rules document + play log — strategy, economy, logic, board-game-style mechanics. 100% reliable. Cannot validate feel.

Phase 4: Plan the Prototype

Define in 3–5 bullet points the minimum viable prototype:

  • What is the falsifiable hypothesis?
  • What is the riskiest assumption — and how does this prototype test it first?
  • What is the absolute minimum needed to answer the question?
  • What is explicitly cut? (menus, save systems, error handling, polish, architecture — all of it)

Scope constraint: A concept prototype tests ONE mechanic — not the whole game. If scope covers more than one mechanic, cut it down. When in doubt, cut more.

Present this plan to the user before building. Get confirmation before proceeding.

Once confirmed, write a session checkpoint to production/session-state/active.md (create production/session-state/ if it does not exist). Include: concept name, hypothesis, path chosen, scope bullet points, and current phase ("Phase 5 — Implement"). This lets the next session resume without starting over if the session ends mid-build — especially important for multi-day Engine path work.


Phase 5: Implement

Ask: "May I create the prototype directory at prototypes/[concept-name]-concept/ and begin implementation?"

If yes, create the directory. Every file must begin with:

// PROTOTYPE - NOT FOR PRODUCTION
// Question: [Core question being tested]
// Date: [Current date]

Standards are intentionally relaxed:

  • Hardcode values freely
  • Use placeholder assets (colored rectangles, debug shapes)
  • Skip error handling entirely
  • Use the simplest approach that works
  • Copy code rather than importing from production
  • No architecture, no patterns, no abstractions

Do not add polish. No menus, no game over screens, no music, no tutorial text unless the tutorial IS the mechanic being tested. Every addition beyond the hypothesis is waste.

Playtesting tip: If you have access to anyone who hasn't seen the game — friends, family, strangers online — watching them play without explanation gives far better signal than testing it yourself. Watch silently; don't guide them. Confusion is data. Ask one question after: "What was confusing?" Not "Did you like it?"

No external testers available? Use rotation: if you built system A, you're a naive tester for system B. In a two-person team this works well. Solo developer? Step away for 2-3 days before playing fresh — you won't have perfect first-impression signal, but you'll surface the worst blockers. Another option: play your own prototype as a speedrun (force yourself through it in 5 minutes without stopping to fix things) — the friction you feel is what strangers will hit.

Want more granular UX data? Ask the tester to think aloud as they play — narrate their thoughts in real time: "I'm pressing space... nothing happened... is that the jump key?" This surfaces confusion the moment it happens rather than waiting for a post-play debrief. Best for UI/UX and onboarding clarity. Silent observation is still better for testing raw feel; think-aloud changes how people play slightly but gives much richer data about why they're confused.

HTML prototype? itch.io, Reddit (r/playmygame), and Discord (GMTK, Brackeys) let you reach strangers today at zero cost — see the distribution options in the HTML path section above.

Testing AI, NPC, or complex system behavior before writing the code? Use the Wizard of Oz technique: one person plays normally while a second person secretly controls the NPC, enemy, or system behavior in real time — making the decisions a human would make, not an algorithm. The player believes it's automated. This lets you validate whether your AI design feels right before writing a single line of pathfinding or decision tree code. When you observe what responses the human controller naturally produces, you learn exactly what the AI needs to do.

Engine path: multi-turn loop

After writing the initial code:

"The prototype files are written. Run the project in your engine now. If there are errors, paste them here and I'll fix them. If it runs, describe what you see and whether it feels like it's answering the question."

Iterate until the prototype is playable. Each loop:

  1. User runs → reports errors or observations
  2. Agent fixes errors or adjusts the mechanic
  3. Repeat until playable or sunk cost rule triggers

HTML path: single output

Write a single prototype.html to prototypes/[concept-name]-concept/. Include all styles, logic, and assets inline. The file must be openable by double-clicking with no server required.

Paper path: document + log

Write prototypes/[concept-name]-concept/rules.md (the game rules) and prototypes/[concept-name]-concept/play-log.md (a simulated session walking through one complete play cycle step by step with dice rolls, decisions, and outcomes narrated).


Phase 6: Playtest Debrief

The prototype is built. Now hand it to the user and capture what they actually experienced. Do NOT skip to report generation — the report is only as good as the observations you collect here.

For HTML path: Say exactly this:

"The prototype is ready. Open prototypes/[name]-concept/prototype.html in your browser and play it. Take as long as you need. Don't rush through it — try to approach it the way a new player would. Come back here when you're done."

For Engine path: The multi-turn iteration loop already captured errors and behavior. Now ask for the overall assessment:

"Now that it's running — play through it a few times as if you're the player, not the developer. Come back when you have a feel for it."

For Paper path: Say exactly this:

"Read through prototypes/[name]-concept/rules.md and walk through the play-log.md as if you're playing it for the first time. If you have someone nearby, try running the rules with them. Come back when you've seen at least one full play cycle."

Once the user returns, ask these questions one at a time — wait for each answer before asking the next:

  1. Hypothesis check:

    "The hypothesis was: [restate the hypothesis from Phase 1]. Did it hold up — CONFIRMED, PARTIALLY CONFIRMED, or REFUTED? Tell me what you saw."

  2. Best moment:

    "What was the moment — if any — where it felt like it was working? Be specific."

  3. Worst moment:

    "What was the most frustrating, confusing, or broken moment? Be specific — not 'it felt slow' but 'the jump took about half a second to respond and it felt like I was fighting the controls'."

  4. Surprise:

    "Did anything happen that you didn't expect — good or bad?"

  5. Verdict:

    "PROCEED, PIVOT, or KILL — and one sentence why."

Collect all answers before moving to report generation. If any answer is vague ("it felt fine", "pretty good"), ask a follow-up: "Can you be more specific? What exactly felt fine about it?" Precise observations make the report useful. Vague ones make it useless.


Phase 7: Generate Prototype Report

Read .claude/docs/templates/prototype-report.md to get the report structure. Fill in every section based on what was observed during this session. Replace all placeholder text with real observations — no generic filler.

Ask: "May I write this report to prototypes/[concept-name]-concept/REPORT.md?"

If yes, write the file. Then update prototypes/index.md (create if it does not exist) — append one row to the concept prototype table: concept name, date, path used, verdict (PROCEED/PIVOT/KILL), and a link to the REPORT.md. If a PIVOT chain exists (prior PIVOT-NOTE.md in a related concept folder), note the chain. This file is the project's complete history of what was tried and what was learned.


Phase 8: Creative Director Review

Review mode check:

  • solo → skip. Note: "CD-PLAYTEST skipped — Solo mode."
  • lean → skip. Note: "CD-PLAYTEST skipped — Lean mode."
  • full → spawn creative-director via Task using gate CD-PLAYTEST if design/gdd/game-concept.md exists with game pillars defined. If pillars are not yet defined, note: "CD-PLAYTEST skipped — game pillars not yet defined at concept prototype stage."

Pass: the full REPORT.md content, the original hypothesis, and game pillars / core fantasy from design/gdd/game-concept.md.

The creative director evaluates the result against the game's creative vision and confirms, modifies, or overrides the recommendation. Their verdict is final. Update REPORT.md if the verdict differs.


Phase 9: Summary and Next Steps

Output a summary: the hypothesis, the result, and the final recommendation. Link to prototypes/[concept-name]-concept/REPORT.md.

If PROCEED: Your concept prototype validated the core idea. Now design it properly, informed by what you just learned.

Recommended path (in order):

  1. /design-review design/gdd/game-concept.md — validate the concept doc against what the prototype revealed
  2. /gate-check — confirm readiness to advance to Systems Design
  3. /art-bible — define visual identity (optional but worth doing before GDDs)
  4. /map-systems — decompose the concept into all game systems
  5. /design-system [mechanic] — GDD for each MVP system; use prototype learnings in the Tuning Knobs and Formulas sections
  6. /review-all-gdds — cross-system consistency check

Note: If you used the HTML path and feel is still uncertain, consider running a quick engine path prototype targeting feel before writing GDDs.

If PIVOT:

Before routing to the next prototype, capture the carry-forward note. Ask these two questions (plain text, one at a time):

  1. "What specifically worked in this prototype that we should preserve in the next version?"
  2. "What is the single most important thing to change?"

Ask: "May I write this to prototypes/[concept-name]-concept/PIVOT-NOTE.md?"

If yes, write the file with: original hypothesis, what to keep, what to change, and the revised hypothesis for the next prototype. When /prototype is next run, check prototypes/ for any PIVOT-NOTE.md files — if found, read them and use the revised hypothesis as the starting point rather than forming one from scratch.

  • Run /prototype [revised-concept] to test the adjusted direction
  • Or /brainstorm [hint] if the concept needs more fundamental rethinking

If KILL:

Before moving on, run this check to confirm the verdict is sound and not temporary frustration:

  • Core mechanic still unclear to testers after 2+ playtests?
  • No "fun moment" (smile, laugh, or retry by choice) observed in any session?
  • 3+ PIVOT iterations on the same concept with no clear improvement?
  • Concept only works when heavily explained or when the dev guides the player?
  • Building this feels like obligation, not excitement?

If 2+ boxes apply → KILL verdict is sound. If 0–1 apply → consider one more focused PIVOT before killing.

Document the kill in prototypes/GRAVEYARD.md (create if it doesn't exist). Ask: "May I append this concept to prototypes/GRAVEYARD.md?" If yes, add one entry:

## [Concept Name] — YYYY-MM-DD
- **Kill reason:** [specific blocker — not "it was boring" but "players never understood the core action"]
- **What worked:** [2-3 things worth carrying forward to future concepts]
- **What failed:** [the specific mechanic, design decision, or scope issue]
- **Next time:** [one explicit action to try differently on a similar concept]

This file exists so the same mistake doesn't get made twice on the next concept.

  • Run /brainstorm open or /brainstorm [new-hint] to explore a different concept
  • The prototype report is the deliverable — no further action needed


Spike Mode

Triggered by: --spike flag OR "Mid-production spike" entry choice in Phase 1.

Purpose: Test a specific technical or design question mid-production, without the overhead of a full concept prototype workflow. No GDD prerequisites. No phase gate implications. Hard cap: ~4 hours.

When to use:

  • You're in Production and want to test whether a new mechanic should be added
  • You're unsure if a technical approach will work before building it properly
  • A design change is being considered and you want a quick before/after comparison
  • A GDD system is proving harder than expected and you want to prototype the hard part
  • You need to confirm target hardware can sustain the required framerate before writing gameplay code (performance spike — see below)

Spike Mode workflow (replaces Phases 1–9):

  1. Define the spike question (plain text, not a widget): "What specific question does this spike answer? Give me one sentence: 'Can we [do X] using [approach Y]?'"

  2. Choose path — same AskUserQuestion widget as Phase 3 (HTML / Engine / Paper).

  3. Scope — maximum 2-3 bullet points. One mechanic, one technical question, nothing else.

  4. Build — same relaxed standards as concept prototype. Hard cap: 4 hours. If not demonstrable in 4 hours, the question is too large. Split it.

  5. Observe and decide — no formal playtest debrief. Ask: "Did the spike answer the question? YES or NO, and why in one sentence."

  6. Write a spike note (not a full report) to prototypes/[concept-name]-spike-[date]/SPIKE-NOTE.md:

    • Question tested
    • Result (YES it works / NO it doesn't / PARTIAL — needs more investigation)
    • What to do next (add to current sprint / investigate further / abandon the idea)
  7. Update production/session-state/active.md to clear the spike and return to the current sprint state.

No CD gate. No phase gate. No PROCEED/PIVOT/KILL. Spike results inform decisions; they don't make them. The developer decides whether to add the mechanic/approach to the sprint backlog based on what the spike revealed.

Performance spike (special case): If the game involves demanding rendering — large open worlds, hundreds of simultaneous physics bodies, heavy particle systems, complex shaders — run a performance spike before writing gameplay code to confirm the target hardware can sustain the required framerate. This is distinct from other spikes in two ways:

  • The question is "can the engine render [scene X] at 60fps on [minimum spec hardware]?" not "does this mechanic feel good?"
  • The output is a benchmark number, not a feel verdict
  • No gameplay logic is needed — just the maximum intended scene load (terrain, draw calls, physics objects, particles) running at once
  • Build time stays within the ~4-hour cap; the spike is setting up the rendering load, not the game
  • If the answer is NO at this scope, this is an architecture or scope constraint that affects everything downstream — better to surface it now than during Sprint 8

Important Constraints

  • Prototype code must NEVER import from production source files
  • Production code must NEVER import from prototype directories
  • If the recommendation is PROCEED, production implementation is written from scratch — prototype code is never refactored into production
  • Total effort is hard-capped at 1 day (concept prototypes test one mechanic)
  • Test ONE mechanic — if scope grows, stop and simplify the question
  • No polish. No menus, no game over, no music, no UI unless it IS the mechanic
  • If stuck after 2 hours of engine iteration, reframe the question or switch paths
  • 3 PIVOT iterations → force a KILL decision. If this is the third time the same concept has produced a PIVOT verdict, the concept likely doesn't work. Ask: "Is this the right idea, or am I in the sunk cost trap?" A new concept prototyped fresh will almost always beat a fourth iteration of a struggling one.
  • Building 2-3 different concept variants and picking the best one is a healthier strategy than iterating one concept to death. Natural selection between prototypes beats willpower.
  • Networked/multiplayer games: A local prototype cannot validate the feel of a networked mechanic. Latency fundamentally changes how combat, movement, and prediction feel — a prototype running at 0ms local will feel entirely different at 80ms network delay. Use a local prototype to validate that the mechanic is interesting. Do not use it as evidence that it feels good under real network conditions. Network feel requires real peers or simulated latency (e.g., throttle tools, network condition simulators).
Repository
Donchitos/Claude-Code-Game-Studios
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.