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 commanderEn 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/.gitignoreEl 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.