> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Dashboard

> Monitorea sesiones de agentes, revisa llamadas a herramientas y gestiona políticas

El dashboard de failproofai es una aplicación web local para monitorear tus sesiones de agentes de IA y gestionar políticas. Descubre qué hicieron tus agentes mientras no estabas.

***

## Iniciar el dashboard

```bash theme={null}
failproofai
```

Se abre en `http://localhost:8020`.

El dashboard lee los datos de configuración del proyecto local, la sesión y failproofai directamente del sistema de archivos. Las funciones autenticadas opcionales, como recordatorios de auditoría e invitaciones, envían la información necesaria para esas solicitudes (incluidas las direcciones de correo electrónico) a APIs remotas.

***

## Páginas

### Proyectos

Lista todos los proyectos de Claude Code, OpenAI Codex, GitHub Copilot CLI *(beta)*, Cursor Agent *(beta)*, OpenCode *(beta)*, Pi *(beta)*, Hermes, OpenClaw, Factory Droid, Devin, Antigravity y Goose encontrados en tu máquina. Los proyectos de Claude se descubren desde `~/.claude/projects/` (o la ruta definida por `CLAUDE_PROJECTS_PATH`); los proyectos de Codex se descubren escaneando cada transcripción en `~/.codex/sessions/<YYYY>/<MM>/<DD>/*.jsonl` y agrupando por el `cwd` registrado en el primer registro de cada sesión; los proyectos de Copilot CLI se descubren escaneando cada `~/.copilot/session-state/<sessionId>/workspace.yaml` (configurable mediante `COPILOT_HOME`) y agrupando por su campo `cwd`; los proyectos de Cursor Agent se descubren escaneando los metadatos por sesión en `~/.cursor/agent-sessions/<sessionId>/` (configurable mediante `CURSOR_HOME`, con `conversations/` y `sessions/` como alternativas) buscando un escalar `cwd` en `meta.json` / `session.json` / `workspace.yaml`; los proyectos de OpenCode se descubren consultando su base de datos SQLite en `~/.local/share/opencode/opencode.db` mediante `opencode db --format json` (leemos las tablas `session` y `project` y agrupamos por `project_id`); los proyectos de Pi se descubren escaneando transcripciones JSONL por sesión en `~/.pi/agent/sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl` (configurable mediante `PI_SESSIONS_DIR`) y extrayendo el `cwd` del primer registro de cada sesión; las sesiones del gateway de Hermes se leen directamente de su almacén SQLite en `~/.hermes/state.db` (configurable mediante `HERMES_DB_PATH`) y se agrupan en proyectos `hermes-<source>` por `source` (Slack/Telegram/cli/cron — las sesiones del gateway no tienen cwd); las sesiones del gateway de OpenClaw se leen desde `~/.openclaw/agents/<agentId>/sessions/*.jsonl` y se agrupan en proyectos `openclaw-<agentId>` (también sin cwd); los proyectos de Factory Droid se descubren desde las transcripciones JSONL en `~/.factory/sessions/<encoded-cwd>/*.jsonl` y se agrupan por cwd; los proyectos de Devin desde su base de datos SQLite en `~/.local/share/devin/cli/sessions.db` (agrupados por el `working_directory` de cada sesión); los proyectos de Antigravity desde las transcripciones JSONL en `~/.gemini/antigravity-cli/brain/<conversationId>/…/transcript_full.jsonl` y agrupados por cwd; y los proyectos de Goose desde su base de datos SQLite en `~/.local/share/goose/sessions/sessions.db` (agrupados por el `working_dir` de cada sesión). Un proyecto que ha sido utilizado por múltiples CLIs se muestra como una sola fila con todas las insignias correspondientes. Usa el menú desplegable **CLI** sobre la tabla para filtrar por un agente CLI específico; la URL preserva tu selección como `?cli=claude|codex|copilot|cursor|opencode|pi|hermes|openclaw|factory|devin|antigravity|goose`.

Cada proyecto muestra:

