Bara brödfiguren från CRUMB-logotypen: en leende brödskiva med en tugga tagen ur det övre högra hörnet
Tillbaka till salen

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.

Design och utveckling · byggt med AI-kodagenter

  • CLILokal demo
  • Webb-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

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.

Systemkarta · ritad utifrån kodsökvägar i offentlig commit f5e17c0
CRUMB: studiosystemEn människa föreslår och styr ett spel från Studio, och Studio skriver kommandon till en inbox. Koordinatorn skickar nya händelser från inboxen och transkriptet vidare till reducern i ordning; den rena reducern bestämmer tillstånd och nästa effekter, och bara dispatchern utför sidoeffekter. Specifikationen från Planner, bygget och artefakterna från Builder, resultatet av exekverings-QA och domen från Verifier blir alla transkripthändelser. Verifier får bara projicerade belägg, och reducern kontrollerar och korrigerar dess poäng mot QA-resultatet: PASS avslutar sessionen, PARTIAL väntar på en människa och allt annat går tillbaka för omdesign eller reparation.Spelidé · styrningEn människa som kör lokaltpackages/studioVy för händelser · artefakterSkriv kommandon till inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsHändelseloop · replay · tailsrc/reducerTillstånd → nästa effekterRoutning av domsession doneKlar · PASS eller stopporsaksrc/dispatcher/live.tsKör effekter · spawna actorsProjektion av bedömarindatamodel-config · presetActor → harness · modellagent actor · CLIPlanner Lead · specifikationBuilder · skriver speletartifacts/Spelfilerdispatcher/qa-runner.tsExekverings-QA · kontrollerVerifier actorVerifier · modellens domsrc/validatorAnti-deception · poängkorrigeringMänniskor · StudioHändelsestyrningtranskriptet är källan till tillståndetArbetande agenter · artefakterVerifiering · beslut1idé · styrning2user-händelser3reduce i ordning4effekter5actor-inställning6kör Planner7spec8kör Builder9filer10bygglogg11qa_check12vad som körs13qa.result1qa.result2bara belägg3bedömarindata4judge.score5poäng · QA-belägg6korrigerad dom7done1korrigerad dom2PARTIAL-kontroll3omdesign · reparation4done5idé · styrning1nya händelser · replay2reduce i ordning3läsning · SSE

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.

  1. Spelidé · styrningKörning · bedömning: idé · styrningSkriv kommandon till inboxpackages/studio

    En spelidé på en rad och styrning på naturligt språk matas in i Studio, som skriver kommandon till inboxen. Studio redigerar aldrig transkriptet direkt.

  2. Skriv kommandon till inboxpackages/studioData: user-händelserHändelseloop · replay · tailsrc/loop/coordinator.ts

    Koordinatorn läser kommandon från inboxen och registrerar dem i transkriptet som user-händelser.

  3. Händelseloop · replay · tailsrc/loop/coordinator.tsKörning · bedömning: reduce i ordningTillstånd → nästa effektersrc/reducer

    Livehä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.

  4. Tillstånd → nästa effektersrc/reducerKörning · bedömning: effekterKör effekter · spawna actorssrc/dispatcher/live.ts

    Reducern ä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.

  5. Actor → harness · modellmodel-config · presetKörning · bedömning: actor-inställningsrc/dispatcher/live.ts

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

  6. Kör effekter · spawna actorssrc/dispatcher/live.tsKörning · bedömning: kör PlannerPlanner Lead · specifikationagent actor · CLI

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

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

    Specifikationen från Planner blir en transkripthändelse, och reducern väljer Builder utifrån den. Actors anropar inte varandra.

  8. Kör effekter · spawna actorssrc/dispatcher/live.tsKörning · bedömning: kör BuilderBuilder · skriver speletagent actor · CLI

    Dispatchern kör Builder. Om samma actor fortsätter att misslyckas öppnas en circuit som byter adapter, och körningen stoppas om felen fortsätter.

  9. Builder · skriver speletagent actor · CLIData: filerSpelfilerartifacts/

    Builder skriver ingångsfilen, källor och assets som artefakter.

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

    Build-händelsen och artifact.created registreras i transkriptet med artefaktens identitet.

  11. Kör effekter · spawna actorssrc/dispatcher/live.tsKörning · bedömning: qa_checkExekverings-QA · kontrollerdispatcher/qa-runner.ts

    Efter en build-händelse skickar reducern en qa_check-effekt med artefaktens och byggets identitet och acceptansvillkoren, och dispatchern kör den.

  12. Spelfilerartifacts/Data: vad som körsExekverings-QA · kontrollerdispatcher/qa-runner.ts

    Exekverings-QA kör den faktiska artefakten med kod- och webbläsarkontroller. Standardtimeouten på 120 sekunder är ett konfigurationsvärde.

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

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

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

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

  2. transcript.jsonl · append-onlysrc/transcriptData: bara beläggProjektion av bedömarindatasrc/dispatcher/live.ts

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

  3. Projektion av bedömarindatasrc/dispatcher/live.tsData: bedömarindataVerifier · modellens domVerifier actor

    Dispatchern kör Verifier med den projicerade indatan.

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

    Verifiers dom registreras som en judge.score-händelse. Det är en modells bedömning, inte ett faktum om exekveringen.

  5. Tillstånd → nästa effektersrc/reducerKörning · bedömning: poäng · QA-beläggAnti-deception · poängkorrigeringsrc/validator

    Vid judge.score skickar reducern den vidare till anti-deception-kontrollen tillsammans med QA-resultatet, Builders leverantör samt researchplanen och beläggen.

  6. Anti-deception · poängkorrigeringsrc/validatorData: korrigerad domRoutning av domsrc/reducer

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

  7. Routning av domsrc/reducerData: doneKlar · PASS eller stopporsaksession done

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

  1. Anti-deception · poängkorrigeringsrc/validatorData: korrigerad domRoutning av domsrc/reducer

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

  2. Routning av domsrc/reducerKörning · bedömning: PARTIAL-kontrollSpelidé · styrning

    PARTIAL väntar på att en människa kontrollerar.

  3. Routning av domsrc/reducerKörning · bedömning: omdesign · reparationsrc/dispatcher/live.ts

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

  4. Routning av domsrc/reducerData: doneKlar · PASS eller stopporsaksession done

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

  5. Spelidé · styrningKörning · bedömning: idé · styrningSkriv kommandon till inboxpackages/studio

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

  1. transcript.jsonl · append-onlysrc/transcriptData: nya händelser · replayHändelseloop · replay · tailsrc/loop/coordinator.ts

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

  2. Händelseloop · replay · tailsrc/loop/coordinator.tsKörning · bedömning: reduce i ordningTillstånd → nästa effektersrc/reducer

    Livehä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.

  3. transcript.jsonl · append-onlysrc/transcriptObservation · rapport: läsning · SSEVy för händelser · artefakterpackages/studio

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