---
title: 웹 검색 및 웹 가져오기 도메인 제한
url: https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions
description: 에이전트의 웹 검색 및 웹 가져오기 도구가 접근할 수 있는 사이트를 제어하고, 가져온 콘텐츠의 양을 제한하며, 검색 결과를 현지화합니다.
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

에이전트의 웹 도구가 접근할 수 있는 사이트를 제어하려면 [에이전트 도구 세트](https://platform.claude.com/docs/ko/managed-agents/tools#configuring-the-toolset)의 `web_search` 및 `web_fetch` 항목에 도메인 목록을 설정하세요. 이러한 각 `configs` (csharp, go: `Configs`) 항목은 다음 두 목록 중 하나를 받습니다.

* **`allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`):** 도구는 이 호스트에만 접근할 수 있습니다.
* **`blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`):** 도구는 이 호스트에 절대 접근할 수 없습니다.

각 도구는 자체 목록을 가지므로 `web_search`와 `web_fetch`에 서로 다른 제한을 적용할 수 있습니다.

<Note>
  `web_search`와 `web_fetch`는 샌드박스가 아닌 Anthropic의 서버에서 실행됩니다. `limited` [네트워킹](https://platform.claude.com/docs/ko/managed-agents/environments#networking)을 사용하는 클라우드 환경은 해당 환경의 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`)도 이 도구들에 적용합니다. [에이전트에 도메인 목록 설정](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#set-domain-lists-on-an-agent)을 참조하세요. `unrestricted` 네트워킹과 자체 호스팅 환경은 이 도구들을 제한하지 않습니다. 도구별 목록은 이 도구들을 추가로 제한합니다. Claude Console의 조직 수준 웹 검색 및 웹 가져오기 설정은 Messages API에 적용됩니다. Managed Agents 세션에는 적용되지 않습니다.
</Note>

## 에이전트에 도메인 목록 설정

다음 예제는 `web_search`를 두 사이트로 제한하고 `web_fetch`에 대해 하나의 호스트를 차단하는 에이전트를 생성합니다. 또한 [설정](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#settings)에서 설명하는 `user_location` (java, php: `userLocation`; csharp, go: `UserLocation`) 및 `max_content_tokens` (java, php: `maxContentTokens`; csharp, go: `MaxContentTokens`)도 설정합니다. 그런 다음 예제는 응답의 `configs` (csharp, go: `Configs`) 배열을 출력합니다.

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  agent=$(curl -fsSL https://api.anthropic.com/v1/agents \
    -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": "Research Agent",
      "model": "claude-opus-5-5",
      "tools": [
        {
          "type": "agent_toolset_20260401",
          "configs": [
            {
              "type": "web_search",
              "name": "web_search",
              "allowed_domains": ["docs.example.com", "arxiv.org"],
              "user_location": {
                "type": "approximate",
                "country": "US",
                "timezone": "America/Los_Angeles"
              }
            },
            {
              "type": "web_fetch",
              "name": "web_fetch",
              "blocked_domains": ["ads.example.com"],
              "max_content_tokens": 50000
            }
          ]
        }
      ]
    }'
  )
  jq '.tools[0].configs' <<< "$agent"
  ```

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

    <File filename="agent.md">
      ```markdown
      ---
      name: Research Agent
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
          configs:
            - type: web_search
              name: web_search
              allowed_domains: [docs.example.com, arxiv.org]
              user_location:
                type: approximate
                country: US
                timezone: America/Los_Angeles
            - type: web_fetch
              name: web_fetch
              blocked_domains: [ads.example.com]
              max_content_tokens: 50000
      ---
      ```
    </File>

    [`ant apply`](https://platform.claude.com/docs/ko/cli-sdks-libraries/cli/apply)는 에이전트를 생성하고 `configs` 배열이 아닌 에이전트의 ID를 출력합니다.
  </CodeGroupItem>

  ```python Python
  client = Anthropic()

  agent = client.beta.agents.create(
      name="Research Agent",
      model="claude-opus-5-5",
      tools=[
          {
              "type": "agent_toolset_20260401",
              "configs": [
                  {
                      "name": "web_search",
                      "allowed_domains": ["docs.example.com", "arxiv.org"],
                      "user_location": {
                          "type": "approximate",
                          "country": "US",
                          "timezone": "America/Los_Angeles",
                      },
                  },
                  {
                      "name": "web_fetch",
                      "blocked_domains": ["ads.example.com"],
                      "max_content_tokens": 50_000,
                  },
              ],
          }
      ],
  )

  for tool in agent.tools:
      if tool.type == "agent_toolset_20260401":
          print(json.dumps([config.to_dict() for config in tool.configs], indent=2))
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const agent = await client.beta.agents.create({
    name: "Research Agent",
    model: "claude-opus-5-5",
    tools: [
      {
        type: "agent_toolset_20260401",
        configs: [
          {
            name: "web_search",
            allowed_domains: ["docs.example.com", "arxiv.org"],
            user_location: {
              type: "approximate",
              country: "US",
              timezone: "America/Los_Angeles"
            }
          },
          {
            name: "web_fetch",
            blocked_domains: ["ads.example.com"],
            max_content_tokens: 50_000
          }
        ]
      }
    ]
  });

  for (const tool of agent.tools) {
    if (tool.type === "agent_toolset_20260401") {
      console.log(JSON.stringify(tool.configs, null, 2));
    }
  }
  ```

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

  AnthropicClient client = new();

  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Research Agent",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      Tools =
      [
          new BetaManagedAgentsAgentToolset20260401Params
          {
              Type = BetaManagedAgentsAgentToolset20260401ParamsType.AgentToolset20260401,
              Configs =
              [
                  new BetaManagedAgentsWebSearchToolConfigParams
                  {
                      AllowedDomains = ["docs.example.com", "arxiv.org"],
                      UserLocation = new()
                      {
                          Country = "US",
                          Timezone = "America/Los_Angeles",
                      },
                  },
                  new BetaManagedAgentsWebFetchToolConfigParams
                  {
                      BlockedDomains = ["ads.example.com"],
                      MaxContentTokens = 50_000,
                  },
              ],
          },
      ],
  });

  JsonSerializerOptions jsonOptions = new() { WriteIndented = true };
  foreach (var tool in agent.Tools)
  {
      if (tool.TryPickBetaManagedAgentsAgentToolset20260401(out var toolset))
      {
          Console.WriteLine(JsonSerializer.Serialize(toolset.Configs, jsonOptions));
      }
  }
  ```

  ```go Go
  client := anthropic.NewClient()
  ctx := context.Background()

  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Research Agent",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	Tools: []anthropic.BetaAgentNewParamsToolUnion{{
  		OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  			Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  			Configs: []anthropic.BetaManagedAgentsAgentToolConfigParamsUnion{
  				{OfWebSearch: &anthropic.BetaManagedAgentsWebSearchToolConfigParams{
  					AllowedDomains: []string{"docs.example.com", "arxiv.org"},
  					UserLocation: anthropic.BetaManagedAgentsUserLocationParam{
  						Country:  anthropic.String("US"),
  						Timezone: anthropic.String("America/Los_Angeles"),
  					},
  				}},
  				{OfWebFetch: &anthropic.BetaManagedAgentsWebFetchToolConfigParams{
  					BlockedDomains:   []string{"ads.example.com"},
  					MaxContentTokens: anthropic.Int(50000),
  				}},
  			},
  		},
  	}},
  })
  if err != nil {
  	panic(err)
  }

  for _, tool := range agent.Tools {
  	switch toolset := tool.AsAny().(type) {
  	case anthropic.BetaManagedAgentsAgentToolset20260401:
  		configs := make([]json.RawMessage, len(toolset.Configs))
  		for i, config := range toolset.Configs {
  			configs[i] = json.RawMessage(config.RawJSON())
  		}
  		output, err := json.MarshalIndent(configs, "", "  ")
  		if err != nil {
  			panic(err)
  		}
  		fmt.Println(string(output))
  	}
  }
  ```

  ```java Java
  import com.anthropic.models.beta.agents.AgentCreateParams;
  import com.anthropic.models.beta.agents.BetaManagedAgentsAgentToolset20260401Params;
  import com.anthropic.models.beta.agents.BetaManagedAgentsModel;
  import com.anthropic.models.beta.agents.BetaManagedAgentsUserLocation;
  import com.anthropic.models.beta.agents.BetaManagedAgentsWebFetchToolConfigParams;
  import com.anthropic.models.beta.agents.BetaManagedAgentsWebSearchToolConfigParams;

  void main() {
      var client = AnthropicOkHttpClient.fromEnv();

      var agent = client.beta().agents().create(AgentCreateParams.builder()
          .name("Research Agent")
          .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
          .addTool(BetaManagedAgentsAgentToolset20260401Params.builder()
              .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
              .addConfig(BetaManagedAgentsWebSearchToolConfigParams.builder()
                  .allowedDomains(List.of("docs.example.com", "arxiv.org"))
                  .userLocation(BetaManagedAgentsUserLocation.builder()
                      .country("US")
                      .timezone("America/Los_Angeles")
                      .build())
                  .build())
              .addConfig(BetaManagedAgentsWebFetchToolConfigParams.builder()
                  .blockedDomains(List.of("ads.example.com"))
                  .maxContentTokens(50_000)
                  .build())
              .build())
          .build());

      for (var tool : agent.tools()) {
          if (tool.isAgentToolset20260401()) {
              var configs = tool.asAgentToolset20260401().configs();
              IO.println(ObjectMappers.jsonMapper().valueToTree(configs));
          }
      }
  }
  ```

  ```php PHP
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401;
  use Anthropic\Beta\Agents\BetaManagedAgentsAgentToolset20260401Params;
  use Anthropic\Beta\Agents\BetaManagedAgentsUserLocation;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebFetchToolConfigParams;
  use Anthropic\Beta\Agents\BetaManagedAgentsWebSearchToolConfigParams;
  // ...

  $client = new Client();

  $agent = $client->beta->agents->create(
      name: 'Research Agent',
      model: 'claude-opus-5-5',
      tools: [
          BetaManagedAgentsAgentToolset20260401Params::with(
              type: 'agent_toolset_20260401',
              configs: [
                  BetaManagedAgentsWebSearchToolConfigParams::with(
                      allowedDomains: ['docs.example.com', 'arxiv.org'],
                      userLocation: BetaManagedAgentsUserLocation::with(
                          country: 'US',
                          timezone: 'America/Los_Angeles',
                      ),
                  ),
                  BetaManagedAgentsWebFetchToolConfigParams::with(
                      blockedDomains: ['ads.example.com'],
                      maxContentTokens: 50_000,
                  ),
              ],
          ),
      ],
  );

  foreach ($agent->tools as $tool) {
      if ($tool instanceof BetaManagedAgentsAgentToolset20260401) {
          echo json_encode($tool->configs, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES), PHP_EOL;
      }
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  agent = client.beta.agents.create(
    name: "Research Agent",
    model: "claude-opus-5-5",
    tools: [
      {
        type: :agent_toolset_20260401,
        configs: [
          {
            name: :web_search,
            allowed_domains: ["docs.example.com", "arxiv.org"],
            user_location: {type: :approximate, country: "US", timezone: "America/Los_Angeles"}
          },
          {
            name: :web_fetch,
            blocked_domains: ["ads.example.com"],
            max_content_tokens: 50_000
          }
        ]
      }
    ]
  )

  case agent.tools.first
  in Anthropic::Models::Beta::BetaManagedAgentsAgentToolset20260401 => toolset
    puts JSON.pretty_generate(toolset.configs.map(&:to_h))
  end
  ```
</CodeGroup>

`limited` [네트워킹](https://platform.claude.com/docs/ko/managed-agents/environments#networking)을 사용하는 클라우드 환경에서는 환경의 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`)도 `web_search`와 `web_fetch`에 적용됩니다. 활성화된 웹 도구의 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)에 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) 범위에 속하지 않는 항목이 있으면 세션 생성이 400 오류로 실패합니다. 그러한 항목을 추가하는 세션 업데이트도 마찬가지입니다. 이를 해결하려면 해당 호스트를 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`)에 추가하거나 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)에서 해당 항목을 제거하세요. 런타임에 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`)와 일치하지 않는 호스트의 URL에 대한 `web_fetch` 호출은 `url_not_allowed` 오류 결과를 반환합니다. `web_search`는 그러한 호스트의 결과를 생략합니다. 두 목록은 일치 방식이 다릅니다. 도구의 항목은 하위 도메인까지 포함하지만, `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) 항목은 `*.`로 시작하지 않는 한 정확히 하나의 호스트와만 일치합니다. 예를 들어, 도구 항목 `docs.example.com`은 `["example.com"]`인 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`) 범위에는 속하지 않지만, `["docs.example.com"]` 또는 `["*.example.com"]` 범위에는 속합니다.

Claude Console에서는 에이전트 양식의 **Built-in tools** 카드에 있는 `web_search` 및 `web_fetch` 행에서 허용 또는 차단할 도메인을 설정하세요. `max_content_tokens`와 `user_location`은 에이전트 구성의 **Raw** 보기에서 설정하세요.

## 설정

`enabled` (csharp, go: `Enabled`) 및 `permission_policy` (java, php: `permissionPolicy`; csharp, go: `PermissionPolicy`) 외에도 웹 도구 항목은 다음 설정을 받습니다.

| 설정                                                                                   | 적용 대상                     | 설명                                                                                                                                                                 |
| ------------------------------------------------------------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)        | `web_search`, `web_fetch` | 도구가 접근할 수 있는 유일한 호스트입니다. [도메인 목록 규칙](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#domain-list-rules)을 참조하세요.                          |
| `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`)        | `web_search`, `web_fetch` | 도구가 접근할 수 없는 호스트입니다. [도메인 목록 규칙](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#domain-list-rules)을 참조하세요.                              |
| `max_content_tokens` (java, php: `maxContentTokens`; csharp, go: `MaxContentTokens`) | `web_fetch`               | 컨텍스트에 포함되는 가져온 페이지 콘텐츠의 양을 제한합니다. 양의 정수여야 합니다. [콘텐츠 제한](https://platform.claude.com/docs/ko/agents-and-tools/tool-use/web-fetch-tool#content-limits)을 참조하세요.       |
| `user_location` (java, php: `userLocation`; csharp, go: `UserLocation`)              | `web_search`              | 검색 결과를 현지화합니다. Messages API의 [`user_location`](https://platform.claude.com/docs/ko/agents-and-tools/tool-use/web-search-tool#localization) 매개변수와 동일한 필드를 가진 객체입니다. |

SDK에서 이러한 항목의 타입이 지정되는 방식은 [SDK의 구성 항목 타입](https://platform.claude.com/docs/ko/managed-agents/tools#config-entry-types-in-the-sdks)을 참조하세요.

## 도메인이 허용되지 않는 경우

`web_search`는 도메인 목록이 허용하지 않는 결과를 제외합니다. 도메인 목록이 허용하지 않는 URL에 대한 `web_fetch` 호출은 에이전트에 오류 결과를 반환합니다. `agent.tool_result` 이벤트에는 `is_error: true`가 있으며, 그 콘텐츠에 오류 코드 `url_not_allowed`가 명시됩니다.

## 도메인 목록 규칙

이 규칙은 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)와 `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`)에 동일하게 적용됩니다. 규칙을 위반하는 요청은 [검증 오류](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#validation-errors)에서 설명하는 대로 거부됩니다.

* **항목당 하나의 목록:** 항목에는 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) 또는 `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) 중 하나만 설정하고, 둘 다 설정하지 마세요.
* **목록 크기:** 각 목록은 1개에서 64개의 도메인을 포함하며, 각 도메인은 1자에서 255자입니다.
* **빈 목록 불가:** 제한을 적용하지 않으려면 필드를 생략하거나 `null`을 보내세요.
* **중복 불가:** 도메인은 목록에 한 번만 나타날 수 있습니다. `www.example.com`과 `example.com`은 서로 다른 도메인으로 간주됩니다.

### 나열된 도메인이 일치하는 대상

나열된 도메인은 해당 호스트와 그 모든 하위 도메인에 일치합니다. `example.com`은 `docs.example.com`을 포함하지만, `docs.example.com`은 `example.com`이나 `api.example.com`을 포함하지 않습니다.

앞에 붙는 `www.`는 다른 하위 도메인과 마찬가지로 하위 도메인이므로 `www.example.com`은 `example.com`을 포함하지 않습니다. 둘 다 포함하려면 `www.`가 없는 도메인을 나열하세요.

호스트 이름은 대소문자를 구분하지 않고 비교됩니다.

### 도메인 형식

각 도메인은 등록 가능한 도메인 이름 또는 그 하위 도메인이며, 일반 호스트 이름으로 작성합니다. ASCII 문자, 숫자, 하이픈, 밑줄, 점을 포함할 수 있습니다. 끝에 붙는 `/` 하나는 무시됩니다.

| 허용되지 않음                                   | 예시                       | 대신 사용                      |
| ----------------------------------------- | ------------------------ | -------------------------- |
| 스킴                                        | `https://example.com`    | `example.com`              |
| 포트                                        | `example.com:443`        | `example.com`              |
| 와일드카드                                     | `*.example.com`          | `example.com`              |
| `web_fetch` 도메인의 경로                       | `example.com/*`          | `example.com`              |
| IPv4, IPv6, 대괄호 표기, 숫자 축약형 등 모든 형태의 IP 주소 | `127.1`                  | 사이트의 도메인 이름                |
| 단독 최상위 도메인 또는 레지스트리 접미사                   | `com`, `co.uk`, `gov.uk` | `example.co.uk`와 같은 전체 도메인 |
| 단일 레이블 이름                                 | `intranet`               | `example.co.uk`와 같은 전체 도메인 |
| 국제화 도메인 이름과 같은 비ASCII 문자                  |                          | `xn--`(Punycode) 형식        |

자격 증명이나 공백이 포함된 도메인, 또는 레이블이 하이픈으로 시작하거나 끝나는 도메인도 거부됩니다. `localhost`와 `.localhost`, `.local`, `.internal`, `.localdomain`, `.invalid`로 끝나는 호스트도 거부됩니다.

### 웹 검색 도메인의 경로 접미사

`web_search` 도메인에는 `example.com/blog`와 같은 경로 접미사를 붙일 수 있습니다. 경로에는 공백, `?`, `#`, 또는 `$ , | ^ !` 문자를 포함할 수 없습니다.

`web_search`에서도 일반 호스트 이름을 사용하는 것이 좋습니다. 검색 제공자는 경로 접미사를 엄격한 호스트 규칙이 아닌 URL 패턴으로 일치시킵니다.

## 검증 오류

API는 [에이전트를 생성](https://platform.claude.com/docs/ko/managed-agents/agent-setup#create-an-agent)하거나 [에이전트를 업데이트](https://platform.claude.com/docs/ko/managed-agents/agent-setup#update-an-agent)할 때 이러한 설정을 검증합니다. 또한 `tools` (csharp, go: `Tools`)를 제공하는 세션을 생성하거나 업데이트할 때도 검증합니다.

형식 및 제한 위반은 400 `invalid_request_error`로 거부됩니다.

| 위반                  | 오류 메시지                                                                                                                           |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| 한 항목에 두 목록이 모두 설정됨. | `Only one of allowed_domains or blocked_domains may be set.`를 포함합니다.                                                             |
| 목록이 비어 있음.          | `allowed_domains: Empty list of domains is ambiguous. Provide at least one domain or null.`을 포함합니다.                              |
| 도메인이 형식 규칙을 위반함.    | 도메인의 목록과 0부터 시작하는 위치를 명시합니다. 예: `allowed_domains.0: IP addresses are not supported; provide a plain hostname like "example.com"` |

같은 요청에서 API는 검색 및 가져오기 제공자에 의존하는 세 가지 설정도 거부합니다.

* Anthropic의 크롤러가 접근하도록 허용되지 않은 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)의 도메인.
* 검색 제공자가 지원하지 않는 `user_location.country`. 메시지는 `user_location.country: not a country the search provider supports`로 끝납니다.
* 유효한 IANA 이름이 아닌 `user_location.timezone`.

`limited` [네트워킹](https://platform.claude.com/docs/ko/managed-agents/environments#networking)을 사용하는 클라우드 환경에서는 세션 생성 및 업데이트 시 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`)를 환경의 `allowed_hosts` (java, php: `allowedHosts`; csharp, go: `AllowedHosts`)와도 대조하여 확인합니다. [에이전트에 도메인 목록 설정](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#set-domain-lists-on-an-agent)의 규칙을 참조하세요.

### 허용되었던 설정이 더 이상 유효하지 않은 경우

세션은 도구를 처음 초기화할 때 구성을 다시 확인합니다. 이전에 허용되었던 설정이 그 시점에 더 이상 유효하지 않으면 세션은 [`session.error`](https://platform.claude.com/docs/ko/managed-agents/events-and-streaming) 이벤트를 발생시킵니다. 그런 다음 재시도 없이 `idle` 상태로 돌아갑니다.

세션을 계속하려면 다음을 수행하세요.

1. [세션의 도구를 업데이트](https://platform.claude.com/docs/ko/managed-agents/session-operations#updating-the-agent-configuration)하여 설정을 수정합니다.
2. 새 세션이 수정된 구성으로 시작되도록 에이전트도 업데이트합니다.
3. 새 `user.message`를 보냅니다.

## 멀티에이전트 및 결과 기반 세션

[멀티에이전트 세션](https://platform.claude.com/docs/ko/managed-agents/multiagent-orchestration)에서는 스레드에 적용되는 모든 도메인 목록이 동시에 적용됩니다. `subagents` (csharp, go: `Subagents`)의 `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) 목록에 있는 에이전트는 세 가지 목록 집합의 제약을 받습니다.

* 자신의 `allowed_domains` 및 `blocked_domains`
* 자신을 호출한 모든 에이전트의 목록
* 세션이 실행하는 에이전트의 현재 목록

설정은 다음과 같이 결합됩니다.

| 설정                                    | 결합 방식                                                                                                              |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| `allowed_domains`                     | 모든 목록이 해당 호스트를 포함하는 경우에만 도구가 그 호스트에 접근할 수 있습니다.                                                                    |
| `blocked_domains`                     | 목록이 합산됩니다.                                                                                                         |
| `max_content_tokens`, `user_location` | 결합되지 않습니다. 스레드는 자체 도구 구성에 값이 설정되어 있으면 그 값을 사용합니다. 그렇지 않으면 자신을 호출한 에이전트의 값을 사용하고, 그것도 없으면 세션 에이전트의 현재 구성의 값을 사용합니다. |

따라서 나열된 에이전트는 도구가 접근하는 범위를 좁힐 수는 있지만 넓힐 수는 없습니다.

* `blocked_domains`를 설정한 나열된 에이전트는 세션 에이전트의 `allowed_domains`를 유지하고 그 안에서 해당 호스트를 차단합니다.
* 자체 `allowed_domains`를 설정한 나열된 에이전트는 자신의 목록과 세션 에이전트의 목록이 모두 포함하는 호스트에만 접근할 수 있습니다.

`subagents` (csharp, go: `Subagents`)의 `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) 목록에 있는 `{"type": "self"}` 항목은 자체 웹 설정이 없으며 세션 에이전트의 현재 설정을 따릅니다.

결합된 `allowed_domains` 목록에 공통 도메인이 없으면 해당 에이전트에서 도구는 계속 사용 가능하지만 모든 호출이 실패합니다. 각 호출은 허용된 도메인이 없다는 내용의 `url_not_allowed` 오류를 반환합니다. 도구 설명도 모델에 같은 내용을 알려 줍니다. 이를 방지하려면 각 나열된 에이전트의 `allowed_domains`를 세션 에이전트의 `allowed_domains` 안에 유지하세요.

[결과 기반 세션](https://platform.claude.com/docs/ko/managed-agents/define-outcomes)의 채점기는 이러한 설정과 관계없이 `web_search`와 `web_fetch` 없이 실행됩니다.

## 세션 중간에 목록 변경

[도구를 업데이트](https://platform.claude.com/docs/ko/managed-agents/session-operations#updating-the-agent-configuration)하여 유휴 세션의 목록을 변경할 수 있습니다. 새 목록은 세션의 나머지 부분에 적용됩니다.

멀티에이전트 세션에서는 모든 스레드가 다음 턴부터 새 목록을 적용합니다. `subagents` (csharp, go: `Subagents`)의 `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) 목록에 있는 에이전트의 경우, 업데이트는 해당 에이전트 자체의 목록을 변경하지 않습니다. 그 목록은 세션이 생성될 때 에이전트 정의에서 설정한 대로 유지됩니다.

## Messages API 도구와의 차이점

이러한 설정은 Messages API 서버 도구의 [도메인 필터링](https://platform.claude.com/docs/ko/agents-and-tools/tool-use/server-tools#domain-filtering)과 동일한 `allowed_domains` (java, php: `allowedDomains`; csharp, go: `AllowedDomains`) 및 `blocked_domains` (java, php: `blockedDomains`; csharp, go: `BlockedDomains`) 필드를 사용합니다. Managed Agents는 네 가지 점에서 다릅니다.

* 각 목록은 [64개 도메인으로 제한](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#domain-list-rules)됩니다.
* `web_fetch`에 나열된 도메인에는 [경로를 포함할 수 없습니다](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#domain-format).
* 도메인은 [ASCII여야 합니다](https://platform.claude.com/docs/ko/managed-agents/tools-web-restrictions#domain-format). Messages API는 유니코드 항목을 허용하지만 사용하지 않을 것을 권장합니다.
* `max_uses` (java, php: `maxUses`; csharp, go: `MaxUses`), `citations` (csharp, go: `Citations`), `cache_control` (java, php: `cacheControl`; csharp, go: `CacheControl`)은 도구 세트에서 사용할 수 없습니다.

## 다음 단계

<CardGroup cols={2}>
  <Card title="도구" icon="tool" href="https://platform.claude.com/docs/ko/managed-agents/tools">
    내장 도구를 확인하고, 활성화 또는 비활성화하며, 사용자 정의 도구를 정의합니다.
  </Card>

  <Card title="권한 정책" icon="lock" href="https://platform.claude.com/docs/ko/managed-agents/permission-policies">
    에이전트 및 MCP 도구가 실행되는 시점을 제어합니다.
  </Card>

  <Card title="클라우드 환경 설정" icon="settings" href="https://platform.claude.com/docs/ko/managed-agents/environments">
    샌드박스 자체의 아웃바운드 네트워크 접근을 제어합니다.
  </Card>

  <Card title="멀티에이전트 오케스트레이션" icon="sitemap" href="https://platform.claude.com/docs/ko/managed-agents/multiagent-orchestration">
    단일 세션 내에서 여러 에이전트를 조율합니다.
  </Card>
</CardGroup>
