Saltar al contenido

Referencia de scripting

Verbos CLI, selectores, métodos JSON-RPC, frames de eventos, claves de configuración, specs de workspace, specs de flow, herramientas MCP, hooks y códigos de salida para automatización Paneflow.

Esta es la referencia compacta de Scripting y automatización. Nombra la superficie pública que un script humano o un LLM puede citar con precisión.

Verbos CLI

El binario paneflow intercepta estos verbos y sale antes de iniciar la GUI. Los verbos desconocidos salen con código de uso 2 en vez de lanzar la app silenciosamente.

VerboMétodo principal o motor¿Escribe en paneles?Uso
ls [--human]surface.listNoLista paneles en el espacio de trabajo activo
read <target>surface.readNoLee el scrollback de un panel
search <target> <pattern>surface.searchNoBusca en el scrollback de un panel
ps [--json]fleet.listNoLista agentes detectados entre espacios de trabajo
status <target> [--json]surface.statusNoLee el estado de agente de un panel
newworkspace.createNoCrea un espacio de trabajo
select <index>workspace.selectNoSelecciona un espacio de trabajo
split <h|v>surface.splitNoDivide un panel
focus <target>surface.focusNoEnfoca un panel y su espacio de trabajo
send <target> <text>surface.send_textGatePrepara o envía texto
key <target> <keystroke>surface.send_keystrokeGateEnvía una tecla que no somete
wait --match <sel>surface.read, events.subscribeNoBloquea hasta pattern, idle o ambos
watch [--surface <sel>] [--type <event>]events.subscribeNoEmite eventos de ciclo de vida y superficie
up <file>Motor de spec workspaceSolo prellenadoCrea un workspace declarativo
flow run <file>Motor flowGate para pasos que envíanEjecuta un DAG multiagente local

Alias aceptados por la CLI: list_panes apunta a ls, read_pane a read y search_pane a search.

Selectores

SelectorEjemploNotas
Id numéricopaneflow read 42Coincide exactamente con surface_id
Nombrepaneflow status backendMejor selector para scripts duraderos
cmdline:<substr>paneflow read cmdline:viteargv foreground completo en Linux, nombre de ejecutable en macOS y Windows
cwd:<path>paneflow read cwd:/home/me/apiCoincide con el directorio de trabajo del panel

Un selector que no coincide con nada o coincide con varios paneles sale con código 3, salvo comandos que aceptan explícitamente múltiples coincidencias como send --broadcast, wait --any y wait --all.

Códigos de salida

CódigoSignificado
0Éxito
1Fallo runtime: instancia inaccesible, panel cerrado, gate rechazado o error de handler
2Error de uso CLI
3Objetivo no encontrado o ambiguo
4Timeout de wait o timeout de ready en flow

Gates de escritura

La lectura está permitida por defecto. Las escrituras se separan por capacidad:

OperaciónGate
send sin --submitPANEFLOW_IPC_SCRIPTING=1 o ai_unrestricted
send --submitPANEFLOW_IPC_SCRIPTING=1 o ai_unrestricted
keyPANEFLOW_IPC_SCRIPTING=1
Paso flow con submit = trueCapacidad scripting reportada por system.capabilities

send no añade carriage return salvo que --submit esté presente. key rechaza teclas que someten como enter, ctrl-m y ctrl-j. Un payload único de surface.send_text está limitado a 64 KiB.

Claves de configuración relevantes:

ClaveValor por defectoSignificado
ai_unrestrictedfalsePermite a automatizaciones de IA confiables enviar texto sin el gate de entorno
ai_injection_fencetrueEnvuelve el texto de surface.read en una envoltura de terminal no confiable
submit_paste_delay_ms70Retardo base entre bracketed paste y el carriage return de envío
terminal.envningunoVariables de entorno inyectadas en nuevos terminales

Campos de lectura

paneflow read <target> --json y surface.read crudo devuelven:

CampoSignificado
textTexto de scrollback, fenced por defecto
linesNúmero de líneas devueltas
total_linesTotal de líneas retenidas
eofSi la lectura llegó a la línea retenida más antigua
output_generationContador monótono avanzado por la salida del panel

Valores por defecto y límites: lines vale 200 por defecto y se limita a 1-4000. offset parte del final del buffer. Un offset fuera de rango es un error invalid-params.

