
CRUMB
Generative Game Studio · Demo
Od jednozdaniowego pomysłu na grę do grywalnego szkicu, z pracą agentów na widoku i otwartą na interwencję.
CRUMB to wieloagentowy harness studyjny do prototypowania gier casualowych.
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
Agenci, którzy budują grę, oddzieleni od dowodów, które ją oceniają.
Lokalne demo studia, które prowadzi jednozdaniowy pomysł na grę przez specyfikację, build i kontrole wykonania. Każdy krok trafia do transkryptu JSONL, czysty reducer decyduje o kolejnych efektach, a efekty uboczne wykonuje tylko dispatcher. QA wykonania i werdykt modelu są oddzielone, by rozstrzygnąć między zaliczeniem, przeprojektowaniem, naprawą a sterowaniem przez człowieka.
Wystarczy opisać grę jednym zdaniem, a agenci Claude Code, Codex i Gemini CLI współpracują w sekwencji Planner → Builder → deterministyczne QA → Verifier, podczas gdy CRUMB Studio pokazuje zdarzenia, postęp i artefakty oraz przyjmuje interwencje w języku naturalnym.
Demo, które klonuje się z publicznego repozytorium i uruchamia lokalnie.
Od pomysłu do gry
Pomysł staje się specyfikacją, buildem i przebiegiem QA wykonania. Każdy krok przechodzi przez transkrypt; aktorzy nie wywołują się nawzajem.
Pomysł na grę · sterowanieUruchomienie · rozstrzygnięcie: pomysł · sterowanieZapis poleceń do inboxa
packages/studioJednozdaniowy pomysł na grę i sterowanie w języku naturalnym wprowadza się w Studio, które zapisuje polecenia do inboxa. Studio nigdy nie edytuje transkryptu bezpośrednio.
Zapis poleceń do inboxa
packages/studioDane: zdarzenia userPętla zdarzeń · replay · tailsrc/loop/coordinator.tsKoordynator odczytuje polecenia z inboxa i zapisuje je w transkrypcie jako zdarzenia user.
Pętla zdarzeń · replay · tail
src/loop/coordinator.tsUruchomienie · rozstrzygnięcie: redukcja po koleiStan → kolejne efektysrc/reducerZdarzenia na żywo są redukowane pojedynczo z kolejki, z zachowaniem kolejności efektów każdego zdarzenia; sam dispatch działa asynchronicznie.
Stan → kolejne efekty
src/reducerUruchomienie · rozstrzygnięcie: efektyWykonanie efektów · uruchamianie aktorówsrc/dispatcher/live.tsReducer to czysta funkcja, która decyduje tylko o stanie i kolejnych efektach: cel wybiera Plannera, specyfikacja Buildera, build qa_check.
Aktor → harness · model
model-config · presetUruchomienie · rozstrzygnięcie: konfiguracja aktorasrc/dispatcher/live.tsTo, który harness, dostawca i model uruchamia aktora, rozstrzyga się w kolejności flaga CLI > konfiguracja > preset > ambient > fallback. Aktor nie jest stałym dostawcą.
Wykonanie efektów · uruchamianie aktorów
src/dispatcher/live.tsUruchomienie · rozstrzygnięcie: uruchomienie PlanneraPlanner Lead · specyfikacjaagent actor · CLIDispatcher uruchamia Plannera z zrzutowanym wejściem. Warunkowy research przebiega dalej przez plan badawczy Plannera i przekazanie dowodów, zwinięte na tej mapie.
Planner Lead · specyfikacja
agent actor · CLIDane: spectranscript.jsonl · append-onlysrc/transcriptSpecyfikacja Plannera staje się zdarzeniem transkryptu, a reducer wybiera na jej podstawie Buildera. Aktorzy nie wywołują się nawzajem.
Wykonanie efektów · uruchamianie aktorów
src/dispatcher/live.tsUruchomienie · rozstrzygnięcie: uruchomienie BuilderaBuilder · pisze gręagent actor · CLIDispatcher uruchamia Buildera. Jeśli ten sam aktor wciąż zawodzi, otwiera się circuit i wymienia adapter, a przy dalszych awariach następuje zatrzymanie.
Builder · pisze grę
agent actor · CLIDane: plikiPliki gryartifacts/Builder zapisuje plik wejściowy, źródła i zasoby jako artefakty.
Builder · pisze grę
agent actor · CLIDane: zapis buildatranscript.jsonl · append-onlysrc/transcriptZdarzenie build i artifact.created są zapisywane w transkrypcie z tożsamością artefaktu.
Wykonanie efektów · uruchamianie aktorów
src/dispatcher/live.tsUruchomienie · rozstrzygnięcie: qa_checkQA wykonania · kontroledispatcher/qa-runner.tsPo zdarzeniu build reducer emituje efekt qa_check z tożsamością artefaktu i builda oraz warunkami akceptacji, a dispatcher go wykonuje.
Pliki gry
artifacts/Dane: co jest uruchamianeQA wykonania · kontroledispatcher/qa-runner.tsQA wykonania uruchamia faktyczny artefakt z kontrolami kodu i przeglądarki. Domyślny limit czasu 120 sekund to wartość konfiguracji.
QA wykonania · kontrole
dispatcher/qa-runner.tsDane: qa.resulttranscript.jsonl · append-onlysrc/transcriptSukces czy porażka, wynik jest zapisywany jako systemowe zdarzenie qa.result. Nawet jeśli kontrola rzuci wyjątek, zapisywany jest wynik z polami porażki.
Granica zaufania weryfikacji
QA wykonania to dowód z faktycznego uruchomienia artefaktu; Verifier to model oceniający zrzutowane dowody. Reducer uzgadnia jedno z drugim przed wyborem kolejnej ścieżki.
QA wykonania · kontrole
dispatcher/qa-runner.tsDane: qa.resulttranscript.jsonl · append-onlysrc/transcriptSukces czy porażka, wynik jest zapisywany jako systemowe zdarzenie qa.result. Nawet jeśli kontrola rzuci wyjątek, zapisywany jest wynik z polami porażki.
transcript.jsonl · append-only
src/transcriptDane: tylko dowodyRzutowanie wejścia sędziegosrc/dispatcher/live.tsWejście Verifiera jest rzutowane z najnowszych goal, spec, build, qa.result i artifact.created oraz wybranych dowodów z researchu. Zawęża kontekst; nie dowodzi izolacji ani braku wycieku.
Rzutowanie wejścia sędziego
src/dispatcher/live.tsDane: wejście sędziegoVerifier · werdykt modeluVerifier actorDispatcher uruchamia Verifiera z zrzutowanym wejściem.
Verifier · werdykt modelu
Verifier actorDane: judge.scoretranscript.jsonl · append-onlysrc/transcriptWerdykt Verifiera jest zapisywany jako zdarzenie judge.score. To osąd modelu, a nie fakt dotyczący wykonania.
Stan → kolejne efekty
src/reducerUruchomienie · rozstrzygnięcie: ocena · dowody QAOchrona przed oszustwem · korekta ocenysrc/validatorPrzy judge.score reducer przekazuje je do kontroli ochrony przed oszustwem razem z wynikiem QA, dostawcą Buildera oraz planem i dowodami z researchu.
Ochrona przed oszustwem · korekta oceny
src/validatorDane: skorygowany werdyktKierowanie według werdyktusrc/reducerPASS bez udanego wykonania staje się FAIL, a ocena związana z wykonaniem jest korygowana na podstawie deterministycznego QA. Pozostałe reguły to korekty warunkowe, a nie ogólny dowód prawdomówności.
Kierowanie według werdyktu
src/reducerDane: koniecKoniec · PASS lub przyczyna zatrzymaniasession donePASS kończy sesję jako done. Zatrzymania przez budżet i circuit również kończą się jako done, ale zachowują przyczynę zatrzymania, więc done nie zawsze oznacza PASS.
Awarie i sterowanie przez człowieka
PARTIAL trafia do człowieka, Critical do przeprojektowania, Important lub Minor do naprawy, a zatrzymania przez budżet lub circuit zostawiają przyczynę zatrzymania.
Ochrona przed oszustwem · korekta oceny
src/validatorDane: skorygowany werdyktKierowanie według werdyktusrc/reducerPASS bez udanego wykonania staje się FAIL, a ocena związana z wykonaniem jest korygowana na podstawie deterministycznego QA. Pozostałe reguły to korekty warunkowe, a nie ogólny dowód prawdomówności.
Kierowanie według werdyktu
src/reducerUruchomienie · rozstrzygnięcie: kontrola PARTIALPomysł na grę · sterowaniePARTIAL czeka na sprawdzenie przez człowieka.
Kierowanie według werdyktu
src/reducerUruchomienie · rozstrzygnięcie: przeprojektowanie · naprawasrc/dispatcher/live.tsSpośród FAIL i REJECT Critical wraca do Plannera do przeprojektowania, a Important lub Minor do Buildera jako informacja o poprawkach; wszystko jest wykonywane jako efekty dispatchera.
Kierowanie według werdyktu
src/reducerDane: koniecKoniec · PASS lub przyczyna zatrzymaniasession donePASS kończy sesję jako done. Zatrzymania przez budżet i circuit również kończą się jako done, ale zachowują przyczynę zatrzymania, więc done nie zawsze oznacza PASS.
Pomysł na grę · sterowanieUruchomienie · rozstrzygnięcie: pomysł · sterowanieZapis poleceń do inboxa
packages/studioJednozdaniowy pomysł na grę i sterowanie w języku naturalnym wprowadza się w Studio, które zapisuje polecenia do inboxa. Studio nigdy nie edytuje transkryptu bezpośrednio.
Odtwarzanie i obserwacja
Odbudowa stanu z transkryptu nie wykonuje żadnych efektów, a Studio czyta ten sam zapis, by go pokazać.
transcript.jsonl · append-only
src/transcriptDane: nowe zdarzenia · replayPętla zdarzeń · replay · tailsrc/loop/coordinator.tsWriter waliduje schemat, nadaje ULID i czas, po czym dopisuje. Przy odtwarzaniu przeszłe zdarzenia są tylko redukowane; ich efekty nie są wykonywane ponownie.
Pętla zdarzeń · replay · tail
src/loop/coordinator.tsUruchomienie · rozstrzygnięcie: redukcja po koleiStan → kolejne efektysrc/reducerZdarzenia na żywo są redukowane pojedynczo z kolejki, z zachowaniem kolejności efektów każdego zdarzenia; sam dispatch działa asynchronicznie.
transcript.jsonl · append-only
src/transcriptObserwacja · raport: odczyt · SSEWidok zdarzeń · artefaktówpackages/studioStudio odczytuje transkrypt i artefakty i pokazuje postęp, metryki i artefakty przez SSE. To nie telemetria wysyłana do zdalnej usługi.
Każde połączenie z tą samą wagą. Wybór przepływu wyróżnia tylko jego ścieżkę z ponumerowanymi krokami.
- Linia ciągła · kierunek wejścia, wyników i zapisów
- Linia przerywana · uruchomienie, rozstrzygnięcie, żądanie
- Długie kropki · obserwacja i raportowanie, oddzielnie od rozstrzygnięcia
- Gruba czarna linia · wybrany przepływ; liczby podają kolejność
- Ramka · granica kodu lub stanu, nazwana w nagłówku
- Wewnętrzny element · komponent tej granicy
- Kropkowana ramka · poza tą granicą
- Pomarańczowy obrys · miejsce, w którym decyduje model
- Pętla zdarzeń · reducer · dispatcher
- Zapisy · konfiguracja · artefakty
- Kontrole deterministyczne · korekta
- Studio · aktorzy
Narysowano na podstawie ścieżek kodu w publicznym commicie f5e17c0. Aktorzy to role w czasie działania, odrębne od agentów kodujących użytych do budowy tego repozytorium.
- Źródło stanu
- Transkrypt jest źródłem stanu, a reducer jest czystą funkcją. Efekty uboczne (uruchamianie aktorów, QA, zapis plików) wykonuje tylko dispatcher, więc odtwarzanie odbudowuje stan bez efektów.
- Co obejmuje odtwarzanie
- Odtwarzanie daje ten sam stan; nie czyni deterministycznymi generacji LLM ani zachowania przeglądarki i sieci.
- Co obejmuje werdykt
- QA wykonania sprawdza tylko skonfigurowane kontrole, a ocena Verifiera jest jednym kanałem dowodów. Żadne z nich nie mierzy każdego zachowania gry, zabawy ani zadowolenia użytkowników.