Лише персонаж-хлібина з логотипа CRUMB: усміхнена скибка хліба з надкушеним правим верхнім кутом
Назад до зали

CRUMB

Generative Game Studio · Demo

Від однорядкової ідеї гри до чернетки, у яку можна грати, — з роботою агентів на виду й можливістю втрутитися.

CRUMB — мультиагентна студійна обв’язка для прототипування казуальних ігор.

Проєктування й розробка · створено з AI-агентами для програмування

  • CLIЛокальне демо
  • Веб-StudioЛокальне демо

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

Агенти, що створюють гру, окремо від доказів, які її оцінюють.

Локальне демо студії, що проводить однорядкову ідею гри через перевірки специфікації, збірки й виконання. Кожен крок потрапляє до транскрипту JSONL, чистий reducer визначає наступні ефекти, а побічні ефекти виконує лише dispatcher. QA виконання й вердикт моделі тримають окремо, щоб обрати між успіхом, переробленням дизайну, виправленням і керуванням людиною.

Достатньо описати гру одним рядком, і агенти Claude Code, Codex і Gemini CLI співпрацюють за схемою Planner → Builder → детермінований QA → Verifier, а CRUMB Studio показує події, поступ і артефакти й приймає втручання природною мовою.

Демо, яке клонують із публічного репозиторію й запускають локально.

Карта системи · накреслено за шляхами коду на публічному коміті f5e17c0
Система студії CRUMBЛюдина пропонує гру й керує нею зі Studio, а Studio записує команди в inbox. Coordinator по черзі передає нові події з inbox і транскрипту до reducer; чистий reducer визначає стан і наступні ефекти, а побічні ефекти виконує лише dispatcher. Специфікація Planner, збірка й артефакти Builder, результат QA виконання й рішення Verifier — усе стає подіями транскрипту. Verifier отримує лише спроєктовані докази, а reducer перевіряє й виправляє його оцінку за результатом QA: PASS завершує сесію, PARTIAL чекає на людину, а все інше повертається на перероблення дизайну чи виправлення.Ідея гри · керуванняЛюдина, локальний запускpackages/studioПерегляд подій · артефактівЗапис команд в inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsЦикл подій · відтворення · tailsrc/reducerСтан → наступні ефектиМаршрутизація вердиктуsession doneГотово · PASS або причина зупинкиsrc/dispatcher/live.tsВиконання ефектів · spawn акторівПроєкція входу суддіmodel-config · presetАктор → обв’язка · модельagent actor · CLIPlanner Lead · специфікаціяBuilder · пише груartifacts/Файли гриdispatcher/qa-runner.tsQA виконання · перевіркиVerifier actorVerifier · вердикт моделіsrc/validatorЗахист від обману · виправлення оцінкиЛюди · StudioКерування подіямитранскрипт — джерело стануРобочі агенти · артефактиВерифікація · рішення1ідея · керування2події user3reduce по черзі4ефекти5налаштування актора6запуск Planner7spec8запуск Builder9файли10запис збірки11qa_check12що запускається13qa.result1qa.result2лише докази3вхід судді4judge.score5оцінка · докази QA6виправлений вердикт7готово1виправлений вердикт2перевірка PARTIAL3перероблення · виправлення4готово5ідея · керування1нові події · відтворення2reduce по черзі3читання · SSE

Від ідеї до гри

