
CRUMB
Generative Game Studio · Demo
Від однорядкової ідеї гри до чернетки, у яку можна грати, — з роботою агентів на виду й можливістю втрутитися.
CRUMB — мультиагентна студійна обв’язка для прототипування казуальних ігор.
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
Агенти, що створюють гру, окремо від доказів, які її оцінюють.
Локальне демо студії, що проводить однорядкову ідею гри через перевірки специфікації, збірки й виконання. Кожен крок потрапляє до транскрипту JSONL, чистий reducer визначає наступні ефекти, а побічні ефекти виконує лише dispatcher. QA виконання й вердикт моделі тримають окремо, щоб обрати між успіхом, переробленням дизайну, виправленням і керуванням людиною.
Достатньо описати гру одним рядком, і агенти Claude Code, Codex і Gemini CLI співпрацюють за схемою Planner → Builder → детермінований QA → Verifier, а CRUMB Studio показує події, поступ і артефакти й приймає втручання природною мовою.
Демо, яке клонують із публічного репозиторію й запускають локально.
Від ідеї до гри
Ідея стає специфікацією, збіркою й запуском QA виконання. Кожен крок проходить через транскрипт; актори не викликають одне одного.
Ідея гри · керуванняЗапуск · рішення: ідея · керуванняЗапис команд в inbox
packages/studioОднорядкова ідея гри й керування природною мовою вводяться в Studio, яка записує команди в inbox. Studio ніколи не редагує транскрипт напряму.
Запис команд в inbox
packages/studioДані: події userЦикл подій · відтворення · tailsrc/loop/coordinator.tsCoordinator читає команди з inbox і записує їх у транскрипт як події user.
Цикл подій · відтворення · tail
src/loop/coordinator.tsЗапуск · рішення: reduce по черзіСтан → наступні ефектиsrc/reducerЖиві події по одній беруться з черги й проходять через reducer, зберігаючи порядок ефектів кожної події; сама передача виконується асинхронно.
Стан → наступні ефекти
src/reducerЗапуск · рішення: ефектиВиконання ефектів · spawn акторівsrc/dispatcher/live.tsReducer — чиста функція, що визначає лише стан і наступні ефекти: goal обирає Planner, spec — Builder, build — qa_check.
Актор → обв’язка · модель
model-config · presetЗапуск · рішення: налаштування актораsrc/dispatcher/live.tsЯка обв’язка, провайдер і модель запускають актора, визначається в порядку прапорець CLI > config > preset > ambient > fallback. Актор не є фіксованим провайдером.
Виконання ефектів · spawn акторів
src/dispatcher/live.tsЗапуск · рішення: запуск PlannerPlanner Lead · специфікаціяagent actor · CLIDispatcher запускає Planner зі спроєктованими вхідними даними. Умовне дослідження продовжується через план дослідження Planner і передачу доказів, згорнуті на цій карті.
Planner Lead · специфікація
agent actor · CLIДані: spectranscript.jsonl · append-onlysrc/transcriptСпецифікація Planner стає подією транскрипту, і reducer за нею обирає Builder. Актори не викликають одне одного.
Виконання ефектів · spawn акторів
src/dispatcher/live.tsЗапуск · рішення: запуск BuilderBuilder · пише груagent actor · CLIDispatcher запускає Builder. Якщо той самий актор постійно зазнає збою, circuit розмикається й змінює адаптер, а якщо збої тривають — зупиняється.
Builder · пише гру
agent actor · CLIДані: файлиФайли гриartifacts/Builder записує вхідний файл, джерела й ресурси як артефакти.
Builder · пише гру
agent actor · CLIДані: запис збіркиtranscript.jsonl · append-onlysrc/transcriptПодія build і artifact.created записуються в транскрипт з ідентичністю артефакту.
Виконання ефектів · spawn акторів
src/dispatcher/live.tsЗапуск · рішення: qa_checkQA виконання · перевіркиdispatcher/qa-runner.tsПісля події build reducer випускає ефект qa_check з ідентичністю артефакту й збірки та умовами приймання, а dispatcher його виконує.
Файли гри
artifacts/Дані: що запускаєтьсяQA виконання · перевіркиdispatcher/qa-runner.tsQA виконання запускає справжній артефакт із перевірками коду й браузера. Типовий тайм-аут 120 секунд — значення конфігурації.
QA виконання · перевірки
dispatcher/qa-runner.tsДані: qa.resulttranscript.jsonl · append-onlysrc/transcriptУспіх чи провал — результат записується як системна подія qa.result. Навіть якщо перевірка кидає виняток, записується результат із полями, що не пройшли.
Межа довіри верифікації
QA виконання — це докази від справжнього запуску артефакту; Verifier — модель, що оцінює спроєктовані докази. Reducer узгоджує їх перед вибором наступного шляху.
QA виконання · перевірки
dispatcher/qa-runner.tsДані: qa.resulttranscript.jsonl · append-onlysrc/transcriptУспіх чи провал — результат записується як системна подія qa.result. Навіть якщо перевірка кидає виняток, записується результат із полями, що не пройшли.
transcript.jsonl · append-only
src/transcriptДані: лише доказиПроєкція входу суддіsrc/dispatcher/live.tsВхід Verifier проєктується з останніх goal, spec, build, qa.result і artifact.created плюс вибраних доказів дослідження. Це звужує контекст; це не доводить ізоляції чи відсутності витоку.
Проєкція входу судді
src/dispatcher/live.tsДані: вхід суддіVerifier · вердикт моделіVerifier actorDispatcher запускає Verifier зі спроєктованими вхідними даними.
Verifier · вердикт моделі
Verifier actorДані: judge.scoretranscript.jsonl · append-onlysrc/transcriptВердикт Verifier записується як подія judge.score. Це рішення моделі, а не факт про виконання.
Стан → наступні ефекти
src/reducerЗапуск · рішення: оцінка · докази QAЗахист від обману · виправлення оцінкиsrc/validatorЗа judge.score reducer передає її на перевірку захисту від обману разом із результатом QA, провайдером Builder, а також планом і доказами дослідження.
Захист від обману · виправлення оцінки
src/validatorДані: виправлений вердиктМаршрутизація вердиктуsrc/reducerPASS без успішного виконання стає FAIL, а оцінку, пов’язану з виконанням, виправляють за детермінованим QA. Інші правила — умовні виправлення, а не загальний доказ правдивості.
Маршрутизація вердикту
src/reducerДані: готовоГотово · PASS або причина зупинкиsession donePASS завершує сесію як done. Зупинки через бюджет і circuit також завершуються як done, але зберігають причину зупинки, тож done — не завжди PASS.
Збій і керування людиною
PARTIAL іде до людини, Critical — на перероблення дизайну, Important чи Minor — на виправлення, а зупинки через бюджет чи circuit лишають причину зупинки.
Захист від обману · виправлення оцінки
src/validatorДані: виправлений вердиктМаршрутизація вердиктуsrc/reducerPASS без успішного виконання стає FAIL, а оцінку, пов’язану з виконанням, виправляють за детермінованим QA. Інші правила — умовні виправлення, а не загальний доказ правдивості.
Маршрутизація вердикту
src/reducerЗапуск · рішення: перевірка PARTIALІдея гри · керуванняPARTIAL чекає на перевірку людиною.
Маршрутизація вердикту
src/reducerЗапуск · рішення: перероблення · виправленняsrc/dispatcher/live.tsСеред FAIL і REJECT Critical повертається до Planner для перероблення дизайну, а Important чи Minor — до Builder як зворотний зв’язок для виправлення; усе виконується як ефекти dispatcher.
Маршрутизація вердикту
src/reducerДані: готовоГотово · PASS або причина зупинкиsession donePASS завершує сесію як done. Зупинки через бюджет і circuit також завершуються як done, але зберігають причину зупинки, тож done — не завжди PASS.
Ідея гри · керуванняЗапуск · рішення: ідея · керуванняЗапис команд в inbox
packages/studioОднорядкова ідея гри й керування природною мовою вводяться в Studio, яка записує команди в inbox. Studio ніколи не редагує транскрипт напряму.
Відтворення й спостереження
Відновлення стану з транскрипту не запускає ефектів, а Studio читає той самий запис, щоб показати його.
transcript.jsonl · append-only
src/transcriptДані: нові події · відтворенняЦикл подій · відтворення · tailsrc/loop/coordinator.tsWriter перевіряє схему, призначає ULID і час та дописує. Під час відтворення минулі події лише проходять через reducer; їхні ефекти не запускаються знову.
Цикл подій · відтворення · tail
src/loop/coordinator.tsЗапуск · рішення: reduce по черзіСтан → наступні ефектиsrc/reducerЖиві події по одній беруться з черги й проходять через reducer, зберігаючи порядок ефектів кожної події; сама передача виконується асинхронно.
transcript.jsonl · append-only
src/transcriptСпостереження · звіт: читання · SSEПерегляд подій · артефактівpackages/studioStudio читає транскрипт і артефакти та показує поступ, метрики й артефакти через SSE. Це не телеметрія, що надсилається віддаленому сервісу.
Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.
- Суцільна · напрямок входів, результатів і записів
- Штрихова · запуск, рішення, запит
- Довга пунктирна · спостереження й звітування, окремо від рішення
- Товста чорна лінія · обраний потік; номери показують порядок
- Рамка · межа коду чи стану, названа в заголовку
- Внутрішня плашка · компонент цієї межі
- Пунктирна рамка · поза цією межею
- Помаранчевий контур · де вирішує модель
- Цикл подій · reducer · dispatcher
- Записи · налаштування · артефакти
- Детерміновані перевірки · виправлення
- Studio · актори
Накреслено за шляхами коду на публічному коміті f5e17c0. Актори — це ролі під час виконання, відмінні від агентів для програмування, якими створено цей репозиторій.
- Джерело стану
- Транскрипт — джерело стану, а reducer — чиста функція. Побічні ефекти (запуск акторів, QA, запис файлів) виконує лише dispatcher, тож відтворення відновлює стан без ефектів.
- Що охоплює відтворення
- Відтворення дає той самий стан; воно не робить детермінованими генерації LLM чи поведінку браузера й мережі.
- Що охоплює вердикт
- QA виконання перевіряє лише налаштовані перевірки, а оцінка Verifier — один канал доказів. Жодне з них не вимірює всієї поведінки гри, цікавості чи задоволення користувачів.