
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.
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
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.
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.
Ideia de jogo · conduçãoExecução · julgamento: ideia · conduçãoEscrever comandos na inbox
packages/studioUma 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.
Escrever comandos na inbox
packages/studioDados: eventos userLoop de eventos · reprodução · tailsrc/loop/coordinator.tsO coordenador lê os comandos da inbox e os registra na transcrição como eventos user.
Loop de eventos · reprodução · tail
src/loop/coordinator.tsExecução · julgamento: reduzir em ordemEstado → próximos efeitossrc/reducerOs 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.
Estado → próximos efeitos
src/reducerExecução · julgamento: efeitosExecutar efeitos · iniciar atoressrc/dispatcher/live.tsO 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.
Ator → harness · modelo
model-config · presetExecução · julgamento: configuração de atoressrc/dispatcher/live.tsQual harness, provedor e modelo executam um ator é resolvido na ordem flag da CLI > config > preset > ambient > fallback. Um ator não é um provedor fixo.
Executar efeitos · iniciar atores
src/dispatcher/live.tsExecução · julgamento: executar o PlannerPlanner Lead · especificaçãoagent actor · CLIO 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.
Planner Lead · especificação
agent actor · CLIDados: spectranscript.jsonl · append-onlysrc/transcriptA 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.
Executar efeitos · iniciar atores
src/dispatcher/live.tsExecução · julgamento: executar o BuilderBuilder · escreve o jogoagent actor · CLIO dispatcher executa o Builder. Se o mesmo ator continua falhando, um circuito se abre e troca o adaptador, e para se as falhas continuarem.
Builder · escreve o jogo
agent actor · CLIDados: arquivosArquivos do jogoartifacts/O Builder escreve o arquivo de entrada, as fontes e os assets como artefatos.
Builder · escreve o jogo
agent actor · CLIDados: registro do buildtranscript.jsonl · append-onlysrc/transcriptO evento build e o artifact.created são registrados na transcrição com a identidade do artefato.
Executar efeitos · iniciar atores
src/dispatcher/live.tsExecução · julgamento: qa_checkQA de execução · verificaçõesdispatcher/qa-runner.tsApó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.
Arquivos do jogo
artifacts/Dados: o que rodaQA de execução · verificaçõesdispatcher/qa-runner.tsO 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.
QA de execução · verificações
dispatcher/qa-runner.tsDados: qa.resulttranscript.jsonl · append-onlysrc/transcriptCom 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.
QA de execução · verificações
dispatcher/qa-runner.tsDados: qa.resulttranscript.jsonl · append-onlysrc/transcriptCom 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.
transcript.jsonl · append-only
src/transcriptDados: só evidênciasProjeção da entrada do juizsrc/dispatcher/live.tsA 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.
Projeção da entrada do juiz
src/dispatcher/live.tsDados: entrada do juizVerifier · veredito do modeloVerifier actorO dispatcher executa o Verifier com a entrada projetada.
Verifier · veredito do modelo
Verifier actorDados: judge.scoretranscript.jsonl · append-onlysrc/transcriptO veredito do Verifier é registrado como um evento judge.score. É o julgamento de um modelo, não um fato da execução.
Estado → próximos efeitos
src/reducerExecução · julgamento: pontuação · evidências do QAAntiengano · correção da pontuaçãosrc/validatorAo 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.
Antiengano · correção da pontuação
src/validatorDados: veredito corrigidoRoteamento do vereditosrc/reducerUm 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.
Roteamento do veredito
src/reducerDados: concluídoConcluído · PASS ou motivo de paradasession donePASS 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.
Antiengano · correção da pontuação
src/validatorDados: veredito corrigidoRoteamento do vereditosrc/reducerUm 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.
Roteamento do veredito
src/reducerExecução · julgamento: verificação de PARTIALIdeia de jogo · conduçãoPARTIAL aguarda que uma pessoa verifique.
Roteamento do veredito
src/reducerExecução · julgamento: redesenho · reparosrc/dispatcher/live.tsEntre 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.
Roteamento do veredito
src/reducerDados: concluídoConcluído · PASS ou motivo de paradasession donePASS 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.
Ideia de jogo · conduçãoExecução · julgamento: ideia · conduçãoEscrever comandos na inbox
packages/studioUma 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.
transcript.jsonl · append-only
src/transcriptDados: novos eventos · reproduçãoLoop de eventos · reprodução · tailsrc/loop/coordinator.tsO 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.
Loop de eventos · reprodução · tail
src/loop/coordinator.tsExecução · julgamento: reduzir em ordemEstado → próximos efeitossrc/reducerOs 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.
transcript.jsonl · append-only
src/transcriptObservação · relatório: leitura · SSEVisão de eventos · artefatospackages/studioO 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.