
CRUMB
Generative Game Studio · Demo
De la ideea unui joc într-un rând la o schiță jucabilă, cu munca agenților la vedere și deschisă intervenției.
CRUMB este un cadru de tip studio multi-agent pentru prototiparea jocurilor casual.
CRUMB vocabulary
- spec
- build
- artifact
- qa check
- ac predicate
- verifier
- routing
- circuit breaker
- budget
- intervention
- transcript
- anti-deception
- studio
Spec: planner-lead · goal · question.socratic · step.design · spec · spec.update · acceptance_criteria · researcher · step.research.video · step.research_plan · ac_predicates · D1 spec_fit · research_plan_violationBuild: builder · build · spawn · sandwich.assembled.md · --append-system-prompt · agent-workspace · buildBuilderInputBundle · Phaser CDN · JuiceManager · PER_SPAWN_TIMEOUT_MS · juice_manager_missingArtifact: artifact.created · sha256 · artifacts/game.html · artifacts/game/index.html · pickEntry · artifact-watcher · version.released · manifest.toml · loc_own_bytes · VersionsQA Check: Phaser CDN · pickEntry · loc_own_bytes · qa_check · runQaCheck · qa.result · exec_exit_code · lint_passed · first_interaction · cross_browser_smoke · PLAYWRIGHT SMOKE · runtime_progress · qa-check-effect@v1 · QA_CHECK_TIMEOUT_MS · D2 exec · D6 portability · ac_results · ac_pass_count · deterministic · PASS WITHOUT EXEC · runtime_stalled_under_input · runtime_player_below_ground · forged_qa_result_attemptAC Predicate: acceptance_criteria · ACPredicateItem · predicate_js · runACInteractive · ac_predicates · ac_results · ac_pass_count · ACPredicateLedgerItem · verify_pass_with_ac_failureVerifier: D2 exec · D6 portability · verifier · judge.score · CourtEval · grader · critic · defender · regrader · step.judge · D1 spec_fit · verifier-llm · combineDimScore · PARTIAL · deviation · suggested_change · user_approve_partial · self_bias_risk_same_provider · cross_provider · buildVerifierInputBundle · ScorecardRouting: spawn · routeOnVerdict · verdict_pass · deviation · Critical · Important · Minor · suggested_change · rollback · handoff.rollback · sandwich_append · dispatch · adapter_swapped · user.veto · reduce(state, event)Circuit Breaker: circuit_breaker · CIRCUIT_OPEN_AT · adapter_override · adapter_swapped · circuit_open_auto_respawn · builder_circuit_open · claude-local · probeAdapter · adapter_substituted · intended_model · /swap · /reset-circuitBudget: spec.update · QA_CHECK_TIMEOUT_MS · builder_circuit_open · RESPEC_MAX · VERIFY_MAX · too_many_verify · TOKEN_BUDGET_HARD · token_exhausted · ratchet_revert · adaptive_stop · STUCK_THRESHOLD · budget_exhausted · PER_SPAWN_TIMEOUT_MSIntervention: PARTIAL · sandwich_append · STUCK_THRESHOLD · user.intervene · user.veto · user.approve · user.pause · user_approve_partial · ack · inbox.txt · parseInboxLine · /swap · /reset-circuit · consumed_intervene_ids · /api/sessions/:id/inboxTranscript: version.released · qa.result · qa-check-effect@v1 · dispatch · adapter_substituted · intended_model · ack · consumed_intervene_ids · transcript.jsonl · TranscriptWriter · ULID · O_APPEND · message.schema.json · reduce(state, event) · PURE REDUCER · REPLAY · replay_end_offset · CrumbState · parent_event_id · deterministic · audit_violations · applyEventFirewall · useTranscriptStream · otel.jsonlAnti-Deception: step.research_plan · buildBuilderInputBundle · JuiceManager · verify_pass_with_ac_failure · checkAntiDeception · PASS WITHOUT EXEC · self_bias_risk_same_provider · cross_provider · research_plan_violation · juice_manager_missing · runtime_stalled_under_input · runtime_player_below_ground · audit_violations · applyEventFirewall · forged_qa_result_attempt · buildVerifierInputBundleStudio: @crumb/studio · /api/stream · text/event-stream · useTranscriptStream · dockview-react · Pipeline · Scorecard · Waterfall · Versions · /api/sessions/:id/inbox · otel.jsonl
Agenții care construiesc un joc, ținuți separat de dovezile care îl judecă.
Un demo de studio local care duce ideea unui joc într-un rând prin specificație, build și verificări de execuție. Fiecare pas ajunge într-o transcriere JSONL, un reducer pur decide efectele următoare, iar doar dispatcherul execută efecte secundare. QA-ul de execuție și verdictul modelului sunt ținute separat pentru a decide între trecere, reproiectare, reparare și ghidare umană.
Pentru un joc propus într-un singur rând, agenții Claude Code, Codex și Gemini CLI colaborează prin Planner → Builder → QA determinist → Verifier, în timp ce CRUMB Studio arată evenimentele, progresul și artefactele și acceptă intervenții în limbaj natural.
Un demo care se clonează din depozitul public și rulează local.
De la idee la joc
O idee devine o specificație, un build și o rulare QA de execuție. Fiecare pas trece prin transcriere; actorii nu se apelează între ei.
Ideea jocului · ghidareRulare · judecată: idee · ghidareScrierea comenzilor în inbox
packages/studioO idee de joc într-un rând și ghidarea în limbaj natural sunt introduse în Studio, care scrie comenzi în inbox. Studio nu editează niciodată direct transcrierea.
Scrierea comenzilor în inbox
packages/studioDate: evenimente userBucla de evenimente · reluare · tailsrc/loop/coordinator.tsCoordonatorul citește comenzile din inbox și le înregistrează în transcriere ca evenimente user.
Bucla de evenimente · reluare · tail
src/loop/coordinator.tsRulare · judecată: reducere în ordineStare → efectele următoaresrc/reducerEvenimentele în timp real sunt reduse unul câte unul dintr-o coadă, păstrând ordinea efectelor fiecărui eveniment; dispatch-ul însuși rulează asincron.
Stare → efectele următoare
src/reducerRulare · judecată: efecteExecutarea efectelor · pornirea actorilorsrc/dispatcher/live.tsReducerul este o funcție pură care decide doar starea și efectele următoare: un goal selectează Planner, un spec selectează Builder, un build un qa_check.
Actor → cadru · model
model-config · presetRulare · judecată: configurarea actoruluisrc/dispatcher/live.tsCe cadru, furnizor și model rulează un actor se stabilește în ordinea flag CLI > configurație > preset > ambient > fallback. Un actor nu este un furnizor fix.
Executarea efectelor · pornirea actorilor
src/dispatcher/live.tsRulare · judecată: rularea PlannerPlanner Lead · specificațieagent actor · CLIDispatcherul rulează Planner cu intrarea proiectată. Cercetarea condiționată continuă prin planul de cercetare și predarea dovezilor de către Planner, pliate pe această hartă.
Planner Lead · specificație
agent actor · CLIDate: spectranscript.jsonl · append-onlysrc/transcriptSpecificația Planner devine un eveniment de transcriere, iar reducerul selectează Builder pe baza ei. Actorii nu se apelează între ei.
Executarea efectelor · pornirea actorilor
src/dispatcher/live.tsRulare · judecată: rularea BuilderBuilder · scrie joculagent actor · CLIDispatcherul rulează Builder. Dacă același actor tot eșuează, se deschide un circuit care schimbă adaptorul și se oprește dacă eșecurile continuă.
Builder · scrie jocul
agent actor · CLIDate: fișiereFișierele joculuiartifacts/Builder scrie fișierul de intrare, sursele și resursele ca artefacte.
Builder · scrie jocul
agent actor · CLIDate: înregistrarea build-uluitranscript.jsonl · append-onlysrc/transcriptEvenimentul build și artifact.created sunt înregistrate în transcriere împreună cu identitatea artefactului.
Executarea efectelor · pornirea actorilor
src/dispatcher/live.tsRulare · judecată: qa_checkQA de execuție · verificăridispatcher/qa-runner.tsDupă un eveniment build, reducerul emite un efect qa_check care poartă identitatea artefactului și a build-ului și condițiile de acceptare, iar dispatcherul îl rulează.
Fișierele jocului
artifacts/Date: ce ruleazăQA de execuție · verificăridispatcher/qa-runner.tsQA-ul de execuție rulează artefactul real cu verificări de cod și de browser. Timeoutul implicit de 120 de secunde este o valoare de configurare.
QA de execuție · verificări
dispatcher/qa-runner.tsDate: qa.resulttranscript.jsonl · append-onlysrc/transcriptCu succes sau cu eșec, rezultatul este înregistrat ca eveniment de sistem qa.result. Chiar dacă verificarea aruncă o excepție, este înregistrat un rezultat cu câmpurile eșuate.
Granița de încredere a verificării
QA-ul de execuție este o dovadă obținută prin rularea efectivă a artefactului; Verifier este un model care judecă dovezi proiectate. Reducerul le reconciliază pe cele două înainte de a alege calea următoare.
QA de execuție · verificări
dispatcher/qa-runner.tsDate: qa.resulttranscript.jsonl · append-onlysrc/transcriptCu succes sau cu eșec, rezultatul este înregistrat ca eveniment de sistem qa.result. Chiar dacă verificarea aruncă o excepție, este înregistrat un rezultat cu câmpurile eșuate.
transcript.jsonl · append-only
src/transcriptDate: doar doveziProiecția intrării judecătoruluisrc/dispatcher/live.tsIntrarea Verifier este proiectată din cele mai recente goal, spec, build, qa.result și artifact.created, plus dovezile de cercetare selectate. Restrânge contextul; nu dovedește izolarea sau absența scurgerilor.
Proiecția intrării judecătorului
src/dispatcher/live.tsDate: intrarea judecătoruluiVerifier · verdictul modeluluiVerifier actorDispatcherul rulează Verifier cu intrarea proiectată.
Verifier · verdictul modelului
Verifier actorDate: judge.scoretranscript.jsonl · append-onlysrc/transcriptVerdictul Verifier este înregistrat ca eveniment judge.score. Este judecata unui model, nu un fapt despre execuție.
Stare → efectele următoare
src/reducerRulare · judecată: scor · dovezi QAAnti-înșelăciune · corectarea scoruluisrc/validatorLa judge.score, reducerul îl transmite verificării anti-înșelăciune împreună cu rezultatul QA, furnizorul Builder și planul și dovezile de cercetare.
Anti-înșelăciune · corectarea scorului
src/validatorDate: verdict corectatRutarea verdictuluisrc/reducerUn PASS fără o execuție reușită devine FAIL, iar scorul legat de execuție este corectat din QA-ul determinist. Celelalte reguli sunt corecții condiționate, nu o dovadă generală a veridicității.
Rutarea verdictului
src/reducerDate: încheiatÎncheiat · PASS sau motiv de opriresession donePASS încheie sesiunea ca done. Opririle din cauza bugetului și a circuitului se încheie tot ca done, dar își păstrează motivul opririi, așa că done nu înseamnă mereu PASS.
Eșec și ghidare umană
PARTIAL merge la o persoană, Critical la reproiectare, Important sau Minor la reparare, iar opririle din cauza bugetului sau a circuitului lasă un motiv de oprire.
Anti-înșelăciune · corectarea scorului
src/validatorDate: verdict corectatRutarea verdictuluisrc/reducerUn PASS fără o execuție reușită devine FAIL, iar scorul legat de execuție este corectat din QA-ul determinist. Celelalte reguli sunt corecții condiționate, nu o dovadă generală a veridicității.
Rutarea verdictului
src/reducerRulare · judecată: verificare PARTIALIdeea jocului · ghidarePARTIAL așteaptă verificarea unei persoane.
Rutarea verdictului
src/reducerRulare · judecată: reproiectare · repararesrc/dispatcher/live.tsDintre FAIL și REJECT, Critical revine la Planner pentru reproiectare, iar Important sau Minor la Builder ca feedback de corectare, toate rulate ca efecte ale dispatcherului.
Rutarea verdictului
src/reducerDate: încheiatÎncheiat · PASS sau motiv de opriresession donePASS încheie sesiunea ca done. Opririle din cauza bugetului și a circuitului se încheie tot ca done, dar își păstrează motivul opririi, așa că done nu înseamnă mereu PASS.
Ideea jocului · ghidareRulare · judecată: idee · ghidareScrierea comenzilor în inbox
packages/studioO idee de joc într-un rând și ghidarea în limbaj natural sunt introduse în Studio, care scrie comenzi în inbox. Studio nu editează niciodată direct transcrierea.
Reluare și observare
Reconstruirea stării din transcriere nu rulează niciun efect, iar Studio citește aceeași înregistrare pentru a o afișa.
transcript.jsonl · append-only
src/transcriptDate: evenimente noi · reluareBucla de evenimente · reluare · tailsrc/loop/coordinator.tsScriitorul validează schema, atribuie un ULID și o oră și adaugă la final. La reluare, evenimentele trecute sunt doar reduse; efectele lor nu sunt rulate din nou.
Bucla de evenimente · reluare · tail
src/loop/coordinator.tsRulare · judecată: reducere în ordineStare → efectele următoaresrc/reducerEvenimentele în timp real sunt reduse unul câte unul dintr-o coadă, păstrând ordinea efectelor fiecărui eveniment; dispatch-ul însuși rulează asincron.
transcript.jsonl · append-only
src/transcriptObservare · raport: citire · SSEVizualizarea evenimentelor · artefactelorpackages/studioStudio citește transcrierea și artefactele și arată progresul, metricile și artefactele prin SSE. Nu este telemetrie trimisă unui serviciu la distanță.
Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.
- Continuă · direcția intrărilor, rezultatelor și înregistrărilor
- Întreruptă · rulare, judecată, cerere
- Puncte lungi · observare și raportare, separate de judecată
- Linie neagră groasă · fluxul selectat; numerele dau ordinea
- Casetă · graniță de cod sau de stare, cu numele în antet
- Etichetă interioară · o componentă a acelei granițe
- Casetă punctată · în afara acelei granițe
- Contur portocaliu · locul în care decide un model
- Bucla de evenimente · reducer · dispatcher
- Înregistrări · configurare · artefacte
- Verificări deterministe · corectare
- Studio · actori
Desenat după căile de cod din commitul public f5e17c0. Actorii sunt roluri de rulare, distincte de agenții de programare folosiți pentru a construi acest depozit.
- Sursa stării
- Transcrierea este sursa stării, iar reducerul este o funcție pură. Doar dispatcherul execută efecte secundare (rularea actorilor, QA, scrierea fișierelor), așa că reluarea reconstruiește starea fără efecte.
- Ce acoperă reluarea
- Reluarea produce aceeași stare; nu face deterministe generările LLM sau comportamentul browserului și al rețelei.
- Ce acoperă un verdict
- QA-ul de execuție verifică doar verificările configurate, iar scorul Verifier este un singur canal de dovezi. Niciunul nu măsoară fiecare comportament al jocului, cât de distractiv este sau satisfacția utilizatorilor.