
CRUMB
Generative Game Studio · Demo
Fra en spilidé på én linje til et spilbart udkast, med agenternes arbejde synligt og åbent for indgreb.
CRUMB er en studio-harness med flere agenter til prototyper af casual-spil.
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
Agenterne, der bygger et spil, holdes adskilt fra det belæg, der bedømmer det.
En lokal studio-demo, der fører en spilidé på én linje gennem specifikation, build og udførelseskontroller. Hvert trin havner i en JSONL-transskription, en ren reducer bestemmer de næste effekter, og kun dispatcheren udfører sideeffekter. Udførelses-QA og modellens dom holdes adskilt for at afgøre mellem bestået, nyt design, reparation og menneskelig styring.
Et spil beskrives på én linje, og agenter i Claude Code, Codex og Gemini CLI samarbejder gennem Planner → Builder → deterministisk QA → Verifier, mens CRUMB Studio viser hændelser, fremdrift og artefakter og tager imod indgreb på naturligt sprog.
En demo, der klones fra det offentlige repository og køres lokalt.
Fra idé til spil
En idé bliver til en specifikation, et build og en kørsel af udførelses-QA. Hvert trin går gennem transskriptionen; actors kalder ikke hinanden.
Spilidé · styringKørsel · vurdering: idé · styringSkriv kommandoer til inbox
packages/studioEn spilidé på én linje og styring på naturligt sprog indtastes i Studio, som skriver kommandoer til inboxen. Studio redigerer aldrig transskriptionen direkte.
Skriv kommandoer til inbox
packages/studioData: user-hændelserHændelsesløkke · replay · tailsrc/loop/coordinator.tsKoordinatoren læser kommandoer fra inboxen og registrerer dem i transskriptionen som user-hændelser.
Hændelsesløkke · replay · tail
src/loop/coordinator.tsKørsel · vurdering: reduce i rækkefølgeTilstand → næste effektersrc/reducerLive-hændelser reduceres én ad gangen fra en kø, så hver hændelses effekter holdes i rækkefølge; selve dispatchen kører asynkront.
Tilstand → næste effekter
src/reducerKørsel · vurdering: effekterKør effekter · spawn actorssrc/dispatcher/live.tsReduceren er en ren funktion, der kun bestemmer tilstand og de næste effekter: et goal vælger Planner, en spec Builder, et build en qa_check.
Actor → harness · model
model-config · presetKørsel · vurdering: actor-opsætningsrc/dispatcher/live.tsHvilken harness, udbyder og model der kører en actor, afgøres i rækkefølgen CLI-flag > config > preset > ambient > fallback. En actor er ikke en fast udbyder.
Kør effekter · spawn actors
src/dispatcher/live.tsKørsel · vurdering: kør PlannerPlanner Lead · specifikationagent actor · CLIDispatcheren kører Planner med projiceret input. Betinget research fortsætter gennem Planners researchplan og overdragelse af belæg, der er foldet sammen på dette kort.
Planner Lead · specifikation
agent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcriptSpecifikationen fra Planner bliver en transskriptionshændelse, og reduceren vælger Builder ud fra den. Actors kalder ikke hinanden.
Kør effekter · spawn actors
src/dispatcher/live.tsKørsel · vurdering: kør BuilderBuilder · skriver spilletagent actor · CLIDispatcheren kører Builder. Hvis samme actor bliver ved med at fejle, åbnes et circuit, der skifter adapteren, og kørslen stopper, hvis fejlene fortsætter.
Builder · skriver spillet
agent actor · CLIData: filerSpilfilerartifacts/Builder skriver indgangsfilen, kilder og assets som artefakter.
Builder · skriver spillet
agent actor · CLIData: build-logtranscript.jsonl · append-onlysrc/transcriptBuild-hændelsen og artifact.created registreres i transskriptionen med artefaktets identitet.
Kør effekter · spawn actors
src/dispatcher/live.tsKørsel · vurdering: qa_checkUdførelses-QA · kontrollerdispatcher/qa-runner.tsEfter en build-hændelse udsender reduceren en qa_check-effekt, der bærer artefaktets og buildets identitet og acceptbetingelserne, og dispatcheren kører den.
Spilfiler
artifacts/Data: hvad der køresUdførelses-QA · kontrollerdispatcher/qa-runner.tsUdførelses-QA kører det faktiske artefakt med kode- og browserkontroller. Standardtimeouten på 120 sekunder er en konfigurationsværdi.
Udførelses-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptUanset succes eller fejl registreres resultatet som en system-hændelse qa.result. Selv hvis kontrollen kaster en undtagelse, registreres et resultat med de fejlende felter.
Verifikationens tillidsgrænse
Udførelses-QA er belæg fra faktisk at køre artefaktet; Verifier er en model, der bedømmer projiceret belæg. Reduceren afstemmer de to, før den vælger den næste vej.
Udførelses-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptUanset succes eller fejl registreres resultatet som en system-hændelse qa.result. Selv hvis kontrollen kaster en undtagelse, registreres et resultat med de fejlende felter.
transcript.jsonl · append-only
src/transcriptData: kun belægProjektion af bedømmerinputsrc/dispatcher/live.tsVerifiers input projiceres fra de seneste goal, spec, build, qa.result og artifact.created plus udvalgt research-belæg. Det indsnævrer konteksten; det beviser ikke isolation eller fravær af lækage.
Projektion af bedømmerinput
src/dispatcher/live.tsData: bedømmerinputVerifier · modellens domVerifier actorDispatcheren kører Verifier med det projicerede input.
Verifier · modellens dom
Verifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcriptVerifiers dom registreres som en judge.score-hændelse. Det er en models vurdering, ikke et faktum om udførelsen.
Tilstand → næste effekter
src/reducerKørsel · vurdering: score · QA-belægAnti-deception · scorerettelsesrc/validatorVed judge.score giver reduceren den videre til anti-deception-kontrollen sammen med QA-resultatet, Builders udbyder samt researchplanen og belægget.
Anti-deception · scorerettelse
src/validatorData: rettet domRouting af domsrc/reducerEt PASS uden en vellykket udførelse bliver FAIL, og den udførelsesrelaterede score rettes ud fra deterministisk QA. De øvrige regler er betingede rettelser, ikke et generelt bevis for sandfærdighed.
Routing af dom
src/reducerData: doneFærdig · PASS eller stopårsagsession donePASS afslutter sessionen som done. Stop på grund af budget eller circuit ender også som done, men beholder deres stopårsag, så done er ikke altid PASS.
Fejl og menneskelig styring
PARTIAL går til en person, Critical til nyt design, Important eller Minor til reparation, og stop på grund af budget eller circuit efterlader en stopårsag.
Anti-deception · scorerettelse
src/validatorData: rettet domRouting af domsrc/reducerEt PASS uden en vellykket udførelse bliver FAIL, og den udførelsesrelaterede score rettes ud fra deterministisk QA. De øvrige regler er betingede rettelser, ikke et generelt bevis for sandfærdighed.
Routing af dom
src/reducerKørsel · vurdering: PARTIAL-kontrolSpilidé · styringPARTIAL venter på, at en person kontrollerer.
Routing af dom
src/reducerKørsel · vurdering: nyt design · reparationsrc/dispatcher/live.tsBlandt FAIL og REJECT går Critical tilbage til Planner for nyt design, og Important eller Minor går til Builder som feedback til rettelse, alt kørt som dispatcher-effekter.
Routing af dom
src/reducerData: doneFærdig · PASS eller stopårsagsession donePASS afslutter sessionen som done. Stop på grund af budget eller circuit ender også som done, men beholder deres stopårsag, så done er ikke altid PASS.
Spilidé · styringKørsel · vurdering: idé · styringSkriv kommandoer til inbox
packages/studioEn spilidé på én linje og styring på naturligt sprog indtastes i Studio, som skriver kommandoer til inboxen. Studio redigerer aldrig transskriptionen direkte.
Genafspilning og observation
Genopbygning af tilstanden fra transskriptionen kører ingen effekter, og Studio læser den samme log for at vise den.
transcript.jsonl · append-only
src/transcriptData: nye hændelser · replayHændelsesløkke · replay · tailsrc/loop/coordinator.tsWriteren validerer skemaet, tildeler et ULID og et tidspunkt og skriver append-only. Ved replay køres tidligere hændelser kun gennem reduceren; deres effekter køres ikke igen.
Hændelsesløkke · replay · tail
src/loop/coordinator.tsKørsel · vurdering: reduce i rækkefølgeTilstand → næste effektersrc/reducerLive-hændelser reduceres én ad gangen fra en kø, så hver hændelses effekter holdes i rækkefølge; selve dispatchen kører asynkront.
transcript.jsonl · append-only
src/transcriptObservation · rapport: læsning · SSEVisning af hændelser · artefakterpackages/studioStudio læser transskriptionen og artefakterne og viser fremdrift, metrikker og artefakter over SSE. Det er ikke telemetri sendt til en ekstern tjeneste.
Alle forbindelser med samme tykkelse. Vælg et flow for kun at fremhæve dets vej med nummererede trin.
- Fuldt optrukket · retning for input, resultater og logs
- Stiplet · kørsel, vurdering, anmodning
- Lange prikker · observation og rapportering, adskilt fra vurdering
- Kraftig sort linje · det valgte flow; tal angiver rækkefølgen
- Boks · kode- eller tilstandsgrænse, navngivet i overskriften
- Indre chip · en komponent inden for grænsen
- Prikket boks · uden for grænsen
- Orange kontur · hvor en model træffer beslutninger
- Hændelsesløkke · reducer · dispatcher
- Logs · opsætning · artefakter
- Deterministiske kontroller · rettelse
- Studio · actors
Tegnet ud fra kodestier i offentlig commit f5e17c0. Actors er roller under kørsel, adskilt fra de kodeagenter, der blev brugt til at bygge dette repository.
- Kilden til tilstand
- Transskriptionen er kilden til tilstanden, og reduceren er en ren funktion. Kun dispatcheren udfører sideeffekter (kørsel af actors, QA, skrivning af filer), så genafspilning genopbygger tilstanden uden effekter.
- Hvad genafspilning dækker
- Genafspilning giver den samme tilstand; den gør ikke LLM-genereringer eller browser- og netværksadfærd deterministisk.
- Hvad en dom dækker
- Udførelses-QA kontrollerer kun de konfigurerede kontroller, og Verifiers score er én kanal af belæg. Ingen af dem måler al adfærd i spillet, om det er sjovt, eller brugertilfredshed.