Conceptos

Estado

Todo lo que vexillum recuerda es JSON plano en disco, escrito de forma atómica.

Ningún proceso en segundo plano (sentinel, servidor del forum) guarda estado que no esté en disco. Cada dato en el que se apoya es un archivo, así que un reinicio (de vexillum, de herdr o de tu máquina) no pierde nada de lo que sabía.

Estructura

~/.vexillum/
  models.json              perfiles de modelo globales opcionales
  sentinel.pid  sentinel.lock  sentinel.json  sentinel.log
  sentinel-awaiters/       un registro por cada `vx sentinel await` vivo
  forum/                   el servidor y el listener de forum: pid, log, puerto
  forums/<session>/        una sesión de revisión de forum: cola, transcript, whiteboards
  projects/
    <repo>-<hash>/         un namespace por proyecto
      tasks/<id>.json      un archivo por tarea
      camps/               el pool de worktrees: pool.json y <slot>/<repo>/
      wakes/<id>.json      wakes pendientes del sentinel
      wakes/forum/         wakes de forum pendientes, uno por sesión de revisión
      forum-inbox/         feedback de forum esperando al commander
      pending/             decisiones pendientes del commander
      reports/             reportes de scouts
      pauses/              pausas declaradas por soldiers
      commanders.json      el pane de herdr de cada harness de commander

En el proyecto mismo, init escribe AGENTS.md o CLAUDE.md, .claude/ (las skills y el hook del sentinel), .vexillum/ (config.json, models.json, .gitignore) y, para un commander Pi, .pi/ (la extension de despertar y los ajustes de proyecto de Pi):

<project>/
  AGENTS.md  CLAUDE.md
  .claude/settings.json  .claude/skills/
  .pi/extensions/vexillum-wake.ts  .pi/settings.json      (solo un commander Pi)
  .vexillum/config.json  .vexillum/models.json  .vexillum/.gitignore

El estado por proyecto es local a la máquina; los archivos del proyecto se commitean con él. Ver Archivos para cada entrada, qué guarda y si es seguro borrarla.

La clave del proyecto

El namespace de un proyecto es <repo>-<hash>: el nombre del directorio más los primeros 8 caracteres hexadecimales del sha256 de su ruta absoluta, después de resolver symlinks. Dos proyectos nunca ven las tareas, wakes o camps del otro.

Mover un proyecto deja huérfano su estado

La clave se deriva de la ruta. Si renombrás o movés el proyecto, lo registrado bajo la clave vieja queda invisible para los comandos corridos desde la nueva ubicación. vexillum no detecta el cambio.

Tareas

Un archivo de tarea es el schema Task: id, kind, prompt, status, timestamps, el slot, la ruta, la branch y la base del camp, los identificadores del pane de herdr, el modelo, el effort y el harness, y, una vez bloqueada, un decision estructurado. vx status --json imprime exactamente este schema; ver status --json.

Escrituras atómicas

El estado se escribe en un archivo temporal y se renombra a su lugar, así un lector (el sentinel, un segundo dispatch, status) nunca ve un archivo a medio escribir.

Después de un reinicio

herdr restaura el layout de panes pero no el proceso dentro de ellos. vexillum reconcilia desde disco: las tareas que estaban running y cuyo agente de herdr se confirma desaparecido pasan a interrupted. Cualquier trabajo que el soldier hubiera commiteado sigue en su camp.

En esta página