El parámetro JSON-RPC fenced usa ai_injection_fence por defecto. El flag CLI --raw pasa fenced: false.

Campos de estado de agente

paneflow ps --json devuelve {"agents":[...]}. paneflow status <target> --json devuelve un objeto de estado.

CampoSignificado
pidId de proceso del agente, si se conoce
toolFamilia de agente como claude, codex, opencode o gemini
statethinking, waiting_for_input, finished, errored, stalled, idle o unknown_running
hookedSi los eventos de hook de ciclo de vida están conectados
reasonRazón de detección, incluido no_hook
surface_idId del panel
surface_nameNombre del panel
workspaceÍndice del espacio de trabajo
active_tool_nameHerramienta que se está ejecutando dentro del agente
messagePrompt o texto de permiso en espera
last_resultResumen del último turno, si está disponible
waiting_msTiempo pasado esperando input
idle_msTiempo desde la última actividad observada
output_generationContador de salida del panel, en status

Una flota vacía es {"agents":[]} con código de salida 0. Un panel sin agente rastreado devuelve estado idle, no un error.

Spec workspace

paneflow up <file> lee una spec workspace TOML.

Campo top-levelTipoValor por defectoNotas
namestring"Workspace"Título del espacio de trabajo
layoutstring"even_h"even_h, even_v, main_vertical o tiled
port_baseinteger3000Base para la asignación ${port_offset}
[[panes]]arrayrequeridoUna entrada por panel
Campo de panelTipoValor por defectoNotas
cwdstringningunoDebe existir tras expansión y canonicalization
agentstringningunoNombre de launcher de agente, mutuamente exclusivo con command
commandstringningunoComando crudo, mutuamente exclusivo con agent
promptstringningunoPrellenado en la entrada de un agente, nunca enviado por up
focusboolfalseDa foco inicial a este panel
envtableningunoSe fusiona sobre terminal.env; soporta ${port_offset}
namestringningunoNombre selector estable
worktreestringningunoNombre de rama para un worktree gestionado bajo <repo>.worktrees/
copy_envbooltrueCopia archivos .env* ignorados por git al worktree
setupstringningunoComando ejecutado antes del lanzamiento
setup_timeout_secsinteger300Timeout de setup
worktree_teardownstring"auto"auto elimina worktrees limpios al cerrar; keep los conserva

${port_offset} solo se sustituye dentro de valores env. Las claves desconocidas son errores. La creación de workspace valida rutas antes de crear paneles.

Spec flow

paneflow flow run <file> lee una spec flow TOML y la ejecuta contra la instancia Paneflow actual.

CampoTipoNotas
idstringId de paso requerido y único
needsarrayDependencias; en foreach, espera todas las instancias
foreacharrayFan-out, una instancia por item
paneinline tableCrea un panel usando campos de panel workspace
sendinline table{ target, text, submit? }; requiere una dependencia
readytable{ pattern, timeout_secs? }; barrera regex
capturetable{ var, lines }; captura 1-500 líneas después de ready
submitboolEnvía el prompt de un panel creado; requiere acceso scripting

Variables:

VariableAlcance
${item}Pasos foreach: cwd, name, worktree, env, send.target, ready.pattern, prompts y textos
${var}Valores capturados dentro de send.text y pane.prompt que se envía
${var.<item>}Capturas de un grupo foreach

El runner valida claves desconocidas, dependencias faltantes, ciclos de dependencias, regex inválidas, capturas indefinidas, presupuesto de paneles y timeouts faltantes antes de ejecutar. Ctrl-C detiene el bucle de orquestación; los paneles creados permanecen en Paneflow.

Conexión JSON-RPC

PropiedadValor
Endpoint Linux$XDG_RUNTIME_DIR/paneflow/paneflow.sock
Endpoint macOSDirectorio runtime del usuario, mismo nombre de socket Paneflow
Endpoint Windows\\.\pipe\paneflow
FramingJSON-RPC 2.0 delimitado por líneas
Modelo de peticiónUna petición por conexión, salvo events.subscribe
Confianza localMismo usuario únicamente; sin listener de red, sin token, sin TLS
BackpressureLímite de conexiones y colas de eventos acotadas devuelven errores estructurados o frames dropped

