Solo el personaje de pan del logotipo de CRUMB: una rebanada de pan de molde sonriente con un mordisco en la esquina superior derecha
Volver a la sala

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.

Diseño y desarrollo · hecho con agentes de programación 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

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.

Mapa del sistema · trazado a partir de las rutas de código del commit público f5e17c0
Sistema del estudio CRUMBUna persona propone y guía un juego desde Studio, y Studio escribe comandos en un inbox. El coordinador pasa al reducer, en orden, los nuevos eventos del inbox y de la transcripción; el reducer puro decide el estado y los siguientes efectos, y solo el dispatcher produce efectos secundarios. La especificación del Planner, el build y los artefactos del Builder, el resultado de la QA de ejecución y el juicio del Verifier se convierten en eventos de transcripción. El Verifier recibe solo evidencia proyectada, y el reducer comprueba y corrige su puntuación con el resultado de la QA: PASS termina la sesión, PARTIAL espera a una persona y cualquier otro resultado vuelve a rediseño o reparación.Idea de juego · intervenciónUna persona, en localpackages/studioVista de eventos · artefactosEscribir comandos en el inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsBucle de eventos · reproducción · tailsrc/reducerEstado → siguientes efectosEnrutamiento del veredictosession doneTerminado · PASS o motivo de paradasrc/dispatcher/live.tsEjecutar efectos · lanzar actoresProyección de la entrada del juezmodel-config · presetActor → arnés · modeloagent actor · CLIPlanner Lead · especificaciónBuilder · escribe el juegoartifacts/Archivos del juegodispatcher/qa-runner.tsQA de ejecución · comprobacionesVerifier actorVerifier · veredicto del modelosrc/validatorAntiengaño · corrección de la puntuaciónPersonas · StudioControl de eventosla transcripción es la fuente del estadoAgentes de trabajo · artefactosVerificación · decisión1idea · intervención2eventos user3reducir en orden4efectos5configuración de actores6ejecutar el Planner7spec8ejecutar el Builder9 archivos · Builder · escribe el juego → Archivos del juego910registro del build11qa_check12qué se ejecuta13qa.result1qa.result2solo evidencia3entrada del juez4judge.score5puntuación · evidencia de QA6veredicto corregido7terminado1veredicto corregido2revisión de PARTIAL3rediseño · reparación4terminado5idea · intervención1nuevos eventos · reproducción2reducir en orden3lectura · SSE

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í.

  1. Idea de juego · intervenciónEjecución · juicio: idea · intervenciónEscribir comandos en el inboxpackages/studio

    Una 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.

  2. Escribir comandos en el inboxpackages/studioDatos: eventos userBucle de eventos · reproducción · tailsrc/loop/coordinator.ts

    El coordinador lee los comandos del inbox y los registra en la transcripción como eventos user.

  3. Bucle de eventos · reproducción · tailsrc/loop/coordinator.tsEjecución · juicio: reducir en ordenEstado → siguientes efectossrc/reducer

    Los 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.

  4. Estado → siguientes efectossrc/reducerEjecución · juicio: efectosEjecutar efectos · lanzar actoressrc/dispatcher/live.ts

    El 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.

  5. Actor → arnés · modelomodel-config · presetEjecución · juicio: configuración de actoressrc/dispatcher/live.ts

    Qué 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.

  6. Ejecutar efectos · lanzar actoressrc/dispatcher/live.tsEjecución · juicio: ejecutar el PlannerPlanner Lead · especificaciónagent actor · CLI

    El 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.

  7. Planner Lead · especificaciónagent actor · CLIDatos: spectranscript.jsonl · append-onlysrc/transcript

    La 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í.

  8. Ejecutar efectos · lanzar actoressrc/dispatcher/live.tsEjecución · juicio: ejecutar el BuilderBuilder · escribe el juegoagent actor · CLI

    El 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.

  9. Builder · escribe el juegoagent actor · CLIDatos: archivosArchivos del juegoartifacts/

    El Builder escribe el archivo de entrada, las fuentes y los assets como artefactos.

  10. Builder · escribe el juegoagent actor · CLIDatos: registro del buildtranscript.jsonl · append-onlysrc/transcript

    El evento build y artifact.created se registran en la transcripción con la identidad del artefacto.

  11. Ejecutar efectos · lanzar actoressrc/dispatcher/live.tsEjecución · juicio: qa_checkQA de ejecución · comprobacionesdispatcher/qa-runner.ts

    Tras 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.

  12. Archivos del juegoartifacts/Datos: qué se ejecutaQA de ejecución · comprobacionesdispatcher/qa-runner.ts

    La 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.

  13. QA de ejecución · comprobacionesdispatcher/qa-runner.tsDatos: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Con é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.

  1. QA de ejecución · comprobacionesdispatcher/qa-runner.tsDatos: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Con é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.

  2. transcript.jsonl · append-onlysrc/transcriptDatos: solo evidenciaProyección de la entrada del juezsrc/dispatcher/live.ts

    La 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.

  3. Proyección de la entrada del juezsrc/dispatcher/live.tsDatos: entrada del juezVerifier · veredicto del modeloVerifier actor

    El dispatcher ejecuta el Verifier con la entrada proyectada.

  4. Verifier · veredicto del modeloVerifier actorDatos: judge.scoretranscript.jsonl · append-onlysrc/transcript

    El veredicto del Verifier se registra como un evento judge.score. Es el juicio de un modelo, no un hecho de la ejecución.

  5. Estado → siguientes efectossrc/reducerEjecución · juicio: puntuación · evidencia de QAAntiengaño · corrección de la puntuaciónsrc/validator

    Ante 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.

  6. Antiengaño · corrección de la puntuaciónsrc/validatorDatos: veredicto corregidoEnrutamiento del veredictosrc/reducer

    Un 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.

  7. Enrutamiento del veredictosrc/reducerDatos: terminadoTerminado · PASS o motivo de paradasession done

    PASS 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.

  1. Antiengaño · corrección de la puntuaciónsrc/validatorDatos: veredicto corregidoEnrutamiento del veredictosrc/reducer

    Un 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.

  2. Enrutamiento del veredictosrc/reducerEjecución · juicio: revisión de PARTIALIdea de juego · intervención

    PARTIAL espera a que una persona lo revise.

  3. Enrutamiento del veredictosrc/reducerEjecución · juicio: rediseño · reparaciónsrc/dispatcher/live.ts

    Entre 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.

  4. Enrutamiento del veredictosrc/reducerDatos: terminadoTerminado · PASS o motivo de paradasession done

    PASS 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.

  5. Idea de juego · intervenciónEjecución · juicio: idea · intervenciónEscribir comandos en el inboxpackages/studio

    Una 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.

  1. transcript.jsonl · append-onlysrc/transcriptDatos: nuevos eventos · reproducciónBucle de eventos · reproducción · tailsrc/loop/coordinator.ts

    El 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.

  2. Bucle de eventos · reproducción · tailsrc/loop/coordinator.tsEjecución · juicio: reducir en ordenEstado → siguientes efectossrc/reducer

    Los 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.

  3. transcript.jsonl · append-onlysrc/transcriptObservación · informe: lectura · SSEVista de eventos · artefactospackages/studio

    Studio 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.