Só o personagem de pão do logotipo do CRUMB: uma fatia de pão de forma sorridente com uma mordida no canto superior direito
Voltar à sala

CRUMB

Generative Game Studio · Demo

De uma ideia de jogo em uma linha a um rascunho jogável, com o trabalho dos agentes à vista e aberto a intervenção.

O CRUMB é um harness de estúdio multiagente para prototipagem de jogos casuais.

Design e desenvolvimento · feito com agentes de programação de IA

  • CLIDemo local
  • Web StudioDemo local

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

Os agentes que constroem um jogo, mantidos à parte das evidências que o julgam.

Uma demo de estúdio local que leva uma ideia de jogo em uma linha pela especificação, pelo build e pelas verificações de execução. Cada etapa fica em uma transcrição JSONL, um reducer puro decide os próximos efeitos e só o dispatcher executa efeitos colaterais. O QA de execução e o veredito do modelo ficam separados para decidir entre aprovação, redesenho, reparo e condução humana.

A partir de um jogo proposto em uma linha, agentes do Claude Code, Codex e Gemini CLI colaboram por Planner → Builder → QA determinístico → Verifier, enquanto o CRUMB Studio mostra eventos, progresso e artefatos e aceita intervenção em linguagem natural.

Uma demo para clonar do repositório público e rodar localmente.

Mapa do sistema · desenhado a partir dos caminhos de código do commit público f5e17c0
Sistema do estúdio CRUMBUma pessoa propõe e conduz um jogo pelo Studio, e o Studio escreve comandos em uma inbox. O coordenador passa ao reducer, em ordem, os novos eventos da inbox e da transcrição; o reducer puro decide o estado e os próximos efeitos, e só o dispatcher executa efeitos colaterais. A especificação do Planner, o build e os artefatos do Builder, o resultado do QA de execução e o julgamento do Verifier viram eventos de transcrição. O Verifier recebe só evidências projetadas, e o reducer verifica e corrige sua pontuação pelo resultado do QA: PASS encerra a sessão, PARTIAL aguarda uma pessoa, e qualquer outro resultado volta para redesenho ou reparo.Ideia de jogo · conduçãoUma pessoa, localmentepackages/studioVisão de eventos · artefatosEscrever comandos na inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsLoop de eventos · reprodução · tailsrc/reducerEstado → próximos efeitosRoteamento do vereditosession doneConcluído · PASS ou motivo de paradasrc/dispatcher/live.tsExecutar efeitos · iniciar atoresProjeção da entrada do juizmodel-config · presetAtor → harness · modeloagent actor · CLIPlanner Lead · especificaçãoBuilder · escreve o jogoartifacts/Arquivos do jogodispatcher/qa-runner.tsQA de execução · verificaçõesVerifier actorVerifier · veredito do modelosrc/validatorAntiengano · correção da pontuaçãoPessoas · StudioControle de eventosa transcrição é a fonte do estadoAgentes de trabalho · artefatosVerificação · decisão1ideia · condução2eventos user3reduzir em ordem4efeitos5configuração de atores6executar o Planner7spec8executar o Builder9 arquivos · Builder · escreve o jogo → Arquivos do jogo910registro do build11qa_check12o que roda13qa.result1qa.result2só evidências3entrada do juiz4judge.score5pontuação · evidências do QA6veredito corrigido7concluído1veredito corrigido2verificação de PARTIAL3redesenho · reparo4concluído5ideia · condução1novos eventos · reprodução2reduzir em ordem3leitura · SSE

Da ideia ao jogo

