Alleen het broodpersonage uit het CRUMB-logo: een lachende boterham met een hap uit de rechterbovenhoek
Terug naar de zaal

CRUMB

Generative Game Studio · Demo

Van een spelpitch van één regel naar een speelbaar concept, met het werk van de agents in beeld en open voor ingrijpen.

CRUMB is een multi-agent studioharness voor het prototypen van casual games.

Ontwerp en ontwikkeling · gebouwd met AI-codeeragents

  • CLILokale demo
  • WebstudioLokale 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

De agents die een spel bouwen, gescheiden van het bewijs dat het beoordeelt.

Een lokale studiodemo die een spelpitch van één regel door spec, build en uitvoeringscontroles leidt. Elke stap komt in een JSONL-transcript terecht, een pure reducer bepaalt de volgende effecten, en alleen de dispatcher voert neveneffecten uit. Uitvoerings-QA en het oordeel van het model blijven gescheiden om te kiezen tussen slagen, herontwerp, herstel en menselijke bijsturing.

Een spel wordt in één regel voorgesteld, waarna agents van Claude Code, Codex en Gemini CLI samenwerken via Planner → Builder → deterministische QA → Verifier, terwijl CRUMB Studio de events, voortgang en artefacten toont en ingrijpen in natuurlijke taal accepteert.

Een demo om uit de publieke repository te klonen en lokaal te draaien.

Systeemkaart · getekend op basis van de codepaden in publieke commit f5e17c0
CRUMB-studiosysteemEen mens pitcht en stuurt een spel vanuit Studio, en Studio schrijft commando’s naar een inbox. De coordinator geeft nieuwe events uit de inbox en het transcript op volgorde door aan de reducer; de pure reducer bepaalt de toestand en de volgende effecten, en alleen de dispatcher voert neveneffecten uit. De spec van de Planner, de build en artefacten van de Builder, het resultaat van de uitvoerings-QA en het oordeel van de Verifier worden allemaal transcript-events. De Verifier krijgt alleen geprojecteerd bewijs, en de reducer controleert en corrigeert de score aan de hand van het QA-resultaat: PASS beëindigt de sessie, PARTIAL wacht op een mens, en al het andere gaat terug voor herontwerp of herstel.Spelpitch · bijsturingEen mens, lokaalpackages/studioWeergave events · artefactenInboxcommando’s schrijvensrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsEventloop · replay · tailsrc/reducerToestand → volgende effectenRoutering van het oordeelsession doneKlaar · PASS of stopredensrc/dispatcher/live.tsEffecten uitvoeren · actors startenProjectie van de beoordelingsinputmodel-config · presetActor → harness · modelagent actor · CLIPlanner Lead · specBuilder · schrijft het spelartifacts/Spelbestandendispatcher/qa-runner.tsUitvoerings-QA · controlesVerifier actorVerifier · modeloordeelsrc/validatorAnti-deception · scorecorrectieMensen · StudioEventbesturingtranscript is de bron van de toestandWerkende agents · artefactenVerificatie · beslissing1pitchen · bijsturen2user-events3op volgorde reduceren4effecten5actorconfiguratie6Planner draaien7spec8Builder draaien9 bestanden · Builder · schrijft het spel → Spelbestanden910buildvastlegging11qa_check12wat draait13qa.result1qa.result2alleen bewijs3beoordelingsinput4judge.score5score · QA-bewijs6gecorrigeerd oordeel7klaar1gecorrigeerd oordeel2PARTIAL-controle3herontwerp · herstel4klaar5pitchen · bijsturen1nieuwe events · replay2op volgorde reduceren3lezen · SSE

Van pitch tot spel