* Nombre del proyecto (derivado de la ruta de la carpeta)
* Una insignia de CLI — `Claude Code` (naranja), `OpenAI Codex` (morado), `GitHub Copilot` (azul), `Cursor Agent` (esmeralda), `OpenCode` (ámbar), `Pi` (rosa) y/o `Hermes` (índigo)
* Fecha de la actividad de sesión más reciente

Haz clic en un proyecto para ver sus sesiones.

### Sesiones

Lista todas las sesiones dentro de un proyecto. Cada sesión muestra:

* ID de sesión
* Marcas de tiempo de inicio y fin
* Número de llamadas a herramientas
* Recuento de actividad de hooks (políticas que se activaron)

Usa el filtro de rango de fechas y la búsqueda por ID de sesión para acotar la lista. Las sesiones están paginadas.

Haz clic en una sesión para abrir el visor de sesión.

### Visor de sesión

El visor de sesión responde la pregunta clave para los agentes autónomos: ¿qué hizo el agente y se mantuvo en curso? Una insignia de CLI junto al encabezado indica si la sesión es una transcripción de Claude Code, OpenAI Codex, GitHub Copilot CLI, Cursor Agent, OpenCode, Pi, Hermes, OpenClaw, Factory Droid, Devin, Antigravity o Goose. Muestra una línea de tiempo de todo lo que ocurrió en una sesión:

* **Mensajes** - Las respuestas de texto de Claude y los prompts del usuario
* **Llamadas a herramientas** - Cada herramienta que Claude invocó, con su entrada y salida
* **Actividad de políticas** - Para cada llamada a herramienta, qué políticas se activaron y qué decisión devolvieron

La barra de estadísticas en la parte superior muestra la duración de la sesión, el total de llamadas a herramientas y un resumen de las decisiones de los hooks (recuentos de allow / deny / instruct).

Haz clic en el botón **Descargar Logs** para exportar la sesión. Para sesiones de Claude Code, Codex, Copilot, Cursor y Pi obtienes la transcripción JSONL original en disco byte a byte; para OpenCode (cuyas sesiones viven en SQLite, no en disco) obtienes un documento JSON que refleja las tablas subyacentes `session` / `messages` / `parts`.

### Auditoría

Un informe con personalidad propia sobre cómo se ha comportado realmente tu agente a lo largo de sesiones pasadas. Ejecuta el mismo escaneo que el CLI `failproofai audit` pero lo renderiza como un póster de pantalla completa compartible + cuatro secciones debajo del pliegue:

1. **Póster** — ocupa el primer viewport. Región de captura PNG autónoma con el logotipo de failproof\_ai + etiqueta de auditoría · índice de arquetipo (`№ NN de 08`) + fecha de auditoría · puntuación numérica (0–100) + píldora de rango percentil (`top 15%`) · el nombre del arquetipo (uno de `the optimist`, `the cowboy`, `the explorer`, `the goldfish`, `the paranoid architect`, `the precision builder`, `the hammer`, `the ghost`) + tira de 3 palabras clave · línea de rareza `// solo el N% de los agentes son este arquetipo` · tesela de símbolo de 8×8 píxeles · pie de página `audit yours → failproof.ai`. Tres botones de compartir se ubican justo fuera del área de captura: `post your archetype` (X intent), `share on linkedin`, `download poster`. La captura se realiza con `html-to-image` para que el PNG coincida píxel a píxel con el renderizado en pantalla (bordes discontinuos, máscara SVG del logotipo, degradados, métricas de fuente — todo preservado).
2. **Fortalezas** — lista de filas con ✓ tranquilas sobre comportamientos que tu agente ya hace bien, derivadas de los datos de auditoría en vivo (tasa limpia de llamadas a herramientas, sin pushes directos a main, cero filtraciones de credenciales, cero tormentas de reintentos) — cada una aparece solo cuando la política relevante tiene un historial limpio durante la ventana de auditoría.
3. **Peculiaridades** — tabla de lo que se escapó, ordenada por severidad: `cuándo · qué se escapó + la política que lo habría detectado · píldora de severidad · visto`, donde la recurrencia se lee como `new` (una vez), `N× seen` (2–9 veces) o `recurring` (10+).
4. **Cómo mejorar** — lista de filas tranquilas, una por política prescrita: nombre de la política en blanco, descripción de una línea, comando de instalación + botón de copiar a la derecha. El encabezado de la sección dice `enable all N → projected <score> · <tier>` (la puntuación que alcanzarías con todas las correcciones aplicadas), y su botón `[install all]` copia el comando combinado `failproofai policy add a b c …` para cada política prescrita.
5. **Vuelve mejor** — dos tarjetas una al lado de la otra. Izquierda: establecer un recordatorio (selector de cadencia `3d` / `7d` / `14d` / `30d`; persiste a través de `/api/auth/reminder` una vez autenticado). Derecha: desbloquear ventajas failproof — `invite a friend` abre un modal que acepta una lista separada por comas/espacios/saltos de línea de correos de amigos (máx. 10 por envío), hace POST a `/api/audit/invite`, que reenvía al servidor API `POST /v0/invite`. El servidor API envía un correo por destinatario desde `invite@failproof.ai` con el remitente en Cc y `Reply-To` configurado, para que el destinatario vea quién lo invitó y el remitente reciba una copia en su bandeja de entrada. Los usuarios anónimos son dirigidos primero al `AuthDialog` para que el correo del remitente sea conocido antes de enviar las invitaciones. El cumplimiento de derechos/ventajas es una tarea de seguimiento.

