Bare brødfiguren fra CRUMB-logoen: en smilende brødskive med en bit tatt av øvre høyre hjørne
Tilbake til salen

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.

Design og utvikling · bygget med AI-kodeagenter

  • CLILokal demo
  • Nett-StudioLokal demo

CRUMB vocabulary

Lens
Game Pipeline
Build
Runtime Verification
Control Plane
Repair
Evidence
  1. spec
  2. build
  3. artifact
  1. qa check
  2. ac predicate
  3. verifier
  1. routing
  2. circuit breaker
  3. budget
  4. intervention
  1. transcript
  2. anti-deception
  3. 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.

Systemkart · tegnet ut fra kodestier i offentlig commit f5e17c0
CRUMB: studiosystemEn person foreslår og styrer et spill fra Studio, og Studio skriver kommandoer til en inbox. Koordinatoren sender nye hendelser fra inboxen og transkripsjonen videre til reduceren i rekkefølge; den rene reduceren bestemmer tilstand og de neste effektene, og bare dispatcheren utfører sideeffekter. Spesifikasjonen fra Planner, bygget og artefaktene fra Builder, resultatet av utførelses-QA og dommen fra Verifier blir alle transkripsjonshendelser. Verifier mottar bare projisert belegg, og reduceren kontrollerer og korrigerer scoren mot QA-resultatet: PASS avslutter sesjonen, PARTIAL venter på en person, og alt annet går tilbake til nytt design eller reparasjon.Spillidé · styringEn person som kjører lokaltpackages/studioVisning av hendelser · artefakterSkriv kommandoer til inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsHendelsesløkke · replay · tailsrc/reducerTilstand → neste effekterRuting av domsession doneFerdig · PASS eller stoppårsaksrc/dispatcher/live.tsKjør effekter · spawn actorsProjeksjon av bedømmerinputmodel-config · presetActor → harness · modellagent actor · CLIPlanner Lead · spesifikasjonBuilder · skriver spilletartifacts/Spillfilerdispatcher/qa-runner.tsUtførelses-QA · kontrollerVerifier actorVerifier · modellens domsrc/validatorAnti-deception · scorekorrigeringPersoner · StudioHendelsesstyringtranskripsjonen er kilden til tilstandenArbeidende agenter · artefakterVerifisering · beslutning1idé · styring2user-hendelser3reduce i rekkefølge4effekter5actor-oppsett6kjør Planner7spec8kjør Builder9filer10bygglogg11qa_check12hva som kjøres13qa.result1qa.result2bare belegg3bedømmerinput4judge.score5score · QA-belegg6korrigert dom7done1korrigert dom2PARTIAL-kontroll3nytt design · reparasjon4done5idé · styring1nye hendelser · replay2reduce i rekkefølge3lesing · SSE

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.

  1. Spillidé · styringKjøring · vurdering: idé · styringSkriv kommandoer til inboxpackages/studio

    En spillidé på én linje og styring på naturlig språk legges inn i Studio, som skriver kommandoer til inboxen. Studio redigerer aldri transkripsjonen direkte.

  2. Skriv kommandoer til inboxpackages/studioData: user-hendelserHendelsesløkke · replay · tailsrc/loop/coordinator.ts

    Koordinatoren leser kommandoer fra inboxen og registrerer dem i transkripsjonen som user-hendelser.

  3. Hendelsesløkke · replay · tailsrc/loop/coordinator.tsKjøring · vurdering: reduce i rekkefølgeTilstand → neste effektersrc/reducer

    Live-hendelser reduseres én om gangen fra en kø, slik at hver hendelses effekter holdes i rekkefølge; selve dispatchen kjører asynkront.

  4. Tilstand → neste effektersrc/reducerKjøring · vurdering: effekterKjør effekter · spawn actorssrc/dispatcher/live.ts

    Reduceren er en ren funksjon som bare bestemmer tilstand og de neste effektene: et goal velger Planner, en spec Builder, et build en qa_check.

  5. Actor → harness · modellmodel-config · presetKjøring · vurdering: actor-oppsettsrc/dispatcher/live.ts

    Hvilken 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.

  6. Kjør effekter · spawn actorssrc/dispatcher/live.tsKjøring · vurdering: kjør PlannerPlanner Lead · spesifikasjonagent actor · CLI

    Dispatcheren kjører Planner med projisert input. Betinget research fortsetter gjennom researchplanen til Planner og overlevering av belegg, som er foldet sammen på dette kartet.

  7. Planner Lead · spesifikasjonagent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcript

    Spesifikasjonen fra Planner blir en transkripsjonshendelse, og reduceren velger Builder ut fra den. Actors kaller ikke hverandre.

  8. Kjør effekter · spawn actorssrc/dispatcher/live.tsKjøring · vurdering: kjør BuilderBuilder · skriver spilletagent actor · CLI

    Dispatcheren kjører Builder. Hvis samme actor fortsetter å feile, åpnes en circuit som bytter adapter, og kjøringen stopper hvis feilene fortsetter.

  9. Builder · skriver spilletagent actor · CLIData: filerSpillfilerartifacts/

    Builder skriver inngangsfilen, kilder og assets som artefakter.

  10. Builder · skriver spilletagent actor · CLIData: byggloggtranscript.jsonl · append-onlysrc/transcript

    Build-hendelsen og artifact.created registreres i transkripsjonen med artefaktets identitet.

  11. Kjør effekter · spawn actorssrc/dispatcher/live.tsKjøring · vurdering: qa_checkUtførelses-QA · kontrollerdispatcher/qa-runner.ts

    Etter en build-hendelse sender reduceren ut en qa_check-effekt med identiteten til artefaktet og bygget og akseptbetingelsene, og dispatcheren kjører den.

  12. Spillfilerartifacts/Data: hva som kjøresUtførelses-QA · kontrollerdispatcher/qa-runner.ts

    Utførelses-QA kjører det faktiske artefaktet med kode- og nettleserkontroller. Standard tidsavbrudd på 120 sekunder er en konfigurasjonsverdi.

  13. Utførelses-QA · kontrollerdispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Enten 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.

  1. Utførelses-QA · kontrollerdispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Enten 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.

  2. transcript.jsonl · append-onlysrc/transcriptData: bare beleggProjeksjon av bedømmerinputsrc/dispatcher/live.ts

    Inputen 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.

  3. Projeksjon av bedømmerinputsrc/dispatcher/live.tsData: bedømmerinputVerifier · modellens domVerifier actor

    Dispatcheren kjører Verifier med den projiserte inputen.

  4. Verifier · modellens domVerifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Dommen fra Verifier registreres som en judge.score-hendelse. Det er en modells vurdering, ikke et faktum om utførelsen.

  5. Tilstand → neste effektersrc/reducerKjøring · vurdering: score · QA-beleggAnti-deception · scorekorrigeringsrc/validator

    Ved judge.score sender reduceren den videre til anti-deception-kontrollen sammen med QA-resultatet, leverandøren til Builder og researchplanen og belegget.

  6. Anti-deception · scorekorrigeringsrc/validatorData: korrigert domRuting av domsrc/reducer

    Et 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.

  7. Ruting av domsrc/reducerData: doneFerdig · PASS eller stoppårsaksession done

    PASS 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.

  1. Anti-deception · scorekorrigeringsrc/validatorData: korrigert domRuting av domsrc/reducer

    Et 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.

  2. Ruting av domsrc/reducerKjøring · vurdering: PARTIAL-kontrollSpillidé · styring

    PARTIAL venter på at en person kontrollerer.

  3. Ruting av domsrc/reducerKjøring · vurdering: nytt design · reparasjonsrc/dispatcher/live.ts

    Blant 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.

  4. Ruting av domsrc/reducerData: doneFerdig · PASS eller stoppårsaksession done

    PASS 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.

  5. Spillidé · styringKjøring · vurdering: idé · styringSkriv kommandoer til inboxpackages/studio

    En 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.

  1. transcript.jsonl · append-onlysrc/transcriptData: nye hendelser · replayHendelsesløkke · replay · tailsrc/loop/coordinator.ts

    Writeren 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.

  2. Hendelsesløkke · replay · tailsrc/loop/coordinator.tsKjøring · vurdering: reduce i rekkefølgeTilstand → neste effektersrc/reducer

    Live-hendelser reduseres én om gangen fra en kø, slik at hver hendelses effekter holdes i rekkefølge; selve dispatchen kjører asynkront.

  3. transcript.jsonl · append-onlysrc/transcriptObservasjon · rapport: lesing · SSEVisning av hendelser · artefakterpackages/studio

    Studio 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.