◉CLAUDE LABEN
●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.302 — fork サブエージェントが claude -p・Agent SDK・デスクトップで既定オンになりました。無効化は CLAUDE_CODE_FORK_SUBAGENT=0(10/16)●2.1.301 — 使用量上限に達した無人実行の再試行を、待ち続けず自動で止めるようになりました(10/15)。最新は 2.1.304(10/19)●SONNET 4.5 — Claude API での提供終了は 11/30、残り40日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-07-24上級

共通エージェント定義をセッション単位で使い分ける運用設計

Managed Agents で土台のエージェント定義を1つに畳み、バージョン固定とセッションローカルな上書きを使い分ける設計を、検証付きのコードと運用の落とし穴とともにまとめました。

Managed Agents4Agent SDK5MCP57運用設計29マルチテナント

✦ プレミアム記事

似た用途のエージェントを、ほぼ同じ振る舞いのまま複数回しております。

違うのはシステムプロンプトの一部と、参照する MCP コネクタ、それに読み込ませるスキルだけです。それなのに私はしばらくの間、サイトごとに丸ごと別のエージェント定義を持っておりました。

共通部分を直すたびに4箇所を手で揃えます。片方だけ直し忘れて、ある夜のバッチだけ古いプロンプトで走ります。似た定義が少しずつずれていく感覚は、地味に神経を削るものでした。

Managed Agents の設計をきちんと読み直して、この構図をやっと畳めました。土台となるエージェント定義は1つに保ちます。そのうえで、サイトごとの色は「バージョンの固定」と「セッションローカルな上書き」という二つの層に振り分けます。定義を増やさずに、実行時に色を付ける発想です。

個人開発で似た用途のエージェントを複数回すなかでたどり着いた設計を、実際に使っている検証コードとともにお伝えします。

なぜ「定義を増やす」ではなく「1つの土台を使い分ける」のか

選択肢は大きく3つありました。

方式共通部分の同期差分の見通し権限事故のリスク
サイトごとに別定義手動で揃える必要あり良い(独立)低いが定義が増え続ける
1定義+分岐をプロンプト内に埋める不要悪い(肥大化)中(境界が曖昧)
1定義+バージョンとセッションで使い分ける不要良い(差分が明示)設計次第で低くできる

3つ目を選んだ決め手は、差分がコードとして一箇所に集まることでした。

「このサイトのときは、この MCP と、このスキルだけ」という差分が、セッションを起動する直前に、読めるかたちで並びます。プロンプトの奥深くに条件分岐を埋めるより、はるかに見通しが利きます。

ただし、この方式には最初に必ずつまずく一点がありました。

直感に反した点:セッションに model や system は書けません

私が最初に書こうとしたコードは、こういうかたちでした。セッションを作るときに、そのセッション用のモデルとシステムプロンプトとツールを、まとめて渡すつもりだったのです。

そんな引数はありませんでした。

sessions.create() の agent フィールドが受け取るのは、エージェント ID の文字列か、{ type: "agent", id, version } というポインタだけです。model・system・tools ・mcp_servers・skills はすべて agents.create() 側、つまりエージェント本体の最上位フィールドとして定義されます。セッションは、その定義を指すだけの存在なのです。

このことに気づいたのは、セッション作成のパラメータ表を三度読み返したあとでした。「セッションごとに色を付ける」という発想そのものが間違っていたのではなく、色を付けられる層が私の想像より下にあった、というだけの話でした。

差し替えられるものと、差し替えられないものを整理しますと、次のようになります。

差し替えたいもの実際の手段タイミング
model / system / skillsエージェントのバージョンを分ける(更新すると新しい版が積まれます)セッション生成時にどの版を指すかで決まります
tools / mcp_servers / vault_idssessions.update() によるセッションローカルな上書きセッションが idle のあいだ
環境(コンテナ構成)environment_id をセッション生成時に指定しますセッション生成時のみ

セッションローカルな上書きは、新しいエージェントのバージョンを作りません。エージェント本体にも波及しません。そのセッションのなかだけで効いて、セッションが終われば消えます。棚卸しの話が後ろで出てくるのは、この性質があるためです。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦セッションに書けるもの・書けないものを分けて設計する、検証付き起動ファクトリの実装
✦配列の上書きが統合ではないことに起因する事故と、私が実際に踏んだ落とし穴
✦似た用途の複数エージェントを1つの土台定義で回すための、差し替え粒度の判断基準
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-07-31
400文字だけ残したはずのツール出力が、1MB を握り続けていた
自作の MCP サーバーやツールラッパーで出力を切り詰めても、Node の sliced string は元の全文を握り続けます。境界が13文字であること、平坦化が効く書き方と効かない書き方、ヒープスナップショットから親を数える監査スクリプトまで、すべて実測して記録しました。
⬡ API & SDK2026-09-21
非推奨の通知が出た朝、設定を書き換える前にバージョンを確かめた話
Claude Desktop / Cowork の管理構成キーが 10 月 7 日に受付終了します。先に書き換えると壊れるもの、触らなくても意味が変わるものを仕分ける手順を書き残します。
⬡ API & SDK2026-09-09
コンソールで作ったエージェントは、ant apply では引き取れませんでした
ant apply はファイルからエージェントや環境を作り直します。拒んでくれる場面と、黙って二つ目を作る場面の境目、そして claude-lock.json をコミットする理由を手順つきで整理しました。