session-manager
Integrates with OpenAI Codex via app-server/CLI, enabling orchestration of Codex work sessions: starting, monitoring, messaging, stopping, and reading reports from Codex agents.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@session-managerfix the login bug and open a PR, and check for dependency updates"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Inline Agent Orchestrator
English | 日本語
頼みたい作業が何件あっても、話しかけるのはひとつのチャットだけ。
Claude Code や Codex で作業を並行して進めるとき、セッションをいくつも開いて、1つずつ様子を見て回っていませんか。Inline Agent Orchestrator を入れると、いつものチャットがまとめ役になります。作業ごとにセッションを立ち上げて進み具合を見守り、判断が必要なことだけをまとめて聞いてきます。画面も操作も、いつもの Claude Code・Codex のままです。
試作版(v0.9.2)です。単体テストは通過していますが、実際の Claude Code・Codex での動作検証はまだ行っていません。ご利用の前に「動作確認」の手順をお試しください。
特長
いつもの画面のまま — 専用のアプリや画面はありません。Claude Code・Codex をそのまま使います。tmux や常駐のサービスも要りません
作業ごとにセッションを用意 — 頼んだ内容を作業ごとに分け、それぞれに名前・作業フォルダ・モデルを決めて、別々のセッションで進めます
質問はまとめて、おすすめ付きで — 各セッションからの「どうしますか?」を集め、選択肢とおすすめを添えて一度に聞きます。返事をすれば、それぞれの作業が続きから進みます
Claude のデスクトップアプリのサイドバーに並ぶ — Claude のデスクトップアプリでは、作業セッションがデスクトップアプリの会話として起動し、オーケストレーターの下に並びます。動いている間はピン留めされ、終わると外れます。オーケストレーター自身もピン留めされます(Claude のデスクトップアプリで使う)
PC と利用枠に無理をさせない — 同時に動かす数は決めず、空きメモリと CPU に余裕があるかぎり起動します。利用枠の上限に達して止まった作業は、枠が戻ったあとに続きから再開させます(利用枠の上限)
止まった作業も立て直す — エラーで落ちたセッションや、途中で止まったセッションに気づき、続きから進めるよう頼み直します
あとでやることを書き留める(TODO) — 「利用枠が戻ったら PR #7 の続き」のように話しかけるだけで残せます。条件がそろうと「始めますか」と聞き、そこから作業セッションを起動します(あとでやること(TODO))
どのチャットからでも一覧を見られる —
/inline-agent-orchestrator:statusで、作業セッション・TODO・引き継ぎメモを表で表示します(一覧を見る)入れるのは Node.js だけ — ほかのパッケージを必要とせず、軽く動きます
Related MCP server: z-code-mcp
使用例
👤 ログインの不具合を修正して、PR まで作成してください。
あわせて、依存ライブラリを更新できるか調べて報告してください。
🤖 2つのセッションに分けて進めます。
・fix-login … 不具合の修正 → テスト → PR の作成
・deps-survey … 調査して報告
監視を開始します。
(しばらくして)
🤖 fix-login から確認があります。有効期限が切れたセッションでは、再ログインを求めますか?
それとも自動で延長しますか?
おすすめは「再ログインを求める」です(現在の画面と同じ動作です)。
👤 おすすめでお願いします。
🤖 すべての作業が完了しました。
| セッション | 結果 |
| fix-login | PR #42 を作成(テストを追加) |
| deps-survey | 3件は更新可能、1件は破壊的変更あり |クイックスタート
Claude Code
動作環境: Claude Code 2.1.275 以降、Node.js 20 以降
ターミナルで起動した Claude Code のチャット欄に、次のコマンドを入力します。
/plugin install inline-agent-orchestrator --marketplace horiu/inline-agent-orchestratorマーケットプレイスの追加を確認されたら承認し、続く画面で「Install for you」を選ぶと、そのまま使えるようになります。
Claude のデスクトップアプリと VS Code のチャット欄では、このコマンドは使えません。代わりにターミナルで次のコマンドを実行し、Claude のデスクトップアプリや VS Code を再起動してください(Claude Code 2.1.292 以降)。インストールしたプラグインは、ターミナル・ Claude のデスクトップアプリ・VS Code のどれからでも使えます。
claude plugin install inline-agent-orchestrator --marketplace horiu/inline-agent-orchestratorVS Code では、チャット欄に /plugins と入力して開く画面からもインストールできます。Marketplaces タブで horiu/inline-agent-orchestrator を追加し、Plugins タブでインストールします。
Claude Code では、既定で利用枠を読まずに動きます(利用枠の上限)。pauseAtPct を設定してターミナルで使う場合だけ、使用量を読み取るための status line の設定を求められます。許可すると設定され、現在の status line の表示はそのまま残ります。Claude のデスクトップアプリでは status line が表示されないため、設定しても使用量は読み取れません。
チャット欄に次のコマンドを順に入力します。
/plugin marketplace add horiu/inline-agent-orchestrator/plugin install inline-agent-orchestrator@inline-agent-orchestratorCodex
動作環境: Codex CLI 0.162 以降(Codex のデスクトップアプリのみを使う場合も必要です)、Node.js 20 以降、git
ターミナルで次のコマンドを順に実行します。
git clone https://github.com/horiu/inline-agent-orchestrator.git $HOME/.codex/inline-agent-orchestratornode $HOME/.codex/inline-agent-orchestrator/src/setup.mjs codexCodex を再起動すれば準備完了です。セットアップスクリプトは MCP サーバーを ~/.codex/config.toml に登録し(変更前のファイルは config.toml.bak-<日時> として保存します)、スキルを ~/.agents/skills/manage-sessions/ にインストールします。
使い方
始め方
新しいセッションのチャット欄に次のコマンドを入力し、続けて依頼したい作業を伝えます。
コマンド | |
Claude Code |
|
Codex |
|
オーケストレーターが作業を分割し、作業用のセッションを起動して監視を始めます。「PR を作成するまで」「調査して報告するまで」のように、どこまで進めるかを添えると、途中で止まらずに進みます。
オーケストレーターのセッションには <リポジトリ名> Manager(例: wakarium Manager)という名前が付きます。リポジトリ名は作業フォルダの git リポジトリの名前で、worktree の中でも元のリポジトリの名前になります(git の外では作業フォルダの名前)。Claude のデスクトップアプリでは自動で付きます。ターミナルの Claude Code では外から名前を変えられないため、案内に従ってチャット欄に /rename <リポジトリ名> Manager と入力してください。
Claude のデスクトップアプリで使う
Claude のデスクトップアプリ(Code タブ)でオーケストレーターを動かすと、作業セッションはデスクトップアプリの会話として起動します。
サイドバーに並ぶ — 作業セッションはオーケストレーターの下に並び、クリックで開いて直接話しかけられます。Claude のデスクトップアプリが作業セッションごとに worktree とブランチを作ります
オーケストレーターもピン留め — オーケストレーターのセッションは、始めたときにピン留めされます。全部の作業が終わっても自動では外れないので、要らなくなったら外してください(オーケストレーターに「ピン留めを外して」と頼んでも外れます)。新しい会話でオーケストレーターを始め直すと、同じリポジトリの前のオーケストレーター(引き継ぎメモ
handoff.mdに書いたもの)のピン留めは外れます。ほかのリポジトリのオーケストレーターのピン留めは外しません動いている間はピン留め — 管理中で動いている作業セッションはピン留めされ、終わる(done)と外れます。終わったセッションは、最後の報告のあとにアーカイブするか聞かれます(アーカイブすると worktree も片付きます)
話しかけるとすぐ読まれる — オーケストレーターは監視のために待ち続けず、やることを済ませたらターンを終えます。作業セッションがターンを終えると、Claude のデスクトップアプリがオーケストレーターに知らせ、オーケストレーターが報告と状態を処理します。そのため、入力欄に打った文はいつでもすぐ読まれます
リモートから頼んだとき・知らせで動いたとき — Remote Control(スマートフォンや claude.ai)から頼んだときや、知らせで動いたときは、Claude のデスクトップアプリが作業セッションの起動を受け付けません。その場合は起動の提案カードを出し、TODO にも残します。PC のデスクトップアプリでカードを押すと始まり、押さないまま次に話しかけると、そのときに起動します
利用枠は道具からは読みません — Claude のデスクトップアプリでは status line が表示されないため、使用量を理由に止める設定(
pauseAtPct)は効きません。「利用枠が戻ったら」の TODO は、オーケストレーターが Claude のデスクトップアプリの使用量(plan の枠)を読んで確かめます
知らせの仕組み上、次の点は遅れて届きます。
届くもの | 届くとき |
作業セッションの質問・完了・進めない報告 | すぐ(作業セッションがそこでターンを終えるため) |
作業セッションの途中の報告(progress) | その作業セッションがターンを終えたとき |
作業セッションを何本も並べたときの報告 | 動いている作業セッションがなくなったとき(または、あなたが話しかけたとき) |
承認・入力の待ち | Claude のデスクトップアプリ自身が通知します |
日時・PR のマージなどの TODO の条件 | オーケストレーターが動いたとき(話しかけたとき・知らせのとき) |
オーケストレーターがターンを終え、作業セッションの知らせで動く形は、0.8.0 のオーケストレーターを手順どおりに動かして、Claude のデスクトップアプリで一日使って確かめました。0.9.0 で足した wait_events の wait: false・TODO・一覧のコマンドは単体テストだけで、実際の Claude のデスクトップアプリではまだ確かめていません(動作確認の D2〜D5)。0.9.2 の権限モードの引き継ぎも同じです(D6)。
途中の報告が遅れても、作業セッションは止まらずに進みます。急ぎで様子を見たいときは、オーケストレーターに話しかけるか、作業セッションを開いてください。claude --bg のセッションや、前のオーケストレーターが起動したセッションからは知らせが届かないため、話しかけたときにだけ確認します。
ターミナルの Claude Code では、従来どおり claude --bg のバックグラウンドセッションで起動します。Claude のデスクトップアプリから claude --bg を使う場合(「via: bg で起動して」と依頼)は、ターミナルで claude を起動して /login しておく必要があります(デスクトップアプリのログインは CLI には効きません)。バックグラウンドセッションはデスクトップアプリのサイドバーに表示されず、ピン留めもできません。
実行中
追加の作業もオーケストレーターへ — 同じ箇所を扱っているセッションがあればそこへ追加し、関係がなければ新しいセッションを起動します
作業中のセッションを確認する — Claude Code では
claude agentsで一覧を表示し、claude attach <ID>で開きます。Codex ではcodex agentsとcodex resume <ID>を使います。開いたセッションに直接指示することもできますモデルやエフォートを変える — 「fix-login はもっと深く考えさせて」「設計が終わったら実装用の設定に切り替えて」のように依頼すると、次の指示から切り替わります
オーケストレーターに話しかける — Claude のデスクトップアプリでは、いつでもすぐ読まれます。ターミナルの Claude Code と Codex では、監視中に入力した文は、監視が次に戻るまで(最長
watchIntervalMin=既定 30分)読まれません。急ぐ場合は停止ボタン(■。ターミナルの Claude Code では Esc)で監視を止めてから入力してください。止めている間の出来事も失われず、次の監視で受け取ります。監視を始めるとき、オーケストレーターがこのことを一言伝えます監視をやめる — 「監視をやめて」と伝えます(ターミナルの Claude Code と Codex では、先に停止ボタンで監視を止めます)。作業用のセッションはそのまま動き続け、「見回って」と伝えると監視を再開します。作業用のセッションも止める場合は「全部止めて」と伝えます
一覧を見る — どのチャットからでも
/inline-agent-orchestrator:statusを入力すると、作業セッション・TODO・引き継ぎメモの表を表示します(一覧を見る)
あとでやること(TODO)
利用制限で止まった作業や、あとで実行したい作業を、オーケストレーターに書き留めておけます。番号や決まった書き方は要りません。
👤 これは後でやる。利用枠が戻ったら PR #7 の続きをお願い。
🤖 TODO 3番に残しました(条件: 利用枠が戻ったら)。
(枠が戻ったあと、話しかけたときや作業セッションの知らせのとき)
🤖 条件がそろいました。「PR #7 の続き」(TODO 3番)を始めますか?
👤 3番を始めて条件 — いつでも/利用枠が戻ったら/PR #◯ がマージされたら/新しい版で動いたら(読み込んだら)・起動し直したら/日時、から選びます。条件は、オーケストレーターが動いたとき(話しかけたとき・知らせのとき・監視のとき)に確かめます。PR のマージは
gh(GitHub CLI)で確かめますオーケストレーターも書き留める — 作業セッションが利用制限で止まったとき、PC の空きが足りずに起動を待たせたとき、起動の提案カードを出したとき、あなたの確認が必要なこと(例: Claude のデスクトップアプリを再起動したら確かめること)が出たときに、自分で TODO に残します。すでに頼まれた作業の続き(利用制限・空き待ち・カード)は、条件がそろうと聞かずに進めます
始める — 「2番を始めて」「それやって」で、TODO を依頼にして作業セッションを起動します(保留した作業セッションの続きなら、そのセッションに頼みます)。作業セッションが終わると、TODO も自動で済みになります
記録 — データフォルダの
state.jsonに残るため、新しいチャットでオーケストレーターを始めても引き継がれます。引き継ぎメモhandoff.mdにも要点を書きます
一覧を見る
どのチャットからでも、次のコマンドで一覧を表示します。オーケストレーターのチャットでなくてもかまいません(ターミナルの Claude Code で監視中のオーケストレーターには、入力しても読まれないため)。表示するだけで、何も変更しません。
/inline-agent-orchestrator:status作業セッション — 名前・状態(作業中・判断待ち・承認待ち・終わった など)・ブランチ・PR・待っていること・開き方。Claude のデスクトップアプリでは、名前のリンクから開けます
TODO — やること・条件・条件がそろっているか
引き継ぎメモ —
handoff.mdの更新日時と要点
終わった作業セッションと済んだ TODO は、ふだんは表示しません。表示する場合は /inline-agent-orchestrator:status all と入力します。Codex にはこのコマンドはありません。別のチャットで「session-manager の list_sessions で一覧を見せて」と頼んでください。
完了後
すべての作業が終わるか、判断を保留した項目だけが残ると、オーケストレーターが結果(ブランチ、PR、残作業)を表にまとめて報告します。
設定
既定値のままで使えます。変更したい場合は、データフォルダに config.json を置きます(テンプレート: config.example.json)。
データフォルダ | |
Claude Code |
|
Codex |
|
環境変数 CSM_HOME で場所を変更することもできます。
キー | 既定値 | 説明 |
|
| 空きメモリ(GB)がこの値を下回っている間は、新しいセッションを起動しない |
|
| CPU の使用率(%、1秒間の平均)がこの値以上の間は、新しいセッションを起動しない。 |
| Claude Code: | 使用量がこの割合(%)に達したら、新しいセッションを起動せず、実行中のセッションを止める。 |
|
| 変化がないときにオーケストレーターが応答する間隔(分、最大 60)。ターミナルの Claude Code と Codex だけ(Claude のデスクトップアプリでは待たない) |
|
| 監視中にセッションの状態を確認する間隔(秒)。報告はこの間隔を待たずにすぐ受け取る |
|
| 進められる作業がない状態(どのセッションも判断・承認・入力か、メモリ・CPU の空きを待っている)がこの時間(分)続いたら、監視を終える。利用枠の回復待ちは数えない。 |
| 下記 | 作業の種類ごとのモデルとエフォート |
| — | プロファイルを使わないときのモデルとエフォート(省略時は各ツールの既定値) |
0.9.1 までの config.example.json を写した config.json には "permissionMode": "acceptEdits" が残っており、Claude のデスクトップアプリでも作業セッションが acceptEdits で動きます。オーケストレーターと同じモードにする場合は、その行を消すか null に書き換えてください。
同時に実行する数の上限(以前の maxRunning)はなくなりました。config.json に残っていても無視します。
キー | 既定値 | 説明 |
|
| Claude Code の作業セッションの権限モード( |
|
| Claude Code CLI のパス。シェルを経由せずに起動するため、 |
|
| Codex の作業セッションのサンドボックス |
|
| Codex の作業セッションの承認ポリシー。 |
|
| Codex CLI のパス。絶対パス、または |
|
|
|
モデルとエフォートの使い分け
オーケストレーターは、作業の種類に合ったプロファイルを選んでセッションを起動します。既定では次のおすすめの設定が入っています。
プロファイル | 用途 | Claude Code | Codex |
| 設計・方式の検討 | Opus・xhigh | xhigh |
| 原因の分からない不具合の調査 | Opus・high | high |
| 通常の実装・修正 | Opus・medium | medium |
| コードレビュー | Opus・high | high |
| ドキュメントや画面の文言の作成・修正 | Sonnet・high | high |
| 手順の決まった作業・確認 | Sonnet・medium | medium |
判断に迷う作業では、強い方のプロファイルを選びます。性能が足りずにやり直すほうが、結果的に高くつくためです
原因の調査が1回で絞り込めない場合は、途中でエフォートを xhigh に上げます
Codex のモデル名はリリースごとに変わるため、Codex ではエフォートだけを指定し、モデルは Codex の既定値を使います
設定を変えたい場合は、config.json の profiles に同じ名前で書くと置き換わり、null にすると削除できます。新しい名前のプロファイルを追加することもできます。
{
"profiles": {
"design": {
"description": "設計・方式の検討",
"claude": { "model": "opus", "effort": "max" },
"codex": { "model": "<モデル名>", "effort": "xhigh" }
},
"routine": null
}
}独自のルールを追加する
プロファイルの例外や、重い処理の同時実行数などのルールは、データフォルダの local-rules.md に書いておくと、オーケストレーターが最初に読み込みます。書き方は local-rules.example.md を参考にしてください。
自分で開いたセッションにも報告のルールを伝えたい場合は、AGENTS.snippet.md の内容を ~/.claude/CLAUDE.md(Codex では ~/.codex/AGENTS.md)の末尾に追記します。
監視間隔と使用量
ここで説明する監視は、ターミナルの Claude Code と Codex のものです。Claude のデスクトップアプリでは、オーケストレーターは待ち続けず、作業セッションの知らせか、あなたの入力で動くたびに状態を1回読みます(Claude のデスクトップアプリで使う)。
監視中にセッションの状態を確認しているのは MCP サーバーで、モデルは使用しません。報告や状態の変化があれば、すぐにオーケストレーターが応答します。
報告は、書き込まれるとすぐに受け取ります(ファイルの変更通知を使います)。通知が届かない環境(ネットワークドライブなど)でも、pollSec ごとに読み直すので取りこぼしません。状態の確認(Claude Code では claude agents --json)は1回 0.25 秒ほどで、5秒ごとなら CPU の1コアの約5%を使います。リアルタイムで作業するため、既定では遅れの少なさを優先しています。
変化がない場合は watchIntervalMin ごとにオーケストレーターが応答し、そのたびに会話全体を読み直します。間隔を短くするほど、変化がなくても使用量を消費します(1分間隔なら1時間に60回、30分間隔なら2回)。最大を60分としているのは、それより長いと読み直しの際にプロンプトキャッシュが切れ、かえってコストが増えるためです。一時的に短くしたい場合は、「監視は10分ごとにして」のように依頼できます。
進められる作業がないとき
ターミナルの Claude Code と Codex では、どのセッションも判断・承認・入力か、メモリ・CPU の空きを待っていて、進められる作業がない状態が stopWhenStuckMin(既定 2時間)続くと、オーケストレーターは監視を自分で終えます。待っていても何も起きないまま、使用量と CPU を使い続けないためです。判断待ちだけが残ったときも、すぐには終えずにこの時間まで待ちます。利用枠の回復を待っている間は、待てば再開できるので終えません。報告・状態の変化・オーケストレーターからの指示があると、数え直します。
監視を終えるとき、オーケストレーターは次のことをします。
止まった理由と、待っているもの(質問は選択肢とおすすめを付けてまとめ、承認待ちには開き方を付けます)、再開のしかたを伝えます
データフォルダに引き継ぎメモ
handoff.md(管理中のセッション・決めたこと・次にやること)を書きます通知のツールが使える場合は、一言通知します
その後、何か入力すると、オーケストレーターは引き継ぎメモと最新の状態を読み、入力に答えてから監視に戻ります。「見回って」と言わなくても戻ります。ただし「監視をやめて」「全部止めて」で止めた場合は、「見回って」と言うか新しい作業を頼むまで戻りません。
Claude のデスクトップアプリでは、オーケストレーターがターンを抱えないため、この仕組みは使いません。判断待ちは、分かったときにまとめて聞きます。引き継ぎメモは、管理中のセッション・決めたこと・TODO が変わったターンの終わりに書き直します。
オーケストレーターは自分で会話を圧縮できません(/compact は利用者が入力するコマンドです)。会話が長くなった場合は、圧縮の代わりに引き継ぎメモを使います。「引き継ぎメモを書いて」と頼んでから、新しいセッションで manage-sessions を始めると、メモを読んで続きから進めます。
利用枠の上限
実行中のセッションを途中で止めても、一時停止にはなりません。実行中のターンは打ち切られ、そのターンで読んだ内容や考えた途中経過は失われます。これは利用枠の上限に達して止まった場合と同じです。作業ツリーに書いたコードは、どちらの場合も残ります。
Claude Code(既定: 止めない) — 上限に達すると作業セッションもオーケストレーターも止まります。オーケストレーターのセッションは、Claude Code の「制限リセット時に自動的に続行する」で再開します。再開後、オーケストレーターは利用制限で止まった作業セッションを見つけて、
git status・git diffを確認して続きから進めるよう依頼しますCodex(既定: 95% で止める) — 上限で止まった Codex のオーケストレーターがリセット時に自動で再開するかは確認していないため、従来どおり上限の手前で作業セッションを止めます。オーケストレーターには枠が残るので、監視はモデルを使わずに続き、枠が戻ると再開を依頼します
残りの枠を別の作業に使いたいなど、上限の手前で止めたい場合は、config.json の pauseAtPct に割合を書くか、オーケストレーターに「90% で止めて」のように伝えてください。Claude Code で使用量を読むには status line の設定が必要で、Claude のデスクトップアプリでは使えません。
以前の config.example.json を写した config.json には "pauseAtPct": 95 が残っており、Claude Code でも 95% で止めます。止めない場合は、その行を消すか { "claude": null } に書き換えてください。
更新とアンインストール
Claude Code
更新: ターミナルで起動した Claude Code のチャット欄に /plugin と入力し、Installed タブでこのプラグインを開いて「Update now」を選びます。ターミナルでは claude plugin update inline-agent-orchestrator@inline-agent-orchestrator でも更新できます。新しい版は次に起動したセッションから使われます。
動いているセッションは、更新したあとも古い版を使い続けます。新しい版に切り替えるには、次のようにします。
ターミナルの Claude Code — チャット欄に
/reload-pluginsと入力するか、Claude Code を起動し直しますClaude のデスクトップアプリ — Claude のデスクトップアプリを終了して起動し直します。デスクトップアプリの入力欄で
/reload-pluginsを使って、オーケストレーターの MCP サーバーが新しい版に切り替わるかは確かめていません(Claude Code 2.1.304 では、デスクトップアプリから動かす形(SDK)で/reload-pluginsがターミナル用のコマンドとして扱われ、MCP サーバーを読み直した数が出ません)
デスクトップアプリを終了すると、そこで動いている作業セッションも止まります。作業セッションが動いていないときに切り替えてください。
新しい版の知らせ: オーケストレーターは、始めたときと、止まったあと再開するときに版を確かめます。新しい版がディスクに入っているのに、この会話がまだ古い版を使っているときは、上の切り替え方を一言伝えます。GitHub に新しい版が出ているのに入っていないときは、更新するかを聞き、了承すると claude plugin marketplace update と claude plugin update を実行します。GitHub の版を確かめるのは、自動更新が切れているときと、Claude のデスクトップアプリのとき(下の「自動更新」)で、1日1回まで(読めなかったときは1時間後に読み直す)です。同じ知らせは、同じ版の組み合わせについて1つの会話で1回だけです。データフォルダの state.json に記録するので、会話を圧縮したり再開したりしても繰り返しません。
自動更新: このプラグインは、標準では自動で更新されません。自動で更新したい場合は、ターミナルで起動した Claude Code の /plugin の Marketplaces タブで inline-agent-orchestrator を選び、「Enable auto-update」を選びます。自動更新は、会話で最初のメッセージを送ってから10分以内に、新しい版をディスクに入れます。
Claude のデスクトップアプリは Claude Code を DISABLE_AUTOUPDATER=1 で動かしています。Claude Code の説明書には、この設定があるとプラグインの自動更新も止まる(FORCE_AUTOUPDATE_PLUGINS=1 を足すと動く)とあります。
ただし、デスクトップアプリだけで自動更新を入れて使っている PC で、次のことがありました。確かめたのはこの1回だけで、どのプロセスが新しい版を入れたかは分かっていません。
2026-10-21T21:51:43Z、0.7.0 が main に入った
21:53:45Z、デスクトップアプリで新しい会話が始まった
21:54:51Z(その約1分後)、
installed_plugins.jsonの版が 0.7.0 になった。どの会話でも、手でclaude plugin updateは実行していない
このためオーケストレーターは、デスクトップアプリではこの設定を見ずに、/plugin の自動更新の設定どおりに autoUpdate を返します。そのうえで、自動更新が入っていても動かないときの備えとして、デスクトップアプリでは GitHub の版を1日1回確かめ、新しい版が入っていなければ更新するかを聞きます。ターミナルの Claude Code では説明書どおり、この設定(または DISABLE_UPDATES・CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC)があって FORCE_AUTOUPDATE_PLUGINS=1 が無ければ、自動更新が切れているとみなします。
アンインストール: まずチャット欄でオーケストレーターに「status line を元に戻して」と依頼します。続けて、チャット欄に次のコマンドを入力し、開いた画面でアンインストールを確定します。
/plugin uninstall inline-agent-orchestrator@inline-agent-orchestratorターミナルでは、claude plugin update inline-agent-orchestrator@inline-agent-orchestrator(更新)と claude plugin uninstall inline-agent-orchestrator@inline-agent-orchestrator(アンインストール)を使います。
Codex
更新: ターミナルで次のコマンドを順に実行し、Codex を再起動します。
git -C $HOME/.codex/inline-agent-orchestrator pullnode $HOME/.codex/inline-agent-orchestrator/src/setup.mjs codexオーケストレーターは、git pull した版が動いている版より新しいときに Codex の再起動を勧めます。GitHub に新しい版が出ているとき(確かめるのは1日1回まで)は、更新するかを聞きます。
アンインストール: ターミナルで次のコマンドを実行し、Codex を再起動します。MCP サーバーの登録とスキルが外れます(変更前の config.toml は config.toml.bak-<日時> として保存します)。
node $HOME/.codex/inline-agent-orchestrator/src/setup.mjs codex --removeこのツールのフォルダ(~/.codex/inline-agent-orchestrator)と監視の記録(~/.codex/session-manager)は残ります。不要であれば削除してください。
仕組み
あなた ── 依頼 ──▶ オーケストレーター(スキル: manage-sessions)
│ MCP ツールを呼び出す
▼
session-manager(この MCP サーバー)
│ │
Codex の場合 Claude Code の場合
codex app-server(共有デーモン) claude --bg / agents / logs / stop
│ (Claude のデスクトップアプリでは、起動・指示・ピン留めを
│ オーケストレーターが Claude のデスクトップアプリのツールで行い、
│ 状態は claude agents から読む)
│ │
├── 作業セッション A ── report ──▶ reports.jsonl ──▶ オーケストレーターが受信
└── 作業セッション BClaude Code にも Codex にも、AI が別のセッションを操作するためのツールは標準では用意されていません。この MCP サーバーは、それぞれの公式の仕組み(Codex は app-server の JSON-RPC、Claude Code は CLI)をツールとして提供します。
Codex | Claude Code(Claude のデスクトップアプリ) | Claude Code(ターミナル) | |
作業セッションの実行場所 | Codex の共有 app-server デーモン | Claude のデスクトップアプリの会話(サイドバーに表示) | バックグラウンドセッション(agent view) |
起動・指示・停止 | MCP サーバー | オーケストレーターが Claude のデスクトップアプリのツール( | MCP サーバー |
オーケストレーターを閉じた場合 | 作業セッションは動き続ける | 作業セッションは動き続ける | 作業セッションは動き続ける |
実行中のセッションへの指示 | 現在のターンの後に処理される(割り込みも可能) | Claude のデスクトップアプリが保持し、ターンの終了後に届ける | MCP サーバーが保持し、ターンの終了後に届ける |
監視 | オーケストレーターのターン内で待つ( | 待たない。Claude のデスクトップアプリの知らせか入力で動いたときに1回読む( | オーケストレーターのターン内で待つ( |
使用量の取得方法 | app-server から取得 | 取得しない | status line が書き出す |
MCP サーバーは Claude のデスクトップアプリのツールを呼べないため、デスクトップアプリでは
start_sessionがデスクトップアプリに渡す値を返し、オーケストレーターがデスクトップアプリのstart_sessionで起動して、update_sessionで記録します。状態はclaude agents --jsonの会話の行(busy・idle)で見ます。デスクトップアプリの会話の ID(local_…)と Claude Code のセッション ID は別のため、最初は題名で探し、作業セッションのreportが送るセッション ID で結び付けます作業セッションからの報告は、報告専用の
session-report接続のreportツールがファイルに書き込み、オーケストレーターが読み取ります。Claude Code・Codex ともに、この接続ではreportだけを公開し、作業セッションのsession-managerは無効にしています。ただし、Claude のデスクトップアプリの作業セッションには起動時に接続を足せないため、プラグインのsession-managerのreportを使います(ほかのツールは使わないよう依頼に書きます)。デスクトップアプリの会話には起動時に許可するツールを渡せないため、プラグインのフック(hooks/hooks.json、PreToolUse)がこのreportだけを確認なしで許可します(報告用のファイルに追記するだけのツールです)空きメモリ・CPU・利用枠が足りずに起動を待たせた作業は、「PC に余裕ができたら」の TODO として残ります。あるあいだは監視を続けて資源を見回り、余裕ができるとオーケストレーターに知らせて起動させます
TODO は
state.jsonのtodosに残ります。条件は MCP サーバーが確かめられるもの(日時・版・起動し直し・PC の余裕・PR のマージ(gh pr view)・利用枠(読めるとき))はサーバーが、Claude のデスクトップアプリの利用枠はオーケストレーターが、Claude のデスクトップアプリのツール(mcp__ccd_session_mgmt__get_usage)で確かめます。0.8.0 までの「資源待ち(wait:<名前>)」「提案カード(card:<名前>)」の記録は、最初に読んだときに TODO へ移しますClaude Code の使用量は CLI からは取得できず、status line に渡される値が唯一の公式な取得手段です。そのため
pauseAtPctを使う場合は status line を設定します。元の status line は保存しておき、その表示を引き続き出力します。Claude のデスクトップアプリは status line を表示しないため、使用量は記録されませんClaude Code の作業セッションが利用制限で止まったかは、
claude logsの末尾にある「Usage limit reached」などの文面から推定します(read_sessionのusageLimit)。文面は公開された仕様ではないため、変わると見分けられなくなりますClaude Code の作業セッションは、編集の前に
.claude/worktrees/に worktree を作成し、その中で作業します(agent view の既定の動作)
ツール | 使用するセッション | 説明 | Codex(app-server) | Claude Code(CLI) |
| オーケストレーター(一覧のコマンドでは、どのセッションからでも) | 管理中、またはすべてのセッションの一覧と状態。管理中では TODO(条件がそろっているか)と引き継ぎメモの先頭も返す |
|
|
| オーケストレーター | 最近のやり取り |
|
|
| オーケストレーター | プロファイル(またはモデル・エフォート)を指定してセッションを起動し、名前を付けて最初の依頼を送る。メモリ・CPU・使用量に余裕がない場合は起動せず、理由を返す。Claude のデスクトップアプリでは起動せず、デスクトップアプリに渡す値を返す |
|
|
| オーケストレーター | 実行中のセッションにはターンの後に、停止中のセッションには続きとして送る。モデルやエフォートの変更も可能 |
| 保持した後に |
| オーケストレーター | 実行中のターンを停止する |
|
|
| オーケストレーター | 名前を変更する |
| 記録のみ |
| オーケストレーター | 使用量・空きメモリ・CPU・実行数、新しく起動できるかどうか( |
|
|
| オーケストレーター | 記録(状態・メモ・保留・Claude のデスクトップアプリの会話の追加・つなぐ TODO)を更新する。完了にすると、つないだ TODO も済みにする |
|
|
| オーケストレーター | TODO を追加・変更・完了・削除する |
|
|
| オーケストレーター | 状態の変化・報告(書き込まれたらすぐ)・承認待ち・メモリ不足・使用量の超過( |
|
|
| オーケストレーター | 報告を読む |
|
|
| 作業セッション | オーケストレーターへ報告する |
|
|
各呼び出しは公式ドキュメント(Codex は learn.chatgpt.com/docs/app-server と openai/codex の型定義、Claude Code は code.claude.com/docs の CLI・agent view・status line・プラグインの各ページ)に準拠しています。
制限事項
承認の代行はしません — 作業セッションが承認や入力を待っている場合、オーケストレーターは開き方を案内するだけです。Claude Code の作業セッションは、Claude のデスクトップアプリではオーケストレーターと同じ権限モード、ターミナルでは
acceptEdits(コマンドの実行時に確認待ちになります)で動きますターミナルの Claude Code と Codex では、監視はオーケストレーターのターン内で行います — 監視中に入力した文は、最長
watchIntervalMin分読まれません(停止ボタンで止めれば、すぐ読まれます)。実行中のセッションがなくなるか、進められる作業がない状態が続くと監視を終了し、次に話しかけたときに再開しますClaude のデスクトップアプリでは、作業セッションの途中の報告は遅れて届きます — 途中の報告(progress)は作業セッションがターンを終えたときに、作業セッションを何本も並べたときは動いている作業セッションがなくなったときに届きます(Claude のデスクトップアプリで使う)
時刻で動く仕組みはありません — 日時や PR のマージを条件にした TODO は、オーケストレーターが動いたとき(話しかけたとき・知らせのとき・監視のとき)に確かめます
監視の対象は空きメモリと CPU のみです — 開発サーバーの数など、個々のプロセスは数えません。必要なルールは
local-rules.mdに記述してくださいCodex の作業セッションは報告専用の接続を使います — このツールが起動したセッションでは、
session-reportのreportだけを承認なしで使えます。session-managerはその作業セッション内で無効にし、他の MCP サーバーの承認設定とサンドボックスは変えません。監視役から再開するときも報告設定を適用し直します。旧版のセッションが別の端末や監視プロセスに接続中の場合は、その接続を閉じ、共有デーモンから解放されてから再開してくださいClaude Code の実行中のセッションへの指示は、ターンの終了後に届きます — 停止したセッション宛てに保持していた指示は破棄します
報告のやり取りは同じ PC 内に限られます
実験的な機能を利用しています — Codex の app-server の一部と Claude Code の agent view は実験的な機能のため、バージョンアップで動作が変わる可能性があります
claude --bgのセッションは Claude のデスクトップアプリに表示されません — デスクトップアプリの一覧に出ず、ピン留めもできません。Claude のデスクトップアプリでは、デスクトップアプリの会話で起動しますClaude のデスクトップアプリでは、作業セッションを起動できるのは利用者が入力したターンの中だけです — 知らせで動いたときに起動したい作業(PC の空き待ち・条件がそろった TODO)は、起動の提案カードを出して TODO に残し、次に話しかけたときに起動します
Claude Code の作業セッションがリセット時に自動で続行するかは未確認です — 続行しない場合も、オーケストレーターが再開後に続きを依頼します
新しい作業フォルダは、先に PC で信頼しておく必要があります(Claude Code) —
claude --bgは信頼の確認を表示できません。信頼はリポジトリごとに記録され、親フォルダを信頼しても下のリポジトリには効きません。リモート(Remote Control・スマートフォン)から使う場合は、信頼済みのリポジトリを作業フォルダにしてください
動作確認
実際の Claude Code・Codex での検証がまだのため、まず次の手順をお試しください。使用するセッションは1つ、使用量は短い依頼1回分です。うまくいかない手順があれば、その時点で止めて「不具合の報告」に挙げた情報を控えてください。
# | 確認項目 | 手順 | うまくいかない場合 |
C1 | インストール | チャット欄で |
|
C2 | ツールと使用量 |
|
|
C3 | セッションの起動 | 試すフォルダで一度 | ツールが返したエラーメッセージを確認する |
C4 | 報告の受信 |
|
|
C5 | 実行中のセッションへの指示 | 長めの依頼の実行中に | 別の ID で続いた場合は |
C6 | 監視中の割り込み |
|
|
後片付け: claude stop <ID>、claude rm <ID>、update_session(remove)
# | 確認項目 | 手順 | うまくいかない場合 |
D1 | 起動とピン留め | Claude のデスクトップアプリの Code タブで |
|
D2 | ターンを抱えない | 起動のあと、オーケストレーターがすぐターンを終える(入力欄が使える)か。「試し」の作業中に何か入力 → すぐ答えるか | オーケストレーターが |
D3 | 知らせと報告 | 「試し」が終わると、オーケストレーターが知らせで動き、 |
|
D4 | 次の作業 | 続けて別の作業を頼む → 新しい作業セッションが起動するか | Claude のデスクトップアプリが起動を断った場合は、提案カードが表示され、TODO に残るか確認する |
D5 | TODO と一覧 | 「あとで README の誤字を直す。いつでもいい」と伝える → TODO に残るか。別のチャットで |
|
D6 | 権限モードの引き継ぎ | オーケストレーターを自動モード( |
|
後片付け: Claude のデスクトップアプリでセッションをアーカイブ、update_session(remove)
# | 確認項目 | 手順 | うまくいかない場合 |
V1 | Codex のバージョン |
| CLI を更新する |
V2 | 共有デーモンの起動 | 管理者権限のない PowerShell(Windows)で |
|
V3 | ツールの接続 | オーケストレーターのセッションで「 | ツールが返したエラーメッセージを確認する |
V4 | セッションの起動 | 「 | Codex のデスクトップアプリに表示されない場合は |
V5 | 実行中のセッションへの指示 | 長めの依頼の実行中に | 割り込む場合は、 |
後片付け: codex archive <ID>、update_session(remove)、必要に応じて codex app-server daemon stop
よくあるエラー
メッセージ | 対処 |
| PC のターミナルで作業フォルダに移って一度 |
「CLI がログインしていない」(Claude Code) |
|
| CLI を更新する。agent view の状態は |
| Windows では、管理者権限の PowerShell からは起動できません。 |
| Codex を更新する |
監視がタイムアウトする(Codex) | ターミナルで |
不具合の報告
次の情報があると、原因の調査がスムーズです。
うまくいかなかった手順(C1〜C6、D1〜D6、V1〜V5)と、
claude --versionまたはcodex --version、node --versionの出力エラーメッセージ、またはコマンドの出力全体
データフォルダ内の
state.json・reports.jsonl・config.json。Claude Code の場合はworker-mcp.json・usage.json・statusline.jsonもClaude Code の場合はターミナルで実行した
claude plugin listの出力、Codex の場合はconfig.tomlの[mcp_servers.session-manager]セクション
開発
npm test版を上げるときは、package.json・.claude-plugin/plugin.json の version、src/server.mjs の SERVER_INFO、src/appserver.mjs の CLIENT_INFO、README(日本語・英語)の冒頭の版を同じ値にして main に入れます(ずれると npm test が失敗します)。版を上げないと、利用者の手元に新しい版が入りません。タグ(v<版>)と GitHub のリリースは自動で作られます。
パス | 説明 |
| MCP サーバー(標準入出力、JSON-RPC 2.0) |
| ツール、上限の判定、監視 |
| 動いている版・ディスクに入っている版・GitHub の最新の版を比べる |
| TODO の条件の判定と、0.8.0 までの記録の移し替え |
| Codex(app-server)と Claude Code(CLI)それぞれの実装 |
| セットアップスクリプト(Codex への登録とスキルのインストール、Claude Code の status line の設定) |
| Claude のデスクトップアプリの作業セッションの |
| Claude Code の使用量を記録する status line |
| Codex app-server のクライアント(Windows の Node.js は Unix ドメインソケットを扱えないため、 |
| オーケストレーターの手順(スキル) |
| 一覧のコマンド( |
| Claude Code のプラグインとマーケットプレイスの定義 |
| Codex・Claude Code の CLI と app-server を模したモックによる単体テスト |
ターミナルで次のコマンドを順に実行します。
git clone https://github.com/horiu/inline-agent-orchestrator.git $HOME/.claude/inline-agent-orchestratorclaude mcp add session-manager --scope user -e CSM_AGENT=claude -- node $HOME/.claude/inline-agent-orchestrator/src/server.mjsnode $HOME/.claude/inline-agent-orchestrator/src/setup.mjs statuslineスキルは skills/manage-sessions/ を ~/.claude/skills/ にコピーし、/manage-sessions で呼び出します。
ライセンス
Available Tools
12 toolsget_usageARead-only
利用枠(窓ごとの使用率とリセットの時刻)・空きメモリ・動いている会話の数と、いま新しく動かしてよいか(canStartNew と理由)・見回りで待つ最長の分(watchIntervalMin)を返す。pauseAtPct が null なら利用枠では止めない(読めなくてもよい)。profiles は仕事の種類ごとのおすすめのモデルとエフォート(null は、start_session ではそれぞれの既定、send_message では今の値のまま)。version はこの道具の版: running(動いている版)・installed(ディスクに入っている版。プラグインとして入れていなければ null)・autoUpdate(自動更新)・latest(自動更新が切れているとき(と Claude のデスクトップアプリ)だけ、GitHub の最新の版。1日1回まで読む)・reloadNeeded(新しい版が入っているのに、この会話は古い版のまま)・updateAvailable(新しい版が出ているのに入っていない)・notified(この会話で同じ版の組み合わせをすでに返した。false で返すときに記録するので、reloadNeeded か updateAvailable が true で notified が false なら、そのとき利用者に伝える)。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the readOnlyHint annotation, the description discloses that the 'latest' field is fetched from GitHub at most once per day (a rate-limited network call), and that the tool records state when returning notified=false. Those are exactly the non-obvious traits an agent needs. The internal bookkeeping write is in mild tension with readOnlyHint but is framed as non-destructive notification tracking, so it reads as disclosure rather than contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Almost every clause carries real information, but it is delivered as one dense run-on paragraph with stacked nested parentheses (profit: 利用枠…(…)・…(…)), which makes it hard to scan. Splitting the status fields from the version fields into separate sentences would cost nothing and gain a lot.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full return-value burden and largely succeeds: it names each field group and explains the ambiguous ones (version sub-fields, profiles null semantics). Only the dense packaging and the missing 'call before start_session' framing keep it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies. The description instead spends its words on output-field semantics — what null means for pauseAtPct and for profiles in start_session versus send_message — which is useful but belongs to the return contract, not parameter interpretation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete read operation and enumerates the specific payload: per-window usage rate and reset time, free memory, running-conversation count, canStartNew plus reason, and watchIntervalMin. That is far more specific than a tautology, and no sibling (list_sessions, report, wait_events) covers this status surface. It loses a point because the purpose statement is buried under an equally long version-field enumeration, so the primary 'what' is not front-loaded.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'call this when…' or 'use X instead' routing; the reader must infer that this is the pre-flight check before start_session. What guidance exists is operational rather than selection-oriented: pauseAtPct null means do not stop on quota, and the notified/reloadNeeded/updateAvailable combination dictates telling the user. Implied rather than stated usage earns a middle score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sessionsARead-only
会話の一覧と状態を返す。scope="managed"(既定)は監視役が管理している会話(保留と終わったものは状態を読みに行かない)と、TODO(todos。条件がそろっているかを due に。true / false / null=分からない。済んだものは includeArchived のときだけ)と、引き継ぎメモ handoff.md の先頭(handoff)。scope="all" はこの PC の会話を新しい順に。status は notLoaded(読み込まれていない・一覧に無い)/ idle(止まっている)/ active(動いている。activeFlags に waitingOnApproval・waitingOnUserInput)/ systemError。監視役でない会話から呼んでもよい。
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | scope=all のとき、この作業フォルダの会話だけ | |
| limit | No | ||
| scope | No | managed | |
| includeArchived | No | 終わった・アーカイブした会話も含める(managed では済んだ TODO も) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds substantial behaviour: that pending and finished managed sessions have their status deliberately not read, the tri-state meaning of due (true/false/null=unknown), that finished TODOs appear only with includeArchived, and the exact status vocabulary including activeFlags. This goes well beyond the annotation, though propagation/latency behaviour of status is unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and default scope are front-loaded in the first clause, and every subsequent clause carries new semantics (statuses, TODO tri-state, handoff head). It is a dense single paragraph that runs together return shape, semantics, and permission notes, so it is efficient but slightly hard to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does cover status values, activeFlags, the todos array with due, and handoff — enough to interpret the response. It still omits what a session item actually contains (ids, names, timestamps), so an agent can't fully predict the payload shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (cwd and includeArchived documented, scope and limit not), so the description must compensate — and it does for the highest-risk parameter by spelling out both scope values and their defaults, plus extending includeArchived's meaning to finished TODOs in managed mode. limit's default/purpose is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource (会話の一覧と状態を返す) and immediately distinguishes the two modes by what each returns, so the agent knows this is a list-plus-status read. It does not name a sibling (e.g. read_session for a single conversation's detail), so the boundary with siblings is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states when each scope applies: managed for supervisor-tracked conversations plus TODO/handoff, all for this PC's conversations in newest order, and ties cwd to scope=all. It also pre-empts a likely doubt by saying the tool may be called from a non-supervisor session — but no explicit 'use X instead when…' routing to read_session or wait_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_reportsBRead-only
作業の会話からの報告(report)を読む。既定は未読だけ(読んだ印を進める)。all=true で全部を新しい順に limit 件。
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description usefully discloses ordering (newest-first), the default unread filter, and the limit cap. However, it also states that the call advances a read marker ('読んだ印を進める'), a state mutation, while the annotations declare readOnlyHint=true — conflicting signals about whether calling this changes anything. The primary read nature is consistent, but the cursor side effect is not reconciled with the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, zero padding, with the core action and the default behavior front-loaded. Every sentence corresponds to a decision the caller has to make.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers filtering, ordering, and count, which is most of what is needed. It omits what a report record contains and whether the marker advances when all=true is used, which matters given the sibling 'report' tool that presumably writes them.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does it well: it explains that 'all' toggles between unread-only (the default) and everything, that results come newest-first, and that 'limit' bounds the count. Only the interaction between all=true and the read marker, and the limit bound of 500, are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('作業の会話からの報告(report)を読む') and scopes reports to work conversations, which separates it from the session-reading siblings like read_session. It stops short of naming a sibling it must not be confused with (e.g. report vs read_reports), so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the selection logic between the two modes — default returns only unread and advances the marker, all=true returns everything newest-first up to limit. That is useful parameter-selection guidance, but there is no explicit when-to-use/when-not-to-use versus alternatives in the sibling set (read_session, list_sessions, report).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sessionARead-only
会話の最近のやりとりを読む(依頼の文・AI の返事・状態・エラー・利用者への質問)。落ちたのか、判断待ちなのか、終わったのかを見分けるのに使う。長い文は末尾を残して切る。Codex はターンごと、Claude Code は最近の出力(claude logs)。利用制限で止まったらしいときは usageLimit に当たった行を返す(Codex はターンの error を見る)。
| Name | Required | Description | Default |
|---|---|---|---|
| turns | No | Codex だけ: 読むターンの数 | |
| maxChars | No | ||
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses truncation behavior (long text is cut keeping the tail), platform-specific semantics (Codex is per turn, Claude Code returns recent claude logs), and a special mode that returns the line hitting usageLimit. These are operational traits an agent cannot infer from the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action and use case, followed by operational caveats. Every sentence carries information, though the platform-specific notes are somewhat compressed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read tool with no output schema, the description explains what content is returned, how it is truncated, and platform differences. The only notable omission is any explanation of the required threadId parameter, which is likely obvious but left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema description coverage, the description partially compensates by tying `turns` to Codex only and implying truncation via `maxChars`. However, `threadId` is never explained and `maxChars` semantics (default 6000, tail-keeping) remain implicit, so the gap is only partially filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reading the recent exchanges of a conversation, including request text, AI replies, state, errors, and questions. An agent can tell this apart from siblings like list_sessions or send_message without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear context for use: to distinguish whether a session crashed, is waiting for a decision, or has finished. It does not name an alternative tool for the cases where this one is not appropriate, so it falls short of a full when/when-not routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reportA
【作業の会話が使う】監視役へ報告を書く。kind: progress(区切りの報告)/ question(利用者の判断が要る。質問・選択肢・おすすめを書いて待つ)/ done(終わった。結果と残り)/ blocked(進められない)。
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | この会話の名前 | |
| kind | Yes | ||
| text | Yes | ||
| threadId | No | この会話の ID(最初の依頼に書いてあれば) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark this as a write operation (readOnlyHint=false), but the description adds meaningful behavioral detail: each kind has distinct semantics (e.g., question requires waiting for user judgment, done includes results and remaining work). It does not cover auth or rate limits, but it clearly describes what gets written and the different reporting modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the purpose and caller context, and the second enumerates the kinds with concise definitions. No redundant sentences; every element serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write-only reporting tool with no output schema, the description provides enough to call it correctly: it explains the kinds, the waiting behavior for 'question', and the expected content. It could mention how the report is delivered or whether it blocks for other kinds, but no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description compensates by thoroughly explaining the kind enum values and what each implies (e.g., question should contain question, options, and recommendation; done should contain results and remaining work). It also indirectly guides what to put in the required text parameter per kind, though from/threadId are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: writing a report to a supervisor (監視役へ報告を書く). Context is scoped to 'work conversations' (作業の会話が使う), which helps distinguish it from general messaging tools, but it does not explicitly name a sibling like send_message for contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives usage context (work conversations) and defines when to use each kind (progress, question, done, blocked), which is helpful. However, it never explicitly compares to alternatives like send_message or read_reports, so the agent must infer that this is the reporting channel rather than a general message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageA
会話へ連絡・依頼を送る。mode="auto"(既定): 動いている会話には今のターンの後に回す(queue)、止まっている会話は続きから新しいターンを始める。mode="steer" は動いているターンに割り込んで足す(Codex だけ)。profile・model・effort を付けると、この依頼からモデルとエフォートを変える(以後の続きにも効く。Codex は止まっている会話にだけ。Claude Code は動いていれば、預かって届けるときから)。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| model | No | モデルを変える(profile より優先) | |
| effort | No | エフォートを変える(profile より優先) | |
| message | Yes | ||
| profile | No | モデルとエフォートをこの仕事の種類のものに変える(get_usage の profiles の name) | |
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only tell us this is a mutation (readOnlyHint=false); the description supplies the behavioral detail the annotation lacks: queuing vs. starting a turn, the Codex-only steer restriction, and that model/effort changes persist to later continuations (with per-runtime caveats). It says nothing about what the call returns or failure handling, which is a moderate gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key mode behavior is front-loaded, but the second half is a dense parenthetical chain of runtime-specific caveats (Codex/Claude Code, '預かって届けるときから') that is hard to parse. Every claim is relevant, but the packaging costs readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the important state transitions and the side effects of changing model/effort. What an agent gets back and how errors surface are not covered, which is the main remaining hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description compensates well: it defines the meaning of mode values including the default, and explains that profile/model/effort change the model for this request onward, with model and effort taking precedence (matching the schema notes). Only message and threadId, which are self-evident, go unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause names a specific verb and resource: sending a message/request into a conversation. It is clearly distinct from siblings like start_session or read_session, though it never explicitly names an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It spells out how mode="auto" behaves (queue on a running conversation vs. start a new turn on a stopped one) and when mode="steer" applies (interrupting a running turn, Codex only). It stops short of routing between this tool and siblings such as start_session or wait_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_session_nameC
会話の名前を変える(Claude Code は外から変えられないため、監視役の記録だけ変える)。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=false already signals a mutation. The description contributes beyond that by disclosing that the underlying Claude Code session is not actually renamed—only the monitor's record changes—which prevents a false assumption. It says nothing about permissions, persistence, or failure behavior when threadId is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the purpose first and the important caveat parenthetically attached. Nothing extraneous, though the caveat could be clearer about impact on the caller.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, 0% parameter coverage, and an unaddressed sibling overlap with update_session, the description leaves too much to inference for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two required parameters. The description implies 'name' maps to the conversation name but never explains what threadId identifies or its format, so it fails to compensate for the documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (rename the conversation's name) and adds a genuinely useful caveat that it only changes the observer's record, not the Claude Code session itself. It does not, however, distinguish this from the sibling update_session, which appears to overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_session, no prerequisites (e.g., must the session exist or be active), and no when-not-to-use conditions. The agent must infer the selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_sessionA
新しい作業の会話を起こして、最初の依頼を送る(名前・作業フォルダ・モデル・エフォート)。モデルとエフォートは、仕事の種類に合う profile(get_usage の profiles)で選ぶのが基本。model・effort を書くと profile より優先する。会話はこの会話とは別に動き、この会話が終わっても動き続ける。空きメモリ・CPU・利用枠(pauseAtPct があるとき)に余裕が無いときは起こさずに理由を返す(force=true で無視)。名前は管理中の会話と重ねない。Claude Code の via="app"(Claude のデスクトップアプリでの既定)では、この道具は起こさずに、デスクトップアプリの mcp__ccd_session__start_session に渡す値(appStart)と、起こした後に update_session に渡す値(record)を返す(startInApp=true)。
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | 作業フォルダ(絶対パス) | |
| via | No | Claude Code だけ: app=Claude のデスクトップアプリの会話(サイドバーに出てピン止めできる)、bg=claude --bg。省略時は監視役が Claude のデスクトップアプリなら app、ターミナルなら bg | |
| area | No | 触る場所の一言(ファイル・画面・機能)。思いつきの振り分けに使う | |
| name | Yes | 会話の名前(仕事を一言で。管理中の会話と重ねない) | |
| todo | No | この会話でやる TODO の番号。会話とつなぎ、会話が done になると TODO も済みになる | |
| force | No | ||
| model | No | profile より優先。どちらも無ければ config の defaults.model、それも無ければ既定のモデル | |
| effort | No | reasoning effort(例 low / medium / high / xhigh)。profile より優先。省略時は既定 | |
| prompt | Yes | 最初の依頼(何を・どこまで・報告のしかた) | |
| profile | No | 仕事の種類(get_usage の profiles の name。例 design / debug / implement / review / writing / routine) | |
| sandbox | No | Codex だけ | |
| approvalPolicy | No | Codex だけ | |
| permissionMode | No | Claude Code だけ。省略時は config.json の claude.permissionMode、それも無ければ Claude のデスクトップアプリでは監視役と同じ権限モード(監視役より上は断られる)、ターミナル(claude --bg)では acceptEdits。監視役と同じでよければ省く |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavior beyond the readOnlyHint=false annotation: the new conversation is independent and continues after the current conversation ends, resource shortages cause refusal with a reason unless force=true, names must not collide with managed conversations, and via="app" returns appStart/record values instead of starting the session. This is exactly the kind of mutation and side-effect context an agent needs before invoking start_session.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then covers profile/model precedence, persistence, resource gating, name uniqueness, and the app-mode fallback. It is dense but appropriately sized for a 13-parameter tool with complex behavior. Some parenthetical elaboration could be trimmed, but most sentences carry operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter tool with no output schema, the description covers the important behavioral contract: resource gating, force override, name uniqueness, conversation persistence, and app-mode return values. It does not describe the normal successful return shape, which leaves a small gap. Given the rich schema coverage, this is still a fairly complete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is very high at 92%, so the schema already documents most parameters. The description still adds meaningful semantics around the key interactions: profile comes from get_usage, model and effort override profile, force bypasses resource checks, and via="app" changes the tool's behavior. It does not explain every parameter, but it improves understanding of the most consequential ones.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: creating a new work conversation and sending its first request, with name, working folder, model, and effort named. It also distinguishes this from continuing the current conversation by saying the new conversation runs separately and persists after this one ends. The special via="app" behavior further clarifies that this tool may not start a session directly in Claude Code desktop mode.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: prefer a profile from get_usage that matches the work type, model/effort override profile, and force=true bypasses resource gating. It also describes the via="app" default and the appStart/record handoff. It does not explicitly compare against siblings such as send_message or update_session, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_sessionA
会話の動いているターンを止める。会話そのものは残り、send_message で続きを頼める。markAs で管理上の状態を記録する(既定 paused=手で止めた。利用枠で止めるときは paused_usage にすると、枠が戻ったときに wait_events が usageRecovered を返す)。
| Name | Required | Description | Default |
|---|---|---|---|
| markAs | No | paused | |
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=false available, the description carries meaningful behavioral context: the turn stops, the conversation persists, a management state is recorded, and paused_usage affects later wait_events behavior. It does not describe interruption timing or error behavior, but it adds substantial value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states the stop action first, then clarifies persistence and continuation, then explains markAs. Every sentence adds useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation tool with no output schema and minimal annotations, the description covers the key behavioral outcomes and the non-obvious markAs option. It leaves threadId semantics and return/error behavior implicit, but the essential context for correct invocation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains markAs thoroughly, including the default and the special paused_usage semantics, but threadId receives no added meaning beyond its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and scope: it stops the currently running turn, not the conversation itself. It also explicitly distinguishes the outcome from deletion by saying the conversation remains and can be continued with send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage guidance for markAs, including the default paused state and the paused_usage case tied to quota recovery and wait_events. It also names send_message as the continuation path, though it does not compare against other session-management siblings such as update_session.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoA
TODO(あとでやること)を書く。action="add": 足す(text と when。利用者の言葉を、あとで依頼の文にできる一言に)。"update": 直す(id と変える欄)。"done": 済ませる(id)。"remove": 消す(間違えて足したとき)。一覧は list_sessions の todos。when.type: anytime(いつでも)/ usage(利用枠が戻ったら。at に戻る時刻)/ pr(PR が merged になったら。pr と、cwd か repo)/ version(この道具が version 以上の版で動いたら=読み込んだら。ディスクに入っただけでは数えない。省くと足したときと違う版で動いたら)/ restart(足したときの session-manager が終わり、そのあとに起動し直したら。足した会話を開いたまま新しい会話を始めただけでは数えない)/ at(at の日時になったら)/ room(PC に余裕ができたら。断られた start_session が自分で足す)。条件がそろうと wait_events が todoDue(room は roomAvailable)で返す。auto=true は、そろったら聞かずに進める(利用者がすでに頼んだ仕事の続き)。
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | 足したのは利用者か監視役か(既定 user) | |
| id | No | update・done・remove で: TODO の番号 | |
| cwd | No | リポジトリのフォルダ(PR を調べる・作業の会話を起こす所) | |
| auto | No | 条件がそろったら聞かずに進める(既定 false) | |
| note | No | ||
| text | No | やること(あとで作業の会話への依頼にできる一言) | |
| when | No | いつやるか(省くと anytime) | |
| start | No | 作業の会話を起こすときの start_session の値(name・prompt・profile など) | |
| action | Yes | ||
| cardAt | No | Claude のデスクトップアプリのカードで提案した日時 | |
| threadId | No | つなぐ会話。add では続きを頼む会話(送ると進行中になる)、update ではこの TODO で起こした会話(すぐ進行中になる) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the single readOnlyHint=false annotation, the description discloses the deferred-execution model (conditions fire as todoDue / roomAvailable through wait_events) and the consequential auto=true behavior ('そろったら聞かずに進める'). The subtle version/restart semantics ('足した会話を開いたまま新しい会話を始めただけでは数えない') are exactly the kind of side-effect detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and action list are front-loaded and the quoted action labels give the dense block visible structure. It is still a single long paragraph with no line breaks, and the when.type catalogue could be tabled, so it is efficient but not maximally scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with a nested when/start object and no output schema, the description covers actions, trigger semantics and event delivery thoroughly. Missing are the return shape after add (an id for later update/done/remove) and the meaning of note/cardAt, which an agent may need to use the tool fully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 82%, so the baseline is 3, and the description adds real meaning on top: all seven when.type values get operational definitions that the bare enum does not provide, and the pr/cwd/repo relationship is spelled out. It leaves gaps for note, by, cardAt and start's internal shape, so it does not fully compensate for the remaining uncovered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a concrete verb+resource ('TODO(あとでやること)を書く') and immediately enumerates the four actions with the parameters each takes, so an agent can tell what the tool does without opening the schema. It also names the sibling that owns the read path ('一覧は list_sessions の todos'), which cleanly separates it from adjacent tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action carries a when-to-use clause (e.g. remove = '間違えて足したとき'), and the long when.type catalogue explains the exact trigger condition for every scheduling mode, including pitfalls ('ディスクに入っただけでは数えない'). It does not, however, contrast this tool against other workflow tools like report or wait_events beyond noting that wait_events surfaces due items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_sessionA
監視役の記録(state.json)を書き換える。管理に加える(デスクトップアプリの会話は start_session が返した record の値で)・状態(running / waiting_user / done / pending=保留 / paused=手で止めた / paused_usage=利用枠で止めた / failed)・一言のメモ・触る場所・つなぐ TODO。done にすると、つないだ TODO も済みになる(todosDone)。会話そのものには何もしない。
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| via | No | app: デスクトップアプリの会話を管理に加えるとき(start_session の record の値) | |
| area | No | ||
| name | No | ||
| note | No | ||
| todo | No | この会話でやる TODO の番号(start_session の record の値)。会話が done になると TODO も済みになる | |
| model | No | ||
| effort | No | ||
| remove | No | true なら記録から外す | |
| status | No | ||
| profile | No | ||
| threadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=false annotation already marks this as a mutation tool. Beyond that, the description states what it mutates (state.json), discloses a non-obvious side effect (setting done also marks the linked TODO as done, todosDone), and explicitly says the conversation is untouched. It does not cover permissions, reversibility, or what a call returns.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, and no sentence is padding. But the middle of the description becomes a run-on list joined by ・, mixing field names with behavioral rules about the TODO cascade, which makes it harder to scan. Splitting that list into short labeled clauses would improve it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 12 parameters, no output schema, and low schema coverage, so the description must do a lot. It covers status semantics and the done-to-TODO cascade well. But it remains silent about whether the update is partial or full, what state.json returns, and what the meaning of several parameters is, so the definition is not yet complete for a tool of this size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, and the description explains 5 of the 12 parameters: status values (pending=保留, paused=手で止めた, paused_usage=利用枠で止めた), note, area, todo, and the via app case. That goes beyond the bare enum values. But cwd, name, model, effort, profile, remove, and the required threadId are left undefined in both the schema and the description, so the 25% coverage gap is not closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and target: rewrites the supervisor's record (state.json). It enumerates the fields that can be set (status, note, area, todo link) and closes with a sharp scope boundary, 「会話そのものには何もしない」, which distinguishes this tool from send_message and stop_session. It never names a same-purpose sibling such as set_session_name, so the differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives usage guidance only for one case: adding a desktop app conversation to management via the record value returned by start_session. It does not say when this tool is chosen instead of set_session_name (which might also set a name), how the tool relates to stop_session, or whether calls can be partial updates. The guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_eventsARead-only
見回り。管理中の会話の状態の変化・作業の会話からの報告・承認や入力の待ち・空きメモリ不足・利用枠の超過(pauseAtPct があるとき)と回復・資源待ちの仕事(room の TODO)を起こせる余裕(roomAvailable)・条件がそろった TODO(todoDue。1件につき1回。始める・済む・条件を直すまで、1時間ごとに repeat=true でまた返す)を、起きるまで待って返す(報告は書かれたらすぐ)。wait=false なら待たずに、いま分かる出来事だけを返す(Claude のデスクトップアプリの監視役が、起きるたびに1回呼ぶ)。何も起きなければ最長 intervalMin 分(省略時は設定の watchIntervalMin。設定より長くはできない)で timedOut を返す。待つ間はモデルを使わない。動いている会話・判断待ちの会話(stopWhenStuckMin があるとき)・枠で止めた会話・資源待ちの仕事・未読の報告がどれも無ければすぐ idle=true を返す(見回りを止めてよい合図)。進められる仕事が無い(どの会話も利用者の判断・承認・入力か、メモリ・CPU の空きを待っている)まま設定の stopWhenStuckMin 分(既定 120)続くと、stuck=true と待っているもの(waiting)を返す(見回りを止める合図。呼び出しをまたいで数え、状態の変化・報告・send_message・start_session・update_session で数え直す)。同時に呼べるのは1つだけ(新しい呼び出しが前のものを打ち切る)。
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | false なら待たずに、いま分かる出来事だけを返す | |
| intervalMin | No | 今回だけ短くするとき(分) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the readOnlyHint annotation: explains that no model is used while waiting, that intervalMin is capped by config, that only one call may run at a time (a new call aborts the previous), that stored state counts across calls, and that reports return immediately. These operational traits are not derivable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
All content is packed into a single dense paragraph with heavy parenthetical nesting, making it hard to scan. The opening term '見回り' (patrol) is vague before the specifics arrive, so it is not ideally front-loaded despite containing rich information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, non-obvious polling tool with no output schema, it explains the return signals (idle, stuck, waiting, timedOut, roomAvailable, todoDue, repeat) fairly thoroughly. Minor slack remains—some signals (e.g. roomAvailable/room) are only briefly glossed—but overall it is adequate to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning: it clarifies that wait=false yields only immediately-visible events, and that intervalMin cannot exceed the configured watchIntervalMin. It doesn't reiterate defaults redundantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (waits until events occur, then returns them) applied to a well-defined resource: conversation state changes, reports, approvals/input waits, memory/quota, and TODO conditions. It also distinguishes itself from siblings by noting send_message/start_session/update_session reset the stuck counter, so an agent can separate it from the messaging/management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: wait=false for the desktop-app watcher polling once per event, idle=true as the signal to stop patrolling, stuck=true as the signal to stop. It also states the one-at-a-time/abort-previous rule. It does not explicitly contrast against siblings like read_reports, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.9.2- First observed
get_usage - First observed
list_sessions - First observed
read_reports - First observed
read_session - First observed
report - First observed
send_message - First observed
set_session_name - First observed
start_session - First observed
stop_session - First observed
todo - First observed
update_session - First observed
wait_events
TDQS
Scored across 12 tools
Most tools have clearly distinct roles: start/send/stop/read/list sessions, report/read_reports, todo, wait_events, and get_usage are easy to separate. There is some overlap between set_session_name and update_session because both modify supervisor-side metadata, and stop_session's markAs state can be confused with update_session's state field, but descriptions mostly clarify these boundaries.
All tool names use consistent snake_case, which is predictable and readable. Most follow a verb_noun pattern (list_sessions, read_session, start_session, send_message), but standalone names like report and todo are minor deviations from the pattern.
The 12-tool surface is well scoped for a session supervisor managing conversations, reports, TODOs, usage, and event waiting. Each tool appears to earn its place without obvious redundancy.
The tool set covers the main lifecycle: start, list, read, message, stop, update, report, todo management, usage checks, and event waiting. Minor gaps remain around explicitly deleting or archiving sessions and separating some metadata operations, but agents can work around these through existing tools.
Maintenance
Related MCP Connectors
Shared workspace where Claude, ChatGPT, Codex and Grok share files, tasks, decisions and handoffs.
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Persistent cross-session memory shared by Codex, Claude Code, ChatGPT, and other AI agents.
Stand up ops from Cursor/Claude/Codex; fleets keep running after your session ends.
Related MCP Servers
- AlicenseAqualityDmaintenanceOrchestrates multiple Claude Code agents across iTerm2 sessions with process-level isolation, enabling collaborative AI development workflows on multiple codebases with task-based inter-agent communication and persistent state management.71MIT
- AlicenseAqualityDmaintenanceEnables orchestration of multiple Claude Code sessions for complex multi-task coding projects with HEAD/SUB coordination and dependency-based task execution.13 npmMIT
- AlicenseAqualityAmaintenanceEnables Claude Code to launch and supervise multiple concurrent Claude Code sessions in tmux, sending them briefs, reading their progress, answering their prompts, and managing isolated git worktrees.202MIT
- AlicenseBqualityBmaintenanceEnables Claude Code to act as a project manager that delegates coding tasks to a pool of worker agents (Codex and OpenCode) defined as aliases in a YAML config, handling priority-based budget routing, parallelism with queues, resumable sessions, isolated git worktrees, and non-destructive merges. It returns token-cheap result reports with diffs and costs, plus Windows toast notifications and papercraft-style HTML round summaries.17MIT