exec ツールを介してシェルコマンドを実行し、長時間実行されるタスクをメモリ内に保持します。それらのバックグラウンドセッションの管理には process ツールを使用します。
exec ツール
主なパラメータ:
command(必須)yieldMs(デフォルト 10000): この時間が経過すると自動的にバックグラウンドへ移行します。background(boolean): 即座にバックグラウンドで実行します。timeout(秒、デフォルト 1800): 指定した時間が経過するとプロセスを強制終了します。elevated(boolean): 権限昇格モードが有効かつ許可されている場合に、ホスト上で実行します。- 本物の TTY が必要ですか?
pty: trueを設定してください。 workdir,env
- フォアグラウンド(同期)実行時は、出力を直接返します。
- バックグラウンド(明示的な指定、またはタイムアウトによる移行)の場合、ツールは
status: "running",sessionIdおよび出力の短い末尾部分を返します。 - 出力内容は、セッションがポーリング(poll)されるか削除されるまでメモリ内に保持されます。
processツールの使用が許可されていない場合、execは常に同期的に実行され、yieldMsやbackground指定は無視されます。- 生成された
execコマンドはOPENCLAW_SHELL=exec環境変数を受け取ります。これは、コンテキストに応じたシェルやプロファイルの設定に使用できます。
子プロセスのブリッジング
exec/process ツールの外部で長時間実行される子プロセス(CLI の再起動やゲートウェイのヘルパーなど)を生成する場合は、子プロセスブリッジ(child-process bridge)ヘルパーをアタッチしてください。これにより、終了信号が適切に転送され、プロセス終了時やエラー時にリスナーが確実に解除されます。これは、systemd 環境などでの孤立プロセスの発生を防ぎ、プラットフォームを跨いで一貫したシャットダウン挙動を維持するために重要です。
環境変数による上書き設定:
PI_BASH_YIELD_MS: デフォルトの yield 時間(ミリ秒)。PI_BASH_MAX_OUTPUT_CHARS: メモリ内に保持する出力の上限文字数。OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: ストリームごとの未処理(pending)な標準出力/標準エラー出力の上限文字数。PI_BASH_JOB_TTL_MS: 終了したセッションの保持期間(1分〜3時間の範囲。ミリ秒指定)。
tools.exec.backgroundMs(デフォルト 10000)tools.exec.timeoutSec(デフォルト 1800)tools.exec.cleanupMs(デフォルト 1800000)tools.exec.notifyOnExit(デフォルト true): バックグラウンド実行が終了した際、システムイベントを投入し、ハートビートを要求します。tools.exec.notifyOnExitEmptySuccess(デフォルト false): true の場合、出力を生成せずに成功終了したバックグラウンド実行に対しても、完了イベントを投入します。
process ツール
アクション一覧:
list: 実行中および終了したセッションの一覧を表示。poll: セッションの新しい出力を取得(終了ステータスも併せて報告)。log: 蓄積された出力を読み取り(offsetとlimitによる範囲指定が可能)。write: 標準入力(stdin)を送信 (data, オプションでeof)。kill: バックグラウンドセッションを強制終了。clear: 終了したセッションをメモリから削除。remove: 実行中の場合は強制終了し、終了済みの場合はメモリから削除。
- バックグラウンド化されたセッションのみが一覧表示され、メモリ内に保持されます。
- プロセス(ゲートウェイ)の再起動時にセッションは失われます(ディスクへの永続化は行われません)。
- セッションのログが会話履歴に保存されるのは、
process poll/logを実行し、その結果が記録された場合のみです。 processツールはエージェントごとにスコープが分かれています。自身が開始したセッションのみを操作できます。process listの出力には、中身を素早く把握するためのname(コマンド動詞 + ターゲット)が含まれます。process logは行ベースのoffset/limitを使用します。offsetとlimitの両方を省略した場合、直近の 200 行を返し、ページングのヒントを付加します。offsetを指定しlimitを省略した場合は、指定位置から最後までを返します(200 行の制限は適用されません)。