Sama postać chleba z logo CRUMB: uśmiechnięta kromka chleba z ugryzionym prawym górnym rogiem
Powrót do sali

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.

Projekt i rozwój · zbudowane z agentami kodującymi AI

  • CLIDemo lokalne
  • Web StudioDemo lokalne

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

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.

Mapa systemu · narysowana na podstawie ścieżek kodu w publicznym commicie f5e17c0
System studia CRUMBCzłowiek proponuje grę i nią steruje w Studio, a Studio zapisuje polecenia do skrzynki inbox. Koordynator przekazuje reducerowi po kolei nowe zdarzenia z inboxa i transkryptu; czysty reducer decyduje o stanie i kolejnych efektach, a efekty uboczne wykonuje tylko dispatcher. Specyfikacja Plannera, build i artefakty Buildera, wynik QA wykonania i ocena Verifiera stają się zdarzeniami transkryptu. Verifier otrzymuje wyłącznie zrzutowane dowody, a reducer sprawdza i koryguje jego ocenę względem wyniku QA: PASS kończy sesję, PARTIAL czeka na człowieka, a wszystko inne wraca do przeprojektowania lub naprawy.Pomysł na grę · sterowanieCzłowiek, uruchamiający lokalniepackages/studioWidok zdarzeń · artefaktówZapis poleceń do inboxasrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsPętla zdarzeń · replay · tailsrc/reducerStan → kolejne efektyKierowanie według werdyktusession doneKoniec · PASS lub przyczyna zatrzymaniasrc/dispatcher/live.tsWykonanie efektów · uruchamianie aktorówRzutowanie wejścia sędziegomodel-config · presetAktor → harness · modelagent actor · CLIPlanner Lead · specyfikacjaBuilder · pisze gręartifacts/Pliki grydispatcher/qa-runner.tsQA wykonania · kontroleVerifier actorVerifier · werdykt modelusrc/validatorOchrona przed oszustwem · korekta ocenyLudzie · StudioSterowanie zdarzeniamitranskrypt jest źródłem stanuAgenci roboczy · artefaktyWeryfikacja · decyzja1pomysł · sterowanie2zdarzenia user3redukcja po kolei4efekty5konfiguracja aktora6uruchomienie Plannera7spec8uruchomienie Buildera9pliki10zapis builda11qa_check12co jest uruchamiane13qa.result1qa.result2tylko dowody3wejście sędziego4judge.score5ocena · dowody QA6skorygowany werdykt7koniec1skorygowany werdykt2kontrola PARTIAL3przeprojektowanie · naprawa4koniec5pomysł · sterowanie1nowe zdarzenia · replay2redukcja po kolei3odczyt · SSE

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.

  1. Pomysł na grę · sterowanieUruchomienie · rozstrzygnięcie: pomysł · sterowanieZapis poleceń do inboxapackages/studio

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

  2. Zapis poleceń do inboxapackages/studioDane: zdarzenia userPętla zdarzeń · replay · tailsrc/loop/coordinator.ts

    Koordynator odczytuje polecenia z inboxa i zapisuje je w transkrypcie jako zdarzenia user.

  3. Pętla zdarzeń · replay · tailsrc/loop/coordinator.tsUruchomienie · rozstrzygnięcie: redukcja po koleiStan → kolejne efektysrc/reducer

    Zdarzenia na żywo są redukowane pojedynczo z kolejki, z zachowaniem kolejności efektów każdego zdarzenia; sam dispatch działa asynchronicznie.

  4. Stan → kolejne efektysrc/reducerUruchomienie · rozstrzygnięcie: efektyWykonanie efektów · uruchamianie aktorówsrc/dispatcher/live.ts

    Reducer to czysta funkcja, która decyduje tylko o stanie i kolejnych efektach: cel wybiera Plannera, specyfikacja Buildera, build qa_check.

  5. Aktor → harness · modelmodel-config · presetUruchomienie · rozstrzygnięcie: konfiguracja aktorasrc/dispatcher/live.ts

    To, 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ą.

  6. Wykonanie efektów · uruchamianie aktorówsrc/dispatcher/live.tsUruchomienie · rozstrzygnięcie: uruchomienie PlanneraPlanner Lead · specyfikacjaagent actor · CLI

    Dispatcher uruchamia Plannera z zrzutowanym wejściem. Warunkowy research przebiega dalej przez plan badawczy Plannera i przekazanie dowodów, zwinięte na tej mapie.

  7. Planner Lead · specyfikacjaagent actor · CLIDane: spectranscript.jsonl · append-onlysrc/transcript

    Specyfikacja Plannera staje się zdarzeniem transkryptu, a reducer wybiera na jej podstawie Buildera. Aktorzy nie wywołują się nawzajem.

  8. Wykonanie efektów · uruchamianie aktorówsrc/dispatcher/live.tsUruchomienie · rozstrzygnięcie: uruchomienie BuilderaBuilder · pisze gręagent actor · CLI

    Dispatcher uruchamia Buildera. Jeśli ten sam aktor wciąż zawodzi, otwiera się circuit i wymienia adapter, a przy dalszych awariach następuje zatrzymanie.

  9. Builder · pisze gręagent actor · CLIDane: plikiPliki gryartifacts/

    Builder zapisuje plik wejściowy, źródła i zasoby jako artefakty.

  10. Builder · pisze gręagent actor · CLIDane: zapis buildatranscript.jsonl · append-onlysrc/transcript

    Zdarzenie build i artifact.created są zapisywane w transkrypcie z tożsamością artefaktu.

  11. Wykonanie efektów · uruchamianie aktorówsrc/dispatcher/live.tsUruchomienie · rozstrzygnięcie: qa_checkQA wykonania · kontroledispatcher/qa-runner.ts

    Po zdarzeniu build reducer emituje efekt qa_check z tożsamością artefaktu i builda oraz warunkami akceptacji, a dispatcher go wykonuje.

  12. Pliki gryartifacts/Dane: co jest uruchamianeQA wykonania · kontroledispatcher/qa-runner.ts

    QA wykonania uruchamia faktyczny artefakt z kontrolami kodu i przeglądarki. Domyślny limit czasu 120 sekund to wartość konfiguracji.

  13. QA wykonania · kontroledispatcher/qa-runner.tsDane: qa.resulttranscript.jsonl · append-onlysrc/transcript

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

  1. QA wykonania · kontroledispatcher/qa-runner.tsDane: qa.resulttranscript.jsonl · append-onlysrc/transcript

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

  2. transcript.jsonl · append-onlysrc/transcriptDane: tylko dowodyRzutowanie wejścia sędziegosrc/dispatcher/live.ts

    Wejś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.

  3. Rzutowanie wejścia sędziegosrc/dispatcher/live.tsDane: wejście sędziegoVerifier · werdykt modeluVerifier actor

    Dispatcher uruchamia Verifiera z zrzutowanym wejściem.

  4. Verifier · werdykt modeluVerifier actorDane: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Werdykt Verifiera jest zapisywany jako zdarzenie judge.score. To osąd modelu, a nie fakt dotyczący wykonania.

  5. Stan → kolejne efektysrc/reducerUruchomienie · rozstrzygnięcie: ocena · dowody QAOchrona przed oszustwem · korekta ocenysrc/validator

    Przy judge.score reducer przekazuje je do kontroli ochrony przed oszustwem razem z wynikiem QA, dostawcą Buildera oraz planem i dowodami z researchu.

  6. Ochrona przed oszustwem · korekta ocenysrc/validatorDane: skorygowany werdyktKierowanie według werdyktusrc/reducer

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

  7. Kierowanie według werdyktusrc/reducerDane: koniecKoniec · PASS lub przyczyna zatrzymaniasession done

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

  1. Ochrona przed oszustwem · korekta ocenysrc/validatorDane: skorygowany werdyktKierowanie według werdyktusrc/reducer

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

  2. Kierowanie według werdyktusrc/reducerUruchomienie · rozstrzygnięcie: kontrola PARTIALPomysł na grę · sterowanie

    PARTIAL czeka na sprawdzenie przez człowieka.

  3. Kierowanie według werdyktusrc/reducerUruchomienie · rozstrzygnięcie: przeprojektowanie · naprawasrc/dispatcher/live.ts

    Spoś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.

  4. Kierowanie według werdyktusrc/reducerDane: koniecKoniec · PASS lub przyczyna zatrzymaniasession done

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

  5. Pomysł na grę · sterowanieUruchomienie · rozstrzygnięcie: pomysł · sterowanieZapis poleceń do inboxapackages/studio

    Jednozdaniowy 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ć.

  1. transcript.jsonl · append-onlysrc/transcriptDane: nowe zdarzenia · replayPętla zdarzeń · replay · tailsrc/loop/coordinator.ts

    Writer waliduje schemat, nadaje ULID i czas, po czym dopisuje. Przy odtwarzaniu przeszłe zdarzenia są tylko redukowane; ich efekty nie są wykonywane ponownie.

  2. Pętla zdarzeń · replay · tailsrc/loop/coordinator.tsUruchomienie · rozstrzygnięcie: redukcja po koleiStan → kolejne efektysrc/reducer

    Zdarzenia na żywo są redukowane pojedynczo z kolejki, z zachowaniem kolejności efektów każdego zdarzenia; sam dispatch działa asynchronicznie.

  3. transcript.jsonl · append-onlysrc/transcriptObserwacja · raport: odczyt · SSEWidok zdarzeń · artefaktówpackages/studio

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