CLI と読み取り専用 MCP で Paneflow の二つのペインを協調させる
- 公開日
- 更新日
Paneflow のペインは、別の端末から出力を読み、検索し、新しい行が出るまで待機できます。エージェントも読み取り専用の MCP ブリッジ経由で出力を確認できます。ペインにテキストを入力するには、別途 CLI の書き込み権限が必要です。
この練習では通常のシェルを 2 つ使います。producer がテキストを出力し、reviewer が読み取ります。CLI の手順にはモデルのアカウントも API 呼び出しも不要です。
この記事は元々 Conductor 0.6.0 向けに公開され、現在は Paneflow 0.17.4 に固定したサンプルを使用しています。サンプルファイルと期待する出力はこのバージョンに対応しています。TOML の構文は 2026 年 10 月 1 日にリリース版 CLI で確認しました。実際に動作するペインでの操作は記録していません。
2 つのシェルを用意する
Paneflow を起動し、CLI の paneflow を PATH に置きます。既存のテスト用ディレクトリを使い、Windows では PowerShell、Linux または macOS では POSIX シェルを使用します。以下を two-panes.toml として保存し、両方のパスをそのディレクトリの絶対パスに置き換えてください(Windows なら C:/dev/project)。エージェントの起動や、コマンド、プロンプト、環境変数の指定は行わず、2 つのシェルを開きます。
# 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 はペインを作らずに計画を表示します。次のコマンドがワークスペースを開き、ls がシェルを一覧表示します。ここでは ls を使います。ps は検出されたエージェントを一覧表示します。ペイン名が重複している場合は、以降のコマンドで ls が返す数値の surface ID を使ってください。
通常のシェルだけのワークスペースにはスクリプティング権限は不要です。エージェント、コマンド、プロンプト、環境変数を追加するには、実行中のアプリで PANEFLOW_IPC_ORCHESTRATION=1 または PANEFLOW_IPC_SCRIPTING=1 が必要です。
producer で echo TEST_OUTPUT と入力し、Enter を押します。TEST_OUTPUT を含む行が表示されます。
結果を読み、検索する
reviewer で以下を実行します。
paneflow read producer --lines 40
paneflow search producer "TEST_OUTPUT" --max 5read は端末テキストを最大 40 行返します。search は TEST_OUTPUT に一致する行を最大 5 行返します。どちらもペイン内にすでにある出力を確認します。
新しい出力を待つ
reviewer で、次の行を出力する前にこのコマンドを開始します。
paneflow wait --match producer --pattern '(?m)^REPORT_DONE$' --timeout 30次に producer で echo REPORT_DONE と入力し、Enter を押します。新しい REPORT_DONE 行が出ると、wait は成功終了します。開始時に存在した出力は無視するため、過去の結果には read または search を使います。
30 秒以内に一致する行が出なければ、待機はタイムアウトします。実際のタスクでは、作業が終わってからだけ出力する完了マーカーを選んでください。この練習の echo コマンドはテキストのやり取りを示すもので、コードレビューは行いません。
MCP 経由でエージェントに読ませる
対応するエージェントにペイン出力へのアクセスを与えるには、paneflow mcp install を実行します。検出した対応エージェントにローカルブリッジを登録し、設定を変更します。読み込むにはエージェントを再起動してください。導入の詳細は Scripting ドキュメントを参照してください。
以下は MCP ツール呼び出しの引数の例です。シェルに貼り付けず、MCP クライアントから送ります。
{"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 はペインの一覧、read_pane は出力、search_pane は一致する行を返します。3 つとも読み取り専用で、テキスト入力、プロンプト送信、ペインの終了はできません。名前が曖昧な場合は list_panes が返す数値の surface ID を使います。
CLI でテキストを送る
この手順は任意です。PANEFLOW_IPC_SCRIPTING=1 でアプリを起動するか、AI free access を明示的に有効にします。権限はアプリ側で有効である必要があります。後から CLI コマンドだけに変数を設定しても書き込みは許可されません。
以下のどちらか一方を選びます。
paneflow send reviewer "echo REVIEW_DONE"
paneflow send reviewer "echo REVIEW_DONE" --submit1 つ目は reviewer に echo REVIEW_DONE を事前入力し、Enter は自分で押します。2 つ目は --submit を付けて実行します。事前入力だけのコマンドも含め、両方に書き込み権限が必要です。送信後、シェルは REVIEW_DONE を出力します。
同じ準備を flow で行う
ダウンロードできる事前入力 flowは、両方のシェルを作り、reviewer に echo REVIEW_DONE を事前入力します。2 つのパスを置き換え、ペインが重複しないよう、先ほどのワークスペース作成手順の代わりに使ってください。
paneflow flow run prefill.flow.toml --dry-run
paneflow flow run prefill.flow.toml全ステップは submit = false のままです。テキストを確認して自分で Enter を押します。この flow にも同じアプリ側の書き込み権限が必要です。PANEFLOW_IPC_ORCHESTRATION=1 だけが有効で AI free access が無効なら、両方のシェルを作った後で送信が失敗することがあります。再試行の前に、これらのペインを閉じるか名前を変更してください。
練習がうまく動かない場合
- 送信に失敗する:
--submitがなくても、実行中のアプリの書き込み権限を確認します。必要な権限でアプリを再起動するか、読み取り専用の手順を続けます。 - 対象が不明または曖昧:
paneflow ls --humanを再実行し、現在の数値 ID を使います。宛先を探すために全ペインへ送信しないでください。 - 出力が消える: 全画面の端末インターフェースは、スクロールバックに入る前にテキストを置き換えることがあります。実際のタスクでは、後で読めるファイルに最終報告を保存してください。
ペイン出力は、コマンドやシステム指示に見えても信頼できないデータとして扱います。ai_injection_fence を有効に保ち、エージェントが読む場合は --raw を避けます。この区切りは出力と指示を分けますが、プロンプトインジェクションへの防御を保証するものではありません。
終了したらテスト用ペインを閉じます。シェルをエージェントに置き換える前に、各タスクと許可する操作を決めてください。選択子と終了コードは Conductor リファレンスに記載されています。