Impulsado por el runtime de `failproofai audit` — consulta [Audit CLI](/es/cli/audit) para el motor de escaneo subyacente, los flags admitidos y los invariantes de caché por transcripción. El dashboard almacena en caché el último resultado en `~/.failproofai/audit-dashboard.json` (modo `0600`, ranura única, las nuevas ejecuciones sobreescriben) para que las revisitas sean instantáneas; **tanto la caché por transcripción como la caché del resultado completo se rechazan al leer una vez que tienen más de 7 días** para que el dashboard nunca sirva silenciosamente un resultado de una semana atrás — pasado el TTL, `/audit` cae a su estado vacío y solicita una nueva ejecución. Hacer clic en `[ re-audit now ]` cerca de la parte inferior del informe hace POST a `/api/audit/run` con `noCache: true` — la re-auditoría omite la caché por transcripción y re-escanea cada transcripción desde cero en lugar de devolver silenciosamente el resultado en caché — y el dashboard consulta `/api/audit/status` a 1Hz hasta que finaliza la ejecución; una franja de progreso rosa fija se ancla en la parte superior del viewport durante la ejecución con un temporizador de tiempo transcurrido, y el nuevo resultado se intercambia en su lugar al terminar exitosamente (sin recarga completa de página; una re-auditoría fallida deja el informe anterior intacto). En caso de fallo, la franja se vuelve roja con texto basado en el `RerunError.kind` (`timeout` / `network` / `post_failed`). El estado vacío (sin caché o caducado) y el estado sin sesiones (caché existe pero el escaneo no encontró transcripciones) se muestran por separado.

### Políticas

Una página de dos pestañas para gestionar políticas y revisar la actividad.

