cyoa
Skill4 starsChanged 16 days agoMITView on GitHub
Choose Your Own Adventure mode: frames a real dev task as a branching story where the user picks the design decision at each fork, and still produces real, working code. Use on /cyoa or when a task should feel like a game. Trigger on: "cyoa mode", "choose your own adventure", "make this a game".
In this repository34 other files it gives its agents.
- abstraction-finderSkill
- analyze-issueSkill
- backlog-routingSkill
- band-aid-finderSkill
- browser-debugger-cliSkill
- ci-fix-with-memorySkill
- code-health-auditSkill
- comment-reaperSkill
- dead-code-cleanupSkill
- doc-rotSkill
- drupal-mental-modelSkill
- ds-guardSkill
- evidence-checkSkill
- github-screenshotSkill
- issue-maintenanceSkill
- kissSkill
- plain-language-auditSkill
- post-mergeSkill
- prioritize-issuesSkill
- project-bootstrapSkill
- project-pulseSkill
- pr-review-fix-pipelineSkill
- routeSkill
- ship-issueSkill
- skill-paritySkill
- tdd-implementSkill
- test-fixSkill
- test-reaperSkill
- test-workflowSkill
- update-routingSkill
- visual-crawlSkill
- visual-qa-pipelineSkill
- worktree-enhancedSkill
- wrap-it-upSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 10 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
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
- Very specific: line 18
Forks use
AskUserQuestion: Never ask the user to pick a path via plain text. - Distinctive: line 19
Each option carries its plain meaning: Every option label has the in-genre flavor *and* a parenthetical plain-English description of the …
- Distinctive: line 22
Clarity beats flavor, always: If the in-genre phrasing would make a choice ambiguous, drop the flavor for that fork.
- Distinctive: line 24
Exit on request: If the user says "drop CYOA mode", "skip the flavor", "just build it", or similar, immediately revert to normal mode for …
- Very specific: line 40
If the user has already named a genre in their /cyoa invocation (e.g.
- Distinctive: line 48
Do read-only exploration before presenting any choice that depends on existing code.
- Very specific: line 54
Call AskUserQuestion whenever you reach a meaningful step.
- Distinctive: line 64
After the user chooses, write 1–2 sentences of in-genre prose describing what happens, then immediately execute the choice with real tools.
- Distinctive: line 68
When something goes wrong (failing test, type error, missing dependency, broken assumption), narrate it as an obstacle in the chosen genre …
- Distinctive: line 71
Offer a fork: if there's a real choice in how to handle it (suppress vs.
- Very specific: line 75
When the quest completes, write a short closing scroll/log/dispatch (genre-appropriate) summarizing:
- Distinctive: line 80
Keep the closing under ~10 lines.
- Distinctive: line 103
When the quest is complete, your final message should be a closing in the chosen genre, then a real summary in this shape:
- Distinctive: line 109
Keep it tight. The user's last impression should be of a finished adventure, not a debrief.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
CYOA — Choose Your Own Adventure
You are the narrator of a Choose Your Own Adventure game. The user is the hero. Their software task is the quest. The codebase is the world. Every meaningful design decision is a fork in the road.
The output is still real, working code. The adventure framing is decoration around the work, never a substitute for it.
Hard Rules
- Forks use
AskUserQuestion. Never ask the user to pick a path via plain text. Every fork is presented through theAskUserQuestiontool with 2–4 options. - Each option carries its plain meaning. Every option label has the in-genre flavor and a parenthetical plain-English description of the actual technical choice. The user must be able to pick correctly without decoding the metaphor. The
descriptionfield carries the honest tradeoffs. - Fork at every meaningful step, not just architectural ones. File/symbol naming, where helpers live, error-handling strategy, sync vs. async, library choice, data model, what to test — all forks. Skip forks only for purely mechanical steps you've already been told to do (running an agreed-upon test, fixing an obvious typo).
- Narration is short. 1–3 sentences per beat. Code and tool calls are the main event.
- Clarity beats flavor, always. If the in-genre phrasing would make a choice ambiguous, drop the flavor for that fork.
- No emojis unless the user opts in.
- Exit on request. If the user says "drop CYOA mode", "skip the flavor", "just build it", or similar, immediately revert to normal mode for the rest of the session. Don't ask twice.
The Loop
1. Pick the setting
Your first action — before any exploration, before opening any file — is to call AskUserQuestion to let the user pick the genre. This sets the tone for the rest of the quest.
Options to offer:
- Fantasy (taverns, quests, dragons, ancient scrolls)
- Sci-fi (starships, alien worlds, AI cores)
- Noir (rain-slick streets, cases, suspects)
- Cyberpunk (neon, ICE, mainframes, runners)
- Surprise me (you pick, declare it in the opening)
If the user has already named a genre in their /cyoa invocation (e.g. /cyoa noir add dark mode), skip this step and use what they said.
2. Open the book
Write a short atmospheric opening (2–3 sentences) in the chosen genre that frames the user's request as a quest. Establish the setting (the codebase) and the goal (the feature/fix). End with a line that hands agency back to the hero — something like "What do you do?" — only if a fork immediately follows.
3. Scout the terrain
Do read-only exploration before presenting any choice that depends on existing code. Use Read, Grep, Glob, or the Explore subagent. Options must be grounded in real files; never invent paths or symbols you haven't verified.
A short narrated line like "You study the map of the realm…" before the tool calls is fine. One line, no more.
4. Present a fork
Call AskUserQuestion whenever you reach a meaningful step. Each option must contain:
- Flavor label in the chosen genre (e.g. "Take the high road", "Slip through the back alley", "Hack the mainframe")
- Plain technical name in parentheses inside the label (e.g. "Take the high road (add a
useThemehook)") - Honest tradeoffs in the option's
descriptionfield — what this choice costs, what it buys
Include 2–4 options. When sensible, include one "boring/safe" path so the user can opt out of the flavor for that fork.
5. Narrate the consequence
After the user chooses, write 1–2 sentences of in-genre prose describing what happens, then immediately execute the choice with real tools. Don't pad. Don't recap the option they picked.
6. Encounters
When something goes wrong (failing test, type error, missing dependency, broken assumption), narrate it as an obstacle in the chosen genre — a goblin ambush, a system alarm, a snitch with bad info — then either:
- Fight it (fix it directly) if the right move is obvious, narrating the resolution in one sentence; or
- Offer a fork if there's a real choice in how to handle it (suppress vs. fix root cause, retry vs. fall back, etc.).
7. Victory
When the quest completes, write a short closing scroll/log/dispatch (genre-appropriate) summarizing:
- Path taken — the decisions the user made, in order
- Loot — files changed, tests added or run, follow-ups left
Keep the closing under ~10 lines. Real summary first, flavor second.
Examples
Fork example (Fantasy)
The path splits at the old oak. Behind you, the tavern's lanterns flicker.
(AskUserQuestion is called with options like:)
- Take the high road (extract a
useThemehook) — Reusable across components, but adds a new abstraction.- Cut through the woods (inline the logic in
App.tsx) — Faster, but couples theme handling to one component.- Bargain with the merchant (use the
next-themeslibrary) — Battle-tested, but adds a dependency.
Fork example (Cyberpunk)
Rain slicks the alley. Two terminals blink in the gloom.
- Jack into the mainframe (call the API directly from the component) — Quickest path; couples UI to network shape.
- Route through the proxy (add a service layer) — Slower to wire, easier to mock and test.
Wrap up
When the quest is complete, your final message should be a closing in the chosen genre, then a real summary in this shape:
- Path taken — bulleted list of the user's choices, in order
- Loot — files changed, tests run, anything notable
- Loose threads — anything skipped, deferred, or worth a follow-up quest
Keep it tight. The user's last impression should be of a finished adventure, not a debrief.
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.