Sondea capacidades en runtime:

bash
printf '%s\n' '{"jsonrpc":"2.0","method":"system.capabilities","params":{},"id":1}' \
| nc -U "$PANEFLOW_SOCKET_PATH"

Métodos JSON-RPC

MétodoParamsRetorno o notas
system.ping-Check de vida
system.capabilities-{scripting, methods[]}
system.identify-{name, version, protocol}
workspace.list-Espacios de trabajo con índices y títulos
workspace.current-Espacio de trabajo activo
workspace.createname?, cwd?, layout?Crea un espacio de trabajo
workspace.selectindexCambia de espacio de trabajo
workspace.closeindex?Cierra un espacio de trabajo
workspace.upname, layout, panes[]Spawn declarativo usado por up y raíces flow
workspace.restore_layoutlayoutAplica un árbol layout
surface.list-{surfaces:[{surface_id,name,title,cwd,cmd,workspace}]}
surface.readsurface_id, lines?, offset?, fenced?Scrollback y output_generation
surface.searchsurface_id, pattern, max_matches?Coincidencias substring case-insensitive
surface.renamesurface_id, nameRenombra o borra el nombre de un panel
surface.focussurface_idEnfoca panel y espacio de trabajo
surface.statussurface_idEstado de agente para un panel
surface.send_textsurface_id, text, submit?, paste?Escritura de texto PTY con gate
surface.send_keystrokesurface_id, keystrokeTecla no submit gated por env
surface.splitdirection, surface_id?, cwd?, command?, prompt?, env?, name?, managed_worktree?Divide un panel
fleet.list-Snapshot read-only de la flota
events.subscribesurfaces?, types?Stream persistente de eventos delimitado por líneas
ai.session_startpayload hookTelemetría de ciclo de vida
ai.prompt_submitpayload hookTelemetría de ciclo de vida
ai.tool_usepayload hookTelemetría de ciclo de vida
ai.notificationpayload hookTelemetría de ciclo de vida
ai.stoppayload hookTelemetría de ciclo de vida
ai.exitpayload hookTelemetría de ciclo de vida
ai.session_endpayload hookTelemetría de ciclo de vida

Los fallos estructurados usan envolturas JSON-RPC error: -32602 invalid params, -32601 gated method, -32001 permission y -32000 backpressure. Algunos errores de validación legacy aún llegan como {"error":"..."} dentro de result; los clientes deben tratar ambas formas como fallos.

Eventos

paneflow watch y events.subscribe crudo emiten JSON delimitado por líneas. El primer frame confirma la suscripción.

Tipo de eventoSignificado
subscribedSuscripción confirmada
ai.session_startLa sesión de agente empieza
ai.prompt_submitSe envía un prompt
ai.tool_useEl agente reporta uso de herramienta
ai.notificationEl agente pide input o permiso
ai.stopEl turno del agente se detiene
ai.exitEl proceso del agente sale
ai.session_endLa sesión de agente se cierra
surface_changedEl output_generation del panel avanzó
heartbeatKeepalive idle
droppedEl subscriber se retrasó y se descartaron eventos

Después de un frame dropped, resincroniza con paneflow ps --json o paneflow status <target> --json.

Puente MCP

paneflow-mcp es un servidor MCP stdio read-only sobre el mismo socket Paneflow.

HerramientaParamsRetorno
list_panes-Paneles con surface_id, name, title, cwd, cmd, workspace
read_panetarget, lines?, offset?Texto de scrollback
search_panetarget, pattern, max_matches?Líneas coincidentes

No tiene herramienta para escribir, enviar, enfocar o dividir paneles. La salida de terminal devuelta está fenced como datos no confiables.

Hooks de ciclo de vida

paneflow-ai-hook lee JSON de evento en stdin, publica un frame JSON-RPC ai.* y sale con 0 para que una instancia Paneflow detenida no rompa el agente. La superficie de hooks alimenta estado, notificaciones, ps, status y watch.

paneflow hooks setup persistente está limitado a Claude Code. Codex usa hooks de shim por lanzamiento. Los agentes sin superficie de hooks siguen ejecutándose, pero su estado puede limitarse a detección de proceso.

Relacionado