Een pitch wordt een spec, een build en een run van uitvoerings-QA. Elke stap gaat door het transcript; actors roepen elkaar niet aan.

  1. Spelpitch · bijsturingUitvoeren · oordeel: pitchen · bijsturenInboxcommando’s schrijvenpackages/studio

    Een spelpitch van één regel en bijsturing in natuurlijke taal worden ingevoerd in Studio, dat commando’s naar de inbox schrijft. Studio bewerkt het transcript nooit rechtstreeks.

  2. Inboxcommando’s schrijvenpackages/studioGegevens: user-eventsEventloop · replay · tailsrc/loop/coordinator.ts

    De coordinator leest inboxcommando’s en legt ze in het transcript vast als user-events.

  3. Eventloop · replay · tailsrc/loop/coordinator.tsUitvoeren · oordeel: op volgorde reducerenToestand → volgende effectensrc/reducer

    Live-events worden één voor één uit een queue gereduceerd, waarbij de effecten van elk event op volgorde blijven; de dispatch zelf draait asynchroon.

  4. Toestand → volgende effectensrc/reducerUitvoeren · oordeel: effectenEffecten uitvoeren · actors startensrc/dispatcher/live.ts

    De reducer is een pure functie die alleen de toestand en de volgende effecten bepaalt: een goal kiest de Planner, een spec de Builder, een build een qa_check.

  5. Actor → harness · modelmodel-config · presetUitvoeren · oordeel: actorconfiguratiesrc/dispatcher/live.ts

    Met welke harness, provider en welk model een actor draait, wordt bepaald in de volgorde CLI-flag > config > preset > ambient > fallback. Een actor is geen vaste provider.

  6. Effecten uitvoeren · actors startensrc/dispatcher/live.tsUitvoeren · oordeel: Planner draaienPlanner Lead · specagent actor · CLI

    De dispatcher draait de Planner met geprojecteerde input. Voorwaardelijk onderzoek loopt verder via het onderzoeksplan van de Planner en de overdracht van bewijs, op deze kaart ingeklapt.

  7. Planner Lead · specagent actor · CLIGegevens: spectranscript.jsonl · append-onlysrc/transcript

    De spec van de Planner wordt een transcript-event, en de reducer kiest op basis daarvan de Builder. Actors roepen elkaar niet aan.

  8. Effecten uitvoeren · actors startensrc/dispatcher/live.tsUitvoeren · oordeel: Builder draaienBuilder · schrijft het spelagent actor · CLI

    De dispatcher draait de Builder. Blijft dezelfde actor falen, dan opent een circuit en wisselt de adapter, en bij aanhoudende fouten stopt het.

  9. Builder · schrijft het spelagent actor · CLIGegevens: bestandenSpelbestandenartifacts/

    De Builder schrijft het entrybestand, de bronnen en de assets als artefacten.

  10. Builder · schrijft het spelagent actor · CLIGegevens: buildvastleggingtranscript.jsonl · append-onlysrc/transcript

    Het build-event en artifact.created worden met de identiteit van het artefact in het transcript vastgelegd.

  11. Effecten uitvoeren · actors startensrc/dispatcher/live.tsUitvoeren · oordeel: qa_checkUitvoerings-QA · controlesdispatcher/qa-runner.ts

    Na een build-event geeft de reducer een qa_check-effect uit met de identiteit van artefact en build en de acceptatievoorwaarden, en de dispatcher voert het uit.

  12. Spelbestandenartifacts/Gegevens: wat draaitUitvoerings-QA · controlesdispatcher/qa-runner.ts

    Uitvoerings-QA draait het echte artefact met code- en browsercontroles. De standaard-time-out van 120 seconden is een configuratiewaarde.

  13. Uitvoerings-QA · controlesdispatcher/qa-runner.tsGegevens: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Succes of mislukking, het resultaat wordt vastgelegd als system-event qa.result. Ook als de controle een exceptie gooit, wordt een resultaat met de mislukte velden vastgelegd.

Vertrouwensgrens van de verificatie

Uitvoerings-QA is bewijs uit het daadwerkelijk draaien van het artefact; de Verifier is een model dat geprojecteerd bewijs beoordeelt. De reducer brengt beide in overeenstemming voordat hij het volgende pad kiest.

  1. Uitvoerings-QA · controlesdispatcher/qa-runner.tsGegevens: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Succes of mislukking, het resultaat wordt vastgelegd als system-event qa.result. Ook als de controle een exceptie gooit, wordt een resultaat met de mislukte velden vastgelegd.

  2. transcript.jsonl · append-onlysrc/transcriptGegevens: alleen bewijsProjectie van de beoordelingsinputsrc/dispatcher/live.ts

    De input van de Verifier wordt geprojecteerd uit de laatste goal, spec, build, qa.result en artifact.created plus geselecteerd onderzoeksbewijs. Het beperkt de context; het bewijst geen isolatie of afwezigheid van lekken.

  3. Projectie van de beoordelingsinputsrc/dispatcher/live.tsGegevens: beoordelingsinputVerifier · modeloordeelVerifier actor

    De dispatcher draait de Verifier met de geprojecteerde input.

  4. Verifier · modeloordeelVerifier actorGegevens: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Het oordeel van de Verifier wordt vastgelegd als judge.score-event. Het is het oordeel van een model, geen feit over de uitvoering.

  5. Toestand → volgende effectensrc/reducerUitvoeren · oordeel: score · QA-bewijsAnti-deception · scorecorrectiesrc/validator

    Bij judge.score geeft de reducer het door aan de anti-deception-controle, samen met het QA-resultaat, de provider van de Builder en het onderzoeksplan en bewijs.

  6. Anti-deception · scorecorrectiesrc/validatorGegevens: gecorrigeerd oordeelRoutering van het oordeelsrc/reducer

    Een PASS zonder geslaagde uitvoering wordt FAIL, en de uitvoeringsgerelateerde score wordt gecorrigeerd op basis van deterministische QA. De overige regels zijn voorwaardelijke correcties, geen algemeen bewijs van waarheidsgetrouwheid.

  7. Routering van het oordeelsrc/reducerGegevens: klaarKlaar · PASS of stopredensession done

    PASS beëindigt de sessie als done. Ook budget- en circuitstops eindigen als done maar houden hun stopreden, dus done is niet altijd PASS.

