
CRUMB
Generative Game Studio · Demo
Från en spelidé på en rad till ett spelbart utkast, med agenternas arbete synligt och öppet för ingrepp.
CRUMB är en studio-harness med flera agenter för prototyper av casual-spel.
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
Agenterna som bygger ett spel hålls isär från de belägg som bedömer det.
En lokal studio-demo som för en spelidé på en rad genom specifikation, bygge och exekveringskontroller. Varje steg hamnar i ett JSONL-transkript, en ren reducer bestämmer nästa effekter och bara dispatchern utför sidoeffekter. Exekverings-QA och modellens dom hålls isär för att avgöra mellan godkänt, omdesign, reparation och mänsklig styrning.
Ett spel beskrivs på en rad, och agenter i Claude Code, Codex och Gemini CLI samarbetar genom Planner → Builder → deterministisk QA → Verifier, medan CRUMB Studio visar händelser, förlopp och artefakter och tar emot ingrepp på naturligt språk.
En demo som klonas från det offentliga repositoryt och körs lokalt.
Från idé till spel
En idé blir en specifikation, ett bygge och en körning av exekverings-QA. Varje steg passerar transkriptet; actors anropar inte varandra.
Spelidé · styrningKörning · bedömning: idé · styrningSkriv kommandon till inbox
packages/studioEn spelidé på en rad och styrning på naturligt språk matas in i Studio, som skriver kommandon till inboxen. Studio redigerar aldrig transkriptet direkt.
Skriv kommandon till inbox
packages/studioData: user-händelserHändelseloop · replay · tailsrc/loop/coordinator.tsKoordinatorn läser kommandon från inboxen och registrerar dem i transkriptet som user-händelser.
Händelseloop · replay · tail
src/loop/coordinator.tsKörning · bedömning: reduce i ordningTillstånd → nästa effektersrc/reducerLivehändelser reduceras en i taget från en kö, så att varje händelses effekter hålls i ordning; själva dispatchen körs asynkront.
Tillstånd → nästa effekter
src/reducerKörning · bedömning: effekterKör effekter · spawna actorssrc/dispatcher/live.tsReducern är en ren funktion som bara bestämmer tillstånd och nästa effekter: ett goal väljer Planner, en spec Builder, ett build en qa_check.
Actor → harness · modell
model-config · presetKörning · bedömning: actor-inställningsrc/dispatcher/live.tsVilken harness, leverantör och modell som kör en actor avgörs i ordningen CLI-flagga > config > preset > ambient > fallback. En actor är ingen fast leverantör.
Kör effekter · spawna actors
src/dispatcher/live.tsKörning · bedömning: kör PlannerPlanner Lead · specifikationagent actor · CLIDispatchern kör Planner med projicerad indata. Villkorad research fortsätter genom Planners researchplan och överlämning av belägg, som är hopfällda på denna karta.
Planner Lead · specifikation
agent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcriptSpecifikationen från Planner blir en transkripthändelse, och reducern väljer Builder utifrån den. Actors anropar inte varandra.
Kör effekter · spawna actors
src/dispatcher/live.tsKörning · bedömning: kör BuilderBuilder · skriver speletagent actor · CLIDispatchern kör Builder. Om samma actor fortsätter att misslyckas öppnas en circuit som byter adapter, och körningen stoppas om felen fortsätter.
Builder · skriver spelet
agent actor · CLIData: filerSpelfilerartifacts/Builder skriver ingångsfilen, källor och assets som artefakter.
Builder · skriver spelet
agent actor · CLIData: byggloggtranscript.jsonl · append-onlysrc/transcriptBuild-händelsen och artifact.created registreras i transkriptet med artefaktens identitet.
Kör effekter · spawna actors
src/dispatcher/live.tsKörning · bedömning: qa_checkExekverings-QA · kontrollerdispatcher/qa-runner.tsEfter en build-händelse skickar reducern en qa_check-effekt med artefaktens och byggets identitet och acceptansvillkoren, och dispatchern kör den.
Spelfiler
artifacts/Data: vad som körsExekverings-QA · kontrollerdispatcher/qa-runner.tsExekverings-QA kör den faktiska artefakten med kod- och webbläsarkontroller. Standardtimeouten på 120 sekunder är ett konfigurationsvärde.
Exekverings-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptOavsett om det lyckas eller misslyckas registreras resultatet som en system-händelse qa.result. Även om kontrollen kastar ett undantag registreras ett resultat med de felande fälten.
Verifieringens förtroendegräns
Exekverings-QA är belägg från att faktiskt köra artefakten; Verifier är en modell som bedömer projicerade belägg. Reducern stämmer av de två innan den väljer nästa väg.
Exekverings-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptOavsett om det lyckas eller misslyckas registreras resultatet som en system-händelse qa.result. Även om kontrollen kastar ett undantag registreras ett resultat med de felande fälten.
transcript.jsonl · append-only
src/transcriptData: bara beläggProjektion av bedömarindatasrc/dispatcher/live.tsVerifiers indata projiceras från de senaste goal, spec, build, qa.result och artifact.created plus utvalda belägg från research. Det smalnar av kontexten; det bevisar inte isolering eller att inget läcker.
Projektion av bedömarindata
src/dispatcher/live.tsData: bedömarindataVerifier · modellens domVerifier actorDispatchern kör Verifier med den projicerade indatan.
Verifier · modellens dom
Verifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcriptVerifiers dom registreras som en judge.score-händelse. Det är en modells bedömning, inte ett faktum om exekveringen.
Tillstånd → nästa effekter
src/reducerKörning · bedömning: poäng · QA-beläggAnti-deception · poängkorrigeringsrc/validatorVid judge.score skickar reducern den vidare till anti-deception-kontrollen tillsammans med QA-resultatet, Builders leverantör samt researchplanen och beläggen.
Anti-deception · poängkorrigering
src/validatorData: korrigerad domRoutning av domsrc/reducerEtt PASS utan en lyckad exekvering blir FAIL, och den exekveringsrelaterade poängen korrigeras utifrån deterministisk QA. De övriga reglerna är villkorade korrigeringar, inte ett generellt bevis för sanningsenlighet.
Routning av dom
src/reducerData: doneKlar · PASS eller stopporsaksession donePASS avslutar sessionen som done. Stopp på grund av budget eller circuit slutar också som done men behåller sin stopporsak, så done är inte alltid PASS.
Fel och mänsklig styrning
PARTIAL går till en människa, Critical till omdesign, Important eller Minor till reparation, och stopp på grund av budget eller circuit lämnar en stopporsak.
Anti-deception · poängkorrigering
src/validatorData: korrigerad domRoutning av domsrc/reducerEtt PASS utan en lyckad exekvering blir FAIL, och den exekveringsrelaterade poängen korrigeras utifrån deterministisk QA. De övriga reglerna är villkorade korrigeringar, inte ett generellt bevis för sanningsenlighet.
Routning av dom
src/reducerKörning · bedömning: PARTIAL-kontrollSpelidé · styrningPARTIAL väntar på att en människa kontrollerar.
Routning av dom
src/reducerKörning · bedömning: omdesign · reparationsrc/dispatcher/live.tsBland FAIL och REJECT går Critical tillbaka till Planner för omdesign och Important eller Minor till Builder som återkoppling för rättning, allt kört som dispatcher-effekter.
Routning av dom
src/reducerData: doneKlar · PASS eller stopporsaksession donePASS avslutar sessionen som done. Stopp på grund av budget eller circuit slutar också som done men behåller sin stopporsak, så done är inte alltid PASS.
Spelidé · styrningKörning · bedömning: idé · styrningSkriv kommandon till inbox
packages/studioEn spelidé på en rad och styrning på naturligt språk matas in i Studio, som skriver kommandon till inboxen. Studio redigerar aldrig transkriptet direkt.
Uppspelning och observation
Att återskapa tillståndet från transkriptet kör inga effekter, och Studio läser samma logg för att visa det.
transcript.jsonl · append-only
src/transcriptData: nya händelser · replayHändelseloop · replay · tailsrc/loop/coordinator.tsWritern validerar schemat, tilldelar ett ULID och en tid och skriver append-only. Vid replay körs tidigare händelser bara genom reducern; deras effekter körs inte igen.
Händelseloop · replay · tail
src/loop/coordinator.tsKörning · bedömning: reduce i ordningTillstånd → nästa effektersrc/reducerLivehändelser reduceras en i taget från en kö, så att varje händelses effekter hålls i ordning; själva dispatchen körs asynkront.
transcript.jsonl · append-only
src/transcriptObservation · rapport: läsning · SSEVy för händelser · artefakterpackages/studioStudio läser transkriptet och artefakterna och visar förlopp, mätvärden och artefakter via SSE. Det är inte telemetri som skickas till en extern tjänst.
Alla kopplingar med samma tjocklek. Välj ett flöde för att bara markera dess väg, med numrerade steg.
- Heldragen · riktning för indata, resultat och loggar
- Streckad · körning, bedömning, begäran
- Långa prickar · observation och rapportering, skilt från bedömning
- Kraftig svart linje · det valda flödet; siffrorna anger ordningen
- Ruta · kod- eller tillståndsgräns, namngiven i rubriken
- Inre chip · en komponent inom gränsen
- Prickad ruta · utanför gränsen
- Orange kontur · där en modell fattar beslut
- Händelseloop · reducer · dispatcher
- Loggar · inställning · artefakter
- Deterministiska kontroller · korrigering
- Studio · actors
Ritad utifrån kodsökvägar i offentlig commit f5e17c0. Actors är roller vid körning, skilda från de kodagenter som användes för att bygga detta repository.
- Källan till tillstånd
- Transkriptet är källan till tillståndet och reducern är en ren funktion. Bara dispatchern utför sidoeffekter (körning av actors, QA, skrivning av filer), så uppspelning återskapar tillståndet utan effekter.
- Vad uppspelning omfattar
- Uppspelning ger samma tillstånd; den gör inte LLM-genereringar eller webbläsar- och nätverksbeteende deterministiska.
- Vad en dom omfattar
- Exekverings-QA kontrollerar bara de konfigurerade kontrollerna, och Verifiers poäng är en kanal av belägg. Ingen av dem mäter allt spelbeteende, om spelet är roligt eller användarnöjdhet.