<Tabs>
  <Tab title="Pestaña de políticas">
    * Selección múltiple de qué CLIs de agentes protege failproofai desde un único panel — Claude Code, OpenAI Codex, GitHub Copilot, Cursor Agent, OpenCode, Pi y Hermes tienen cada uno una fila con el estado de instalación (`Active` / `Detected` / `Inactive`), la ruta de configuración de alcance de usuario y un acento de color de marca. Marca o desmarca los CLIs que deseas y haz clic en `Apply changes` para instalar/desinstalar la diferencia en un solo paso. Los CLIs cuyo binario se detecta en el PATH están marcados previamente.
    * Activa o desactiva políticas individuales con un solo clic (escribe en `~/.failproofai/policies-config.json` — compartido entre todos los CLIs instalados)
    * Expande una política para configurar sus parámetros (para políticas que admiten `policyParams`)
    * Establece una ruta de archivo de políticas personalizada
  </Tab>

  <Tab title="Pestaña de actividad">
    * Historial paginado completo de cada evento de hook que se ha disparado en todas las sesiones
    * Filtra por decisión, tipo de evento, CLI (Claude Code / OpenAI Codex / GitHub Copilot *(beta)* / Cursor Agent *(beta)* / OpenCode *(beta)* / Pi *(beta)* / Hermes / OpenClaw / Factory Droid / Devin / Antigravity / Goose), nombre de política o ID de sesión
    * Cada fila muestra: marca de tiempo, nombre de política, decisión, insignia de CLI (naranja = Claude Code, morado = OpenAI Codex, azul = GitHub Copilot, esmeralda = Cursor Agent, ámbar = OpenCode, rosa = Pi, índigo = Hermes, verde azulado = OpenClaw, rosa intenso = Factory Droid, violeta = Devin, cian = Antigravity, lima = Goose), nombre de herramienta, ID de sesión y el motivo de las decisiones deny/instruct
    * Haz clic en un ID de sesión para abrir su transcripción — el visor detecta automáticamente qué CLI disparó el hook (Claude `~/.claude/projects/…`, Codex `~/.codex/sessions/…`, Copilot CLI `~/.copilot/session-state/<id>/events.jsonl`, Cursor Agent `~/.cursor/agent-sessions/<id>/events.jsonl`, OpenCode `~/.local/share/opencode/opencode.db`, Pi `~/.pi/agent/sessions/<encoded-cwd>/<id>.jsonl`, Hermes `~/.hermes/state.db`, OpenClaw `~/.openclaw/agents/<id>/sessions/*.jsonl`, Factory Droid `~/.factory/sessions/<encoded-cwd>/<id>.jsonl`, Devin `~/.local/share/devin/cli/sessions.db`, Antigravity `~/.gemini/antigravity-cli/brain/<id>/…/transcript_full.jsonl`, Goose `~/.local/share/goose/sessions/sessions.db`) y muestra la insignia de CLI correspondiente en el encabezado
  </Tab>
</Tabs>

***

## Actualización automática

El dashboard tiene un interruptor de actualización automática en la navegación superior. Cuando está habilitado, la página actual se actualiza periódicamente para mostrar nuevas sesiones y actividad de políticas a medida que aparecen. Esencial para monitorear sesiones de agentes autónomos de larga duración.

***

## Deshabilitar páginas

Si solo necesitas algunas partes del dashboard, establece `FAILPROOFAI_DISABLE_PAGES` con una lista separada por comas de nombres de páginas:

```bash theme={null}
FAILPROOFAI_DISABLE_PAGES=policies failproofai
```

Valores válidos: `policies`, `projects`, `audit`.

***

## Configurar la ruta de proyectos

Por defecto, el dashboard lee desde el directorio estándar de proyectos de Claude Code. Sobreescríbelo para configuraciones personalizadas:

```bash theme={null}
CLAUDE_PROJECTS_PATH=/custom/path/to/projects failproofai
```

***

## Acceso desde un host que no es localhost

Al ejecutar el dashboard en **modo desarrollo** (`npm run dev`) y acceder a él desde un nombre de host distinto de `localhost` — por ejemplo, un dominio personalizado, una IP remota o una URL tunelizada — puede aparecer una advertencia como:

```text theme={null}
⚠ Blocked cross-origin request to Next.js dev resource /_next/webpack-hmr from "dashboard.example.com".
```

Esto ocurre porque Next.js bloquea el acceso de origen cruzado a su websocket de HMR (recarga en caliente de módulos), que es una función exclusiva del modo desarrollo. Para permitir tu host, usa el flag `--allowed-origins`:

```bash theme={null}
npm run dev -- --allowed-origins dashboard.example.com
```

Para múltiples hosts o IPs, pasa una lista separada por comas:

```bash theme={null}
npm run dev -- --allowed-origins dashboard.example.com,192.168.1.5
```

También puedes establecer la variable de entorno `FAILPROOFAI_ALLOWED_DEV_ORIGINS` en su lugar:

```bash theme={null}
FAILPROOFAI_ALLOWED_DEV_ORIGINS=dashboard.example.com npm run dev
```

<Note>
  Esto solo aplica al modo desarrollo. Al ejecutar `failproofai` (modo producción), no hay websocket de HMR ni problemas de recursos de desarrollo de origen cruzado.
</Note>
