prototype
Skill0 starsChanged 2 months agoMITView on GitHub
Build disposable code to answer a high-fidelity engineering question. Use when the user explicitly asks to prototype behavior or compare UI directions; preserve the learning, then remove or absorb the temporary code.
194 other projects use a version of this, 114 of them edited.
Adopted by
Most recently taken up by
- gaoyu06/harnessedited, first seen Nov 8, 2026
- Firzus/agent-skillstheir own version, first seen Nov 8, 2026
- ishandutta2007/Awesome-Claude-Skillstheir own version, first seen Nov 8, 2026
- domengabrovsek/agent-configedited, first seen Nov 8, 2026
- domengabrovsek/claudeedited, first seen Nov 8, 2026
- The-Vibe-Company/quivredited, first seen Nov 8, 2026
Used with
Projects with it also use playtest-report, soak-test and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CoralGameSkillplaytest-report
Generates a structured playtest report template or analyzes existing playtest notes into a structured format. Use this to standardize playtest feedback collection and analysis.
Also in 12 projects that use this
lilangMaxSkillsoak-test
Generate a soak test protocol for extended play sessions. Defines what to observe, measure, and log during long play sessions to surface slow leaks, fatigue effects, and edge cases that only appear after sustained play. Primarily used in Polish and Release phases.
Also in 9 projects that use this
lilangMaxSkillteam-live-ops
Orchestrate the live-ops team for post-launch content planning: coordinates live-ops-designer, economy-designer, analytics-engineer, community-manager, writer, and narrative-director to design and plan a season, event, or live content update.
Also in 9 projects that use this
CoralGameSkillteam-polish
Orchestrate the polish team: coordinates performance-analyst, technical-artist, sound-designer, and qa-tester to optimize, polish, and harden a feature or area for release quality.
Also in 14 projects that use this
- +5 more from lilangMax
- +3 more from CoralGame
Other versions194 projects use a version of this.
Word for word · 0
None found.
Edited · 114
- mattpocock/skills★ 309k49% same
- QuivrHQ/quivr★ 40k49% same
- The-Vibe-Company/quivr★ 40k49% same
- GreyDGL/PentestGPT★ 16k64% same
- ArcReel/ArcReel★ 6.3k49% same
- withcoral/coral★ 4.9k49% same
- epicenter-md/epicenter★ 4.8k59% same
- EpicenterHQ/epicenter★ 4.8k59% same
- bestofjs/bestofjs★ 3.1k50% same
- CelestoAI/SmolVM★ 1.2k48% same
104 more not listed
Wrote their own version · 80
- emilkowalski/skill★ 55ksame name
- emilkowalski/skills★ 55ksame name
- Donchitos/Claude-Code-Game-Studios★ 27ksame name
- spree/spree★ 16ksame name
- usekaneo/kaneo★ 9.7ksame name
- podman-desktop/podman-desktop★ 8.1ksame name
- nightly-labs/openbot★ 6.3ksame name
- vinvcn/mattpocock-skills-zh-CN★ 5.5ksame name
- plugin87/ux-ui-agent-skills★ 3.1ksame name
- leepokai/Codync★ 2ksame name
70 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
Show its rules and text
We split this skill into the rules it gives an agent
21 rules. 2 are common, 15 are distinctive, and 4 are very specific to this project.
2
Common
Most of the 179 edited versions we read keep these.
15
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 17
If the question is genuinely ambiguous and I'm not reachable, default to whichever branch better matches the surrounding code (a backend …
- Common: line 29
Skip the polish: No tests, no error handling beyond what makes the prototype *runnable*, no abstractions.
- Common: line 31
Surface the state: After every action (logic) or on every variant switch (UI), print or render the full relevant state so I can see what …
- Distinctive: line 33
Delete or absorb when done: When the prototype has answered its question, either delete it or fold the validated decision into the real …
- Distinctive: line 39
Use when the question is about business logic, state transitions, or data shape — the kind of thing that looks reasonable on paper but only …
- Distinctive: line 45
2. Isolate the logic in a portable module: Put the actual logic — the bit that's answering the question — behind a small, pure interface.
- Distinctive: line 51
A class or module with a clear method surface: when the logic owns ongoing internal state.
- Very specific: line 53
Keep it pure: no I/O, no terminal code, no console.log for control flow.
- Very specific: line 62
4. Make it runnable in one command: Add a script to package.json scripts or equivalent.
- Very specific: line 66
6. Capture the answer: When done, note what was learned (commit message, ADR, or a NOTES.md next to the prototype).
- Distinctive: line 70
Don't add tests. A prototype that needs tests is no longer a prototype.
- Distinctive: line 71
Don't wire it to the real database.
- Distinctive: line 72
Don't generalize. No "what if we wanted to support X later."
- Distinctive: line 73
Don't blur the logic and the TUI together.
- Distinctive: line 74
Don't ship the TUI shell into production.
- Distinctive: line 80
Use when the question is "what should this look like?" — generating several options so I can pick one or steal bits from each.
- Distinctive: line 84
1. State the question and pick N: Default to 3 variants. Cap at 5.
- Distinctive: line 94
Create a floating bottom bar with:
- Distinctive: line 104
5. Capture the answer and clean up: Write down which variant won and why.
- Very specific: line 117
Use terms from Context/Glossary.md for variable names, function names, and file names.
- Distinctive: line 128
Delete or absorb the prototype code — do not leave it in the repo.
“Common” is measured: kept by at least 6 in 10 of the 179 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
A prototype is throwaway code that answers a question. The question decides the shape.
Pick a branch
Identify which question is being answered — from my prompt, the surrounding code, or by asking me:
- "Does this logic / state model feel right?" → Build a tiny interactive terminal app that pushes the state machine through cases that are hard to reason about on paper.
- "What should this look like?" → Generate several radically different UI variations on a single route, switchable via a URL search param and a floating bottom bar.
If the question is genuinely ambiguous and I'm not reachable, default to whichever branch better matches the surrounding code (a backend module → logic; a page or component → UI) and state the assumption.
Rules that apply to both
- Throwaway from day one, and clearly marked as such. Locate the prototype code close to where it will actually be used (next to the module or page it's prototyping for) so context is obvious — but name it so a casual reader can see it's a prototype, not production. For throwaway UI routes, obey whatever routing convention the project already uses; don't invent a new top-level structure.
- One command to run. Whatever the project's existing task runner supports —
pnpm <name>,python <path>,bun <path>, etc. I must be able to start it without thinking. - No persistence by default. State lives in memory. Persistence is the thing the prototype is checking, not something it should depend on. If the question explicitly involves a database, hit a scratch DB or a local file with a clear "PROTOTYPE — wipe me" name.
- Skip the polish. No tests, no error handling beyond what makes the prototype runnable, no abstractions. The point is to learn something fast and then delete it.
- Surface the state. After every action (logic) or on every variant switch (UI), print or render the full relevant state so I can see what changed.
- Delete or absorb when done. When the prototype has answered its question, either delete it or fold the validated decision into the real code — don't leave it rotting in the repo.
Branch A — Logic Prototype
Use when the question is about business logic, state transitions, or data shape — the kind of thing that looks reasonable on paper but only feels wrong once you push it through real cases.
Process
1. State the question. One paragraph. Write it at the top of the file or in a README next to the prototype. This makes it verifiable later.
2. Isolate the logic in a portable module. Put the actual logic — the bit that's answering the question — behind a small, pure interface. The TUI around it is throwaway; the logic module shouldn't be.
Pick the shape that fits:
- A pure reducer —
(state, action) => state. Good when actions are discrete. - A state machine — explicit states and transitions. Good when "which actions are legal right now" is part of the question.
- A small set of pure functions over a plain data type. Good when there's no implicit current state.
- A class or module with a clear method surface when the logic owns ongoing internal state.
Keep it pure: no I/O, no terminal code, no console.log for control flow. The TUI imports it and calls into it; nothing flows the other direction.
3. Build the smallest TUI that exposes the state. Each frame clears the screen and re-renders:
- Current state — pretty-printed, diff-friendly. Use ANSI bold/dim for hierarchy.
- Keyboard shortcuts —
[a] add user [d] delete user [q] quit.
One keystroke → one action → re-render full frame. Loop until quit.
4. Make it runnable in one command. Add a script to package.json scripts or equivalent. pnpm run <prototype-name>.
5. Hand it over. Give me the run command. I'll drive it myself — the interesting moments are when I say "wait, that shouldn't be possible."
6. Capture the answer. When done, note what was learned (commit message, ADR, or a NOTES.md next to the prototype).
Anti-patterns
- Don't add tests. A prototype that needs tests is no longer a prototype.
- Don't wire it to the real database. Use in-memory unless the question is about persistence.
- Don't generalize. No "what if we wanted to support X later."
- Don't blur the logic and the TUI together. Keep the TUI as a thin shell over a pure module.
- Don't ship the TUI shell into production.
Branch B — UI Prototype
Use when the question is "what should this look like?" — generating several options so I can pick one or steal bits from each.
Process
1. State the question and pick N. Default to 3 variants. Cap at 5. Write the plan in one line at the top of the prototype.
2. Generate radically different variants. Each variant must be structurally different — different layout, different information hierarchy, different primary affordance. Not just different colours. Three slightly-tweaked card grids isn't a UI prototype.
Hold each variant to:
- The page's purpose and the data it has access to.
- The project's component library / styling system.
3. Wire them together. Mount variants on an existing page whenever possible (render them inside the host page, gated by ?variant=). Only create a new throwaway route if there's genuinely no existing page to host them.
Create a floating bottom bar with:
- Left arrow — cycles to previous variant
- Variant label — shows current variant key and name
- Right arrow — cycles forward
- Keyboard:
←and→arrow keys also cycle (don't intercept when an input is focused) - Hidden in production builds (
NODE_ENVcheck) - Visually distinct from the page so it's obviously not part of the design
4. Hand it over. Surface the URL and the ?variant= keys. I'll flip through and give feedback — usually "I want the header from B with the sidebar from C."
5. Capture the answer and clean up. Write down which variant won and why. Delete the losing variants and the switcher. Don't promote prototype code directly to production — rewrite it properly.
Anti-patterns
- Variants that differ only in colour or copy. That's a tweak, not a prototype.
- Sharing too much code between variants. A shared
<Header>is fine; a shared<Layout>defeats the point. - Wiring variants to real mutations. Read-only prototypes are fine. Point at stubs if needed.
- Promoting the prototype directly to production. Rewrite when you fold it in.
Domain awareness
Use terms from Context/Glossary.md for variable names, function names, and file names. Respect decisions in Context/ADR/ that touch the area you're prototyping.
Context/Plans/— read the plan file if one exists. It provides the larger context for the question being prototyped.
Workflow
Before this command: /grill or /blueprint identified a high-fidelity question that can't be answered with words alone. The question requires seeing, touching, or stepping through.
After this command:
- The prototype answered the question →
/handoffto pass the learning back to the parent session (grill or blueprint). The handoff should capture what was learned, not the prototype code itself. - Delete or absorb the prototype code — do not leave it in the repo.
- The parent session resumes with
/recallon the handoff.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

