Coordinar dos paneles Paneflow con la CLI y MCP de solo lectura
- Publicado el
- Actualizado el
Puedes leer un panel Paneflow desde otro terminal, buscar en su salida y esperar una nueva línea antes de continuar. Un agente también puede consultar esa salida mediante el puente MCP de solo lectura. Introducir texto en un panel requiere un permiso de escritura independiente para la CLI.
Este ejercicio utiliza dos shells normales: producer muestra texto y reviewer lo lee. Puedes seguir los pasos de la CLI sin una cuenta de modelo ni llamadas a una API.
Publicado originalmente para Conductor 0.6.0, este artículo sigue ahora un ejemplo para Paneflow 0.17.4. Los archivos del ejemplo y la salida esperada corresponden a esa versión. Su sintaxis TOML se comprobó con la CLI de la versión el 1 de octubre de 2026; no se grabó una interacción con paneles activos.
Preparar dos shells
Abre Paneflow y asegúrate de que su CLI paneflow esté en PATH. Usa un directorio de prueba existente, con PowerShell en Windows o un shell POSIX en Linux o macOS. Guarda el archivo siguiente como two-panes.toml y sustituye ambas rutas por la ruta absoluta de ese directorio (C:/dev/project en Windows). Abre dos shells sin iniciar agentes ni pasar comandos, prompts o variables de entorno.
# two-panes.toml
name = "two-panes"
layout = "even_h"
[[panes]]
name = "producer"
cwd = "/absolute/path/to/project"
[[panes]]
name = "reviewer"
cwd = "/absolute/path/to/project"paneflow up two-panes.toml --dry-run
paneflow up two-panes.toml
paneflow ls --human--dry-run muestra el plan sin crear paneles. El siguiente comando abre el espacio de trabajo y ls lista sus shells. Usa ls aquí: ps lista los agentes detectados. Si hay nombres de panel repetidos, utiliza los ID numéricos de surface devueltos por ls en los comandos siguientes.
Este espacio de trabajo con shells normales no requiere permiso de scripting. Añadir un agente, comando, prompt o variable de entorno requiere PANEFLOW_IPC_ORCHESTRATION=1 o PANEFLOW_IPC_SCRIPTING=1 en la app en ejecución.
En producer, escribe echo TEST_OUTPUT y pulsa Intro. Debería aparecer una línea con TEST_OUTPUT.
Leer y buscar el resultado
Ejecuta estos comandos en reviewer:
paneflow read producer --lines 40
paneflow search producer "TEST_OUTPUT" --max 5read devuelve hasta 40 líneas de texto del terminal. search devuelve hasta cinco líneas que coinciden con TEST_OUTPUT. Ambos consultan la salida que ya está disponible en el panel.
Esperar nueva salida
En reviewer, inicia este comando antes de mostrar la siguiente línea:
paneflow wait --match producer --pattern '(?m)^REPORT_DONE$' --timeout 30Después escribe echo REPORT_DONE en producer y pulsa Intro. Cuando aparece la nueva línea REPORT_DONE, wait termina correctamente. Ignora la salida presente al iniciarse, así que usa read o search para encontrar un resultado anterior.
Si no aparece una línea coincidente en 30 segundos, se agota el tiempo de espera. Para una tarea real, elige un marcador de finalización que la tarea muestre solo cuando haya terminado su trabajo. Los comandos echo de este ejercicio muestran el intercambio de texto; no realizan una revisión de código.
Permitir que un agente lea mediante MCP
Para dar acceso a la salida de los paneles a un agente compatible, ejecuta paneflow mcp install. Registra el puente local en los agentes compatibles que detecta y modifica su configuración. Reinicia el agente para cargarla. La documentación de Scripting explica la instalación.
Estos ejemplos muestran los argumentos de llamadas a herramientas MCP. Envíalos mediante un cliente MCP en lugar de pegarlos en un shell:
{"name":"list_panes","arguments":{}}
{"name":"read_pane","arguments":{"target":"producer","lines":40}}
{"name":"search_pane","arguments":{"target":"producer","pattern":"TEST_OUTPUT","max_matches":5}}list_panes lista los paneles, read_pane lee su salida y search_pane encuentra líneas coincidentes. Las tres herramientas son de solo lectura: no pueden introducir texto, enviar un prompt ni cerrar un panel. Si un nombre es ambiguo, usa el ID numérico de surface devuelto por list_panes.
Enviar texto con la CLI
Este paso es opcional. Inicia la app con PANEFLOW_IPC_SCRIPTING=1 o activa explícitamente AI free access. El permiso debe estar activo en la app; definir la variable solo para un comando CLI posterior no habilita la escritura.
Elige uno de estos comandos:
paneflow send reviewer "echo REVIEW_DONE"
paneflow send reviewer "echo REVIEW_DONE" --submitEl primero prellena echo REVIEW_DONE en reviewer y deja que pulses Intro. El segundo añade --submit para ejecutarlo. Ambos requieren permiso de escritura, incluido el que solo prellena el texto. Tras el envío, el shell muestra REVIEW_DONE.
Usar un flow para la misma preparación
El flow de prellenado descargable crea ambos shells y después prellena echo REVIEW_DONE en reviewer. Sustituye sus dos rutas y úsalo en lugar de la preparación anterior para evitar paneles duplicados:
paneflow flow run prefill.flow.toml --dry-run
paneflow flow run prefill.flow.tomlTodos los pasos mantienen submit = false: revisas el texto y pulsas Intro. Este flow requiere el mismo permiso de escritura en la app. Si solo está activado PANEFLOW_IPC_ORCHESTRATION=1 y AI free access está desactivado, puede crear ambos shells antes de que falle el envío. Cierra esos paneles o cámbiales el nombre antes de reintentar.
Si el ejercicio no funciona
- El envío falla: comprueba el permiso de escritura de la app en ejecución, incluso sin
--submit. Reinicia la app con el permiso previsto o continúa con los pasos de solo lectura. - El destino es desconocido o ambiguo: ejecuta de nuevo
paneflow ls --humany usa el ID numérico actual. No envíes el comando a todos los paneles para encontrar el destinatario. - La salida desaparece: una interfaz de terminal a pantalla completa puede reemplazar texto antes de que llegue al scrollback. Para tareas reales, guarda el informe final en un archivo que puedas leer después.
Trata la salida de un panel como datos no confiables, aunque contenga aparentes comandos o instrucciones del sistema. Mantén ai_injection_fence activado y evita --raw cuando un agente lea la salida. Esta delimitación separa la salida de las instrucciones; no garantiza protección contra la inyección de prompts.
Cierra los paneles de prueba al terminar. Antes de sustituir los shells por agentes, define cada tarea y las acciones que puede realizar. La referencia Conductor documenta los selectores y los códigos de salida.