Uma ideia vira uma especificação, um build e uma execução de QA. Cada etapa passa pela transcrição; os atores não chamam uns aos outros.

  1. Ideia de jogo · conduçãoExecução · julgamento: ideia · conduçãoEscrever comandos na inboxpackages/studio

    Uma ideia de jogo em uma linha e a condução em linguagem natural são digitadas no Studio, que escreve comandos na inbox. O Studio nunca edita a transcrição diretamente.

  2. Escrever comandos na inboxpackages/studioDados: eventos userLoop de eventos · reprodução · tailsrc/loop/coordinator.ts

    O coordenador lê os comandos da inbox e os registra na transcrição como eventos user.

  3. Loop de eventos · reprodução · tailsrc/loop/coordinator.tsExecução · julgamento: reduzir em ordemEstado → próximos efeitossrc/reducer

    Os eventos ao vivo passam um a um de uma fila para o reducer, mantendo em ordem os efeitos de cada evento; o dispatch em si roda de forma assíncrona.

  4. Estado → próximos efeitossrc/reducerExecução · julgamento: efeitosExecutar efeitos · iniciar atoressrc/dispatcher/live.ts

    O reducer é uma função pura que só decide o estado e os próximos efeitos: um goal seleciona o Planner, uma spec o Builder, um build um qa_check.

  5. Ator → harness · modelomodel-config · presetExecução · julgamento: configuração de atoressrc/dispatcher/live.ts

    Qual harness, provedor e modelo executam um ator é resolvido na ordem flag da CLI > config > preset > ambient > fallback. Um ator não é um provedor fixo.

  6. Executar efeitos · iniciar atoressrc/dispatcher/live.tsExecução · julgamento: executar o PlannerPlanner Lead · especificaçãoagent actor · CLI

    O dispatcher executa o Planner com uma entrada projetada. A pesquisa condicional segue pelo plano de pesquisa do Planner e pelo repasse de evidências, recolhidos neste mapa.

  7. Planner Lead · especificaçãoagent actor · CLIDados: spectranscript.jsonl · append-onlysrc/transcript

    A especificação do Planner vira um evento de transcrição, e o reducer seleciona o Builder a partir dela. Os atores não chamam uns aos outros.

  8. Executar efeitos · iniciar atoressrc/dispatcher/live.tsExecução · julgamento: executar o BuilderBuilder · escreve o jogoagent actor · CLI

    O dispatcher executa o Builder. Se o mesmo ator continua falhando, um circuito se abre e troca o adaptador, e para se as falhas continuarem.

  9. Builder · escreve o jogoagent actor · CLIDados: arquivosArquivos do jogoartifacts/

    O Builder escreve o arquivo de entrada, as fontes e os assets como artefatos.

  10. Builder · escreve o jogoagent actor · CLIDados: registro do buildtranscript.jsonl · append-onlysrc/transcript

    O evento build e o artifact.created são registrados na transcrição com a identidade do artefato.

  11. Executar efeitos · iniciar atoressrc/dispatcher/live.tsExecução · julgamento: qa_checkQA de execução · verificaçõesdispatcher/qa-runner.ts

    Após um evento build, o reducer emite um efeito qa_check com a identidade do artefato e do build e as condições de aceitação, e o dispatcher o executa.

  12. Arquivos do jogoartifacts/Dados: o que rodaQA de execução · verificaçõesdispatcher/qa-runner.ts

    O QA de execução roda o artefato real com verificações de código e de navegador. O timeout padrão de 120 segundos é um valor de configuração.

  13. QA de execução · verificaçõesdispatcher/qa-runner.tsDados: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Com sucesso ou falha, o resultado é registrado como um evento de sistema qa.result. Mesmo que a verificação lance uma exceção, um resultado com os campos que falharam é registrado.

Fronteira de confiança da verificação

O QA de execução é evidência de rodar de fato o artefato; o Verifier é um modelo que julga evidências projetadas. O reducer concilia as duas antes de escolher o próximo caminho.

  1. QA de execução · verificaçõesdispatcher/qa-runner.tsDados: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Com sucesso ou falha, o resultado é registrado como um evento de sistema qa.result. Mesmo que a verificação lance uma exceção, um resultado com os campos que falharam é registrado.

  2. transcript.jsonl · append-onlysrc/transcriptDados: só evidênciasProjeção da entrada do juizsrc/dispatcher/live.ts

    A entrada do Verifier é projetada a partir dos últimos goal, spec, build, qa.result e artifact.created, mais evidências de pesquisa selecionadas. Isso estreita o contexto; não prova isolamento nem ausência de vazamento.

  3. Projeção da entrada do juizsrc/dispatcher/live.tsDados: entrada do juizVerifier · veredito do modeloVerifier actor

    O dispatcher executa o Verifier com a entrada projetada.

  4. Verifier · veredito do modeloVerifier actorDados: judge.scoretranscript.jsonl · append-onlysrc/transcript

    O veredito do Verifier é registrado como um evento judge.score. É o julgamento de um modelo, não um fato da execução.

  5. Estado → próximos efeitossrc/reducerExecução · julgamento: pontuação · evidências do QAAntiengano · correção da pontuaçãosrc/validator

    Ao receber judge.score, o reducer o passa à verificação antiengano junto com o resultado do QA, o provedor do Builder e o plano e as evidências de pesquisa.

  6. Antiengano · correção da pontuaçãosrc/validatorDados: veredito corrigidoRoteamento do vereditosrc/reducer

    Um PASS sem execução bem-sucedida vira FAIL, e a pontuação ligada à execução é corrigida pelo QA determinístico. As outras regras são correções condicionais, não uma prova geral de veracidade.

  7. Roteamento do vereditosrc/reducerDados: concluídoConcluído · PASS ou motivo de paradasession done

    PASS encerra a sessão como done. Paradas por orçamento ou por circuito também terminam como done, mas mantêm o motivo de parada, então done nem sempre é PASS.

