Saltar al contenido

Control Room

rationale ui — el subgrafo de trabajo, la memoria causal y la actividad de los agentes en vivo, servido en solo lectura desde tu máquina.

Subgrafo de trabajo de pipeline::preparepipeline::prepare en el propio código de Rationale: lo llaman la CLI, el servidor MCP y un test de la CLI; llama a binding_match::governing, storage::list_records, context::gather, retrieval::compile y operations::save. Las etiquetas ámbar cuentan los Records que gobiernan cada símbolo.src/main.rs2 recordscmd_preparesrc/mcp/server.rs3 recordscall_prepare_changetests/cli.rs1 recordprepare_with_a_relative_…src/pipeline.rs1 recordprepare92 llamadas salientes5 entrantessrc/binding_match.rsgoverningsrc/storage.rs2 recordslist_recordssrc/context.rsgathersrc/retrieval.rscompilesrc/operations.rssave
targetcallercalleetestArista observedRecords que la gobiernanEl propio pipeline::prepare de Rationale según Codebase Memory, revisión 4be2ecd: 3 de sus callers y 5 de sus 92 llamadas. Aquí se dibuja plano; el Control Room lo muestra en 3D.

Abrirlo

rationale ui
rationale ui --port 9800 --no-open

El Control Room escucha solo en 127.0.0.1 (puerto 9748 por defecto; sin --port prueba los siguientes si está ocupado) y abre tu navegador. La interfaz va embebida en el binario. Observa el mismo estado local que la CLI y el servidor MCP y nunca escribe: rationale serve sigue siendo la frontera con los agentes.

Grafo

El subgrafo de trabajo de las operaciones recientes, en 3D:

  • el color del nodo es su rol en el cambio — target, caller, callee, dependencia, dependiente, test, contexto;
  • el color de la arista es su estado estructural — observed, indirect, orphaned, unknown;
  • un anillo causal marca los nodos y relaciones explicados por un Record.

Selecciona un nodo para leer los Records que lo gobiernan, sus relaciones y las operaciones en las que apareció. Selecciona una relación para ver por qué existe y cómo cambió su estado en el tiempo.

Actividad

Cada sesión de agente en tiempo real: qué cliente se conectó (Claude Code, Codex, Cursor o la CLI), la intención y el target de cada operación, la latencia del proveedor, el tamaño del packet, los candidatos capturados y descartados, los conflictos y las explicaciones en riesgo. Los eventos llegan por Server-Sent Events; no hace falta recargar.

Memoria

El canon como navegador: filtra por tipo, estado y autoridad; lee statement, rationale, procedencia, bindings y relaciones explicadas; ve los conflictos pendientes con Records fijados. Los Records recién capturados se marcan al llegar.

Sistema

Proyecto, revisión de Git, conteos del canon, estado del stream y la tabla de sesiones. También recuerda la frontera de privacidad de abajo.

Qué se guarda y dónde

La actividad es un archivo NDJSON por sesión en .rationale-local/activity/; los snapshots de operación viven en .rationale-local/operations/. Ambos se excluyen de Git automáticamente y nunca salen de la máquina. Guardan identificadores, la intención declarada (una línea, como máximo 280 caracteres) y referencias a Records — nunca el contenido de un Record, código ni conversaciones (ADR-0017). La retención conserva los últimos 14 días, con un máximo de 500 sesiones y 200 operaciones.

RATIONALE_ACTIVITY=off desactiva por completo la actividad y los snapshots.

Seguridad

El servidor acepta solo GET y HEAD, valida la cabecera Host contra nombres de loopback (defensa contra DNS rebinding), acota el tamaño y el tiempo de las peticiones, envía una Content-Security-Policy restrictiva y sirve solo assets embebidos — nunca una ruta del sistema de archivos.