
CRUMB
Generative Game Studio · Demo
Von einem einzeiligen Spiel-Pitch zu einem spielbaren Entwurf, mit der Arbeit der Agenten im Blick und offen für Eingriffe.
CRUMB ist ein Multi-Agent-Studio-Harness für das Prototyping von 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
Die Agenten, die ein Spiel bauen, getrennt von den Belegen, die es beurteilen.
Eine lokale Studio-Demo, die einen einzeiligen Spiel-Pitch durch Spezifikation, Build und Ausführungsprüfungen führt. Jeder Schritt landet in einem JSONL-Transkript, ein reiner Reducer bestimmt die nächsten Effekte, und nur der Dispatcher führt Seiteneffekte aus. Ausführungs-QA und das Urteil des Modells bleiben getrennt, um zwischen Bestehen, Neuentwurf, Nachbesserung und menschlicher Steuerung zu entscheiden.
Wird ein Spiel in einer Zeile vorgeschlagen, arbeiten Agenten von Claude Code, Codex und Gemini CLI über Planner → Builder → deterministische QA → Verifier zusammen, während CRUMB Studio Ereignisse, Fortschritt und Artefakte zeigt und Eingriffe in natürlicher Sprache annimmt.
Eine Demo, die aus dem öffentlichen Repository geklont und lokal ausgeführt wird.
Vom Pitch zum Spiel
Ein Pitch wird zu einer Spezifikation, einem Build und einem Lauf der Ausführungs-QA. Jeder Schritt geht durch das Transkript; Actors rufen einander nicht auf.
Spiel-Pitch · SteuerungAusführen · Urteil: Pitch · SteuerungInbox-Befehle schreiben
packages/studioEin einzeiliger Spiel-Pitch und Steuerung in natürlicher Sprache werden in Studio eingegeben, das Befehle in die Inbox schreibt. Studio bearbeitet das Transkript nie direkt.
Inbox-Befehle schreiben
packages/studioDaten: user-EreignisseEvent-Loop · Replay · tailsrc/loop/coordinator.tsDer Coordinator liest Inbox-Befehle und hält sie im Transkript als user-Ereignisse fest.
Event-Loop · Replay · tail
src/loop/coordinator.tsAusführen · Urteil: der Reihe nach reduzierenZustand → nächste Effektesrc/reducerLive-Ereignisse werden einzeln aus einer Queue reduziert, wobei die Effekte jedes Ereignisses in Reihenfolge bleiben; der Dispatch selbst läuft asynchron.
Zustand → nächste Effekte
src/reducerAusführen · Urteil: EffekteEffekte ausführen · Actors startensrc/dispatcher/live.tsDer Reducer ist eine reine Funktion, die nur Zustand und nächste Effekte bestimmt: Ein goal wählt den Planner, eine spec den Builder, ein build einen qa_check.
Actor → Harness · Modell
model-config · presetAusführen · Urteil: Actor-Konfigurationsrc/dispatcher/live.tsMit welchem Harness, Anbieter und Modell ein Actor läuft, wird in der Reihenfolge CLI-Flag > Konfiguration > Preset > Ambient > Fallback bestimmt. Ein Actor ist kein fester Anbieter.
Effekte ausführen · Actors starten
src/dispatcher/live.tsAusführen · Urteil: Planner ausführenPlanner Lead · Spezifikationagent actor · CLIDer Dispatcher führt den Planner mit projizierter Eingabe aus. Bedingte Recherche läuft über den Rechercheplan des Planners und die Übergabe von Belegen weiter, auf dieser Karte eingeklappt.
Planner Lead · Spezifikation
agent actor · CLIDaten: spectranscript.jsonl · append-onlysrc/transcriptDie Spezifikation des Planners wird zu einem Transkript-Ereignis, und der Reducer wählt daraus den Builder. Actors rufen einander nicht auf.
Effekte ausführen · Actors starten
src/dispatcher/live.tsAusführen · Urteil: Builder ausführenBuilder · schreibt das Spielagent actor · CLIDer Dispatcher führt den Builder aus. Scheitert derselbe Actor wiederholt, öffnet sich ein Circuit und tauscht den Adapter; gehen die Fehlschläge weiter, wird gestoppt.
Builder · schreibt das Spiel
agent actor · CLIDaten: DateienSpieldateienartifacts/Der Builder schreibt Einstiegsdatei, Quellen und Assets als Artefakte.
Builder · schreibt das Spiel
agent actor · CLIDaten: Build-Aufzeichnungtranscript.jsonl · append-onlysrc/transcriptDas build-Ereignis und artifact.created werden mit der Identität des Artefakts im Transkript aufgezeichnet.
Effekte ausführen · Actors starten
src/dispatcher/live.tsAusführen · Urteil: qa_checkAusführungs-QA · Prüfungendispatcher/qa-runner.tsNach einem build-Ereignis gibt der Reducer einen qa_check-Effekt mit Artefakt- und Build-Identität sowie den Abnahmebedingungen aus, und der Dispatcher führt ihn aus.
Spieldateien
artifacts/Daten: was läuftAusführungs-QA · Prüfungendispatcher/qa-runner.tsDie Ausführungs-QA führt das tatsächliche Artefakt mit Code- und Browserprüfungen aus. Das Standard-Timeout von 120 Sekunden ist ein Konfigurationswert.
Ausführungs-QA · Prüfungen
dispatcher/qa-runner.tsDaten: qa.resulttranscript.jsonl · append-onlysrc/transcriptOb Erfolg oder Fehlschlag, das Ergebnis wird als system-Ereignis qa.result aufgezeichnet. Selbst wenn die Prüfung eine Ausnahme wirft, wird ein Ergebnis mit den fehlgeschlagenen Feldern aufgezeichnet.
Vertrauensgrenze der Verifikation
Die Ausführungs-QA liefert Belege aus der tatsächlichen Ausführung des Artefakts; der Verifier ist ein Modell, das projizierte Belege beurteilt. Der Reducer gleicht beides ab, bevor er den nächsten Pfad wählt.
Ausführungs-QA · Prüfungen
dispatcher/qa-runner.tsDaten: qa.resulttranscript.jsonl · append-onlysrc/transcriptOb Erfolg oder Fehlschlag, das Ergebnis wird als system-Ereignis qa.result aufgezeichnet. Selbst wenn die Prüfung eine Ausnahme wirft, wird ein Ergebnis mit den fehlgeschlagenen Feldern aufgezeichnet.
transcript.jsonl · append-only
src/transcriptDaten: nur BelegeProjektion der Bewertungseingabesrc/dispatcher/live.tsDie Eingabe des Verifiers wird aus dem neuesten goal, spec, build, qa.result und artifact.created sowie ausgewählten Recherchebelegen projiziert. Sie verengt den Kontext; Isolation oder das Fehlen von Lecks beweist sie nicht.
Projektion der Bewertungseingabe
src/dispatcher/live.tsDaten: BewertungseingabeVerifier · ModellurteilVerifier actorDer Dispatcher führt den Verifier mit der projizierten Eingabe aus.
Verifier · Modellurteil
Verifier actorDaten: judge.scoretranscript.jsonl · append-onlysrc/transcriptDas Urteil des Verifiers wird als judge.score-Ereignis aufgezeichnet. Es ist die Einschätzung eines Modells, keine Tatsache über die Ausführung.
Zustand → nächste Effekte
src/reducerAusführen · Urteil: Score · QA-BelegeAnti-Deception · Score-Korrektursrc/validatorBei judge.score übergibt der Reducer es zusammen mit dem QA-Ergebnis, dem Anbieter des Builders sowie Rechercheplan und Belegen an die Anti-Deception-Prüfung.
Anti-Deception · Score-Korrektur
src/validatorDaten: korrigiertes UrteilUrteils-Routingsrc/reducerEin PASS ohne erfolgreiche Ausführung wird zu FAIL, und der ausführungsbezogene Score wird aus der deterministischen QA korrigiert. Die übrigen Regeln sind bedingte Korrekturen, kein allgemeiner Beweis von Wahrhaftigkeit.
Urteils-Routing
src/reducerDaten: beendetFertig · PASS oder Stoppgrundsession donePASS beendet die Session als done. Auch Budget- und Circuit-Stopps enden als done, behalten aber ihren Stoppgrund, daher ist done nicht immer PASS.
Fehlschlag und menschliche Steuerung
PARTIAL geht an einen Menschen, Critical zum Neuentwurf, Important oder Minor zur Nachbesserung, und Budget- oder Circuit-Stopps hinterlassen einen Stoppgrund.
Anti-Deception · Score-Korrektur
src/validatorDaten: korrigiertes UrteilUrteils-Routingsrc/reducerEin PASS ohne erfolgreiche Ausführung wird zu FAIL, und der ausführungsbezogene Score wird aus der deterministischen QA korrigiert. Die übrigen Regeln sind bedingte Korrekturen, kein allgemeiner Beweis von Wahrhaftigkeit.
Urteils-Routing
src/reducerAusführen · Urteil: PARTIAL-PrüfungSpiel-Pitch · SteuerungPARTIAL wartet auf die Prüfung durch einen Menschen.
Urteils-Routing
src/reducerAusführen · Urteil: Neuentwurf · Nachbesserungsrc/dispatcher/live.tsUnter FAIL und REJECT geht Critical zum Neuentwurf an den Planner zurück und Important oder Minor als Korrektur-Feedback an den Builder, alles als Dispatcher-Effekte ausgeführt.
Urteils-Routing
src/reducerDaten: beendetFertig · PASS oder Stoppgrundsession donePASS beendet die Session als done. Auch Budget- und Circuit-Stopps enden als done, behalten aber ihren Stoppgrund, daher ist done nicht immer PASS.
Spiel-Pitch · SteuerungAusführen · Urteil: Pitch · SteuerungInbox-Befehle schreiben
packages/studioEin einzeiliger Spiel-Pitch und Steuerung in natürlicher Sprache werden in Studio eingegeben, das Befehle in die Inbox schreibt. Studio bearbeitet das Transkript nie direkt.
Replay und Beobachtung
Der Neuaufbau des Zustands aus dem Transkript führt keine Effekte aus, und Studio liest dieselbe Aufzeichnung, um ihn zu zeigen.
transcript.jsonl · append-only
src/transcriptDaten: neue Ereignisse · ReplayEvent-Loop · Replay · tailsrc/loop/coordinator.tsDer Writer validiert das Schema, vergibt eine ULID und einen Zeitstempel und hängt an. Beim Replay werden vergangene Ereignisse nur reduziert; ihre Effekte laufen nicht erneut.
Event-Loop · Replay · tail
src/loop/coordinator.tsAusführen · Urteil: der Reihe nach reduzierenZustand → nächste Effektesrc/reducerLive-Ereignisse werden einzeln aus einer Queue reduziert, wobei die Effekte jedes Ereignisses in Reihenfolge bleiben; der Dispatch selbst läuft asynchron.
transcript.jsonl · append-only
src/transcriptBeobachtung · Bericht: Lesen · SSEAnsicht Ereignisse · Artefaktepackages/studioStudio liest Transkript und Artefakte und zeigt Fortschritt, Metriken und Artefakte über SSE. Es ist keine Telemetrie, die an einen entfernten Dienst gesendet wird.
Alle Verbindungen in gleicher Stärke. Wird ein Ablauf gewählt, ist nur sein Pfad hervorgehoben, mit nummerierten Schritten.
- Durchgezogen · Richtung von Eingaben, Ergebnissen und Aufzeichnungen
- Gestrichelt · Ausführen, Urteil, Anfrage
- Lang gepunktet · Beobachtung und Berichte, getrennt vom Urteil
- Dicke schwarze Linie · der gewählte Ablauf; Nummern geben die Reihenfolge an
- Kasten · Code- oder Zustandsgrenze, benannt in der Kopfzeile
- Innerer Chip · eine Komponente dieser Grenze
- Gepunkteter Kasten · außerhalb dieser Grenze
- Orange Umrandung · wo ein Modell entscheidet
- Event-Loop · reducer · dispatcher
- Aufzeichnungen · Konfiguration · Artefakte
- Deterministische Prüfungen · Korrektur
- Studio · Actors
Gezeichnet nach den Codepfaden im öffentlichen Commit f5e17c0. Actors sind Laufzeitrollen, nicht die Coding-Agenten, mit denen dieses Repository gebaut wurde.
- Quelle des Zustands
- Das Transkript ist die Quelle des Zustands, der Reducer eine reine Funktion. Nur der Dispatcher führt Seiteneffekte aus (Actors starten, QA, Dateien schreiben), daher baut ein Replay den Zustand ohne Effekte neu auf.
- Was das Replay abdeckt
- Ein Replay ergibt denselben Zustand; LLM-Generierungen oder Browser- und Netzwerkverhalten macht es nicht deterministisch.
- Was ein Urteil abdeckt
- Die Ausführungs-QA prüft nur die konfigurierten Prüfungen, und der Score des Verifiers ist ein Strang der Belege. Keines von beiden misst das gesamte Spielverhalten, den Spielspaß oder die Zufriedenheit der Nutzer.