aiterm-mcp
Persistent terminal MCP with one harness-based launcher for Claude Code, Codex CLI, Grok CLI, and Cursor Agent CLI, plus durable PTYs for SSH, containers, and REPLs.
npm · fingerprint 2548c5ec8ca91f5e221749f8 · repository · RSS
What changed
Changed 2026-10-13 14:01 UTC
2 descriptions rewritten, 4 schema or annotation changes with the description left byte-identical.
--- pinned/agent_configure +++ observed/agent_configure { - "description": "起動済みのClaude/Codex/Grok/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effortを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。Claude Codeの席では /model の選ぶ画面の「この会話だけ」(s)で替え、端末の ~/.claude/settings.json の既定は書き換えない。その選び方が無い版、選ぶ画面に無いmodel、そのmodelで選べないeffortは、何も変えずに断る。", + "description": "起動済みのClaude/Codex/Grok/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effort/fastを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。Claude Codeの席では /model の選ぶ画面の「この会話だけ」(s)で替え、端末の ~/.claude/settings.json の既定は書き換えない。その選び方が無い版、選ぶ画面に無いmodel、そのmodelで選べないeffortは、何も変えずに断る。fastだけの指定も受ける。ファスト(harnessの高速の応答。費用や利用量が増える)。席は必ず通常の速度で起きる。trueはその席をfastへ切り替え、falseは通常の速度にする(fastに対応していないmodelでもfalseは受ける)。切り替えは席だけに留め、harnessが利用者の既定へ書いた分は切り替えの直前の値へ戻す。断りは文の先頭の符号で分かる: FAST_MODE_NOT_SUPPORTED(そのmodelは対応していない)、FAST_MODE_UNAVAILABLE(アカウントや契約で使えない)、FAST_MODE_MODEL_CONFLICT(modelへfast版のIDを書いてfalseを渡した)、FAST_MODE_UNCONFIRMED(切り替えた後の状態を確かめられない)。", "execution": { "taskSupport": "forbidden" }, + "fast": { + "description": "変更後のfast。省略時は、その席の今の状態を変えない", + "type": [ + "boolean", + "null" + ] + }, "model": { "anyOf": [ { + "fast": { + "description": "切り替えた後の、席のfastの状態。Aitermが確かめた事の無い席(前の版が起こした席)はnull", + "type": [ + "boolean", + "null" + ] + }, "harness": { "enum": [ "claude-code",
--- pinned/agent_launch +++ observed/agent_launch { "description": "エージェントを単一の標準入口から永続sessionへ起動する。harnessはagent loop・認証・hook・transcriptを所有する実行基盤、modelはそのharnessが選ぶ推論モデルであり別軸。Cursor harnessからGPT/Claude/Grok等を選んでも完了相関はCursor方式のまま。ComposerはCursorのmodelの一つで、harnessでもGrokのmodelでもない。harness=cursor-cli と model=composer-2.5-fast(またはcomposer-2.5)で指定する。remoteを付けると、SSHで入った別端末のAitermで同じ起動を行い、完了は同じ形で親へ届く。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。", "execution": { + "fast": { + "description": "ファスト(harnessの高速の応答。費用や利用量が増える)。省略とfalseは通常の速度で起こす(利用者の設定にfastが残っていても通常)。trueは通常で起こしてから、その席をfastへ切り替える。modelがfastに対応していない時(FAST_MODE_NOT_SUPPORTED)と、modelへfast版のIDを書いてfalseを渡した時(FAST_MODE_MODEL_CONFLICT)は起動を断る。アカウントの都合で使えない時・確かめられない時は、起動を断らずに通常の速度で起こし、返りの fast を false、fast_error に訳を入れる。modelへfast版のIDを直に書いて省略した時だけ、そのIDのまま起こす(返りの fast は true)。", + "type": [ + "boolean", + "null" + ] + }, "harness": { "description": "agent loop・session・hook・transcript・認証を所有する実行基盤", "enum": [ + "fast": { + "description": "起こした後の、席のfastの状態(この項目を返さない版の別端末では無い)", + "type": "boolean" + }, + "fast_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "FAST_MODE_NOT_SUPPORTED", + "FAST_MODE_UNAVAILABLE", + "FAST_MODE_MODEL_CONFLICT", + "FAST_MODE_UNCONFIRMED" + ], + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "fastを頼まれたが、通常の速度で起こした時の訳" + }, "harness": { "enum": [ "claude-code",
--- pinned/agent_models +++ observed/agent_models { - "description": "harnessが今返すmodelとreasoning effortの候補を、そのharnessの公式の一覧から取得する。promptもturnも送らず推論を消費しない。Codexはapp-server model/list、Claude Codeはstream-json initializeのmodels、Grokはagent stdio initializeのmodelState、Cursorはcursor-agent modelsを素のmodel IDとeffortへ分けたもの。返るidとeffortsはagent_launch/agent_configureへそのまま渡せる。取得不能はMODEL_CATALOG_UNAVAILABLE、形式異常はMODEL_CATALOG_INVALIDのエラーで返し、別の一覧へfallbackしない。remoteを付けると別端末のharnessの候補を返す。", + "description": "harnessが今返すmodelとreasoning effortの候補を、そのharnessの公式の一覧から取得する。promptもturnも送らず推論を消費しない。Codexはapp-server model/list、Claude Codeはstream-json initializeのmodels、Grokはagent stdio initializeのmodelState、Cursorはcursor-agent modelsを素のmodel IDとeffortへ分けたもの。返るidとeffortsはagent_launch/agent_configureへそのまま渡せる。modelごとのfastは、そのmodelでfastへ切り替えられるか(harnessが返す値)。fast_unavailableは、アカウントの都合でどのmodelでも使えない時の訳。取得不能はMODEL_CATALOG_UNAVAILABLE、形式異常はMODEL_CATALOG_INVALIDのエラーで返し、別の一覧へfallbackしない。remoteを付けると別端末のharnessの候補を返す。", "execution": { "taskSupport": "forbidden" }, + "fast_unavailable": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "FAST_MODE_NOT_SUPPORTED", + "FAST_MODE_UNAVAILABLE", + "FAST_MODE_MODEL_CONFLICT", + "FAST_MODE_UNCONFIRMED" + ], + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "このアカウント・この端末では、どのmodelでもfastを使えない時の訳(harnessが先に答えられる時だけ。今はClaude Code)。使える・分からない時はnull" + }, "harness": { "enum": [ "claude-code", + "fast": { + "description": "このharness・このmodelでfastへ切り替えられるか(agent_launch/agent_configureのfast: true)。fastが別のmodel IDのharness(Cursor・Grok)は、fast版を別のmodelとして並べず、元のmodelのここがtrueになる", + "type": "boolean" + }, "hidden": { "description": "harnessが一覧で隠すmodel(Codexのinclude_hidden時だけtrueがある)", "type": "boolean" - "hidden" + "hidden", + "fast" ], "type": "object" },
--- pinned/claude_agent +++ observed/claude_agent { "description": "【旧互換alias。新規連携は agent_launch(harness=claude-code)】Claude Codeの対話エージェントTUIを永続端末に起動する。`claude -p`ではなく、同じ利用者可視sessionへpty_sendで継続入力する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。通常settingsへlaunch固有Stop hook settingsを加算する。起動前に共有認証を構造化確認し、未認証ならsessionを作らない。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。Claude の durable turn は claude_turn でも回収できる。", "execution": { + "fast": { + "description": "ファスト(harnessの高速の応答。費用や利用量が増える)。省略とfalseは通常の速度で起こす(利用者の設定にfastが残っていても通常)。trueは通常で起こしてから、その席をfastへ切り替える。modelがfastに対応していない時(FAST_MODE_NOT_SUPPORTED)と、modelへfast版のIDを書いてfalseを渡した時(FAST_MODE_MODEL_CONFLICT)は起動を断る。アカウントの都合で使えない時・確かめられない時は、起動を断らずに通常の速度で起こし、返りの fast を false、fast_error に訳を入れる。modelへfast版のIDを直に書いて省略した時だけ、そのIDのまま起こす(返りの fast は true)。", + "type": [ + "boolean", + "null" + ] + }, "launch_operation_id": { "description": "promptなしClaude launchのexact replay相関ID。session_name必須", "pattern": "^sha256:[0-9a-f]{64}$", + "fast": { + "description": "起こした後の、席のfastの状態", + "type": "boolean" + }, + "fast_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "FAST_MODE_NOT_SUPPORTED", + "FAST_MODE_UNAVAILABLE", + "FAST_MODE_MODEL_CONFLICT", + "FAST_MODE_UNCONFIRMED" + ], + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "fastを頼まれたが、通常の速度で起こした時の訳" + }, "harness": { "const": "claude-code", "type": "string"
--- pinned/codex_agent +++ observed/codex_agent { "description": "【旧互換alias。新規連携は agent_launch(harness=codex-cli)】Codexの対話エージェント TUI を永続端末に起動する。実装・レビュー・調査を対話で回す。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。委譲契約を使う完全な呼び出し例: `codex_agent({\"prompt\":\"<依頼>\",\"model\":\"gpt-5.6-sol\",\"reasoning_effort\":\"high\",\"cwd\":\"/absolute/path/to/repo\",\"write_scope\":\"read-only\"})`。turn は pty_send で送る(自動で非ブロック dispatch になる)。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。model / reasoning_effort を引数で指定可(省略時は端末 config/CLI 既定を継承。実効値は起動応答に明示)。", "execution": { + "fast": { + "description": "ファスト(harnessの高速の応答。費用や利用量が増える)。省略とfalseは通常の速度で起こす(利用者の設定にfastが残っていても通常)。trueは通常で起こしてから、その席をfastへ切り替える。modelがfastに対応していない時(FAST_MODE_NOT_SUPPORTED)と、modelへfast版のIDを書いてfalseを渡した時(FAST_MODE_MODEL_CONFLICT)は起動を断る。アカウントの都合で使えない時・確かめられない時は、起動を断らずに通常の速度で起こし、返りの fast を false、fast_error に訳を入れる。modelへfast版のIDを直に書いて省略した時だけ、そのIDのまま起こす(返りの fast は true)。", + "type": [ + "boolean", + "null" + ] + }, "model": { "description": "起動モデル(例: gpt-5.6-sol / gpt-5.6-terra / gpt-5.6-luna)。省略時は端末 config/CLI 既定を継承(端末側のピンがそのまま効く。実効値は起動応答に明示される)", "type": [ + "fast": { + "description": "起こした後の、席のfastの状態", + "type": "boolean" + }, + "fast_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "FAST_MODE_NOT_SUPPORTED", + "FAST_MODE_UNAVAILABLE", + "FAST_MODE_MODEL_CONFLICT", + "FAST_MODE_UNCONFIRMED" + ], + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "fastを頼まれたが、通常の速度で起こした時の訳" + }, "harness": { "const": "codex-cli", "type": "string"
--- pinned/grok_agent +++ observed/grok_agent { "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli)】Grok BuildのGrokモデル(既定 grok-4.6)の対話エージェント TUIを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。read-only sandboxとagent_configureに対応。", "execution": { + "fast": { + "description": "ファスト(harnessの高速の応答。費用や利用量が増える)。省略とfalseは通常の速度で起こす(利用者の設定にfastが残っていても通常)。trueは通常で起こしてから、その席をfastへ切り替える。modelがfastに対応していない時(FAST_MODE_NOT_SUPPORTED)と、modelへfast版のIDを書いてfalseを渡した時(FAST_MODE_MODEL_CONFLICT)は起動を断る。アカウントの都合で使えない時・確かめられない時は、起動を断らずに通常の速度で起こし、返りの fast を false、fast_error に訳を入れる。modelへfast版のIDを直に書いて省略した時だけ、そのIDのまま起こす(返りの fast は true)。", + "type": [ + "boolean", + "null" + ] + }, "model": { "description": "起動モデル。省略時は grok-4.6。explicit modelを起動前にlive catalogへ照合し、不在ならfallbackせずエラー", "type": [ + "fast": { + "description": "起こした後の、席のfastの状態", + "type": "boolean" + }, + "fast_error": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "code": { + "enum": [ + "FAST_MODE_NOT_SUPPORTED", + "FAST_MODE_UNAVAILABLE", + "FAST_MODE_MODEL_CONFLICT", + "FAST_MODE_UNCONFIRMED" + ], + "type": "string" + }, + "message": { + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": "object" + }, + { + "type": "null" + } + ], + "description": "fastを頼まれたが、通常の速度で起こした時の訳" + }, "harness": { "const": "grok-cli", "type": "string"
Changed 2026-10-12 15:08 UTC
1 description rewritten, 1 schema or annotation change with the description left byte-identical.
--- pinned/agent_configure +++ observed/agent_configure { - "description": "起動済みのClaude/Codex/Grok/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effortを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。", + "description": "起動済みのClaude/Codex/Grok/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effortを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。Claude Codeの席では /model の選ぶ画面の「この会話だけ」(s)で替え、端末の ~/.claude/settings.json の既定は書き換えない。その選び方が無い版、選ぶ画面に無いmodel、そのmodelで選べないeffortは、何も変えずに断る。", "execution": { "taskSupport": "forbidden" },
--- pinned/pty_list +++ observed/pty_list { "description": "握っているセッション一覧(名前 / 現在の前面コマンド / attach 状態 / サイズ / agent 情報)。", "execution": { + "vendor_session_id": { + "description": "agent sessionのharness側の会話ID。Claude CodeとGrokは起動時に--session-idで渡した値(席の中で会話を移した後は追わない)、CodexとCursorは分かった後の値。通常PTYと、まだ分からない席はnull", + "type": [ + "string", + "null" + ] + }, "width": { "type": "number" }
Changed 2026-10-07 13:08 UTC
1 description rewritten.
--- pinned/pty_send +++ observed/pty_send { - "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への送信はこのtoolだけで行い、子の状態はAitermが送る時点で見て振り分ける。子のturnが実行中なら各harness標準の操作で現在のturnへ差し込み(mode=agent_steer)、完了は差し込み後の作業の終わりに元の依頼への1回だけ届く。新しいevent_cursorと配送は作らない。それ以外は新しいturnとしてdispatchし(mode=agent_dispatch)、TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。require_agent:true はagent登録が無いsessionへ打鍵せず、AGENT_SESSION_REQUIREDで未送信を返す。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", + "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への送信はこのtoolだけで行い、子の状態はAitermが送る時点で見て振り分ける。子のturnが実行中なら各harness標準の操作で現在のturnへ差し込み(mode=agent_steer)、完了は差し込み後の作業の終わりに元の依頼への1回だけ届く。新しいevent_cursorと配送は作らない。それ以外は新しいturnとしてdispatchし(mode=agent_dispatch)、TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。require_agent:true はagent登録が無いsessionへ打鍵せず、AGENT_SESSION_REQUIREDで未送信を返す。preface はagent sessionへの送信で本文の前に置く1行。Claude Codeの席では貼り付けの印なしで入れ、本文だけを貼る(前置きが貼り付けの包みの外へ出る)。他のharnessでは前置き・空行・本文を1つで貼る。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", "execution": { "taskSupport": "forbidden" }, + "preface": { + "description": "agent session への送信(forceなし)で、本文の前に置く1行。送る文は「preface・空行・text」の並びになる。Claude Codeの席ではprefaceを貼り付けの印なしで入れ、textだけを貼る。Codex/Grok/Cursorの席では1つで貼る。1行・200字以内・制御文字なしで、行頭が記号や空白でなく、@ を含まない文。外れた時と通常PTY送信・force送信・remote付きでは、打鍵前に拒否する", + "type": "string" + }, "raw": { "default": false, "description": "送信前サニタイズを無効化",
Changed 2026-10-06 13:11 UTC
2 descriptions rewritten.
--- pinned/agent_auth +++ observed/agent_auth { - "description": "各harnessの公式CLI認証を開始・確認・取消する。CLIごとのコマンドと認証URL/codeの抽出はAitermが所有し、資格情報は各CLIだけが保存する。waitingのURL/codeを人へ表示し、input_requiredなら同じsessionのpty_send/pty_keyで公式画面へ入力する。authenticatedは認証の結果であり、agent_launchの起動準備完了とは別。remoteは他toolと同じ標準対応。", + "description": "各harnessの公式CLI認証を開始・確認・取消する。CLIごとのコマンドと認証URL/codeの抽出はAitermが所有し、資格情報は各CLIだけが保存する。waitingのURL/codeを人へ表示し、input_requiredなら同じsessionのpty_send/pty_keyで公式画面へ入力する。authenticatedは認証の結果であり、agent_launchの起動準備完了とは別。remoteは他toolと同じ標準対応。startは公式の状態が認証済みなら何も起こさずauthenticatedを返す。relogin:trueを付けると、認証済みに見えても公式ログインを開始する(別のアカウントへ入り直す時、ログインの期限切れを状態から見抜けない時)。Aitermは資格情報を消さず、置き換えは公式CLIが行う。Codexの公式ログインは、始めた時点で元のログインを消す(途中でcancelしても戻らない)。", "execution": { "taskSupport": "forbidden" }, + "relogin": { + "description": "startで、公式の状態が認証済みでも公式ログインを開始する。既定false。trueの時、authenticatedかつsession_idがnullの結果は返さない", + "type": "boolean" + }, "remote": { "additionalProperties": false, "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。",
--- pinned/pty_read +++ observed/pty_read { - "description": "セッションの出力をトークン削減して読む(既定は前回読取位置からの増分)。削減: 制御文字除去 / 反復圧縮 / head+tail 折りたたみ+復元ヒント+メタ併記。agent_transcript:true は agent session の直近完了ターンの最終 assistant メッセージを公開されたharness記録から平文で返す。長い回答が screen tail で切れた時の回収用。", + "description": "セッションの出力をトークン削減して読む(既定は前回読取位置からの増分)。削減: 制御文字除去 / 反復圧縮 / head+tail 折りたたみ+復元ヒント+メタ併記。agent_transcript:true は agent session の直近完了ターンの最終 assistant メッセージを公開されたharness記録から平文で返す。回答が空で終わったターンは誤りにせず、空のtextとanswer_empty:trueを返す。長い回答が screen tail で切れた時の回収用。", "execution": { "taskSupport": "forbidden" }, + "answer_empty": { + "description": "agent_transcriptで、完了したturnの回答が空だった時だけtrue(textは空文字列)。回答を読めなかった時は誤りを返す。terminalではnull", + "type": [ + "boolean", + "null" + ] + }, "harness": { "anyOf": [ {
Changed 2026-10-05 14:18 UTC
7 descriptions rewritten, 7 schema or annotation changes with the description left byte-identical, 4 tools added, 2 tools removed.
+ tool added: agent_approval
+ tool added: agent_auth
--- pinned/agent_configure +++ observed/agent_configure { - "description": "起動済みのClaude/Codex/Grok/Composer/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effortを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。", + "description": "起動済みのClaude/Codex/Grok/Cursor agent sessionを再起動せず、会話contextを保ったままmodel/reasoning effortを変更する。各harnessのCLI標準model操作を使う。Cursorのreasoning_effort変更はmodelと同時指定する。", "execution": { "taskSupport": "forbidden" }, + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_id": { "pattern": "^[A-Za-z0-9_-]{1,64}$", "type": "string" - "composer", "cursor" ], "type": "string"
--- pinned/agent_launch +++ observed/agent_launch { - "description": "エージェントを単一の標準入口から永続sessionへ起動する。harnessはagent loop・認証・hook・transcriptを所有する実行基盤、modelはそのharnessが選ぶ推論モデルであり別軸。Cursor harnessからGPT/Claude/Grok等を選んでも完了相関はCursor方式のまま。Grok Composerは別harnessではなく harness=grok-cli と model=grok-composer-2.5-fast で指定する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。", + "description": "エージェントを単一の標準入口から永続sessionへ起動する。harnessはagent loop・認証・hook・transcriptを所有する実行基盤、modelはそのharnessが選ぶ推論モデルであり別軸。Cursor harnessからGPT/Claude/Grok等を選んでも完了相関はCursor方式のまま。ComposerはCursorのmodelの一つで、harnessでもGrokのmodelでもない。harness=cursor-cli と model=composer-2.5-fast(またはcomposer-2.5)で指定する。remoteを付けると、SSHで入った別端末のAitermで同じ起動を行い、完了は同じ形で親へ届く。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。", "execution": { "taskSupport": "forbidden" }, + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_name": { "description": "Aiterm session名(省略で自動採番)", "type": [ + "trust_project": { + "description": "対象projectを信頼し、既知のworkspace・project hooks・MCP初期同意を起動中に進める", + "type": "boolean" + }, "write_scope": { "description": "能力宣言。read-onlyは対応harnessの標準read-only面で実効禁止する", "minLength": 1, + "initial_prompt": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "not_requested", + "not_sent", + "submitted_unconfirmed", + "started" + ], + "type": "string" + }, + "turn_started": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "status", + "reason", + "turn_started" + ], + "type": "object" + }, "managed_completion": { "type": "boolean" }, + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "provider": { "description": "旧互換field。新規連携はharnessを使う", "enum": [ - "composer", "cursor" ], "type": "string" + "remote_host": { + "description": "別端末で起動した時の接続先", + "type": "string" + }, + "remote_version": { + "description": "別端末のAiterm版", + "type": [ + "string", + "null" + ] + }, "schema": { "const": "aiterm.agent-launch-result.v1", "type": "string" + "startup": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "ready", + "not_checked", + "blocked" + ], + "type": "string" + } + }, + "required": [ + "status", + "reason" + ], + "type": "object" + }, "submit_residue": { "type": [ "boolean", + "initial_prompt", + "startup", "harness", "provider", "session_id",
+ tool added: agent_models
--- pinned/claude_agent +++ observed/claude_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=claude-code)】Claude Codeの対話エージェントTUIを永続端末に起動する。`claude -p`ではなく、同じ利用者可視sessionへpty_sendで継続入力する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。通常settingsへlaunch固有Stop hook settingsを加算する。起動前に共有認証を構造化確認し、未認証ならsessionを作らない。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。Claude の durable turn は claude_turn でも回収できる。", + "description": "【旧互換alias。新規連携は agent_launch(harness=claude-code)】Claude Codeの対話エージェントTUIを永続端末に起動する。`claude -p`ではなく、同じ利用者可視sessionへpty_sendで継続入力する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。通常settingsへlaunch固有Stop hook settingsを加算する。起動前に共有認証を構造化確認し、未認証ならsessionを作らない。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。Claude の durable turn は claude_turn でも回収できる。", "execution": { "taskSupport": "forbidden" }, + }, + "trust_project": { + "description": "対象projectを信頼し、既知のworkspace・project hooks・MCP初期同意を起動中に進める", + "type": "boolean" } }, "type": "object" + "initial_prompt": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "not_requested", + "not_sent", + "submitted_unconfirmed", + "started" + ], + "type": "string" + }, + "turn_started": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "status", + "reason", + "turn_started" + ], + "type": "object" + }, "managed_completion": { "description": "後方互換field。trueはaiterm完了相関が有効という意味で、project/user環境の隔離を意味しない", "type": "boolean" + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "provider": { "const": "claude", "type": "string" + "startup": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "ready", + "not_checked", + "blocked" + ], + "type": "string" + } + }, + "required": [ + "status", + "reason" + ], + "type": "object" + }, "submit_residue": { "type": [ "boolean", + "initial_prompt", + "startup", "provider", "harness", "session_id",
--- pinned/claude_approval +++ observed/claude_approval { "description": "aiterm相関付きClaudeのactive turn中に表示された権限確認UIを、turn相関を保ったまま検査・応答する専用面。inspectで画面digestと安全な単発Yes/Noだけを取得し、respondは同じoperation・同じdigestが現在も表示中の場合だけ送信する。", "execution": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_id": { "type": "string" }
--- pinned/claude_turn +++ observed/claude_turn { "description": "aiterm相関付きClaude sessionのdurable operationを構造化issue/recoverするmachine-caller専用面。pending/unknown/completedを人間向けerror文字列の解析なしで返し、Observer固有ロジックは持たない。", "execution": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_id": { "type": "string" }, + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "raw_output": { "type": [ "string",
--- pinned/codex_agent +++ observed/codex_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=codex-cli)】Codexの対話エージェント TUI を永続端末に起動する。実装・レビュー・調査を対話で回す。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。委譲契約を使う完全な呼び出し例: `codex_agent({\"prompt\":\"<依頼>\",\"model\":\"gpt-5.6-sol\",\"reasoning_effort\":\"high\",\"cwd\":\"/absolute/path/to/repo\",\"write_scope\":\"read-only\"})`。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model / reasoning_effort を引数で指定可(省略時は端末 config/CLI 既定を継承。実効値は起動応答に明示)。", + "description": "【旧互換alias。新規連携は agent_launch(harness=codex-cli)】Codexの対話エージェント TUI を永続端末に起動する。実装・レビュー・調査を対話で回す。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。委譲契約を使う完全な呼び出し例: `codex_agent({\"prompt\":\"<依頼>\",\"model\":\"gpt-5.6-sol\",\"reasoning_effort\":\"high\",\"cwd\":\"/absolute/path/to/repo\",\"write_scope\":\"read-only\"})`。turn は pty_send で送る(自動で非ブロック dispatch になる)。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。model / reasoning_effort を引数で指定可(省略時は端末 config/CLI 既定を継承。実効値は起動応答に明示)。", "execution": { "taskSupport": "forbidden" }, + "trust_project": { + "description": "対象projectを信頼し、既知のworkspace・project hooks・MCP初期同意を起動中に進める", + "type": "boolean" + }, "write_scope": { "description": "能力宣言。read-only、または書込みを許可するパスの説明文字列。対応harnessのread-onlyはCLI標準のread-only面で実効禁止する", "minLength": 1, + "initial_prompt": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "not_requested", + "not_sent", + "submitted_unconfirmed", + "started" + ], + "type": "string" + }, + "turn_started": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "status", + "reason", + "turn_started" + ], + "type": "object" + }, "managed_completion": { "description": "後方互換field。trueはaiterm完了相関が有効という意味で、project/user環境の隔離を意味しない", "type": "boolean" + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "provider": { "const": "codex", "type": "string" + "startup": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "ready", + "not_checked", + "blocked" + ], + "type": "string" + } + }, + "required": [ + "status", + "reason" + ], + "type": "object" + }, "submit_residue": { "type": [ "boolean", + "initial_prompt", + "startup", "provider", "harness", "session_id",
--- pinned/diagnostics +++ observed/diagnostics { - "description": "Factory 向け read-only 診断。安全な状態語彙だけを機械可読 JSON で返す(PTY 内容・認証情報・path・環境値は返さない)。", + "description": "Factory 向け read-only 診断。安全な状態語彙だけを機械可読 JSON で返す(PTY 内容・認証情報・path・環境値は返さない)。2つ目のtextは親配送hook(Claude Code・Cursor)の登録状態で、caller_status が setup_required なら呼出元からのagent送信は拒否される。aiterm-setup を実行する。", "execution": { "taskSupport": "forbidden" },
--- pinned/grok_agent +++ observed/grok_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli)】Grok BuildのGrokモデル(既定 grok-4.6)の対話エージェント TUIを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。read-only sandboxとagent_configureに対応。", + "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli)】Grok BuildのGrokモデル(既定 grok-4.6)の対話エージェント TUIを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。read-only sandboxとagent_configureに対応。", "execution": { "taskSupport": "forbidden" }, + "trust_project": { + "description": "対象projectを信頼し、既知のworkspace・project hooks・MCP初期同意を起動中に進める", + "type": "boolean" + }, "write_scope": { "description": "能力宣言。read-only、または書込みを許可するパスの説明文字列。対応harnessのread-onlyはCLI標準のread-only面で実効禁止する", "minLength": 1, + "initial_prompt": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "not_requested", + "not_sent", + "submitted_unconfirmed", + "started" + ], + "type": "string" + }, + "turn_started": { + "type": [ + "boolean", + "null" + ] + } + }, + "required": [ + "status", + "reason", + "turn_started" + ], + "type": "object" + }, "managed_completion": { "description": "後方互換field。trueはaiterm完了相関が有効という意味で、project/user環境の隔離を意味しない", "type": "boolean" + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "provider": { "const": "grok", "type": "string" + "startup": { + "additionalProperties": false, + "properties": { + "reason": { + "type": "string" + }, + "status": { + "enum": [ + "ready", + "not_checked", + "blocked" + ], + "type": "string" + } + }, + "required": [ + "status", + "reason" + ], + "type": "object" + }, "submit_residue": { "type": [ "boolean", + "initial_prompt", + "startup", "provider", "harness", "session_id",
--- pinned/pty_close +++ observed/pty_close { "description": "セッションを閉じ、ログ/読取位置を破棄する。同じsession_idへの再試行は安全で、closed/already_closedのstructured receiptを返す。", "execution": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_id": { "type": "string" }
--- pinned/pty_key +++ observed/pty_key { "description": "制御キーを送る(C-c, C-d, Enter, Tab, Up, Down... の別名に対応)。aiterm相関付きClaude sessionではturn相関を守るためC-cだけを許可し、承認UIはclaude_approvalで操作する。", "execution": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "session_id": { "type": "string" }
--- pinned/pty_list +++ observed/pty_list { "description": "握っているセッション一覧(名前 / 現在の前面コマンド / attach 状態 / サイズ / agent 情報)。", "execution": { - "properties": {}, + "properties": { + "env_keys": { + "description": "帰属確認用の非秘密環境変数名。指定したキーだけを返す", + "items": { + "type": "string" + }, + "type": "array" + }, + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + } + }, "type": "object" }, - "name": "pty_list" + "name": "pty_list", + "outputSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "observed_at": { + "type": "string" + }, + "schema": { + "const": "aiterm.pty-list-result.v1", + "type": "string" + }, + "sessions": { + "items": { + "additionalProperties": false, + "properties": { + "attached": { + "type": "boolean" + }, + "current_command": { + "type": "string" + }, + "environment": { + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "harness": { + "anyOf": [ + { + "enum": [ + "claude-code", + "codex-cli", + "grok-cli", + "cursor-cli" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "session_id": { + "type": "string" + }, + "width": { + "type": "number" + } + }, + "required": [ + "session_id", + "current_command", + "attached", + "width", + "height", + "harness", + "environment" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "schema", + "observed_at", + "sessions" + ], + "type": "object" + } }
+ tool added: pty_observe
--- pinned/pty_open +++ observed/pty_open { "description": "ローカル永続端末(POSIXはtmux、Windows nativeはpsmux 3.3.8以上)を1個開き、session_id を返す。backend server常駐ゆえ本サーバや クライアントが再起動してもセッションは生存する。リモート操作は専用ツールにせず、開いた端末の中で pty_send(session_id, \"ssh host\") と打って入る。", "execution": { + "env_vars": { + "description": "sessionへ登録する環境変数名(値は現在のMCP processから読む。pty_listのenv_keysで読める)。端末の環境は、名指ししなくても現在のMCP processの環境を継ぐ", + "items": { + "type": "string" + }, + "type": "array" + }, "name": { "description": "セッション名(省略時は t1, t2... を自動採番)", "type": [ + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "shell": { "default": "bash", "description": "起動シェル(既定 bash)",
--- pinned/pty_read +++ observed/pty_read { "description": "セッションの出力をトークン削減して読む(既定は前回読取位置からの増分)。削減: 制御文字除去 / 反復圧縮 / head+tail 折りたたみ+復元ヒント+メタ併記。agent_transcript:true は agent session の直近完了ターンの最終 assistant メッセージを公開されたharness記録から平文で返す。長い回答が screen tail で切れた時の回収用。", "execution": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, "rtk": { "default": false, "description": "直前コマンド別の自前 reducer(git/grep/pytest 等)で縮約", - "composer", "cursor" ], "type": "string"
--- pinned/pty_send +++ observed/pty_send { - "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への send は自動で dispatch になる: TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。完了通知はreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", + "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への送信はこのtoolだけで行い、子の状態はAitermが送る時点で見て振り分ける。子のturnが実行中なら各harness標準の操作で現在のturnへ差し込み(mode=agent_steer)、完了は差し込み後の作業の終わりに元の依頼への1回だけ届く。新しいevent_cursorと配送は作らない。それ以外は新しいturnとしてdispatchし(mode=agent_dispatch)、TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。Codex親とClaude Code親にはAitermが回答本文を自動配送する。parent_deliveryがある場合はwait起動も通常の回答回収も不要。親は作業を続けるかターンを終える。Cursor親にはparent_deliveryとwait_processが付く。作業を続ければ次のツール返りに回答が差し込まれ、ターンを終える前にwait_processを背景で起動するとidle中の完了でも起きられる。ポーリングとpty_read(agent_transcript:true)は不要。その他の親では、完了通知をreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。自動配送以外の結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。require_agent:true はagent登録が無いsessionへ打鍵せず、AGENT_SESSION_REQUIREDで未送信を返す。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", "execution": { "taskSupport": "forbidden" }, - "description": "完了 sentinel(終了コード付き)で包む。pty_read(wait:true) が until 無しでも自動検出して完了確定する(POSIX shell と PowerShell に対応。PowerShell の rc は成功0/失敗1。fish/csh/tcsh は未対応として送信前に拒否)。 enter:false と併用すると sentinel が実行されず完了検出が発火しない(送信後に pty_key(\"Enter\") で実行される)。", + "description": "完了 sentinel(終了コード付き)で包む。pty_read(wait:true) が until 無しでも自動検出して完了確定する(POSIX shell と PowerShell に対応。SSH先の現在の標準PS promptも自動判定。PowerShell の rc は成功0/失敗1。fish/csh/tcsh は未対応として送信前に拒否)。 enter:false と併用すると sentinel が実行されず完了検出が発火しない(送信後に pty_key(\"Enter\") で実行される)。", "type": "boolean" }, "raw": { + "remote": { + "additionalProperties": false, + "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。", + "properties": { + "host": { + "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$", + "type": "string" + }, + "identity_file": { + "minLength": 1, + "type": "string" + }, + "passphrase": { + "minLength": 1, + "type": "string" + }, + "passphrase_env": { + "pattern": "^[A-Za-z_][A-Za-z0-9_]*$", + "type": "string" + }, + "port": { + "maximum": 65535, + "minimum": 1, + "type": "integer" + }, + "ssh_options": { + "items": { + "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$", + "type": "string" + }, + "maxItems": 32, + "type": "array" + }, + "user": { + "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$", + "type": "string" + } + }, + "required": [ + "host" + ], + "type": "object" + }, + "require_agent": { + "default": false, + "description": "agent登録が無いsessionは打鍵前に拒否する。force:trueとは併用できない", + "type": "boolean" + }, "rtk": { "default": false, "description": "既知コマンドを rtk 形へ委譲して送る(rtk 不在なら素通し)", - "agent_dispatch" + "agent_dispatch", + "agent_steer" ], "type": "string" }, + "parent_delivery": { + "additionalProperties": false, + "properties": { + "child_outcome": { + "anyOf": [ + { + "enum": [ + "done", + "closed", + "rate_limited", + "error" + ], + "type": "string" + }, + { + "type": "null" + } + ] + }, + "child_turn_id": { + "type": [ + "string", + "null" + ] + }, + "delivery_id": { + "type": "string" + }, + "error_code": { + "type": [ + "string", + "null" + ] + }, + "queued_submission_id": { + "type": [ + "string", + "null" + ] + }, + "state": { + "enum": [ + "waiting", + "ready", + "sending", + "submitted", + "failed", + "unknown" + ], + "type": "string" + } + }, + "required": [ + "delivery_id", + "state", + "child_outcome", + "child_turn_id", + "queued_submission_id", + "error_code" + ], + "type": "object" + }, "schema": { "const": "aiterm.pty-send-result.v1", "type": "string" - "composer", "cursor" ], "type": "string"
tool removed: agent_steer
tool removed: composer_agent
Changed 2026-09-04 10:22 UTC
6 descriptions rewritten, 1 schema or annotation change with the description left byte-identical.
--- pinned/agent_launch +++ observed/agent_launch { - "description": "エージェントを単一の標準入口から永続sessionへ起動する。harnessはagent loop・認証・hook・transcriptを所有する実行基盤、modelはそのharnessが選ぶ推論モデルであり別軸。Cursor harnessからGPT/Claude/Grok等を選んでも完了相関はCursor方式のまま。Grok Composerは別harnessではなく harness=grok-cli と model=grok-composer-2.5-fast で指定する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。", + "description": "エージェントを単一の標準入口から永続sessionへ起動する。harnessはagent loop・認証・hook・transcriptを所有する実行基盤、modelはそのharnessが選ぶ推論モデルであり別軸。Cursor harnessからGPT/Claude/Grok等を選んでも完了相関はCursor方式のまま。Grok Composerは別harnessではなく harness=grok-cli と model=grok-composer-2.5-fast で指定する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。", "execution": { "taskSupport": "forbidden" }, + "image": { + "description": "初手プロンプトへ添付する画像ファイルの絶対パス(png/jpg/jpeg/gif/webp)", + "items": { + "type": "string" + }, + "type": "array" + }, "launch_operation_id": { "description": "Claude Codeのpromptなしexact replay相関だけで使用", "pattern": "^sha256:[0-9a-f]{64}$",
--- pinned/agent_steer +++ observed/agent_steer { "description": "実行中のCodex/Grok agentへ追加メッセージを差し込み、現在のターンを誘導する。独立した次ターンを始める用途ではなく、idle時は文字を送らずdelivery=idleを返す。", "execution": { + "image": { + "description": "添付する画像ファイルの絶対パス(png/jpg/jpeg/gif/webp)", + "items": { + "type": "string" + }, + "type": "array" + }, "session_id": { "type": "string" },
--- pinned/claude_agent +++ observed/claude_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=claude-code)】Claude Codeの対話エージェントTUIを永続端末に起動する。`claude -p`ではなく、同じ利用者可視sessionへpty_sendで継続入力する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。通常settingsへlaunch固有Stop hook settingsを加算する。起動前に共有認証を構造化確認し、未認証ならsessionを作らない。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。Claude の durable turn は claude_turn でも回収できる。", + "description": "【旧互換alias。新規連携は agent_launch(harness=claude-code)】Claude Codeの対話エージェントTUIを永続端末に起動する。`claude -p`ではなく、同じ利用者可視sessionへpty_sendで継続入力する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。通常settingsへlaunch固有Stop hook settingsを加算する。起動前に共有認証を構造化確認し、未認証ならsessionを作らない。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。Claude の durable turn は claude_turn でも回収できる。", "execution": { "taskSupport": "forbidden" },
--- pinned/codex_agent +++ observed/codex_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=codex-cli)】Codexの対話エージェント TUI を永続端末に起動する。実装・レビュー・調査を対話で回す。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。委譲契約を使う完全な呼び出し例: `codex_agent({\"prompt\":\"<依頼>\",\"model\":\"gpt-5.6-sol\",\"reasoning_effort\":\"high\",\"cwd\":\"/absolute/path/to/repo\",\"write_scope\":\"read-only\"})`。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model / reasoning_effort を引数で指定可(省略時は端末 config/CLI 既定を継承。実効値は起動応答に明示)。", + "description": "【旧互換alias。新規連携は agent_launch(harness=codex-cli)】Codexの対話エージェント TUI を永続端末に起動する。実装・レビュー・調査を対話で回す。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。委譲契約を使う完全な呼び出し例: `codex_agent({\"prompt\":\"<依頼>\",\"model\":\"gpt-5.6-sol\",\"reasoning_effort\":\"high\",\"cwd\":\"/absolute/path/to/repo\",\"write_scope\":\"read-only\"})`。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model / reasoning_effort を引数で指定可(省略時は端末 config/CLI 既定を継承。実効値は起動応答に明示)。", "execution": { "taskSupport": "forbidden" },
--- pinned/composer_agent +++ observed/composer_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli, model=grok-composer-2.5-fast)】Grok BuildのComposerモデルを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。live catalogにComposer modelがなければGrokへfallbackせず明示エラー。read-only sandboxとagent_configureに対応。", + "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli, model=grok-composer-2.5-fast)】Grok BuildのComposerモデルを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。live catalogにComposer modelがなければGrokへfallbackせず明示エラー。read-only sandboxとagent_configureに対応。", "execution": { "taskSupport": "forbidden" },
--- pinned/grok_agent +++ observed/grok_agent { - "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli)】Grok BuildのGrokモデル(既定 grok-4.6)の対話エージェント TUIを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。read-only sandboxとagent_configureに対応。", + "description": "【旧互換alias。新規連携は agent_launch(harness=grok-cli)】Grok BuildのGrokモデル(既定 grok-4.6)の対話エージェント TUIを永続端末に起動する。通常CLIと同じHOME・cwd・project/user/local設定・MCP・plugin・skill・permission/trustを共有する。aitermは完了相関stateだけをlaunch単位で所有する。起動されたagentにはsub-agent自己認識、親session、delegation depth/lineage、delegation_allowed=trueを注入し、必要な追加委譲は許可する。turn は pty_send で送る(自動で非ブロック dispatch になる)。起動して投げたら投げっぱなしでよい=親はここで待たない。完了通知は起動応答またはpty_send dispatch receiptの wait_processを、親のターンを塞がない別プロセスAPIへexecutable/argsの境界を保ったまま渡して受ける(PowerShell 7のStart-Processはwindows_start_process_argument_listを使う)(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要・foreground実行はしない)。wait_commandは人間向け互換表示。結果回収は pty_read(agent_transcript:true)。model/reasoning_effortを引数で指定可。read-only sandboxとagent_configureに対応。", "execution": { "taskSupport": "forbidden" },
--- pinned/pty_send +++ observed/pty_send { - "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への send は自動で dispatch になる: TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。完了通知はreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", + "description": "セッションへテキストを送る。通常PTYへは送信のみ(出力は pty_read で取得)。agent session(launcher起動)への send は自動で dispatch になる: TUI の ready gate と submit 分離を通して即返り、receipt の event_cursor を返す。dispatch した子は投げっぱなしでよい=親はここで待たない。完了通知はreceiptの `wait_process.executable` と `wait_process.args` をそのまま親のターンを塞がない別プロセスAPIへ渡して受け、PowerShell 7のStart-Processだけは `windows_start_process_argument_list` を単一文字列として渡す。exit を完了通知として扱う(exit 0=done / 3=timeout(既定600秒・未完了) / 4=closed / 7=error(harnessの記録でturnがAPIエラー等で打ち切られた。結果は無い)。receiptのoutcomeが正で、done以外は未完了。ポーリング不要)。`wait_command` は人間向け互換表示でありprocess境界へ使わない。foreground実行で親のターンを塞がない。結果回収は pty_read(agent_transcript:true)、Claude の durable turn は claude_turn を使う。force:true は非Claude agent sessionへの手動介入用の素送信。aiterm相関付きClaudeの承認UIはclaude_approvalを使う。", "execution": { "taskSupport": "forbidden" }, + "image": { + "description": "添付する画像ファイルの絶対パス(png/jpg/jpeg/gif/webp)。agent session への dispatch だけで使え、harness別の添付手順はaitermが吸収する。通常PTY送信やforce送信では指定できない", + "items": { + "type": "string" + }, + "type": "array" + }, "mark": { "default": false, "description": "完了 sentinel(終了コード付き)で包む。pty_read(wait:true) が until 無しでも自動検出して完了確定する(POSIX shell と PowerShell に対応。PowerShell の rc は成功0/失敗1。fish/csh/tcsh は未対応として送信前に拒否)。 enter:false と併用すると sentinel が実行されず完了検出が発火しない(送信後に pty_key(\"Enter\") で実行される)。", + "pane_input_recovery": { + "items": { + "type": "string" + }, + "type": "array" + }, "schema": { "const": "aiterm.pty-send-result.v1", "type": "string"
Current tools
Show all 18 tool fingerprints
Watch this server yourself
If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.
npx -y mcp-pin@0.2.3 -- <your aiterm-mcp command>
Or subscribe to this page's RSS feed to be told when it changes.
Badge
The badge states one fact about time and nothing else. It never claims a server is safe.
[](https://mcp-pin.gautamkhosla.com/servers/44524933e873a07e.html)