Ідея стає специфікацією, збіркою й запуском QA виконання. Кожен крок проходить через транскрипт; актори не викликають одне одного.

  1. Ідея гри · керуванняЗапуск · рішення: ідея · керуванняЗапис команд в inboxpackages/studio

    Однорядкова ідея гри й керування природною мовою вводяться в Studio, яка записує команди в inbox. Studio ніколи не редагує транскрипт напряму.

  2. Запис команд в inboxpackages/studioДані: події userЦикл подій · відтворення · tailsrc/loop/coordinator.ts

    Coordinator читає команди з inbox і записує їх у транскрипт як події user.

  3. Цикл подій · відтворення · tailsrc/loop/coordinator.tsЗапуск · рішення: reduce по черзіСтан → наступні ефектиsrc/reducer

    Живі події по одній беруться з черги й проходять через reducer, зберігаючи порядок ефектів кожної події; сама передача виконується асинхронно.

  4. Стан → наступні ефектиsrc/reducerЗапуск · рішення: ефектиВиконання ефектів · spawn акторівsrc/dispatcher/live.ts

    Reducer — чиста функція, що визначає лише стан і наступні ефекти: goal обирає Planner, spec — Builder, build — qa_check.

  5. Актор → обв’язка · модельmodel-config · presetЗапуск · рішення: налаштування актораsrc/dispatcher/live.ts

    Яка обв’язка, провайдер і модель запускають актора, визначається в порядку прапорець CLI > config > preset > ambient > fallback. Актор не є фіксованим провайдером.

  6. Виконання ефектів · spawn акторівsrc/dispatcher/live.tsЗапуск · рішення: запуск PlannerPlanner Lead · специфікаціяagent actor · CLI

    Dispatcher запускає Planner зі спроєктованими вхідними даними. Умовне дослідження продовжується через план дослідження Planner і передачу доказів, згорнуті на цій карті.

  7. Planner Lead · специфікаціяagent actor · CLIДані: spectranscript.jsonl · append-onlysrc/transcript

    Специфікація Planner стає подією транскрипту, і reducer за нею обирає Builder. Актори не викликають одне одного.

  8. Виконання ефектів · spawn акторівsrc/dispatcher/live.tsЗапуск · рішення: запуск BuilderBuilder · пише груagent actor · CLI

    Dispatcher запускає Builder. Якщо той самий актор постійно зазнає збою, circuit розмикається й змінює адаптер, а якщо збої тривають — зупиняється.

  9. Builder · пише груagent actor · CLIДані: файлиФайли гриartifacts/

    Builder записує вхідний файл, джерела й ресурси як артефакти.

  10. Builder · пише груagent actor · CLIДані: запис збіркиtranscript.jsonl · append-onlysrc/transcript

    Подія build і artifact.created записуються в транскрипт з ідентичністю артефакту.

  11. Виконання ефектів · spawn акторівsrc/dispatcher/live.tsЗапуск · рішення: qa_checkQA виконання · перевіркиdispatcher/qa-runner.ts

    Після події build reducer випускає ефект qa_check з ідентичністю артефакту й збірки та умовами приймання, а dispatcher його виконує.

  12. Файли гриartifacts/Дані: що запускаєтьсяQA виконання · перевіркиdispatcher/qa-runner.ts

    QA виконання запускає справжній артефакт із перевірками коду й браузера. Типовий тайм-аут 120 секунд — значення конфігурації.

  13. QA виконання · перевіркиdispatcher/qa-runner.tsДані: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Успіх чи провал — результат записується як системна подія qa.result. Навіть якщо перевірка кидає виняток, записується результат із полями, що не пройшли.

Межа довіри верифікації

QA виконання — це докази від справжнього запуску артефакту; Verifier — модель, що оцінює спроєктовані докази. Reducer узгоджує їх перед вибором наступного шляху.

  1. QA виконання · перевіркиdispatcher/qa-runner.tsДані: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Успіх чи провал — результат записується як системна подія qa.result. Навіть якщо перевірка кидає виняток, записується результат із полями, що не пройшли.

  2. transcript.jsonl · append-onlysrc/transcriptДані: лише доказиПроєкція входу суддіsrc/dispatcher/live.ts

    Вхід Verifier проєктується з останніх goal, spec, build, qa.result і artifact.created плюс вибраних доказів дослідження. Це звужує контекст; це не доводить ізоляції чи відсутності витоку.

  3. Проєкція входу суддіsrc/dispatcher/live.tsДані: вхід суддіVerifier · вердикт моделіVerifier actor

    Dispatcher запускає Verifier зі спроєктованими вхідними даними.

  4. Verifier · вердикт моделіVerifier actorДані: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Вердикт Verifier записується як подія judge.score. Це рішення моделі, а не факт про виконання.

  5. Стан → наступні ефектиsrc/reducerЗапуск · рішення: оцінка · докази QAЗахист від обману · виправлення оцінкиsrc/validator

    За judge.score reducer передає її на перевірку захисту від обману разом із результатом QA, провайдером Builder, а також планом і доказами дослідження.

  6. Захист від обману · виправлення оцінкиsrc/validatorДані: виправлений вердиктМаршрутизація вердиктуsrc/reducer

    PASS без успішного виконання стає FAIL, а оцінку, пов’язану з виконанням, виправляють за детермінованим QA. Інші правила — умовні виправлення, а не загальний доказ правдивості.

  7. Маршрутизація вердиктуsrc/reducerДані: готовоГотово · PASS або причина зупинкиsession done

    PASS завершує сесію як done. Зупинки через бюджет і circuit також завершуються як done, але зберігають причину зупинки, тож done — не завжди PASS.

