status --json
El snapshot de la tropa legible por máquinas, y el schema de tarea que hay detrás.
vx status --jsonimprime un único objeto JSON. Es de solo lectura y no agrega nada a la tarea persistida: tasks es exactamente el schema Task que vexillum mismo lee de <project root>/tasks/*.json, así un consumidor como el skill muster nunca trabaja con una reinterpretación aparte. El agrupamiento, el filtrado y los juicios (qué cuenta como "needs attention", el enriquecimiento con GitHub) le corresponden al consumidor.
{
"schema_version": 1,
"generated_at": "2026-09-24T12:00:00Z",
"project_root": "/abs/path/to/this project's ~/.vexillum namespace",
"tasks": []
}Sin tareas, tasks es [], nunca null. Las tareas vienen ordenadas, la actualizada más recientemente primero.
Campos de una tarea
| Campo | Tipo | Notas |
|---|---|---|
schema_version | number | versión del schema del archivo de tarea; este build escribe 1 y todavía lee 0 |
id | string | 16 caracteres hexadecimales |
kind | "mission" o "scout" | |
prompt | string | el prompt original |
status | string | pending, running, blocked, done, failed, interrupted, shipped, unconfirmed, struck; ver Missions y scouts. Una tarea shipped espera que se mergee su pull request, no está trabada. Una tarea struck estaba interrupted o failed y su camp se devolvió con vx strike |
created_at, updated_at | hora RFC 3339 | |
camp_slot, camp_path, camp_branch | number, string, string | se definen cuando se adquiere un camp |
camp_base | string | branch de la que se bifurcó el camp; puede estar vacío |
output | string | el transcript capturado |
herdr_workspace_id, herdr_tab_id, herdr_pane_id, herdr_agent_name | string | el pane de herdr del soldier |
agent_not_found_since, idle_unconfirmed_since | hora | cuándo el sentinel vio la condición por primera vez |
pause_seen_at | hora | cuándo el sentinel vio por primera vez una pausa declarada válida en la tarea idle; se borra cuando la tarea termina. Permite que la nota de un unconfirmed diga que existió una pausa y ya no está |
redispatches | number | cuántas veces se re-despachó la tarea |
model, effort | string | la elección del soldier; vacío significa el default de claude |
harness | string | el CLI de agente en el que corre el soldier, tomado del perfil del dispatch (claude, pi u opencode); vacío significa claude, como en un archivo de tarea escrito antes de este campo |
harness_major | number | en una tarea de opencode, la serie de OpenCode con la que se despachó (1 o 2), detectada con opencode --version y conservada por vx redispatch; ausente en los demás harnesses |
harness_version | string | en una tarea de opencode, la versión completa encontrada al despachar, como 2.0.32; ausente en los demás harnesses |
harness_session | string | en una tarea de opencode 2.x con modelo, el id de la sesión de OpenCode creada para su soldier (ses_...), que vx redispatch reutiliza; ausente en los demás casos |
decision | object | presente una vez que la tarea quedó blocked al menos una vez |
amendments | array | instrucciones que el general dio después del dispatch, con vx prompt y vx decide (no --dismiss); ver abajo |
Los campos opcionales se omiten cuando están vacíos.
decision
| Campo | Notas |
|---|---|
question | lo que preguntó el soldier |
options | opciones que ofreció, si hubo |
asked_at | cuándo quedó blocked |
answer, answered_at | se definen después de vx decide |
kind | cómo debe responderse: modal (un overlay selector) con una tecla, ask (una pregunta ask_user de un soldier de Pi) mediante un archivo, cualquier otro como texto |
question_id | el id de una pregunta ask, a quien se dirige una respuesta |
dismissed | true cuando se limpió con vx decide --dismiss en vez de responderse; answered_at queda definido, answer no |
Una tarea en blocked siempre lleva su pregunta acá, no solo la palabra "blocked".
amendments
| Campo | Notas |
|---|---|
text | lo que dijo el general; para vx decide, la pregunta y la respuesta (una elección de selector como el texto de la opción). Máximo 2000 caracteres, el texto más largo se corta y se marca [truncated] |
at | hora RFC 3339 en que se registró |
source | vx prompt o vx decide |
Se omite cuando está vacío. Una tarea conserva sus 20 amendments más recientes. prompt nunca cambia: vx ship le da a la revisión del tribunal el prompt seguido de los amendments, así que lo que el general pidió después cuenta como pedido. Solo vx prompt y vx decide los escriben, en el archivo de estado de la tarea, nunca en un archivo del camp.
Compatibilidad
Tratá los campos desconocidos como aditivos.