
CRUMB
Generative Game Studio · Demo
De una idea de juego en una línea a un borrador jugable, con el trabajo de los agentes a la vista y abierto a intervención.
CRUMB es un arnés de estudio multiagente para prototipar juegos casuales.
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
Los agentes que construyen un juego, separados de la evidencia que lo juzga.
Una demo de estudio local que lleva una idea de juego en una línea por la especificación, el build y las comprobaciones de ejecución. Cada paso queda en una transcripción JSONL, un reducer puro decide los siguientes efectos y solo el dispatcher produce efectos secundarios. La QA de ejecución y el veredicto del modelo se mantienen separados para decidir entre aprobado, rediseño, reparación e intervención humana.
Se propone un juego en una línea y los agentes de Claude Code, Codex y Gemini CLI colaboran mediante Planner → Builder → QA determinista → Verifier, mientras CRUMB Studio muestra los eventos, el avance y los artefactos y acepta intervenciones en lenguaje natural.
Una demo que se clona del repositorio público y se ejecuta en local.
De la idea al juego
Una idea se convierte en especificación, build y ejecución de QA. Cada paso pasa por la transcripción; los actores no se llaman entre sí.
Idea de juego · intervenciónEjecución · juicio: idea · intervenciónEscribir comandos en el inbox
packages/studioUna idea de juego en una línea y la intervención en lenguaje natural se introducen en Studio, que escribe comandos en el inbox. Studio nunca edita la transcripción directamente.
Escribir comandos en el inbox
packages/studioDatos: eventos userBucle de eventos · reproducción · tailsrc/loop/coordinator.tsEl coordinador lee los comandos del inbox y los registra en la transcripción como eventos user.
Bucle de eventos · reproducción · tail
src/loop/coordinator.tsEjecución · juicio: reducir en ordenEstado → siguientes efectossrc/reducerLos eventos en vivo pasan uno a uno de una cola al reducer, lo que mantiene el orden de los efectos de cada evento; el dispatch en sí se ejecuta de forma asíncrona.
Estado → siguientes efectos
src/reducerEjecución · juicio: efectosEjecutar efectos · lanzar actoressrc/dispatcher/live.tsEl reducer es una función pura que solo decide el estado y los siguientes efectos: un goal selecciona al Planner, una spec al Builder, un build un qa_check.
Actor → arnés · modelo
model-config · presetEjecución · juicio: configuración de actoressrc/dispatcher/live.tsQué arnés, proveedor y modelo ejecutan un actor se resuelve en el orden flag de CLI > config > preset > ambient > fallback. Un actor no es un proveedor fijo.
Ejecutar efectos · lanzar actores
src/dispatcher/live.tsEjecución · juicio: ejecutar el PlannerPlanner Lead · especificaciónagent actor · CLIEl dispatcher ejecuta el Planner con una entrada proyectada. La investigación condicional continúa con el plan de investigación del Planner y el traspaso de evidencia, plegados en este mapa.
Planner Lead · especificación
agent actor · CLIDatos: spectranscript.jsonl · append-onlysrc/transcriptLa especificación del Planner se convierte en un evento de transcripción, y a partir de ella el reducer selecciona al Builder. Los actores no se llaman entre sí.
Ejecutar efectos · lanzar actores
src/dispatcher/live.tsEjecución · juicio: ejecutar el BuilderBuilder · escribe el juegoagent actor · CLIEl dispatcher ejecuta el Builder. Si el mismo actor sigue fallando, se abre un circuito que cambia de adaptador, y se detiene si los fallos continúan.
Builder · escribe el juego
agent actor · CLIDatos: archivosArchivos del juegoartifacts/El Builder escribe el archivo de entrada, las fuentes y los assets como artefactos.
Builder · escribe el juego
agent actor · CLIDatos: registro del buildtranscript.jsonl · append-onlysrc/transcriptEl evento build y artifact.created se registran en la transcripción con la identidad del artefacto.
Ejecutar efectos · lanzar actores
src/dispatcher/live.tsEjecución · juicio: qa_checkQA de ejecución · comprobacionesdispatcher/qa-runner.tsTras un evento build, el reducer emite un efecto qa_check con la identidad del artefacto y del build y las condiciones de aceptación, y el dispatcher lo ejecuta.
Archivos del juego
artifacts/Datos: qué se ejecutaQA de ejecución · comprobacionesdispatcher/qa-runner.tsLa QA de ejecución ejecuta el artefacto real con comprobaciones de código y de navegador. El tiempo de espera por defecto de 120 segundos es un valor de configuración.
QA de ejecución · comprobaciones
dispatcher/qa-runner.tsDatos: qa.resulttranscript.jsonl · append-onlysrc/transcriptCon éxito o con fallo, el resultado se registra como un evento de sistema qa.result. Aunque la comprobación lance una excepción, se registra un resultado con los campos fallidos.
Frontera de confianza de la verificación
La QA de ejecución es evidencia de ejecutar realmente el artefacto; el Verifier es un modelo que juzga evidencia proyectada. El reducer concilia ambas antes de elegir el siguiente camino.
QA de ejecución · comprobaciones
dispatcher/qa-runner.tsDatos: qa.resulttranscript.jsonl · append-onlysrc/transcriptCon éxito o con fallo, el resultado se registra como un evento de sistema qa.result. Aunque la comprobación lance una excepción, se registra un resultado con los campos fallidos.
transcript.jsonl · append-only
src/transcriptDatos: solo evidenciaProyección de la entrada del juezsrc/dispatcher/live.tsLa entrada del Verifier se proyecta a partir de los últimos goal, spec, build, qa.result y artifact.created, más evidencia de investigación seleccionada. Reduce el contexto; no demuestra aislamiento ni ausencia de fugas.
Proyección de la entrada del juez
src/dispatcher/live.tsDatos: entrada del juezVerifier · veredicto del modeloVerifier actorEl dispatcher ejecuta el Verifier con la entrada proyectada.
Verifier · veredicto del modelo
Verifier actorDatos: judge.scoretranscript.jsonl · append-onlysrc/transcriptEl veredicto del Verifier se registra como un evento judge.score. Es el juicio de un modelo, no un hecho de la ejecución.
Estado → siguientes efectos
src/reducerEjecución · juicio: puntuación · evidencia de QAAntiengaño · corrección de la puntuaciónsrc/validatorAnte judge.score, el reducer lo pasa a la comprobación antiengaño junto con el resultado de la QA, el proveedor del Builder y el plan y la evidencia de investigación.
Antiengaño · corrección de la puntuación
src/validatorDatos: veredicto corregidoEnrutamiento del veredictosrc/reducerUn PASS sin una ejecución exitosa pasa a FAIL, y la puntuación relacionada con la ejecución se corrige con la QA determinista. Las demás reglas son correcciones condicionales, no una prueba general de veracidad.
Enrutamiento del veredicto
src/reducerDatos: terminadoTerminado · PASS o motivo de paradasession donePASS termina la sesión como done. Las paradas por presupuesto o por circuito también terminan como done pero conservan su motivo de parada, así que done no siempre es PASS.
Fallo e intervención humana
PARTIAL va a una persona, Critical a rediseño, Important o Minor a reparación, y las paradas por presupuesto o circuito dejan un motivo de parada.
Antiengaño · corrección de la puntuación
src/validatorDatos: veredicto corregidoEnrutamiento del veredictosrc/reducerUn PASS sin una ejecución exitosa pasa a FAIL, y la puntuación relacionada con la ejecución se corrige con la QA determinista. Las demás reglas son correcciones condicionales, no una prueba general de veracidad.
Enrutamiento del veredicto
src/reducerEjecución · juicio: revisión de PARTIALIdea de juego · intervenciónPARTIAL espera a que una persona lo revise.
Enrutamiento del veredicto
src/reducerEjecución · juicio: rediseño · reparaciónsrc/dispatcher/live.tsEntre FAIL y REJECT, Critical vuelve al Planner para rediseño e Important o Minor al Builder como comentarios de corrección, todo ejecutado como efectos del dispatcher.
Enrutamiento del veredicto
src/reducerDatos: terminadoTerminado · PASS o motivo de paradasession donePASS termina la sesión como done. Las paradas por presupuesto o por circuito también terminan como done pero conservan su motivo de parada, así que done no siempre es PASS.
Idea de juego · intervenciónEjecución · juicio: idea · intervenciónEscribir comandos en el inbox
packages/studioUna idea de juego en una línea y la intervención en lenguaje natural se introducen en Studio, que escribe comandos en el inbox. Studio nunca edita la transcripción directamente.
Reproducción y observación
Reconstruir el estado a partir de la transcripción no ejecuta ningún efecto, y Studio lee el mismo registro para mostrarlo.
transcript.jsonl · append-only
src/transcriptDatos: nuevos eventos · reproducciónBucle de eventos · reproducción · tailsrc/loop/coordinator.tsEl writer valida el esquema, asigna un ULID y una marca de tiempo, y anexa. En la reproducción, los eventos pasados solo pasan por el reducer; sus efectos no se vuelven a ejecutar.
Bucle de eventos · reproducción · tail
src/loop/coordinator.tsEjecución · juicio: reducir en ordenEstado → siguientes efectossrc/reducerLos eventos en vivo pasan uno a uno de una cola al reducer, lo que mantiene el orden de los efectos de cada evento; el dispatch en sí se ejecuta de forma asíncrona.
transcript.jsonl · append-only
src/transcriptObservación · informe: lectura · SSEVista de eventos · artefactospackages/studioStudio lee la transcripción y los artefactos y muestra el avance, las métricas y los artefactos mediante SSE. No es telemetría enviada a un servicio remoto.
Todas las conexiones con el mismo grosor. Elija un flujo para resaltar solo su recorrido, con pasos numerados.
- Continua · dirección de entradas, resultados y registros
- Discontinua · ejecución, juicio, solicitud
- Puntos largos · observación e informe, aparte del juicio
- Línea negra gruesa · el flujo seleccionado; los números dan el orden
- Recuadro · frontera de código o de estado, con su nombre en la cabecera
- Chip interior · componente de esa frontera
- Recuadro punteado · fuera de esa frontera
- Contorno naranja · donde decide un modelo
- Bucle de eventos · reducer · dispatcher
- Registros · configuración · artefactos
- Comprobaciones deterministas · corrección
- Studio · actores
Trazado a partir de las rutas de código del commit público f5e17c0. Los actores son roles de ejecución, distintos de los agentes de programación usados para construir este repositorio.
- Fuente del estado
- La transcripción es la fuente del estado y el reducer es una función pura. Solo el dispatcher produce efectos secundarios (ejecutar actores, la QA, escribir archivos), así que la reproducción reconstruye el estado sin efectos.
- Qué cubre la reproducción
- La reproducción da el mismo estado; no hace deterministas las generaciones del LLM ni el comportamiento del navegador y de la red.
- Qué cubre un veredicto
- La QA de ejecución solo revisa las comprobaciones configuradas, y la puntuación del Verifier es un canal de evidencia más. Ninguno mide todo el comportamiento del juego, la diversión ni la satisfacción de los usuarios.