Falha e condução humana

PARTIAL vai para uma pessoa, Critical para redesenho, Important ou Minor para reparo, e paradas por orçamento ou circuito deixam um motivo de parada.

  1. Antiengano · correção da pontuaçãosrc/validatorDados: veredito corrigidoRoteamento do vereditosrc/reducer

    Um PASS sem execução bem-sucedida vira FAIL, e a pontuação ligada à execução é corrigida pelo QA determinístico. As outras regras são correções condicionais, não uma prova geral de veracidade.

  2. Roteamento do vereditosrc/reducerExecução · julgamento: verificação de PARTIALIdeia de jogo · condução

    PARTIAL aguarda que uma pessoa verifique.

  3. Roteamento do vereditosrc/reducerExecução · julgamento: redesenho · reparosrc/dispatcher/live.ts

    Entre FAIL e REJECT, Critical volta ao Planner para redesenho e Important ou Minor vai ao Builder como feedback de correção, tudo executado como efeitos do dispatcher.

  4. Roteamento do vereditosrc/reducerDados: concluídoConcluído · PASS ou motivo de paradasession done

    PASS encerra a sessão como done. Paradas por orçamento ou por circuito também terminam como done, mas mantêm o motivo de parada, então done nem sempre é PASS.

  5. Ideia de jogo · conduçãoExecução · julgamento: ideia · conduçãoEscrever comandos na inboxpackages/studio

    Uma ideia de jogo em uma linha e a condução em linguagem natural são digitadas no Studio, que escreve comandos na inbox. O Studio nunca edita a transcrição diretamente.

Reprodução e observação

Reconstruir o estado a partir da transcrição não executa nenhum efeito, e o Studio lê o mesmo registro para mostrá-lo.

  1. transcript.jsonl · append-onlysrc/transcriptDados: novos eventos · reproduçãoLoop de eventos · reprodução · tailsrc/loop/coordinator.ts

    O writer valida o schema, atribui um ULID e um horário, e anexa ao final. Na reprodução, os eventos passados só passam pelo reducer; seus efeitos não são executados de novo.

  2. Loop de eventos · reprodução · tailsrc/loop/coordinator.tsExecução · julgamento: reduzir em ordemEstado → próximos efeitossrc/reducer

    Os eventos ao vivo passam um a um de uma fila para o reducer, mantendo em ordem os efeitos de cada evento; o dispatch em si roda de forma assíncrona.

  3. transcript.jsonl · append-onlysrc/transcriptObservação · relatório: leitura · SSEVisão de eventos · artefatospackages/studio

    O Studio lê a transcrição e os artefatos e mostra progresso, métricas e artefatos via SSE. Não é telemetria enviada a um serviço remoto.

Todas as conexões com a mesma espessura. Escolha um fluxo para destacar só o caminho dele, com etapas numeradas.

  • Contínua · direção de entradas, resultados e registros
  • Tracejada · execução, julgamento, requisição
  • Pontos longos · observação e relatório, à parte do julgamento
  • Linha preta grossa · o fluxo selecionado; os números dão a ordem
  • Caixa · fronteira de código ou de estado, com o nome no cabeçalho
  • Chip interno · componente dessa fronteira
  • Caixa pontilhada · fora dessa fronteira
  • Contorno laranja · onde um modelo decide
  • Loop de eventos · reducer · dispatcher
  • Registros · configuração · artefatos
  • Verificações determinísticas · correção
  • Studio · atores

Desenhado a partir dos caminhos de código do commit público f5e17c0. Os atores são papéis de execução, diferentes dos agentes de programação usados para construir este repositório.

Fonte do estado
A transcrição é a fonte do estado e o reducer é uma função pura. Só o dispatcher executa efeitos colaterais (rodar atores, o QA, gravar arquivos), então a reprodução reconstrói o estado sem efeitos.
O que a reprodução cobre
A reprodução gera o mesmo estado; ela não torna determinísticas as gerações do LLM nem o comportamento do navegador e da rede.
O que um veredito cobre
O QA de execução só confere as verificações configuradas, e a pontuação do Verifier é um dos canais de evidência. Nenhum dos dois mede todo comportamento do jogo, a diversão ou a satisfação dos usuários.