원클릭으로
beginner-mode
How to write and extend beginner mode content — pre-level concept briefings for new players
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
How to write and extend beginner mode content — pre-level concept briefings for new players
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Use this skill whenever introducing a new Go programming concept that needs to be explained visually to beginners. Triggers when the user asks to explain, illustrate, animate, or teach any Go concept — including but not limited to: variables, functions, packages, imports, structs, interfaces, goroutines, channels, error handling, maps, slices, pointers, closures, or methods. Also triggers when the user says things like "add a new scene", "introduce X concept", "animate how X works", or "show the next concept". Always use this skill before writing any animation code — it defines the entire design system, analogy model, and scene structure that all Go animations must follow.
How to add new game content (chapters, bosses, story) to SIGNAL
Audit engine output patterns for common Go pitfalls — ensures every step has targeted feedback for Printf/Println, whitespace, format mismatches, and other gotchas
How to write and tune AI system prompts for Maya's 3-tier LLM backend
How to write zen rules for new SIGNAL levels — idiomatic Go detection, jolts, suggestions, testing
How to build boss fight encounters in SIGNAL — combat loop, visual effects, jeopardy, and content authoring
| name | beginner-mode |
| description | How to write and extend beginner mode content — pre-level concept briefings for new players |
| allowed-tools | Read, Write, Edit, Glob, Grep, Bash |
A toggleable pre-level overlay that teaches Go concepts before the player starts a challenge. Each chapter has three sections: animated illustration, package card, and code recap. The player presses CONTINUE between each.
Section 0: Animation (interactive office room illustration)
Section 1: Package Card (tappable paper-form showing Go program structure)
Section 2: Code Recap (text + code blocks with hotspot tooltips)
Every chapter follows this exact structure. No exceptions.
Every chapter reuses the same office room (the "Go appliance"). New concepts appear as objects inside the existing room. This builds the player's mental model across chapters.
package mainimport)func main()New concepts appear inside step 5 (the instructions). The package/import/envelope structure is always the same.
These analogies must be used consistently across all chapters:
| Analogy | Go Concept | Introduced |
|---|---|---|
| Package card | package main | Ch01 |
| Address label (shelf) | import | Ch01 |
| Envelope | func | Ch01 |
| Sealed envelope | const | Ch01 |
| Open envelope | variable (:=) | Ch01 |
| Sticker (color-coded) | value/data | Ch01 |
| Peel & stick | := / = | Ch01 |
| Postal slot | function call | Ch01 |
| Display panel | terminal output | Ch01 |
| Sealed folder + name tags | const ( ) group | Ch02 |
| Revolving door | for loop | Ch02 |
| Counter sign | loop init (i := 1) | Ch02 |
| Condition sign | loop condition (i <= 10) | Ch02 |
| Counter tick | loop post (i++) | Ch02 |
| Sorting room (postal depot) | switch | Ch02 |
| Labelled bay | case | Ch02 |
| DEFAULT bay | default | Ch02 |
| Checkpoint booth (passport control) | if / else | Ch02 |
| Inspector | condition check | Ch02 |
| Green/red gate | branch path | Ch02 |
When introducing a concept already taught in a prior chapter, the narration should acknowledge it: "same as last time", "she knows the drill", etc.
src/components/game/diagrams/Each chapter has a diagram component with two views controlled by a view prop:
interface DiagramProps {
onHotspotClick?: (id: string) => void; // XP tracking
clickedIds?: Set<string>; // already-clicked parts
view?: "animation" | "card"; // which view to render
}
view="animation": The animated office room with scene progression, narration, play/pause/next controlsview="card": The package card (paper form) with side-by-side code panel, tappable pills, and analogy map buttonExisting diagrams:
GoAppliance.tsx — Ch01 (package/import/const/var/print)DoorCodeMachine.tsx — Ch02 (const groups/for loops/switch)T, same OfficeRoom layout, same WorkerChip, same CodePanel, same AnalogyMapModalcard, pname, attach, envelope, req, body, expfolder, nametag, forloop, switch, etc.)The card view must follow this exact layout for every chapter:
┌──────────────────────────────────┐
│ GO PROGRAMME PACKAGE rev X.0 │ ← red header bar
├──────────────────────────────────┤
│ Package Name: │ ← tappable (pname)
│ main │
│ │
│ Required Attachments: │ ← tappable (attach)
│ ☑ fmt (printer toolkit) │
│ ☐ add more... │
│ │
│ [chapter-specific sections here] │ ← e.g. sealed folder (ch02+)
│ │
│ ┌────────────────────────────┐ │
│ │ ENVELOPE: main │ │ ← tappable (envelope)
│ ├──────────┬─────────────────┤ │
│ │ FRONT │ BACK │ │ ← flip toggle
│ ├──────────┴─────────────────┤ │
│ │ Required Information: │ │ ← tappable (req)
│ │ - none - () │ │
│ │ │ │
│ │ Instructions: │ │ ← tappable (body)
│ │ [chapter-specific steps] │ │ ← each instruction tappable
│ └────────────────────────────┘ │
│ │
│ tap any section · flip front/back│
└──────────────────────────────────┘
The card sits side-by-side with a code panel. Below the code panel: tappable pills for each CARD_PART. Below both: an explanation panel that shows the selected part's description.
Every card view ends with a centered "ANALOGY MAP →" button. Tapping opens a fixed-position modal overlay showing all physical-to-code mappings for that chapter. The modal is dismissible via close button or backdrop click.
Use the AnalogyMapModal component (defined in each diagram file):
<AnalogyMapModal items={[
{ a: "Package card", c: "package main", col: T.red },
{ a: "Address label", c: "import", col: T.blue },
// ... chapter-specific items
]} />
Include analogies from all previous chapters plus the current one. This reinforces the cumulative mental model.
All diagram components share the same token object T:
const T = {
paper: "#1a1e28", paperAlt: "#141822", line: "#2a3040",
ink: "#e2e8f0", inkMid: "#94a3b8", inkLight: "#64748b", inkFade: "#475569",
red: "#c0392b", steel: "#0f1623", steelMid: "#1a2236", steelLt: "#2d3f5c",
green: "#00d4aa", amber: "#f59e0b", blue: "#3b82f6", pink: "#f472b8", purple: "#c084fc",
};
These are internal to the diagram components (not CSS vars) because diagrams use inline styles for the paper/office aesthetic.
The animation view uses a flex layout with pinned controls:
┌─────────────────────────────┐
│ [scrollable content area] │ ← flex: 1, overflow: auto
│ OfficeRoom (scene visual) │
│ Legend (color dots) │
│ Narration + Code panel │
├─────────────────────────────┤
│ [pinned controls] │ ← flexShrink: 0
│ Scene dots (1-12) │
│ ← BACK ▶ PLAY NEXT → │
└─────────────────────────────┘
Controls are never hidden beneath scroll. The parent (BeginnerOverlay) detects diagram sections and switches from overflow-y-auto to flex layout, giving the diagram a concrete height.
src/data/beginner-notes.tsDiagram blocks are a special NoteBlock type that renders interactive visual components:
{
type: "diagram",
section: 0, // section 0 = animation, section 1 = card
content: "ch02-animation", // diagram ID
}
Diagram IDs follow the pattern: ch{XX}-animation and ch{XX}-card.
"chapter-XX": {
title: "CHAPTER TITLE",
subtitle: "WHAT YOU NEED FOR THIS LEVEL",
blocks: [
{ type: "diagram", section: 0, content: "chXX-animation" },
{ type: "diagram", section: 1, content: "chXX-card" },
// Section 2: code recap with text + code blocks + hotspots
{ type: "text", section: 2, content: "..." },
{ type: "code", section: 2, content: "...", hotspots: [...] },
// ...more text/code blocks in section 2
],
}
When the current section contains only diagram blocks (isDiagramSection), BeginnerOverlay:
overflow-y-auto to flex-1 min-h-0 flex flex-col90dvh) so diagram internal flex resolvesIn BeginnerOverlay.tsx, add the import and a case in the diagram block renderer:
import { NewDiagram } from "./diagrams/NewDiagram";
// In BlockRenderer, inside the diagram handling:
if (b.content === "chXX-animation") return <NewDiagram view="animation" ... />;
if (b.content === "chXX-card") return <NewDiagram view="card" ... />;
interface NoteBlock {
type: "text" | "code" | "diagram";
content: string;
section: number;
hotspots?: Hotspot[]; // only for code blocks
}
interface Hotspot {
text: string; // exact substring in the code to highlight
tip: string; // tooltip shown on click
}
text must be an exact substring of the code block's contentsrc/components/game/BeginnerOverlay.tsxFullscreen overlay (z-[60]) with:
section number, revealed togetherclickedHotspots setProps:
interface BeginnerOverlayProps {
notes: BeginnerNotes;
onReady: () => void;
onDisable: () => void;
onHotspotXP: (amount: number) => void;
}
src/components/game/diagrams/ following GoAppliance structure:
T tokens, OfficeRoom layout, WorkerChip, CodePanel, AnalogyMapModalview="animation" with scenes + pinned controlsview="card" with package card format (red header, envelope flip, etc.) + analogy map buttonsrc/data/beginner-notes.ts:
{ type: "diagram", content: "chXX-animation" }{ type: "diagram", content: "chXX-card" }BeginnerOverlay.tsx (import + case in renderer)AnalogyMapModal button/modal pattern, never render analogies inline