---
title: Managed Agentsのデプロイメントを保護する
url: https://platform.claude.com/docs/ja/managed-agents/secure-deployment
description: エージェントがアクセスできる範囲と実行できる操作を制限する設定を、重要度の高い順に紹介します。
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

このガイドでは、Claude Managed Agents上のエージェントがアクセスできる範囲と実行できる操作を制限する設定を、重要度の高い順に紹介します。各セクションには、その設定を詳しく説明しているページへのリンクがあります。

| セクション                                                                                                                                                                            | 設定または判断事項                                    | 推奨                                                                                                                                            |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| [エージェントの実行場所を選択する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#choose-where-the-agent-runs)                                                             | クラウドまたはセルフホスト型サンドボックス                        | ツールを自社で管理するインフラストラクチャ上で実行する必要がない限り、クラウド                                                                                                       |
| [ネットワークを制限する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#limit-the-network)                                                                            | 環境の`networking.type`                         | `limited`とし、エージェントが必要とするホストのみを指定                                                                                                              |
| [認証情報をボールトに保管する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#keep-credentials-in-vaults)                                                                | 各環境変数の認証情報の`injection_location`と`networking` | リクエストヘッダーのみとし、`limited`ネットワーキングでそのキーの対象ホストのみを指定                                                                                               |
| [Web検索とWebフェッチを制限する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#restrict-web-search-and-web-fetch)                                                     | 各Webツールの`allowed_domains`                    | 各ツールに許可リストを設定。`web_fetch`では、エージェントが必要とするサイトのみを指定。`web_search`では、結果を取得したいサイトを指定                                                                |
| [リスクのある操作を承認する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#approve-risky-actions)                                                                      | 各ツールの`permission_policy`                     | `bash`、`write`、`edit`、`web_fetch`、およびデータの読み取りのみを行うMCPツールには`auto`。サンドボックス外での変更を元に戻せないツールや、中継されたエンドユーザーのテキストだけで実行されるべきでないツールには、代わりに`always_ask` |
| [エージェントに最小限のツールセットを与える](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#give-the-agent-the-smallest-tool-set)                                               | エージェントツールセットの`default_config.enabled`        | `false`とし、エージェントが必要とするツールを有効化                                                                                                                 |
| [信頼できない入力を強力なツールから遠ざける](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#keep-untrusted-input-away-from-powerful-tools)                                      | 信頼できない入力を読み取るときにエージェントが保持するツールと認証情報          | 信頼できない入力を読み取るエージェントには、ファイルの書き込み、コマンドの実行、レコードの変更を行うツールを`always_allow`で持たせない                                                                    |
| [制限と停止手段を設定する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#set-limits-and-a-way-to-stop)                                                                | 各セッションとデプロイメントの`budget`                      | 1回の実行で想定されるコストに見合った上限                                                                                                                         |
| [必要に応じて、オフラインレビュアーにすべてのトランスクリプトを読ませる](https://platform.claude.com/docs/ja/managed-agents/secure-deployment-monitoring#optionally-have-an-offline-reviewer-read-every-transcript) | 各セッションのイベントを読み取る、自社で実行するオフラインレビュージョブ         | 任意。アイドル状態になった、または終了した各セッションを定期的にレビュー                                                                                                          |
| [セッションの監視と保持期間の確認](https://platform.claude.com/docs/ja/managed-agents/secure-deployment-monitoring#monitor-sessions-and-review-retention)                                        | Webhookとセッションの削除                             | セッションがアイドル状態になったとき、予算に達したとき、または終了したときのアラートと、アイドル状態になった理由の確認。保持したいイベントは自社のログに保存し、不要になったセッションは削除                                                |

[セキュリティリスクとサンドボックスの境界](https://platform.claude.com/docs/ja/managed-agents/secure-deployment-risks)では、これらの設定が重要である理由と、これらの設定では防げないことを説明しています。セッションのレビューと監視については、[エージェントセッションのレビューと監視](https://platform.claude.com/docs/ja/managed-agents/secure-deployment-monitoring)を参照してください。

## エージェントの実行場所を選択する

エージェントのツールがどこで実行されるかによって、サンドボックスを保護する主体が決まります。クラウド環境の場合はAnthropic、セルフホスト型サンドボックスの場合はお客様自身です。どちらを選ぶか、またそれぞれの場合に何がAnthropicに届くかについては、[エージェント環境の選択](https://platform.claude.com/docs/ja/managed-agents/choosing-an-environment)を参照してください。

[セルフホスト型サンドボックス](https://platform.claude.com/docs/ja/managed-agents/self-hosted-sandboxes)を使用する場合は、次の4点に留意してください。

* **ネットワーク：** [ネットワークを制限する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#limit-the-network)はクラウド環境に適用されます。セルフホスト型サンドボックスの場合は、自社のファイアウォールでそのトラフィックに同等の制限を設定してください。ファイアウォールはエージェントが宣言するMCPサーバーを制限しないため、それらのサーバーと、アプリケーションがセッションに設定するサーバーを確認してください。
* **Webツール：** WebツールはAnthropicのサーバー上で実行されるため、ファイアウォールでは制限されません。ドメインリストで制限してください。[Web検索とWebフェッチを制限する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#restrict-web-search-and-web-fetch)を参照してください。
* **認証情報：** 環境変数の認証情報は、セルフホスト型サンドボックスではまだサポートされていません。
* **分離とハードニング：** どちらもお客様の責任です。[セキュリティモデル](https://platform.claude.com/docs/ja/managed-agents/self-hosted-sandboxes-security)を参照してください。

どちらの選択肢でも、Managed Agentsのコンプライアンス対象範囲や、セッション履歴の保持期間は変わりません。[セッションの監視と保持期間の確認](https://platform.claude.com/docs/ja/managed-agents/secure-deployment-monitoring#monitor-sessions-and-review-retention)を参照してください。

## ネットワークを制限する

`networking.type`を`limited`に設定し、エージェントが必要とするホストのみを`allowed_hosts`に指定してください。`networking`を省略した環境作成リクエストは`unrestricted`になる可能性があるため、すべての作成リクエストで`networking`を設定してください。[無制限ネットワーキングのリスク](https://platform.claude.com/docs/ja/managed-agents/environments#risks-of-unrestricted-networking)を参照してください。

アタッチしたファイル、メモリストア、GitHubリポジトリは、`allowed_hosts`に関係なくエージェントから引き続き利用できます。

このページの例では、サポートエージェントを使用します。このエージェントは顧客のチケットを読み、注文を検索し、ヘルプセンターを読んで、返信の下書きを作成します。注文の検索はアプリケーションが実行し、ホストを必要としないため、この環境では`web_fetch`用にヘルプセンターという1つのホストのみを許可しています。

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  curl -fsS https://api.anthropic.com/v1/environments \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01" \
    -H "content-type: application/json" \
    -d '{
      "name": "support-agent",
      "config": {
        "type": "cloud",
        "networking": {
          "type": "limited",
          "allowed_hosts": ["help.example.com"]
        }
      }
    }'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply environment.yaml
    ```

    <File filename="environment.yaml">
      ```yaml
      # yaml-language-server: $schema=https://platform.claude.com/schemas/ant/beta/environment.json
      name: support-agent
      config:
        type: cloud
        networking:
          type: limited
          allowed_hosts:
            - help.example.com
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  environment = client.beta.environments.create(
      name="support-agent",
      config={
          "type": "cloud",
          "networking": {
              "type": "limited",
              "allowed_hosts": ["help.example.com"],
          },
      },
  )
  ```

  ```typescript TypeScript
  const environment = await client.beta.environments.create({
    name: "support-agent",
    config: {
      type: "cloud",
      networking: {
        type: "limited",
        allowed_hosts: ["help.example.com"]
      }
    }
  });
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Environments;

  var environment = await client.Beta.Environments.Create(new()
  {
      Name = "support-agent",
      Config = new BetaCloudConfigParams
      {
          Networking = new BetaLimitedNetworkParams
          {
              AllowedHosts = ["help.example.com"],
          },
      },
  });
  ```

  ```go Go
  environment, err := client.Beta.Environments.New(ctx, anthropic.BetaEnvironmentNewParams{
  	Name: "support-agent",
  	Config: anthropic.BetaEnvironmentNewParamsConfigUnion{
  		OfCloud: &anthropic.BetaCloudConfigParams{
  			Networking: anthropic.BetaCloudConfigParamsNetworkingUnion{
  				OfLimited: &anthropic.BetaLimitedNetworkParams{
  					AllowedHosts: []string{"help.example.com"},
  				},
  			},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
  _ = environment
  ```

  ```java Java
  import com.anthropic.models.beta.environments.*;
  import java.util.List;

  var environment = client.beta().environments().create(EnvironmentCreateParams.builder()
      .name("support-agent")
      .config(BetaCloudConfigParams.builder()
          .networking(BetaLimitedNetworkParams.builder()
              .allowedHosts(List.of("help.example.com"))
              .build())
          .build())
      .build());
  ```

  ```php PHP
  $environment = $client->beta->environments->create(
      name: 'support-agent',
      config: [
          'type' => 'cloud',
          'networking' => [
              'type' => 'limited',
              'allowed_hosts' => ['help.example.com'],
          ],
      ],
  );
  ```

  ```ruby Ruby
  environment = client.beta.environments.create(
    name: "support-agent",
    config: {
      type: "cloud",
      networking: {
        type: "limited",
        allowed_hosts: ["help.example.com"]
      }
    }
  )
  ```
</CodeGroup>

`limited`環境には3つのネットワーキング設定があります。

| 設定                       | サンドボックス内のコードに開放されるもの                                                                                                                                                                                                         | 推奨                                                                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `allowed_hosts`          | 指定したホスト（あらゆるリクエストに対して）                                                                                                                                                                                                       | エージェントが必要とするホストのみ。自社で運用している、または信頼している各MCPサーバーのホストを含む                                                                            |
| `allow_package_managers` | [パッケージマネージャーのホスト](https://platform.claude.com/docs/ja/managed-agents/environments#package-manager-hosts)。これには`github.com`、`gitlab.com`、`bitbucket.org`上のすべてのリポジトリとパスが含まれます。これらは誰でもコンテンツを公開でき、サンドボックス内のコードがファイルをアップロードできる場所です | `false`。ただし、環境の`packages`設定にパッケージが指定されている場合は`true`が必要です。エージェントが実行中にパッケージをインストールする場合は、代わりに必要なレジストリホストのみを`allowed_hosts`に指定してください |
| `allow_mcp_servers`      | ホストなし。Managed AgentsはAnthropicのサーバーからMCPサーバーに接続します                                                                                                                                                                           | `false`とし、自社で運用している、または信頼している各MCPサーバーのホストを`allowed_hosts`に指定                                                                    |

`allow_package_managers`と`allow_mcp_servers`の設定は、Web検索とWebフェッチ用のホストを追加しません。

`allow_mcp_servers`はデフォルトのオフのままにし、自社で運用している、または信頼している各MCPサーバーのホストを`allowed_hosts`に指定してください。指定した各ホストは、サンドボックス内のコードにも開放されます。`allow_mcp_servers`がオフの場合、MCPサーバーのホストが指定されていなければ、セッション作成時のチェックでリクエストが拒否されます。[セッション作成時に認証情報を提供する](https://platform.claude.com/docs/ja/managed-agents/mcp-connector#provide-authentication-at-session-creation)を参照してください。セッションの更新で`mcp_servers`が変更される場合も、同じチェックが実行されます。

<Warning>
  ネットワークアクセスは操作ごとではなく、ホストごとに許可されます。サンドボックスは、`git push`やパッケージの公開などのアップロードを含め、許可されたホストにあらゆるリクエストを送信できます。また、コマンドが提供するあらゆる認証情報を使用できます。エージェントが読むテキストに誰かが隠した認証情報であっても同様です。
</Warning>

`allowed_hosts`のホストを選ぶ際は、次の2つのルールに従ってください。

* 自社で運用している、または信頼しているホストのみを指定する。
* `*.`ワイルドカードや、誰でもコンテンツを公開できる共有ホスティングドメインを避ける。

エージェントが`bash`を保持する場合は、[リスクのある操作を承認する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#approve-risky-actions)の説明に従って`bash`ツールの[権限ポリシー](https://platform.claude.com/docs/ja/managed-agents/permission-policies)を設定してください。

<Note>
  環境の制限を強化した後は、新しいセッションを開始し、すでに実行中だったセッションを停止してください。すでに実行中のセッションは、終了するまで古い制限を維持する場合があります。[制限と停止手段を設定する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#set-limits-and-a-way-to-stop)を参照してください。
</Note>

すべてのネットワーキング設定については、[クラウド環境のセットアップ](https://platform.claude.com/docs/ja/managed-agents/environments#networking)を参照してください。

## 認証情報をボールトに保管する

すべてのシークレットをボールトに保管してください。各環境変数の認証情報について、注入場所をリクエストヘッダーのみに設定し、そのシークレットの対象ホストのみを指定してください。サンドボックス内のコードには、シークレットの代わりにプレースホルダーが見えます。Managed Agentsは、認証情報が許可するホストへの送信HTTPSリクエストでのみ、実際のシークレットに置き換えます。そのため、リクエストヘッダーをエコーするエンドポイントのようにサービスがシークレットを送り返さない限り、シークレットはモデルから直接アクセスできない状態に保たれます。認証情報の`networking`が`unrestricted`の場合、Managed Agentsは、環境がサンドボックスに到達を許可するあらゆるホストへのリクエストで実際のシークレットに置き換えます。ボールトを使用するには、セッションまたはデプロイメントの作成時に、そのIDを`vault_ids`に渡してください。

| 設定                      | 設定値                                                                                                      | 理由                                                                                                                                  | できないこと                                                                             |
| ----------------------- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| `injection_location`    | サービスがヘッダーからキーを読み取ることを確認した上で、`{"header": true, "body": false}`                                            | リクエストボディはエージェントが読むコンテンツから構築されることが多いため、ボディ内のキーはより露出しやすくなります。両方のフィールドを指定してください。オブジェクトを省略した作成リクエストでは両方の場所が有効になり、更新では送信したフィールドのみが変更されます | コードは、認証情報が許可するすべてのホストで引き続きキーを使用できます。ボディにキーがあることを想定するサービスはプレースホルダーを受け取り、リクエストを拒否します |
| 認証情報の`networking`       | `limited`とし、そのキーの対象となる正確なホストを指定                                                                          | レスポンスは編集されずにサンドボックスに届くため、ワイルドカード、共有ホスティングドメイン、リクエストヘッダーをエコーするホストは避けてください                                                            | ホストを開放するものではありません。環境側でも許可する必要があります                                                 |
| キーを発行したサービスでのキーの権限      | エージェントが必要とする権限のみ                                                                                         | エージェントはキーが許可するあらゆる操作を実行できます                                                                                                         | 該当なし                                                                               |
| マウントされたリポジトリのGitHubトークン | 最小限の権限を持つ[fine-grainedトークン](https://platform.claude.com/docs/ja/managed-agents/github#token-permissions) | サンドボックス内のコードは、セッション全体を通じてこのトークンでマウントされたリポジトリからフェッチおよびプッシュできます。エージェントがプッシュする必要がある場合にのみ書き込みアクセスを付与してください                              | 該当なし                                                                               |

サポートエージェントは、注文APIのAPIキーをアプリケーションが保持しているため、ボールトの認証情報を必要としません。エージェントがボールトの認証情報を保持する場合は、各言語でのリクエストについて[認証情報を追加する](https://platform.claude.com/docs/ja/managed-agents/vaults#add-a-credential)を参照してください。

キーをシステムプロンプト、エージェント定義、メッセージに含めないでください。エージェントにClaude APIキーを与えないでください。Claude APIキーがボールト内にある場合でも、サンドボックス内のコードはそれを使ってClaude APIを直接呼び出せます。セッションの開始や削除、Web検索やWebフェッチの使用など、そのキーが許可するあらゆる操作を実行できます。エージェントのツール設定、承認、予算はこれらの呼び出しには適用されません。`limited`環境では、`allowed_hosts`がサンドボックスに`api.anthropic.com`への到達を許可している場合にのみ、コードはこれらの呼び出しを行えます。

トークンは自分でフェッチしてボールトに保管してください。サンドボックス内のコードが保管されたシークレットを使ってフェッチしたトークンは、編集されずに返されるためです。

信頼レベルの異なるワークロード用のボールトは、別々の[ワークスペース](https://platform.claude.com/docs/ja/manage-claude/workspaces)に保管してください。ワークスペースにアクセスできるAPIキーであれば、そのワークスペースのボールトを参照できるためです。1つのワークスペースにスコープされたAPIキーを使用してください。

MCPの認証情報とローテーションについては、[ボールトによる認証](https://platform.claude.com/docs/ja/managed-agents/vaults)を参照してください。

## Web検索とWebフェッチを制限する

`web_fetch`の`allowed_domains`を、エージェントが必要とするサイトに設定してください。エージェントがフェッチするURLはどれも、その指し示すサイトにデータを運ぶ可能性があるため、このリストはセキュリティ制御となります。`web_search`では、`allowed_domains`を結果を取得したいサイトに設定し、正確であると信頼できるサイトからのみ結果が得られるようにしてください。このリストは、検索クエリが検索プロバイダーに届くことを防ぐものではありません。検索結果にはページのテキストが含まれるため、このリストはどのサイトのテキストがエージェントに届くかも制限します。あらゆる種類の環境で、両方のツールに`allowed_domains`を設定してください。

`blocked_domains`リストは、指定したホストとそのサブドメインをブロックし、それ以外のホストはブロックしません。同じコンテンツが、Webアーカイブ、キャッシュ、ミラー、または指定していない関連ドメインからエージェントに届く可能性があります。セキュリティのために`blocked_domains`に頼らないでください。`allowed_domains`を使用し、信頼するホストを指定してください。

`limited`環境では、[ネットワークを制限する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#limit-the-network)の`allowed_hosts`リストもWebツールを制限します。`unrestricted`環境やセルフホスト型サンドボックスでは、Webツールは制限されません。

| `limited`環境での状況                                        | 結果                                                                                                                                        |
| ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
| 有効なWebツールの`allowed_domains`エントリが`allowed_hosts`の範囲外にある | セッションの作成は400エラーで失敗し、そのようなエントリを追加するセッション更新も同様に失敗します。デプロイメントがスケジュールまたは手動実行によって開始するセッションは、それでも作成されます。その場合、ツールは`allowed_hosts`外のホストからは何も返しません |
| Webツールに独自のリストがない                                       | ツールは`allowed_hosts`内のホストからのみページと結果を返します。ツールにも`allowed_domains`を設定してください                                                                   |
| `allowed_hosts`にエントリがない                                | どちらのWebツールもページや検索結果を返しません                                                                                                                 |
| Webツールのために`allowed_hosts`にホストを追加する                     | そのホストはサンドボックス内のコードにも開放されます                                                                                                                |

2つのリストは、ホストの照合方法が異なります。

| リスト                       | エントリ            | 一致するもの                   | 一致しないもの           |
| ------------------------- | --------------- | ------------------------ | ----------------- |
| `allowed_hosts`（環境）       | `example.com`   | `example.com`            | `www.example.com` |
| `allowed_hosts`（環境）       | `*.example.com` | すべてのサブドメイン               | `example.com`     |
| `allowed_domains`（Webツール） | `example.com`   | `example.com`とすべてのサブドメイン | その他のドメイン          |

エージェントがあるサイトとそのすべてのサブドメインを必要とする場合は、`allowed_hosts`に`example.com`と`*.example.com`の両方を指定し、それ以外の場合は正確なホストを指定してください。ツールが`example.com`を指定し、`allowed_hosts`が`*.example.com`のみを指定している場合、セッションは作成されます。セッション作成時のチェックでは`example.com`を`*.example.com`の範囲内とみなしますが、ツールは`example.com`自体からは何も返しません。2つのリストの照合方法については、[エージェントにドメインリストを設定する](https://platform.claude.com/docs/ja/managed-agents/tools-web-restrictions#set-domain-lists-on-an-agent)を参照してください。

また、`web_fetch`ツールは、セッション内にすでに現れたURLのみを開きます。

| URLが現れる場所                                            | `web_fetch`で開けるか                      |
| ---------------------------------------------------- | ------------------------------------- |
| ユーザーメッセージのテキスト（中継したエンドユーザーのテキストを含む）                  | はい                                    |
| `user.define_outcome`イベントの説明                         | はい                                    |
| Web検索結果のアドレス                                         | はい                                    |
| `web_fetch`が以前に返したページ（PDFを除く）のテキストで、完全なURLが表示されているもの | はい                                    |
| Claudeがツールを直接呼び出した場合のカスタムツールの結果のテキスト                 | はい（結果が`is_error: true`とマークされている場合を除く） |
| システムプロンプト                                            | いいえ                                   |
| `allowed_domains`エントリを含むエージェントの設定                    | いいえ                                   |
| Claude自身の出力                                          | いいえ                                   |
| `bash`およびその他のサンドボックスツールの出力                           | いいえ                                   |
| MCPツールの結果                                            | いいえ                                   |
| ユーザーメッセージに添付されたファイル                                  | いいえ                                   |

マルチエージェントセッションでは、`web_fetch`は、別のエージェントからのURLが「はい」とマークされたソースを通じてそのエージェントに届いた場合にのみ、そのURLを開きます。直接呼び出しによるカスタムツールの結果は、「はい」とマークされたソースとみなされます。これは、ツールが入力を繰り返す場合など、Claudeがそのテキストを書いた場合でも同様です。URLは、`example.com/docs`のように`https://`なしで書かれていても対象となる場合があります。`web_fetch`ツールは、「Contact support」のようにURLの代わりに語句を表示するリンクを常に開けるとは限りません。セッション内に現れていないURLをエージェントがフェッチする必要がある場合は、ユーザーメッセージで送信してください。

このルールにより、注入されたテキストが機密データを運ぶURLを構築する可能性が低減されます。エンドユーザーのテキスト、検索結果、フェッチしたページ、カスタムツールの結果によって引き続きURLが追加される可能性があるため、`allowed_domains`は設定したままにしてください。Messages APIも、ソースのリストは異なりますが、同様のルールを適用します。[URL検証](https://platform.claude.com/docs/ja/agents-and-tools/tool-use/web-fetch-tool#url-validation)を参照してください。

`web_fetch`のドメインリストは`bash`ツールを制限しません。[ネットワークも制限](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#limit-the-network)してください。[ドメインリストのルール](https://platform.claude.com/docs/ja/managed-agents/tools-web-restrictions#domain-list-rules)を参照してください。

## リスクのある操作を承認する

`bash`、`write`、`edit`、`web_fetch`、およびデータの読み取りのみを行うMCPツールには`auto`を設定してください。サンドボックス外での変更を元に戻せないツールには、代わりに`always_ask`を使用してください。また、中継したエンドユーザーのテキストが要求したというだけで実行されるべきでないツールにも使用してください。[権限ポリシー](https://platform.claude.com/docs/ja/managed-agents/permission-policies)は、ツール呼び出しを実行するか、承認を待つか、サーバーで評価するかを決定します。

| ツール                   | 推奨ポリシー                                                                                                 | 理由                                                         |
| --------------------- | ------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- |
| `read`、`glob`、`grep`  | `always_allow`                                                                                         | サンドボックス内のファイルを読み取るだけで、何も変更しません                             |
| `bash`、`write`、`edit` | `auto`。サンドボックス外での変更を元に戻せないツールには`always_ask`を使用してください。エンドユーザーのテキストを中継する場合は、`bash`に`always_ask`を使用してください | エージェントツールセットのデフォルトは`always_allow`で、すべての呼び出しを承認なしで実行します     |
| `web_fetch`           | `auto`                                                                                                 | エージェントがフェッチするURLは、その指し示すサイトにデータを運ぶ可能性があります                 |
| `web_search`          | 検索クエリで送信されたくないデータをエージェントが扱う場合は`always_ask`。それ以外の場合は`always_allow`                                      | `allowed_domains`は結果の取得元サイトを制限するものであり、クエリの内容を制限するものではありません |
| データの読み取りのみを行うMCPツール   | `auto`。ツールセットの`configs`でツールごとに設定                                                                       | ツールセットのデフォルトは`always_ask`のままなので、MCPサーバーが後から追加したツールも承認を待ちます |
| データを変更するMCPツール        | `always_ask`                                                                                           | これはMCPツールセットのデフォルトです。そのままにしてください                           |
| カスタムツール               | 各呼び出しを実行するかどうかはお客様のコードが決定します                                                                           | 権限ポリシーは適用されません                                             |

[エージェントに最小限のツールセットを与える](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#give-the-agent-the-smallest-tool-set)のツールセットでは、これらのポリシーを適用しています。

[`auto`ポリシー](https://platform.claude.com/docs/ja/managed-agents/permission-policies#let-the-server-evaluate-each-call-with-auto)では、サーバーが呼び出しを実行するか、拒否するか、承認のために一時停止するかを判断します。長時間の実行ではすべての呼び出しを人が承認することはできないため、代わりにサーバーが各呼び出しをチェックします。`auto`は、制限されたネットワーキング、権限を絞ったキー、予算、アイドルセッションのアラートと組み合わせて使用してください。`auto`は人によるチェックポイントではないため、ツールの呼び出しを実行前に人がレビューする必要がある場合は、そのツールに`always_ask`を設定してください。

`auto`は、`user.message`イベントのテキストと`user.define_outcome`イベントの説明を、中継したエンドユーザーのテキストも含めて、お客様の指示として扱います。

一時停止したセッションは無期限に待機するため、無人のセッションには、一時停止した呼び出しに応答するか、セッションを中断するクライアントが必要です。

一時停止した各呼び出しは、許可する前にレビューしてください。人に見せずにすべての呼び出しを許可するクライアントは、`always_allow`と同じです。[確認リクエストに応答する](https://platform.claude.com/docs/ja/managed-agents/permission-policies#respond-to-confirmation-requests)と[各呼び出しがどのように評価されたかを確認する](https://platform.claude.com/docs/ja/managed-agents/permission-policies#see-how-each-call-was-evaluated)を参照してください。

## エージェントに最小限のツールセットを与える

`default_config.enabled`を`false`に設定し、[エージェントが必要とするツールのみを有効化](https://platform.claude.com/docs/ja/managed-agents/tools#enabling-only-specific-tools)してください。エージェントツールセットは、デフォルトで8つの組み込みツールすべてを有効にします。

| ツール                      | 機能                                     |
| ------------------------ | -------------------------------------- |
| `bash`                   | 許可されたホストへのリクエストを含め、あらゆるコマンドを実行します      |
| `write`、`edit`           | サンドボックス内のファイルを変更します                    |
| `read`、`glob`、`grep`     | サンドボックス内のファイルを読み取ります                   |
| `web_fetch`、`web_search` | Anthropicのサーバーを経由して、Webからページと検索結果を返します |

サポートエージェントには3つの組み込みツールが必要です。下書き用の`read`と`write`、およびヘルプセンター用の`web_fetch`です。注文の検索は、アプリケーションが実行する[カスタムツール](https://platform.claude.com/docs/ja/managed-agents/tools#custom-tools)`lookup_order`を通じて行います。注文APIのAPIキーはアプリケーションが保持しているため、エージェントには`bash`も認証情報も必要ありません。

次のサンプルでは、`allowed_domains`で`web_fetch`を`help.example.com`に制限しています。[リスクのある操作を承認する](https://platform.claude.com/docs/ja/managed-agents/secure-deployment#approve-risky-actions)の推奨どおり、`write`と`web_fetch`に`auto`を設定しています。顧客のチケットによってエージェントがこれらのツールを使用することになっても、エージェントにできるのはサンドボックス内のファイルの変更か、ヘルプセンターのページを開くことだけです。そのため、どちらのツールにも`always_ask`は必要ありません。また、このサンプルでは`default_config`に`always_ask`を設定しているため、後から独自のポリシーなしで有効にしたツールは`always_ask`を使用します。

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  tools='[
    {
      "type": "agent_toolset_20260401",
      "default_config": {
        "enabled": false,
        "permission_policy": {"type": "always_ask"}
      },
      "configs": [
        {"name": "read", "enabled": true, "permission_policy": {"type": "always_allow"}},
        {"name": "write", "enabled": true, "permission_policy": {"type": "auto"}},
        {
          "name": "web_fetch",
          "enabled": true,
          "allowed_domains": ["help.example.com"],
          "permission_policy": {"type": "auto"}
        }
      ]
    },
    {
      "type": "custom",
      "name": "lookup_order",
      "description": "Look up one order by its ID. Returns the status, the items, and the delivery date.",
      "input_schema": {
        "type": "object",
        "properties": {
          "order_id": {"type": "string", "description": "The order ID from the ticket"}
        },
        "required": ["order_id"]
      }
    }
  ]'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply agent.md
    ```

    <File filename="agent.md">
      ```markdown
      ---
      name: Support Agent
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
          default_config:
            enabled: false
            permission_policy:
              type: always_ask
          configs:
            - name: read
              enabled: true
              permission_policy:
                type: always_allow
            - name: write
              enabled: true
              permission_policy:
                type: auto
            - name: web_fetch
              enabled: true
              allowed_domains: [help.example.com]
              permission_policy:
                type: auto
        - type: custom
          name: lookup_order
          description: Look up one order by its ID. Returns the status, the items, and the delivery date.
          input_schema:
            type: object
            properties:
              order_id:
                type: string
                description: The order ID from the ticket
            required:
              - order_id
      ---
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  tools = [
      {
          "type": "agent_toolset_20260401",
          "default_config": {
              "enabled": False,
              "permission_policy": {"type": "always_ask"},
          },
          "configs": [
              {
                  "name": "read",
                  "enabled": True,
                  "permission_policy": {"type": "always_allow"},
              },
              {
                  "name": "write",
                  "enabled": True,
                  "permission_policy": {"type": "auto"},
              },
              {
                  "name": "web_fetch",
                  "enabled": True,
                  "allowed_domains": ["help.example.com"],
                  "permission_policy": {"type": "auto"},
              },
          ],
      },
      {
          "type": "custom",
          "name": "lookup_order",
          "description": "Look up one order by its ID. Returns the status, the items, and the delivery date.",
          "input_schema": {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string",
                      "description": "The order ID from the ticket",
                  },
              },
              "required": ["order_id"],
          },
      },
  ]
  ```

  ```typescript TypeScript
  const tools = [
    {
      type: "agent_toolset_20260401",
      default_config: {
        enabled: false,
        permission_policy: { type: "always_ask" }
      },
      configs: [
        {
          name: "read",
          enabled: true,
          permission_policy: { type: "always_allow" }
        },
        {
          name: "write",
          enabled: true,
          permission_policy: { type: "auto" }
        },
        {
          name: "web_fetch",
          enabled: true,
          allowed_domains: ["help.example.com"],
          permission_policy: { type: "auto" }
        }
      ]
    },
    {
      type: "custom",
      name: "lookup_order",
      description:
        "Look up one order by its ID. Returns the status, the items, and the delivery date.",
      input_schema: {
        type: "object",
        properties: {
          order_id: { type: "string", description: "The order ID from the ticket" }
        },
        required: ["order_id"]
      }
    }
  ] satisfies Anthropic.Beta.AgentCreateParams["tools"];
  ```

  ```csharp C#
  using System.Text.Json;
  using Anthropic.Models.Beta.Agents;
  using Tool = Anthropic.Models.Beta.Agents.Tool;

  Tool[] tools =
  [
      new BetaManagedAgentsAgentToolset20260401Params
      {
          Type = BetaManagedAgentsAgentToolset20260401ParamsType.AgentToolset20260401,
          DefaultConfig = new()
          {
              Enabled = false,
              PermissionPolicy = new BetaManagedAgentsAlwaysAskPolicy { Type = "always_ask" },
          },
          Configs =
          [
              new BetaManagedAgentsReadToolConfigParams
              {
                  Enabled = true,
                  PermissionPolicy = new BetaManagedAgentsAlwaysAllowPolicy { Type = "always_allow" },
              },
              new BetaManagedAgentsWriteToolConfigParams
              {
                  Enabled = true,
                  PermissionPolicy = new BetaManagedAgentsAutoPolicy(),
              },
              new BetaManagedAgentsWebFetchToolConfigParams
              {
                  Enabled = true,
                  AllowedDomains = ["help.example.com"],
                  PermissionPolicy = new BetaManagedAgentsAutoPolicy(),
              },
          ],
      },
      new BetaManagedAgentsCustomToolParams
      {
          Type = "custom",
          Name = "lookup_order",
          Description = "Look up one order by its ID. Returns the status, the items, and the delivery date.",
          InputSchema = new()
          {
              Properties = new Dictionary<string, JsonElement>
              {
                  ["order_id"] = JsonSerializer.SerializeToElement(
                      new { type = "string", description = "The order ID from the ticket" }
                  ),
              },
              Required = ["order_id"],
          },
      },
  ];
  ```

  ```go Go
  tools := []anthropic.BetaAgentNewParamsToolUnion{{
  	OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  		Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  		DefaultConfig: anthropic.BetaManagedAgentsAgentToolsetDefaultConfigParams{
  			Enabled: anthropic.Bool(false),
  			PermissionPolicy: anthropic.BetaManagedAgentsAgentToolsetDefaultConfigParamsPermissionPolicyUnion{
  				OfAlwaysAsk: &anthropic.BetaManagedAgentsAlwaysAskPolicyParam{
  					Type: anthropic.BetaManagedAgentsAlwaysAskPolicyTypeAlwaysAsk,
  				},
  			},
  		},
  		Configs: []anthropic.BetaManagedAgentsAgentToolConfigParamsUnion{
  			{OfRead: &anthropic.BetaManagedAgentsReadToolConfigParams{
  				Enabled: anthropic.Bool(true),
  				PermissionPolicy: anthropic.BetaManagedAgentsReadToolConfigParamsPermissionPolicyUnion{
  					OfAlwaysAllow: &anthropic.BetaManagedAgentsAlwaysAllowPolicyParam{
  						Type: anthropic.BetaManagedAgentsAlwaysAllowPolicyTypeAlwaysAllow,
  					},
  				},
  			}},
  			{OfWrite: &anthropic.BetaManagedAgentsWriteToolConfigParams{
  				Enabled: anthropic.Bool(true),
  				PermissionPolicy: anthropic.BetaManagedAgentsWriteToolConfigParamsPermissionPolicyUnion{
  					OfAuto: &anthropic.BetaManagedAgentsAutoPolicyParam{},
  				},
  			}},
  			{OfWebFetch: &anthropic.BetaManagedAgentsWebFetchToolConfigParams{
  				AllowedDomains: []string{"help.example.com"},
  				Enabled:        anthropic.Bool(true),
  				PermissionPolicy: anthropic.BetaManagedAgentsWebFetchToolConfigParamsPermissionPolicyUnion{
  					OfAuto: &anthropic.BetaManagedAgentsAutoPolicyParam{},
  				},
  			}},
  		},
  	},
  }, {
  	OfCustom: &anthropic.BetaManagedAgentsCustomToolParams{
  		Type:        anthropic.BetaManagedAgentsCustomToolParamsTypeCustom,
  		Name:        "lookup_order",
  		Description: "Look up one order by its ID. Returns the status, the items, and the delivery date.",
  		InputSchema: anthropic.BetaManagedAgentsCustomToolInputSchemaParam{
  			Properties: map[string]any{
  				"order_id": map[string]any{
  					"type":        "string",
  					"description": "The order ID from the ticket",
  				},
  			},
  			Required: []string{"order_id"},
  		},
  	},
  }}
  _ = tools
  ```

  ```java Java
  import com.anthropic.core.JsonValue;
  import com.anthropic.models.beta.agents.*;
  import java.util.List;
  import java.util.Map;

  var tools = List.of(
      AgentCreateParams.Tool.ofAgentToolset20260401(
          BetaManagedAgentsAgentToolset20260401Params.builder()
              .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
              .defaultConfig(
                  BetaManagedAgentsAgentToolsetDefaultConfigParams.builder()
                      .enabled(false)
                      .permissionPolicy(
                          BetaManagedAgentsAlwaysAskPolicy.builder()
                              .type(BetaManagedAgentsAlwaysAskPolicy.Type.ALWAYS_ASK)
                              .build()
                      )
                      .build()
              )
              .addConfig(
                  BetaManagedAgentsReadToolConfigParams.builder()
                      .enabled(true)
                      .permissionPolicy(
                          BetaManagedAgentsAlwaysAllowPolicy.builder()
                              .type(BetaManagedAgentsAlwaysAllowPolicy.Type.ALWAYS_ALLOW)
                              .build()
                      )
                      .build()
              )
              .addConfig(
                  BetaManagedAgentsWriteToolConfigParams.builder()
                      .enabled(true)
                      .permissionPolicy(BetaManagedAgentsAutoPolicy.builder().build())
                      .build()
              )
              .addConfig(
                  BetaManagedAgentsWebFetchToolConfigParams.builder()
                      .enabled(true)
                      .allowedDomains(List.of("help.example.com"))
                      .permissionPolicy(BetaManagedAgentsAutoPolicy.builder().build())
                      .build()
              )
              .build()
      ),
      AgentCreateParams.Tool.ofCustom(
          BetaManagedAgentsCustomToolParams.builder()
              .type(BetaManagedAgentsCustomToolParams.Type.CUSTOM)
              .name("lookup_order")
              .description("Look up one order by its ID. Returns the status, the items, and the delivery date.")
              .inputSchema(
                  BetaManagedAgentsCustomToolInputSchema.builder()
                      .properties(
                          BetaManagedAgentsCustomToolInputSchema.Properties.builder()
                              .putAdditionalProperty("order_id", JsonValue.from(Map.of(
                                  "type", "string",
                                  "description", "The order ID from the ticket")))
                              .build()
                      )
                      .addRequired("order_id")
                      .build()
              )
              .build()
      )
  );
  ```

  ```php PHP
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolsetDefaultConfigParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsAlwaysAllowPolicy;
  use Anthropic\Beta\Agents\BetaManagedAgentsAlwaysAskPolicy;
  use Anthropic\Beta\Agents\BetaManagedAgentsAutoPolicy;
  use Anthropic\Beta\Agents\BetaManagedAgentsCustomToolInputSchema;
  use Anthropic\Beta\Agents\BetaManagedAgentsCustomToolParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsReadToolConfigParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebFetchToolConfigParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsWriteToolConfigParams;

  $tools = [
      BetaManagedAgentsAgentToolset20260401Params::with(
          type: 'agent_toolset_20260401',
          defaultConfig: BetaManagedAgentsAgentToolsetDefaultConfigParams::with(
              enabled: false,
              permissionPolicy: BetaManagedAgentsAlwaysAskPolicy::with(type: 'always_ask'),
          ),
          configs: [
              BetaManagedAgentsReadToolConfigParams::with(
                  enabled: true,
                  permissionPolicy: BetaManagedAgentsAlwaysAllowPolicy::with(type: 'always_allow'),
              ),
              BetaManagedAgentsWriteToolConfigParams::with(
                  enabled: true,
                  permissionPolicy: BetaManagedAgentsAutoPolicy::with(),
              ),
              BetaManagedAgentsWebFetchToolConfigParams::with(
                  allowedDomains: ['help.example.com'],
                  enabled: true,
                  permissionPolicy: BetaManagedAgentsAutoPolicy::with(),
              ),
          ],
      ),
      BetaManagedAgentsCustomToolParams::with(
          type: 'custom',
          name: 'lookup_order',
          description: 'Look up one order by its ID. Returns the status, the items, and the delivery date.',
          inputSchema: BetaManagedAgentsCustomToolInputSchema::with(
              properties: ['order_id' => ['type' => 'string', 'description' => 'The order ID from the ticket']],
              required: ['order_id'],
          ),
      ),
  ];
  ```

  ```ruby Ruby
  tools = [
    {
      type: "agent_toolset_20260401",
      default_config: {
        enabled: false,
        permission_policy: {type: "always_ask"}
      },
      configs: [
        {
          name: "read",
          enabled: true,
          permission_policy: {type: "always_allow"}
        },
        {
          name: "write",
          enabled: true,
          permission_policy: {type: "auto"}
        },
        {
          name: "web_fetch",
          enabled: true,
          allowed_domains: ["help.example.com"],
          permission_policy: {type: "auto"}
        }
      ]
    },
    {
      type: "custom",
      name: "lookup_order",
      description: "Look up one order by its ID. Returns the status, the items, and the delivery date.",
      input_schema: {
        type: "object",
        properties: {order_id: {type: "string", description: "The order ID from the ticket"}},
        required: ["order_id"]
      }
    }
  ]
  ```
</CodeGroup>

[エージェントの更新](https://platform.claude.com/docs/ja/managed-agents/agent-setup#update-semantics)は`tools`配列全体を置き換えるため、保持したいすべてのエントリを送信してください。

エージェントの更新は新しいセッションにのみ反映されるため、デプロイメント、このエージェントを指定しているエージェント、既存のセッションも確認してください。

* デプロイメントはエージェントのバージョンを固定するため、各デプロイメントが新しいバージョンを指すようにしてください。
* このエージェントを[`subagents.predefined_agents`](https://platform.claude.com/docs/ja/managed-agents/multiagent-orchestration#list-the-subagents)または`workflows.predefined_agents`に指定しているエージェントは、固定したバージョンを維持するため、そのエージェントも更新してください。
* すでに存在するセッションの制限を強化するには、[そのセッションのツールを更新](https://platform.claude.com/docs/ja/managed-agents/session-operations#updating-the-agent-configuration)してください。セッションは`idle`である必要があり、更新は`tools`配列全体を置き換えます。マルチエージェントセッションでは、セッションが実行するエージェントのWebツールに設定した新しい`allowed_domains`および`blocked_domains`リストは、他のすべてのエージェントにも適用されます。これらは各エージェントの次のターンから適用されます。それらのエージェントの有効なツールと権限ポリシーは変わりません。それらを変更するには、各エージェントを更新してから新しいセッションを開始してください。

MCPサーバーとカスタムツールも、エージェントが必要とするものに限定してください。

* **MCPサーバー：** MCPツールセットは、デフォルトでサーバーが公開するすべてのツールを有効にします。`default_config.enabled`を`false`に設定して名前を指定したツールを有効にし、サーバーが後から追加したツールがオフのままになるようにしてください。エージェントが使用しないサーバーは削除してください。[MCPコネクタ](https://platform.claude.com/docs/ja/managed-agents/mcp-connector#configure-which-mcp-tools-are-available)を参照してください。
* **カスタムツール：** アプリケーションが実行し、権限ポリシーは適用されません。アプリケーションで各呼び出しの入力を検証し、ツールがアクセスできる範囲を制限してください。

## 信頼できない入力を強力なツールから遠ざける

エージェントが信頼できない入力、つまりチーム外の誰かが書けるテキストを読むときは、そのエージェントが保持するツールと認証情報を確認してください。このセクションでは2つの用語を使用します。

* **信頼できない入力：** Webページ、検索結果、サポートチケット、メール、リポジトリのファイル、アップロード、MCPサーバーの結果、中継したエンドユーザーのメッセージ。
* **強力なツール：** `bash`、`write`、`edit`、`web_fetch`、`web_search`、データを書き込むまたは送信するMCPツールとカスタムツール、および認証情報を使用するあらゆるツール。

信頼できない入力内のテキストは、エージェントが保持する強力なツールを使うようエージェントに指示できます。サポートエージェントはチケットを読むため、注文APIにはカスタムツール`lookup_order`を通じてのみアクセスします。アプリケーションは、注文がチケットの送信者のものであることを確認します。

| エージェントが読む入力         | エージェントが併せ持つ権限                                                                                                | 対処法                                                                                                                                                                                                                                      |
| ------------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| チケット、メール、アップロード     | 認証情報付きの`bash`                                                                                                | `bash`を、1つのことだけを行うカスタムツールに置き換えてください。エージェントが`bash`を保持する必要がある場合は、`always_ask`で各呼び出しを承認してください                                                                                                                                               |
| Webページまたは検索結果       | ファイルの書き込みまたはレコードの変更                                                                                          | Webツールをオフにするか、自社で運用している、または信頼しているサイトに制限してください                                                                                                                                                                                            |
| MCPの結果またはリポジトリのファイル | 書き込みを行うMCPツール                                                                                                | MCPツールセットを`always_ask`のままにし、エージェントが必要とするツールのみを有効にしてください                                                                                                                                                                                  |
| マウントされたGitHubリポジトリ  | あらゆるツール                                                                                                      | 信頼するリポジトリのみをマウントしてください。`read`を持つエージェントは、リポジトリの`.claude/skills`ディレクトリからスキルをエージェントの指示として、レビューの手順なしで読み込みます。[GitHubリポジトリからスキルを読み込む](https://platform.claude.com/docs/ja/managed-agents/skills#load-skills-from-a-github-repository)を参照してください |
| あらゆる信頼できない入力        | [メモリストア](https://platform.claude.com/docs/ja/managed-agents/memory#attach-a-memory-store-to-a-session)への書き込み | エージェントが書き込む必要がない限り、ストアを`read_only`としてアタッチしてください。デフォルトは`read_write`で、後続のセッションは保存されたテキストを信頼できるメモリとして読み込みます                                                                                                                                 |

クラウド環境では、`read`でファイルを読むと、`CLAUDE.md`および`AGENTS.md`ファイルも指示として読み込まれる場合があります。これらは、ファイルのディレクトリとその親ディレクトリから、サンドボックスの作業ディレクトリまで読み込まれます。`@docs/setup.md`のように`@`とパスで参照されるファイルも、最大5階層の参照まで読み込まれます。参照は、`@/etc/hosts`のようにサンドボックス内のどこでも指すことができます。`read`を無効にする以外にこれをオフにする設定はないため、チーム外の誰かが書き込めるリポジトリ、パッケージ、アーカイブは信頼できない入力として扱ってください。

エージェントが信頼できない入力を読み、かつ操作も行う必要がある場合、このガイドでは3つの設計のいずれかを推奨します。

* **読み取りと操作を分離する。** 1つのマルチエージェントセッション内で、[リードエージェント](https://platform.claude.com/docs/ja/managed-agents/multiagent-orchestration#list-the-subagents)が、Webを読むフェッチャーと、ファイルやレコードを変更するライターにタスクを割り当てます。
* **エージェントに1つの限定的なカスタムツールを与える。** アプリケーションがツールを実行し、入力をチェックし、認証情報を保持します。サポートエージェントは、分離ではなくこの設計を使用しています。[セッションを一時停止させるツール呼び出しに応答する](https://platform.claude.com/docs/ja/managed-agents/events-and-streaming#answer-tool-calls-that-pause-the-session)を参照してください。
* **人を介在させる。** 強力なツールに`always_ask`を使用し、各呼び出しを人が承認するようにします。

分離では3つのエージェントを使用します。

| エージェント                | 読むもの                        | 保持するもの                                                          | 渡すもの                  |
| --------------------- | --------------------------- | --------------------------------------------------------------- | --------------------- |
| リード（セッションが実行するエージェント） | お客様のメッセージと、他のエージェントから返されたもの | 組み込みツールなし。`subagents.predefined_agents`リストでフェッチャーとライターを指定       | 各エージェントへのタスク          |
| フェッチャー                | Webページと検索結果                 | `web_fetch`と`web_search`のみ（それぞれ`allowed_domains`付き）             | システムプロンプトで指定した形式の短い結果 |
| ライター                  | リードからのタスク                   | ファイルの書き込み、コマンドの実行、レコードの変更を行うツール（`auto`または`always_ask`）。Webツールなし | その結果                  |

フェッチャーの結果は信頼できないページから構築されており、リードはそのテキストをライターに渡す可能性があります。ライターのツールは`auto`または`always_ask`のままにしてください。フェッチャーは、読んだ内容の一部を`web_fetch`リスト上のサイトや、クエリを通じて検索プロバイダーに送信する可能性が依然としてあります。

1つのマルチエージェントセッション内のエージェントは、[サンドボックス](https://platform.claude.com/docs/ja/managed-agents/multiagent-orchestration#how-it-works)、そのファイル、ボールトの認証情報を共有するため、この分離で分けられるのはツールと会話のみです。より強力な分離を行うには、別々の環境とボールトを持つ2つのセッションを使用してください。2つのセッション間では、注文IDなどの固定フィールドのみをアプリケーションが受け渡すようにしてください。

## 制限と停止手段を設定する

各セッションの作成時に予算を設定し、エージェントを停止する方法を事前に決めておいてください。

| 制御                                                                                                                  | 機能                                                                                                                                                                                                                                                                                        |
| ------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| セッション予算                                                                                                             | 公開定価に基づく支出の上限。上限に達すると、セッションと各[スレッド](https://platform.claude.com/docs/ja/managed-agents/session-threads)が一時停止します。進行中のリクエストは完了でき、そのツール呼び出しも実行されるため、支出が上限を超える場合があります。[セッションが予算に達したとき](https://platform.claude.com/docs/ja/managed-agents/budgets#when-a-session-reaches-its-budget)を参照してください |
| デプロイメント予算                                                                                                           | 同じ上限を、デプロイメントが開始する各セッションに適用します                                                                                                                                                                                                                                                            |
| [`user.interrupt`イベント](https://platform.claude.com/docs/ja/managed-agents/events-and-streaming#interrupt-the-agent) | モデルの応答を即座に停止します。実行中のツール呼び出しは先に完了する場合があります。ワークフロー実行によって`running`のまま維持されない限り、セッションは`idle`になり、次のメッセージで再開します。中断によってワークフロー実行が終了することはありません                                                                                                                                                      |
| セッションのアーカイブまたは削除                                                                                                    | アーカイブは履歴を保持し、新しいイベントをブロックします。削除はレコード、イベント、サンドボックスを削除します                                                                                                                                                                                                                                   |
| デプロイメントの一時停止またはアーカイブ                                                                                                | 一時停止は新しいスケジュール実行を停止しますが、手動実行は引き続き許可します。アーカイブはスケジュールを完全に終了します。すでに実行中のセッションは実行を続けます                                                                                                                                                                                                         |
| ボールトまたは認証情報のアーカイブまたは削除                                                                                              | 再起動なしで、実行中のセッションからシークレットを削除します。遅延を考慮してください。セッションは実行を続けるため、それらも中断してください。エージェントがシークレットを使ってすでにフェッチしたトークンは、サンドボックス内に残ります                                                                                                                                                                      |

実行中のエージェントを停止するには、次の手順に従ってください。

1. `user.interrupt`を単独で送信します。
2. スケジュールされたエージェントの場合は、新しいスケジュール実行が開始されないようにデプロイメントも一時停止します。スケジュールを完全に終了するには、デプロイメントをアーカイブします。
3. キーが漏洩した可能性がある場合は、キーを発行したサービスでローテーションします。
4. エージェントにワークフロー実行が開いている場合は、中断では実行が終了しないため、それらを停止するよう求める`user.message`も送信します。先にキャンセルすべきツール呼び出しについては、[実行が開いているセッションを中断する](https://platform.claude.com/docs/ja/managed-agents/workflow-runs#interrupt-a-session-with-runs-open)を参照してください。
5. セッションが`idle`になるまで待ちます。実行中のセッションはアーカイブも削除もできません。
6. 履歴を保持するためにセッションをアーカイブします。履歴が不要になったら削除します。

中断しても、エージェントがすでに実行または送信したことは元に戻りません。エージェントをアーカイブしても、その実行中のセッションは停止しません。

予算の`max_list_cost.amount`は、米国セント単位の整数を文字列で記述したものなので、`"125"`は$1.25を意味します。[セッション作成時に予算を設定する](https://platform.claude.com/docs/ja/managed-agents/budgets#set-a-budget-at-session-creation)を参照してください。

予算なしで作成されたセッションに予算を追加することはできません。上限を変更または削除するには、[予算に達したセッションを再開する](https://platform.claude.com/docs/ja/managed-agents/budgets#resume-a-session-at-its-budget)を参照してください。セッションの上限を削除した後は、新しい上限を設定できません。

予算は支出に上限を設けますが、上限に達するまでにエージェントが行うことは制限しません。信頼レベルの異なるワークロードを分離するには、別々の[ワークスペース](https://platform.claude.com/docs/ja/manage-claude/workspaces)を使用してください。複数のワークスペースにアクセスできるキーはそのいずれでも操作できるため、各ワークロードには1つのワークスペースにスコープされたAPIキーを与えてください。

[セッション予算](https://platform.claude.com/docs/ja/managed-agents/budgets)、[セッション操作](https://platform.claude.com/docs/ja/managed-agents/session-operations#archiving-a-session)、[スケジュールされたデプロイメント](https://platform.claude.com/docs/ja/managed-agents/scheduled-deployments#managing-deployment-lifecycle)を参照してください。

## 次のステップ

<CardGroup cols={2}>
  <Card title="クラウド環境のセットアップ" icon="cloud" href="https://platform.claude.com/docs/ja/managed-agents/environments">
    ネットワーキングモード、許可されたホスト、パッケージマネージャー。
  </Card>

  <Card title="権限ポリシー" icon="check" href="https://platform.claude.com/docs/ja/managed-agents/permission-policies">
    承認ポリシーと確認リクエスト。
  </Card>

  <Card title="ボールトによる認証" icon="lock" href="https://platform.claude.com/docs/ja/managed-agents/vaults">
    認証情報の種類、注入場所、ローテーション。
  </Card>

  <Card title="セッション予算" icon="coins" href="https://platform.claude.com/docs/ja/managed-agents/budgets">
    上限、予算に達したときの再開、デプロイメントの予算。
  </Card>
</CardGroup>
