
CRUMB
Generative Game Studio · Demo
Fra en spillidé på én linje til et spillbart utkast, med agentenes arbeid synlig og åpent for inngrep.
CRUMB er en studio-harness med flere agenter for prototyper av casual-spill.
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
Agentene som bygger et spill, holdes atskilt fra belegget som bedømmer det.
En lokal studio-demo som fører en spillidé på én linje gjennom spesifikasjon, bygg og utførelseskontroller. Hvert steg havner i en JSONL-transkripsjon, en ren reducer bestemmer de neste effektene, og bare dispatcheren utfører sideeffekter. Utførelses-QA og modellens dom holdes atskilt for å avgjøre mellom bestått, nytt design, reparasjon og menneskelig styring.
Et spill beskrives på én linje, og agenter i Claude Code, Codex og Gemini CLI samarbeider gjennom Planner → Builder → deterministisk QA → Verifier, mens CRUMB Studio viser hendelser, framdrift og artefakter og tar imot inngrep på naturlig språk.
En demo som klones fra det offentlige repositoryet og kjøres lokalt.
Fra idé til spill
En idé blir til en spesifikasjon, et bygg og en kjøring av utførelses-QA. Hvert steg går gjennom transkripsjonen; actors kaller ikke hverandre.
Spillidé · styringKjøring · vurdering: idé · styringSkriv kommandoer til inbox
packages/studioEn spillidé på én linje og styring på naturlig språk legges inn i Studio, som skriver kommandoer til inboxen. Studio redigerer aldri transkripsjonen direkte.
Skriv kommandoer til inbox
packages/studioData: user-hendelserHendelsesløkke · replay · tailsrc/loop/coordinator.tsKoordinatoren leser kommandoer fra inboxen og registrerer dem i transkripsjonen som user-hendelser.
Hendelsesløkke · replay · tail
src/loop/coordinator.tsKjøring · vurdering: reduce i rekkefølgeTilstand → neste effektersrc/reducerLive-hendelser reduseres én om gangen fra en kø, slik at hver hendelses effekter holdes i rekkefølge; selve dispatchen kjører asynkront.
Tilstand → neste effekter
src/reducerKjøring · vurdering: effekterKjør effekter · spawn actorssrc/dispatcher/live.tsReduceren er en ren funksjon som bare bestemmer tilstand og de neste effektene: et goal velger Planner, en spec Builder, et build en qa_check.
Actor → harness · modell
model-config · presetKjøring · vurdering: actor-oppsettsrc/dispatcher/live.tsHvilken harness, leverandør og modell som kjører en actor, avgjøres i rekkefølgen CLI-flagg > config > preset > ambient > fallback. En actor er ikke en fast leverandør.
Kjør effekter · spawn actors
src/dispatcher/live.tsKjøring · vurdering: kjør PlannerPlanner Lead · spesifikasjonagent actor · CLIDispatcheren kjører Planner med projisert input. Betinget research fortsetter gjennom researchplanen til Planner og overlevering av belegg, som er foldet sammen på dette kartet.
Planner Lead · spesifikasjon
agent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcriptSpesifikasjonen fra Planner blir en transkripsjonshendelse, og reduceren velger Builder ut fra den. Actors kaller ikke hverandre.
Kjør effekter · spawn actors
src/dispatcher/live.tsKjøring · vurdering: kjør BuilderBuilder · skriver spilletagent actor · CLIDispatcheren kjører Builder. Hvis samme actor fortsetter å feile, åpnes en circuit som bytter adapter, og kjøringen stopper hvis feilene fortsetter.
Builder · skriver spillet
agent actor · CLIData: filerSpillfilerartifacts/Builder skriver inngangsfilen, kilder og assets som artefakter.
Builder · skriver spillet
agent actor · CLIData: byggloggtranscript.jsonl · append-onlysrc/transcriptBuild-hendelsen og artifact.created registreres i transkripsjonen med artefaktets identitet.
Kjør effekter · spawn actors
src/dispatcher/live.tsKjøring · vurdering: qa_checkUtførelses-QA · kontrollerdispatcher/qa-runner.tsEtter en build-hendelse sender reduceren ut en qa_check-effekt med identiteten til artefaktet og bygget og akseptbetingelsene, og dispatcheren kjører den.
Spillfiler
artifacts/Data: hva som kjøresUtførelses-QA · kontrollerdispatcher/qa-runner.tsUtførelses-QA kjører det faktiske artefaktet med kode- og nettleserkontroller. Standard tidsavbrudd på 120 sekunder er en konfigurasjonsverdi.
Utførelses-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptEnten det lykkes eller feiler, registreres resultatet som en system-hendelse qa.result. Selv om kontrollen kaster et unntak, registreres et resultat med de feilende feltene.
Verifiseringens tillitsgrense
Utførelses-QA er belegg fra å faktisk kjøre artefaktet; Verifier er en modell som bedømmer projisert belegg. Reduceren avstemmer de to før den velger neste vei.
Utførelses-QA · kontroller
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptEnten det lykkes eller feiler, registreres resultatet som en system-hendelse qa.result. Selv om kontrollen kaster et unntak, registreres et resultat med de feilende feltene.
transcript.jsonl · append-only
src/transcriptData: bare beleggProjeksjon av bedømmerinputsrc/dispatcher/live.tsInputen til Verifier projiseres fra siste goal, spec, build, qa.result og artifact.created pluss utvalgt belegg fra research. Det snevrer inn konteksten; det beviser ikke isolasjon eller fravær av lekkasje.
Projeksjon av bedømmerinput
src/dispatcher/live.tsData: bedømmerinputVerifier · modellens domVerifier actorDispatcheren kjører Verifier med den projiserte inputen.
Verifier · modellens dom
Verifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcriptDommen fra Verifier registreres som en judge.score-hendelse. Det er en modells vurdering, ikke et faktum om utførelsen.
Tilstand → neste effekter
src/reducerKjøring · vurdering: score · QA-beleggAnti-deception · scorekorrigeringsrc/validatorVed judge.score sender reduceren den videre til anti-deception-kontrollen sammen med QA-resultatet, leverandøren til Builder og researchplanen og belegget.
Anti-deception · scorekorrigering
src/validatorData: korrigert domRuting av domsrc/reducerEt PASS uten en vellykket utførelse blir FAIL, og den utførelsesrelaterte scoren korrigeres ut fra deterministisk QA. De øvrige reglene er betingede korreksjoner, ikke et generelt bevis på sannferdighet.
Ruting av dom
src/reducerData: doneFerdig · PASS eller stoppårsaksession donePASS avslutter sesjonen som done. Stopp på grunn av budsjett eller circuit ender også som done, men beholder stoppårsaken, så done er ikke alltid PASS.
Feil og menneskelig styring
PARTIAL går til en person, Critical til nytt design, Important eller Minor til reparasjon, og stopp på grunn av budsjett eller circuit etterlater en stoppårsak.
Anti-deception · scorekorrigering
src/validatorData: korrigert domRuting av domsrc/reducerEt PASS uten en vellykket utførelse blir FAIL, og den utførelsesrelaterte scoren korrigeres ut fra deterministisk QA. De øvrige reglene er betingede korreksjoner, ikke et generelt bevis på sannferdighet.
Ruting av dom
src/reducerKjøring · vurdering: PARTIAL-kontrollSpillidé · styringPARTIAL venter på at en person kontrollerer.
Ruting av dom
src/reducerKjøring · vurdering: nytt design · reparasjonsrc/dispatcher/live.tsBlant FAIL og REJECT går Critical tilbake til Planner for nytt design, og Important eller Minor til Builder som tilbakemelding for retting, alt kjørt som dispatcher-effekter.
Ruting av dom
src/reducerData: doneFerdig · PASS eller stoppårsaksession donePASS avslutter sesjonen som done. Stopp på grunn av budsjett eller circuit ender også som done, men beholder stoppårsaken, så done er ikke alltid PASS.
Spillidé · styringKjøring · vurdering: idé · styringSkriv kommandoer til inbox
packages/studioEn spillidé på én linje og styring på naturlig språk legges inn i Studio, som skriver kommandoer til inboxen. Studio redigerer aldri transkripsjonen direkte.
Avspilling og observasjon
Gjenoppbygging av tilstanden fra transkripsjonen kjører ingen effekter, og Studio leser den samme loggen for å vise den.
transcript.jsonl · append-only
src/transcriptData: nye hendelser · replayHendelsesløkke · replay · tailsrc/loop/coordinator.tsWriteren validerer skjemaet, tildeler en ULID og et tidspunkt og skriver append-only. Ved replay kjøres tidligere hendelser bare gjennom reduceren; effektene deres kjøres ikke på nytt.
Hendelsesløkke · replay · tail
src/loop/coordinator.tsKjøring · vurdering: reduce i rekkefølgeTilstand → neste effektersrc/reducerLive-hendelser reduseres én om gangen fra en kø, slik at hver hendelses effekter holdes i rekkefølge; selve dispatchen kjører asynkront.
transcript.jsonl · append-only
src/transcriptObservasjon · rapport: lesing · SSEVisning av hendelser · artefakterpackages/studioStudio leser transkripsjonen og artefaktene og viser framdrift, metrikker og artefakter over SSE. Det er ikke telemetri sendt til en ekstern tjeneste.
Alle forbindelser med samme tykkelse. Velg en flyt for å fremheve bare dens vei, med nummererte steg.
- Heltrukket · retning for input, resultater og logger
- Stiplet · kjøring, vurdering, forespørsel
- Lange prikker · observasjon og rapportering, atskilt fra vurdering
- Kraftig svart linje · den valgte flyten; tallene angir rekkefølgen
- Boks · kode- eller tilstandsgrense, navngitt i overskriften
- Indre chip · en komponent innenfor grensen
- Prikket boks · utenfor grensen
- Oransje kontur · der en modell tar beslutninger
- Hendelsesløkke · reducer · dispatcher
- Logger · oppsett · artefakter
- Deterministiske kontroller · korreksjon
- Studio · actors
Tegnet ut fra kodestier i offentlig commit f5e17c0. Actors er roller under kjøring, atskilt fra kodeagentene som ble brukt til å bygge dette repositoryet.
- Kilden til tilstand
- Transkripsjonen er kilden til tilstanden, og reduceren er en ren funksjon. Bare dispatcheren utfører sideeffekter (kjøring av actors, QA, skriving av filer), så avspilling gjenoppbygger tilstanden uten effekter.
- Hva avspilling dekker
- Avspilling gir den samme tilstanden; den gjør ikke LLM-genereringer eller nettleser- og nettverksatferd deterministisk.
- Hva en dom dekker
- Utførelses-QA sjekker bare de konfigurerte kontrollene, og scoren fra Verifier er én kanal for belegg. Ingen av dem måler all oppførsel i spillet, om det er morsomt, eller brukertilfredshet.