ReferenciaCLI
vx decide
Responder la pregunta abierta de una tarea blocked para que pueda continuar
Responder la pregunta abierta de una tarea blocked para que pueda continuar.
Uso:
vx decide <task-id> <answer>
vx decide <task-id> --dismiss
Solo se puede responder una tarea con status "blocked". Entrega <answer> al
pane de herdr todavía abierto del soldier y lo registra contra la decisión
estructurada de la tarea, no solo como más prosa en la transcripción. Esa
decisión es el campo "decision" de 'vx status --json'. Si la pregunta abierta vino del selector
AskUserQuestion de Claude Code, <answer> (el texto exacto de una opción, o su
número renderizado, contando desde 1) se entrega como una única pulsación de
tecla, el mismo mecanismo que usaría una persona al elegir en ese menú, salvo
que se resuelva a "Type something.", que recurre a texto plano como todas las
demás decisiones.
Un soldier de pi no tiene ese selector. Cuando preguntó con su herramienta
ask_user (la decisión es de tipo "ask", con la pregunta y sus opciones),
<answer> es el texto exacto de una opción, su número contando desde 1, o
cualquier texto libre, y se escribe en el archivo que esa herramienta espera:
el soldier sigue con esa respuesta y no se teclea nada en su pane. Si la
pregunta ya se contestó en el pane, la respuesta se rechaza y la tarea se
puede limpiar con --dismiss. Un soldier de pi que preguntó en prosa (una línea
needs-decision:, o una sesión donde la extensión ask_user no se cargó) recibe
la respuesta como texto plano.
Un soldier de opencode (2.x) bloqueado en una pantalla propia de OpenCode se
responde con pulsaciones de tecla donde la pantalla es conocida, después de
volver a leer el pane para no teclear nada en una pantalla que ya cambió. En un
prompt de permiso, <answer> "allow once" pulsa Enter y "reject" pulsa Esc;
"always allow" se rechaza, porque puede guardar una regla para siempre. En un
formulario de pregunta, <answer> es el número de una opción (contando desde 1) o
su texto exacto, entregado como pulsaciones de flecha abajo y Enter; cualquier
otro texto va al campo "Type your own answer" del formulario con una pulsación
por carácter, así que se limita a ASCII imprimible, y un número suelto que no es
una opción se rechaza. Una pantalla que vexillum no conoce, y cualquier pantalla
de 1.x, se rechaza sin teclear nada. Un soldier que terminó su turno con una
línea needs-decision: se responde con texto plano, como con cualquier otro
harness.
Una vez entregada la respuesta, también se registra en la tarea como una
enmienda (campo "amendments" en 'vx status --json'), junto con la pregunta que
respondió, para que la revisión del tribunal de una mission la cuente como
parte de la intención de la mission. La elección de un selector se registra
como el texto de la opción. --dismiss no registra nada.
Si el soldier termina rápido, el status de la tarea se actualiza de inmediato:
running si el soldier sigue trabajando, blocked otra vez si hace otra
pregunta, done o failed si terminó tan rápido. Si no, la tarea queda running
para que el sentinel registre el resultado final, igual que un dispatch
nuevo.
--dismiss limpia una tarea que se marcó blocked por error (el soldier nunca
estuvo preguntando nada) sin enviarle nada: ni un prompt ni una pulsación de
tecla. La tarea pasa a ser lo que su pane dice que es: running si el soldier
sigue trabajando, done (o unconfirmed) si terminó, interrupted si el pane ya
no existe. Se rechaza si el pane está realmente bloqueado por una pregunta. La
pregunta descartada queda en la tarea, marcada como dismissed, y no la vuelve
a bloquear; 'vx status --json' la muestra. Usalo cuando 'vx prompt' o 'vx ship'
rechacen una tarea por estar blocked y no haya nada que responder.
Si la tarea en realidad está "interrupted" (su pane de herdr ya no existe;
vexillum solo todavía no lo había notado), esto la marca interrupted y se
rechaza: ya no queda nada contra qué responder. Usá 'vx redispatch' en su
lugar.