Mislukking en menselijke bijsturing

PARTIAL gaat naar een mens, Critical naar herontwerp, Important of Minor naar herstel, en budget- of circuitstops laten een stopreden achter.

  1. Anti-deception · scorecorrectiesrc/validatorGegevens: gecorrigeerd oordeelRoutering van het oordeelsrc/reducer

    Een PASS zonder geslaagde uitvoering wordt FAIL, en de uitvoeringsgerelateerde score wordt gecorrigeerd op basis van deterministische QA. De overige regels zijn voorwaardelijke correcties, geen algemeen bewijs van waarheidsgetrouwheid.

  2. Routering van het oordeelsrc/reducerUitvoeren · oordeel: PARTIAL-controleSpelpitch · bijsturing

    PARTIAL wacht op controle door een mens.

  3. Routering van het oordeelsrc/reducerUitvoeren · oordeel: herontwerp · herstelsrc/dispatcher/live.ts

    Binnen FAIL en REJECT gaat Critical terug naar de Planner voor herontwerp en Important of Minor naar de Builder als correctiefeedback, allemaal uitgevoerd als dispatcher-effecten.

  4. Routering van het oordeelsrc/reducerGegevens: klaarKlaar · PASS of stopredensession done

    PASS beëindigt de sessie als done. Ook budget- en circuitstops eindigen als done maar houden hun stopreden, dus done is niet altijd PASS.

  5. Spelpitch · bijsturingUitvoeren · oordeel: pitchen · bijsturenInboxcommando’s schrijvenpackages/studio

    Een spelpitch van één regel en bijsturing in natuurlijke taal worden ingevoerd in Studio, dat commando’s naar de inbox schrijft. Studio bewerkt het transcript nooit rechtstreeks.

Replay en observatie

Het opnieuw opbouwen van de toestand uit het transcript voert geen effecten uit, en Studio leest dezelfde vastlegging om die te tonen.

  1. transcript.jsonl · append-onlysrc/transcriptGegevens: nieuwe events · replayEventloop · replay · tailsrc/loop/coordinator.ts

    De writer valideert het schema, kent een ULID en tijd toe en voegt toe. Bij replay worden eerdere events alleen gereduceerd; hun effecten draaien niet opnieuw.

  2. Eventloop · replay · tailsrc/loop/coordinator.tsUitvoeren · oordeel: op volgorde reducerenToestand → volgende effectensrc/reducer

    Live-events worden één voor één uit een queue gereduceerd, waarbij de effecten van elk event op volgorde blijven; de dispatch zelf draait asynchroon.

  3. transcript.jsonl · append-onlysrc/transcriptObservatie · rapport: lezen · SSEWeergave events · artefactenpackages/studio

    Studio leest het transcript en de artefacten en toont voortgang, metrics en artefacten via SSE. Het is geen telemetrie die naar een externe dienst wordt gestuurd.

Alle verbindingen even zwaar. Kies een stroom om alleen het pad daarvan te markeren, met genummerde stappen.

  • Doorgetrokken · richting van input, resultaten en vastleggingen
  • Gestreept · uitvoeren, oordeel, verzoek
  • Lange punten · observatie en rapportage, los van het oordeel
  • Dikke zwarte lijn · de gekozen stroom; nummers geven de volgorde
  • Vak · code- of toestandsgrens, benoemd in de kop
  • Binnenchip · een component binnen die grens
  • Gestippeld vak · buiten die grens
  • Oranje omlijning · waar een model beslist
  • Eventloop · reducer · dispatcher
  • Logs · configuratie · artefacten
  • Deterministische controles · correctie
  • Studio · actors

Getekend op basis van de codepaden in publieke commit f5e17c0. Actors zijn runtimerollen, los van de codeeragents waarmee deze repository is gebouwd.

Bron van de toestand
Het transcript is de bron van de toestand en de reducer is een pure functie. Alleen de dispatcher voert neveneffecten uit (actors draaien, QA, bestanden schrijven), dus replay bouwt de toestand opnieuw op zonder effecten.
Wat replay dekt
Replay levert dezelfde toestand op; het maakt LLM-generaties of browser- en netwerkgedrag niet deterministisch.
Wat een oordeel dekt
Uitvoerings-QA controleert alleen de geconfigureerde controles, en de score van de Verifier is één spoor van bewijs. Geen van beide meet al het spelgedrag, plezier of gebruikerstevredenheid.