
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.
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
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.
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.
Spelpitch · bijsturingUitvoeren · oordeel: pitchen · bijsturenInboxcommando’s schrijven
packages/studioEen 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.
Inboxcommando’s schrijven
packages/studioGegevens: user-eventsEventloop · replay · tailsrc/loop/coordinator.tsDe coordinator leest inboxcommando’s en legt ze in het transcript vast als user-events.
Eventloop · replay · tail
src/loop/coordinator.tsUitvoeren · oordeel: op volgorde reducerenToestand → volgende effectensrc/reducerLive-events worden één voor één uit een queue gereduceerd, waarbij de effecten van elk event op volgorde blijven; de dispatch zelf draait asynchroon.
Toestand → volgende effecten
src/reducerUitvoeren · oordeel: effectenEffecten uitvoeren · actors startensrc/dispatcher/live.tsDe 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.
Actor → harness · model
model-config · presetUitvoeren · oordeel: actorconfiguratiesrc/dispatcher/live.tsMet 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.
Effecten uitvoeren · actors starten
src/dispatcher/live.tsUitvoeren · oordeel: Planner draaienPlanner Lead · specagent actor · CLIDe 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.
Planner Lead · spec
agent actor · CLIGegevens: spectranscript.jsonl · append-onlysrc/transcriptDe spec van de Planner wordt een transcript-event, en de reducer kiest op basis daarvan de Builder. Actors roepen elkaar niet aan.
Effecten uitvoeren · actors starten
src/dispatcher/live.tsUitvoeren · oordeel: Builder draaienBuilder · schrijft het spelagent actor · CLIDe dispatcher draait de Builder. Blijft dezelfde actor falen, dan opent een circuit en wisselt de adapter, en bij aanhoudende fouten stopt het.
Builder · schrijft het spel
agent actor · CLIGegevens: bestandenSpelbestandenartifacts/De Builder schrijft het entrybestand, de bronnen en de assets als artefacten.
Builder · schrijft het spel
agent actor · CLIGegevens: buildvastleggingtranscript.jsonl · append-onlysrc/transcriptHet build-event en artifact.created worden met de identiteit van het artefact in het transcript vastgelegd.
Effecten uitvoeren · actors starten
src/dispatcher/live.tsUitvoeren · oordeel: qa_checkUitvoerings-QA · controlesdispatcher/qa-runner.tsNa 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.
Spelbestanden
artifacts/Gegevens: wat draaitUitvoerings-QA · controlesdispatcher/qa-runner.tsUitvoerings-QA draait het echte artefact met code- en browsercontroles. De standaard-time-out van 120 seconden is een configuratiewaarde.
Uitvoerings-QA · controles
dispatcher/qa-runner.tsGegevens: qa.resulttranscript.jsonl · append-onlysrc/transcriptSucces 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.
Uitvoerings-QA · controles
dispatcher/qa-runner.tsGegevens: qa.resulttranscript.jsonl · append-onlysrc/transcriptSucces 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.
transcript.jsonl · append-only
src/transcriptGegevens: alleen bewijsProjectie van de beoordelingsinputsrc/dispatcher/live.tsDe 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.
Projectie van de beoordelingsinput
src/dispatcher/live.tsGegevens: beoordelingsinputVerifier · modeloordeelVerifier actorDe dispatcher draait de Verifier met de geprojecteerde input.
Verifier · modeloordeel
Verifier actorGegevens: judge.scoretranscript.jsonl · append-onlysrc/transcriptHet oordeel van de Verifier wordt vastgelegd als judge.score-event. Het is het oordeel van een model, geen feit over de uitvoering.
Toestand → volgende effecten
src/reducerUitvoeren · oordeel: score · QA-bewijsAnti-deception · scorecorrectiesrc/validatorBij 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.
Anti-deception · scorecorrectie
src/validatorGegevens: gecorrigeerd oordeelRoutering van het oordeelsrc/reducerEen 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.
Routering van het oordeel
src/reducerGegevens: klaarKlaar · PASS of stopredensession donePASS 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.
Anti-deception · scorecorrectie
src/validatorGegevens: gecorrigeerd oordeelRoutering van het oordeelsrc/reducerEen 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.
Routering van het oordeel
src/reducerUitvoeren · oordeel: PARTIAL-controleSpelpitch · bijsturingPARTIAL wacht op controle door een mens.
Routering van het oordeel
src/reducerUitvoeren · oordeel: herontwerp · herstelsrc/dispatcher/live.tsBinnen 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.
Routering van het oordeel
src/reducerGegevens: klaarKlaar · PASS of stopredensession donePASS beëindigt de sessie als done. Ook budget- en circuitstops eindigen als done maar houden hun stopreden, dus done is niet altijd PASS.
Spelpitch · bijsturingUitvoeren · oordeel: pitchen · bijsturenInboxcommando’s schrijven
packages/studioEen 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.
transcript.jsonl · append-only
src/transcriptGegevens: nieuwe events · replayEventloop · replay · tailsrc/loop/coordinator.tsDe 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.
Eventloop · replay · tail
src/loop/coordinator.tsUitvoeren · oordeel: op volgorde reducerenToestand → volgende effectensrc/reducerLive-events worden één voor één uit een queue gereduceerd, waarbij de effecten van elk event op volgorde blijven; de dispatch zelf draait asynchroon.
transcript.jsonl · append-only
src/transcriptObservatie · rapport: lezen · SSEWeergave events · artefactenpackages/studioStudio 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.