Збій і керування людиною

PARTIAL іде до людини, Critical — на перероблення дизайну, Important чи Minor — на виправлення, а зупинки через бюджет чи circuit лишають причину зупинки.

  1. Захист від обману · виправлення оцінкиsrc/validatorДані: виправлений вердиктМаршрутизація вердиктуsrc/reducer

    PASS без успішного виконання стає FAIL, а оцінку, пов’язану з виконанням, виправляють за детермінованим QA. Інші правила — умовні виправлення, а не загальний доказ правдивості.

  2. Маршрутизація вердиктуsrc/reducerЗапуск · рішення: перевірка PARTIALІдея гри · керування

    PARTIAL чекає на перевірку людиною.

  3. Маршрутизація вердиктуsrc/reducerЗапуск · рішення: перероблення · виправленняsrc/dispatcher/live.ts

    Серед FAIL і REJECT Critical повертається до Planner для перероблення дизайну, а Important чи Minor — до Builder як зворотний зв’язок для виправлення; усе виконується як ефекти dispatcher.

  4. Маршрутизація вердиктуsrc/reducerДані: готовоГотово · PASS або причина зупинкиsession done

    PASS завершує сесію як done. Зупинки через бюджет і circuit також завершуються як done, але зберігають причину зупинки, тож done — не завжди PASS.

  5. Ідея гри · керуванняЗапуск · рішення: ідея · керуванняЗапис команд в inboxpackages/studio

    Однорядкова ідея гри й керування природною мовою вводяться в Studio, яка записує команди в inbox. Studio ніколи не редагує транскрипт напряму.

Відтворення й спостереження

Відновлення стану з транскрипту не запускає ефектів, а Studio читає той самий запис, щоб показати його.

  1. transcript.jsonl · append-onlysrc/transcriptДані: нові події · відтворенняЦикл подій · відтворення · tailsrc/loop/coordinator.ts

    Writer перевіряє схему, призначає ULID і час та дописує. Під час відтворення минулі події лише проходять через reducer; їхні ефекти не запускаються знову.

  2. Цикл подій · відтворення · tailsrc/loop/coordinator.tsЗапуск · рішення: reduce по черзіСтан → наступні ефектиsrc/reducer

    Живі події по одній беруться з черги й проходять через reducer, зберігаючи порядок ефектів кожної події; сама передача виконується асинхронно.

  3. transcript.jsonl · append-onlysrc/transcriptСпостереження · звіт: читання · SSEПерегляд подій · артефактівpackages/studio

    Studio читає транскрипт і артефакти та показує поступ, метрики й артефакти через SSE. Це не телеметрія, що надсилається віддаленому сервісу.

Усі зв’язки однакової товщини. Оберіть потік, щоб підсвітити лише його шлях із пронумерованими кроками.

  • Суцільна · напрямок входів, результатів і записів
  • Штрихова · запуск, рішення, запит
  • Довга пунктирна · спостереження й звітування, окремо від рішення
  • Товста чорна лінія · обраний потік; номери показують порядок
  • Рамка · межа коду чи стану, названа в заголовку
  • Внутрішня плашка · компонент цієї межі
  • Пунктирна рамка · поза цією межею
  • Помаранчевий контур · де вирішує модель
  • Цикл подій · reducer · dispatcher
  • Записи · налаштування · артефакти
  • Детерміновані перевірки · виправлення
  • Studio · актори

Накреслено за шляхами коду на публічному коміті f5e17c0. Актори — це ролі під час виконання, відмінні від агентів для програмування, якими створено цей репозиторій.

Джерело стану
Транскрипт — джерело стану, а reducer — чиста функція. Побічні ефекти (запуск акторів, QA, запис файлів) виконує лише dispatcher, тож відтворення відновлює стан без ефектів.
Що охоплює відтворення
Відтворення дає той самий стан; воно не робить детермінованими генерації LLM чи поведінку браузера й мережі.
Що охоплює вердикт
QA виконання перевіряє лише налаштовані перевірки, а оцінка Verifier — один канал доказів. Жодне з них не вимірює всієї поведінки гри, цікавості чи задоволення користувачів.