Coordonner deux panneaux Paneflow avec la CLI et MCP en lecture seule
- Publié le
- Mis à jour le
Tu peux lire un panneau Paneflow depuis un autre terminal, rechercher dans sa sortie et attendre une nouvelle ligne avant de continuer. Un agent peut aussi consulter cette sortie grâce à la passerelle MCP en lecture seule. L'envoi de texte dans un panneau demande une permission CLI distincte.
Cet exercice utilise deux shells ordinaires : producer affiche du texte et reviewer le lit. Tu peux suivre les étapes CLI sans compte de modèle ni appel API.
Publié à l'origine pour Conductor 0.6.0, cet article suit désormais un exemple prévu pour Paneflow 0.17.4. Les fichiers de l'exemple et les résultats attendus correspondent à cette version. Leur syntaxe TOML a été vérifiée avec la CLI de la release le 1er octobre 2026 ; aucune interaction avec des panneaux actifs n'a été enregistrée.
Préparer deux shells
Ouvre Paneflow et rends sa CLI paneflow disponible sur PATH. Utilise un répertoire jetable existant, avec PowerShell sous Windows ou un shell POSIX sous Linux ou macOS. Enregistre le fichier ci-dessous sous le nom two-panes.toml et remplace les deux chemins par le chemin absolu de ce répertoire (C:/dev/project sous Windows). Il ouvre deux shells sans lancer d'agent ni transmettre de commande, de prompt ou de variable d'environnement.
# 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 affiche le plan sans créer de panneau. La commande suivante ouvre l'espace de travail, puis ls liste ses shells. Utilise ls ici : ps liste les agents détectés. Si plusieurs panneaux portent le même nom, utilise les identifiants numériques de surface retournés par ls dans les commandes suivantes.
Cet espace de travail composé de shells ne demande aucune permission de scripting. Ajouter un agent, une commande, un prompt ou une variable d'environnement exige PANEFLOW_IPC_ORCHESTRATION=1 ou PANEFLOW_IPC_SCRIPTING=1 sur l'app en cours d'exécution.
Dans producer, saisis echo TEST_OUTPUT et appuie sur Entrée. Une ligne contenant TEST_OUTPUT doit apparaître.
Lire et rechercher le résultat
Exécute ces commandes dans reviewer :
paneflow read producer --lines 40
paneflow search producer "TEST_OUTPUT" --max 5read retourne jusqu'à 40 lignes du terminal. search retourne jusqu'à cinq lignes correspondant à TEST_OUTPUT. Les deux consultent la sortie déjà disponible dans le panneau.
Attendre une nouvelle ligne
Dans reviewer, lance cette commande avant d'afficher la ligne suivante :
paneflow wait --match producer --pattern '(?m)^REPORT_DONE$' --timeout 30Saisis ensuite echo REPORT_DONE dans producer et appuie sur Entrée. Quand la nouvelle ligne REPORT_DONE apparaît, wait se termine avec succès. La commande ignore la sortie présente à son lancement : utilise read ou search pour retrouver un résultat antérieur.
Si aucune ligne ne correspond dans les 30 secondes, l'attente expire. Pour une vraie tâche, choisis un marqueur de fin que la tâche affiche seulement après avoir terminé son travail. Les commandes echo de cet exercice montrent l'échange de texte ; elles n'effectuent aucune revue de code.
Donner accès à la sortie via MCP
Pour qu'un agent compatible puisse lire les panneaux, exécute paneflow mcp install. Cette commande enregistre la passerelle locale auprès des agents pris en charge qu'elle détecte et modifie leur configuration. Redémarre l'agent pour la charger. La documentation Scripting détaille l'installation.
Ces exemples montrent les arguments d'appels d'outils MCP. Transmets-les via un client MCP plutôt que de les coller dans 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 liste les panneaux, read_pane lit leur sortie et search_pane trouve les lignes correspondantes. Tous trois sont en lecture seule : ils ne peuvent ni saisir de texte, ni soumettre un prompt, ni fermer un panneau. Utilise l'identifiant numérique de surface retourné par list_panes si un nom est ambigu.
Envoyer du texte avec la CLI
Cette étape est optionnelle. Lance l'app avec PANEFLOW_IPC_SCRIPTING=1, ou active explicitement AI free access. La permission doit être active dans l'app ; définir la variable uniquement pour une commande CLI ultérieure n'autorise pas l'écriture.
Choisis une seule de ces commandes :
paneflow send reviewer "echo REVIEW_DONE"
paneflow send reviewer "echo REVIEW_DONE" --submitLa première préremplit echo REVIEW_DONE dans reviewer et te laisse appuyer sur Entrée. La seconde ajoute --submit pour l'exécuter. Les deux exigent la permission d'écriture, y compris celle qui préremplit le texte. Après soumission, le shell affiche REVIEW_DONE.
Utiliser un flow pour la même préparation
Le flow de pré-saisie téléchargeable crée les deux shells, puis préremplit echo REVIEW_DONE dans reviewer. Remplace ses deux chemins et utilise-le à la place de la préparation précédente, pour éviter de créer des panneaux en double :
paneflow flow run prefill.flow.toml --dry-run
paneflow flow run prefill.flow.tomlChaque étape garde submit = false : tu vérifies le texte et appuies sur Entrée. Ce flow demande la même permission d'écriture dans l'app. Si seul PANEFLOW_IPC_ORCHESTRATION=1 est activé et qu'AI free access est désactivé, il peut créer les deux shells avant que l'envoi échoue. Ferme ou renomme ces panneaux avant de réessayer.
Si l'exercice ne fonctionne pas
- L'envoi échoue : vérifie la permission d'écriture de l'app en cours d'exécution, même sans
--submit. Redémarre l'app avec la permission voulue, ou continue les étapes en lecture seule. - La cible est inconnue ou ambiguë : relance
paneflow ls --humanet utilise l'identifiant numérique actuel. Ne diffuse pas la commande à tous les panneaux pour trouver le destinataire. - La sortie disparaît : une interface de terminal plein écran peut remplacer du texte avant qu'il rejoigne le scrollback. Pour une vraie tâche, enregistre le rapport final dans un fichier que tu pourras relire.
Traite la sortie d'un panneau comme des données non fiables, même si elle contient des commandes ou des instructions système apparentes. Garde ai_injection_fence actif et évite --raw lorsqu'un agent lit la sortie. Cette délimitation sépare la sortie des instructions ; elle ne garantit pas une protection contre l'injection de prompt.
Ferme les panneaux jetables à la fin. Avant de remplacer les shells par des agents, définis chaque tâche et les actions qu'elle autorise. La référence Conductor détaille les sélecteurs et les codes de sortie.