---
title: Определение агента
url: https://platform.claude.com/docs/ru/managed-agents/agent-setup
description: Создайте многократно используемую версионируемую конфигурацию агента.
featureMetadata:
  topic:
    title: Managed Agents
    url: https://platform.claude.com/docs/en/managed-agents/overview
  status: beta
  betaHeader: managed-agents-2026-04-01
---

Агент — это многократно используемая версионируемая конфигурация, которая определяет персону и возможности. Она объединяет модель, системную подсказку, инструменты, серверы MCP и навыки, которые определяют поведение Claude во время сеанса.

Создайте агента один раз как многократно используемый ресурс и ссылайтесь на него по ID каждый раз, когда вы [запускаете сеанс](https://platform.claude.com/docs/ru/managed-agents/sessions). Агенты версионируются, и ими проще управлять во множестве сеансов.

## Поля конфигурации агента

| Поле                                                                            | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name` (csharp, go: `Name`)                                                     | Обязательное. Понятное человеку имя агента.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `model` (csharp, go: `Model`)                                                   | Обязательное. [Модель](https://platform.claude.com/docs/ru/models/overview) Claude, на которой работает агент. Принимает строку с ID модели или объект, например `{"id": "claude-opus-5-5"}`. Поддерживаются модели Claude 4.5 и более поздние. Объектная форма также принимает поля `speed`, `effort` и `inference_geo`; см. советы в разделах [Создание агента](https://platform.claude.com/docs/ru/managed-agents/agent-setup#create-an-agent), [Уровни усилий](https://platform.claude.com/docs/ru/build-with-claude/effort#effort-levels) и [Закрепление географии инференса](https://platform.claude.com/docs/ru/managed-agents/agent-setup#pin-the-inference-geo). |
| `system` (csharp, go: `System`; ruby: `system_`)                                | «System prompt» (системная подсказка) ([подробнее](https://platform.claude.com/docs/ru/build-with-claude/prompt-engineering/claude-prompting-best-practices#give-claude-a-role)), которая определяет поведение и персону агента. Системная подсказка отличается от [пользовательских сообщений](https://platform.claude.com/docs/ru/managed-agents/reference#event-types), которые должны описывать выполняемую работу.                                                                                                                                                                                                                                                   |
| `tools` (csharp, go: `Tools`)                                                   | Инструменты, доступные агенту. Объединяет [готовые инструменты агента](https://platform.claude.com/docs/ru/managed-agents/tools), [инструменты MCP](https://platform.claude.com/docs/ru/managed-agents/mcp-connector) и [пользовательские инструменты](https://platform.claude.com/docs/ru/managed-agents/tools#custom-tools).                                                                                                                                                                                                                                                                                                                                            |
| `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) | [Серверы MCP](https://platform.claude.com/docs/ru/managed-agents/mcp-connector), предоставляющие стандартизированные сторонние возможности.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `skills` (csharp, go: `Skills`)                                                 | [Навыки](https://platform.claude.com/docs/ru/managed-agents/skills), которые предоставляют предметно-ориентированный контекст с постепенным раскрытием.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `multiagent` (csharp, go: `Multiagent`)                                         | Позволяет агенту передавать работу другим агентам — в качестве субагентов или в [динамических рабочих процессах](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration#dynamic-workflows), — а также при необходимости консультироваться с моделью-[советником](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration#give-the-session-an-advisor). С типом `multiagent_20261001` динамические рабочие процессы включены, если вы их не отключите. См. [Мультиагентная оркестрация](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration).                                                             |
| `description` (csharp, go: `Description`)                                       | Описание того, что делает агент.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `metadata` (csharp, go: `Metadata`)                                             | Произвольные пары «ключ-значение» для вашего собственного отслеживания.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |

Вы также можете переопределить `model` (csharp, go: `Model`), `system` (csharp, go: `System`; ruby: `system_`), `tools` (csharp, go: `Tools`), `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`) и `skills` (csharp, go: `Skills`) для отдельного сеанса, не изменяя агента. Переопределение `model` (csharp, go: `Model`) полностью заменяет объект `model` (csharp, go: `Model`) агента, поэтому собственное значение `effort` (csharp, go: `Effort`) агента не переносится. Чтобы запустить сеанс с определённым уровнем усилий, задайте `effort` (csharp, go: `Effort`) внутри объекта `model` (csharp, go: `Model`) переопределения. См. [Переопределение конфигурации агента для сеанса](https://platform.claude.com/docs/ru/managed-agents/sessions#override-agent-configuration-for-a-session).

## Создание агента

В следующем примере определяется агент для программирования, который использует новейшую модель Claude Opus и имеет доступ к готовому набору инструментов агента. Этот набор инструментов позволяет агенту писать код, читать файлы, выполнять поиск в интернете и многое другое. Полный список поддерживаемых инструментов см. в [справочнике по инструментам агента](https://platform.claude.com/docs/ru/managed-agents/tools).

В примерах используется curl, CLI `ant` или один из SDK. Если вы ещё не настроили ни один из них, установка и настройка клиента описаны в [кратком руководстве](https://platform.claude.com/docs/ru/managed-agents/quickstart#install-the-cli).

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  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": "Coding Assistant",
      "model": "claude-opus-5-5",
      "system": "You are a helpful coding agent.",
      "tools": [{"type": "agent_toolset_20260401"}]
    }'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply coding-assistant.md
    ```

    <File filename="coding-assistant.md">
      ```markdown
      ---
      name: Coding Assistant
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
      ---

      You are a helpful coding agent.
      ```
    </File>

    [`ant apply`](https://platform.claude.com/docs/ru/cli-sdks-libraries/cli/apply) создаёт агента из `coding-assistant.md`, выводит его ID и записывает его в `claude-lock.json`. Зафиксируйте `claude-lock.json` в репозитории, чтобы следующий запуск `ant apply` обновил этого агента, а не создал второго.
  </CodeGroupItem>

  ```python Python
  agent = client.beta.agents.create(
      name="Coding Assistant",
      model="claude-opus-5-5",
      system="You are a helpful coding agent.",
      tools=[
          {"type": "agent_toolset_20260401"},
      ],
  )
  ```

  ```typescript TypeScript
  const agent = await client.beta.agents.create({
    name: "Coding Assistant",
    model: "claude-opus-5-5",
    system: "You are a helpful coding agent.",
    tools: [{ type: "agent_toolset_20260401" }]
  });
  ```

  ```csharp C#
  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Coding Assistant",
      Model = BetaManagedAgentsModel.ClaudeOpus5_5,
      System = "You are a helpful coding agent.",
      Tools =
      [
          new BetaManagedAgentsAgentToolset20260401Params
          {
              Type = "agent_toolset_20260401",
          },
      ],
  });
  ```

  ```go Go
  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Coding Assistant",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID: anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  	},
  	System: anthropic.String("You are a helpful coding agent."),
  	Tools: []anthropic.BetaAgentNewParamsToolUnion{{
  		OfAgentToolset20260401: &anthropic.BetaManagedAgentsAgentToolset20260401Params{
  			Type: anthropic.BetaManagedAgentsAgentToolset20260401ParamsTypeAgentToolset20260401,
  		},
  	}},
  })
  if err != nil {
  	panic(err)
  }
  ```

  ```java Java
  var agent = client.beta().agents().create(
      AgentCreateParams.builder()
          .name("Coding Assistant")
          .model(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
          .system("You are a helpful coding agent.")
          .addTool(
              BetaManagedAgentsAgentToolset20260401Params.builder()
                  .type(BetaManagedAgentsAgentToolset20260401Params.Type.AGENT_TOOLSET_20260401)
                  .build()
          )
          .build()
  );
  ```

  ```php PHP
  $agent = $client->beta->agents->create(
      name: 'Coding Assistant',
      model: 'claude-opus-5-5',
      system: 'You are a helpful coding agent.',
      tools: [
          BetaManagedAgentsAgentToolset20260401Params::with(
              type: 'agent_toolset_20260401',
          ),
      ],
  );
  ```

  ```ruby Ruby
  agent = client.beta.agents.create(
    name: "Coding Assistant",
    model: "claude-opus-5-5",
    system_: "You are a helpful coding agent.",
    tools: [{type: "agent_toolset_20260401"}]
  )
  ```
</CodeGroup>

Ответ повторяет вашу конфигурацию и добавляет поля `id`, `type`, `version`, `created_at`, `updated_at` и `archived_at`, а также заполняет опущенные вами поля `model`, такие как `effort`, значениями по умолчанию. Значение `version` начинается с 1 и увеличивается каждый раз, когда обновление изменяет агента.

```json
{
  "id": "agent_01HqR2k7vXbZ9mNpL3wYcT8f",
  "type": "agent",
  "name": "Coding Assistant",
  "model": {
    "id": "claude-opus-5-5",
    "effort": { "type": "medium" },
    "speed": "standard"
  },
  "system": "You are a helpful coding agent.",
  "description": null,
  "tools": [
    {
      "type": "agent_toolset_20260401",
      "default_config": {
        "permission_policy": { "type": "always_allow" }
      }
    }
  ],
  "skills": [],
  "mcp_servers": [],
  "multiagent": null,
  "metadata": {},
  "version": 1,
  "created_at": "2026-04-03T18:24:10.412Z",
  "updated_at": "2026-04-03T18:24:10.412Z",
  "archived_at": null
}
```

Поле `default_config` набора инструментов показывает его [политику разрешений](https://platform.claude.com/docs/ru/managed-agents/permission-policies) по умолчанию, `always_allow`, которая применяется, если вы не настроите другую.

<Tip>
  Чтобы использовать Claude Opus 5.5, Claude Opus 5 или Claude Opus 4.8 в [быстром режиме](https://platform.claude.com/docs/ru/build-with-claude/fast-mode), передайте `model` как объект, например: `{"id": "claude-opus-5-5", "speed": "fast"}`. См. раздел [поддерживаемые модели](https://platform.claude.com/docs/ru/build-with-claude/fast-mode#supported-models) на странице быстрого режима.
</Tip>

<Tip>
  Чтобы задать уровень усилий модели, передайте `model` как объект, например: `{"id": "claude-opus-5-5", "effort": "high"}`. Поле `effort` принимает строку уровня (`low`, `medium`, `high`, `xhigh` или `max`) или объект, например `{"type": "high"}`. Описание каждого уровня см. в разделе [Уровни усилий](https://platform.claude.com/docs/ru/build-with-claude/effort#effort-levels).
</Tip>

### Закрепление географии инференса

Как и `speed` (csharp, go: `Speed`) и `effort` (csharp, go: `Effort`), поле `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) задаётся через объектную форму `model` (csharp, go: `Model`): передайте `model` (csharp, go: `Model`) как объект и задайте `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) рядом с `id` (csharp, go: `ID`). Поле принимает `"us"` или `"global"`. Если оно не задано, каждый запрос к модели следует географии инференса по умолчанию для рабочего пространства на момент обслуживания запроса. Элементы управления географией на уровне рабочего пространства и цены см. в разделе [Резидентность данных](https://platform.claude.com/docs/ru/manage-claude/data-residency).

В следующем примере агент закрепляется за инференсом в США и выводится значение `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) из объекта `model` (csharp, go: `Model`) агента:

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  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": "Geo-pinned assistant",
      "model": {"id": "claude-opus-5-5", "inference_geo": "us"},
      "system": "You are a helpful assistant."
    }'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply geo-pinned-assistant.md
    ```

    <File filename="geo-pinned-assistant.md">
      ```markdown
      ---
      name: Geo-pinned assistant
      model:
        id: claude-opus-5-5
        inference_geo: us
      ---

      You are a helpful assistant.
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  agent = client.beta.agents.create(
      name="Geo-pinned assistant",
      model={
          "id": "claude-opus-5-5",
          "inference_geo": "us",
      },
      system="You are a helpful assistant.",
  )

  print(f"Inference geo: {agent.model.inference_geo}")
  ```

  ```typescript TypeScript
  const agent = await client.beta.agents.create({
    name: "Geo-pinned assistant",
    model: { id: "claude-opus-5-5", inference_geo: "us" },
    system: "You are a helpful assistant."
  });

  console.log(`Inference geo: ${agent.model.inference_geo}`);
  ```

  ```csharp C#
  var agent = await client.Beta.Agents.Create(new()
  {
      Name = "Geo-pinned assistant",
      Model = new BetaManagedAgentsModelConfigParams
      {
          ID = BetaManagedAgentsModel.ClaudeOpus5_5,
          InferenceGeo = "us",
      },
      System = "You are a helpful assistant.",
  });

  Console.WriteLine($"Inference geo: {agent.Model.InferenceGeo}");
  ```

  ```go Go
  agent, err := client.Beta.Agents.New(ctx, anthropic.BetaAgentNewParams{
  	Name: "Geo-pinned assistant",
  	Model: anthropic.BetaManagedAgentsModelConfigParams{
  		ID:           anthropic.BetaManagedAgentsModelClaudeOpus5_5,
  		InferenceGeo: anthropic.String("us"),
  	},
  	System: anthropic.String("You are a helpful assistant."),
  })
  if err != nil {
  	panic(err)
  }

  fmt.Printf("Inference geo: %s\n", agent.Model.InferenceGeo)
  ```

  ```java Java
  var agent = client.beta().agents().create(
      AgentCreateParams.builder()
          .name("Geo-pinned assistant")
          .model(
              BetaManagedAgentsModelConfigParams.builder()
                  .id(BetaManagedAgentsModel.CLAUDE_OPUS_5_5)
                  .inferenceGeo("us")
                  .build()
          )
          .system("You are a helpful assistant.")
          .build()
  );

  IO.println("Inference geo: " + agent.model().inferenceGeo().orElseThrow());
  ```

  ```php PHP
  $agent = $client->beta->agents->create(
      name: 'Geo-pinned assistant',
      model: BetaManagedAgentsModelConfigParams::with(
          id: 'claude-opus-5-5',
          inferenceGeo: 'us',
      ),
      system: 'You are a helpful assistant.',
  );

  echo "Inference geo: {$agent->model->inferenceGeo}\n";
  ```

  ```ruby Ruby
  agent = client.beta.agents.create(
    name: "Geo-pinned assistant",
    model: {id: "claude-opus-5-5", inference_geo: "us"},
    system_: "You are a helpful assistant."
  )

  puts "Inference geo: #{agent.model.inference_geo}"
  ```
</CodeGroup>

Закрепление `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) проверяется на соответствие [`allowed_inference_geos`](https://platform.claude.com/docs/ru/manage-claude/data-residency#workspace-level-restrictions) рабочего пространства при сохранении агента, при создании сеанса на его основе и на каждом ходе, который обслуживает сеанс. Если список разрешённых значений рабочего пространства сужается так, что закрепление больше не разрешено, новые сеансы не могут быть созданы на основе агента, а запущенные сеансы отклоняют дальнейшие ходы; для закреплений никогда не делается исключений, поскольку рабочие пространства полагаются на них для соблюдения нормативных требований и резидентности данных.

Установка `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) для модели, которая не поддерживает географическое закрепление инференса, возвращает ошибку 400; модели с такой поддержкой см. в разделе [Доступность моделей](https://platform.claude.com/docs/ru/manage-claude/data-residency#model-availability). В конфигурации `multiagent` (csharp, go: `Multiagent`) закрепление агента и закрепление каждого агента, указанного в списке `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) в `subagents` (csharp, go: `Subagents`) или `workflows` (csharp, go: `Workflows`), должны быть либо все установлены в одно и то же значение, либо все не заданы; см. [Мультиагентная оркестрация](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration). Чтобы позже изменить или снять закрепление, обновите объект `model` (csharp, go: `Model`) агента; передача `model` (csharp, go: `Model`) без `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) снимает его, как описано в разделе [Семантика обновления](https://platform.claude.com/docs/ru/managed-agents/agent-setup#update-semantics).

## Обновление агента

Обновление агента создаёт новую версию, если конфигурация изменяется. Поле `version` (csharp, go: `Version`) необязательно: укажите его для оптимистичного управления параллелизмом (при несовпадении возвращается 409) или опустите, чтобы применить обновление безусловно (побеждает последняя запись). Обновления архивированных агентов отклоняются.

При использовании CLI отредактируйте файл агента и снова запустите `ant apply`; apply передаёт `version` за вас.

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID" \
    -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 '{
      "version": '"$AGENT_VERSION"',
      "system": "You are a helpful coding agent. Always write tests."
    }'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply coding-assistant.md
    ```

    <File filename="coding-assistant.md">
      ```markdown
      ---
      name: Coding Assistant
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
      ---

      You are a helpful coding agent. Always write tests.
      ```
    </File>
  </CodeGroupItem>

  ```python Python
  updated_agent = client.beta.agents.update(
      agent.id,
      version=agent.version,
      system="You are a helpful coding agent. Always write tests.",
  )

  print(f"New version: {updated_agent.version}")
  ```

  ```typescript TypeScript
  const updatedAgent = await client.beta.agents.update(agent.id, {
    version: agent.version,
    system: "You are a helpful coding agent. Always write tests."
  });

  console.log(`New version: ${updatedAgent.version}`);
  ```

  ```csharp C#
  var updatedAgent = await client.Beta.Agents.Update(agent.ID, new()
  {
      Version = agent.Version,
      System = "You are a helpful coding agent. Always write tests.",
  });

  Console.WriteLine($"New version: {updatedAgent.Version}");
  ```

  ```go Go
  updatedAgent, err := client.Beta.Agents.Update(ctx, agent.ID, anthropic.BetaAgentUpdateParams{
  	Version: anthropic.Int(agent.Version),
  	System:  anthropic.String("You are a helpful coding agent. Always write tests."),
  })
  if err != nil {
  	panic(err)
  }

  fmt.Printf("New version: %d\n", updatedAgent.Version)
  ```

  ```java Java
  var updatedAgent = client.beta().agents().update(
      agent.id(),
      AgentUpdateParams.builder()
          .version(agent.version())
          .system("You are a helpful coding agent. Always write tests.")
          .build()
  );

  IO.println("New version: " + updatedAgent.version());
  ```

  ```php PHP
  $updatedAgent = $client->beta->agents->update(
      $agent->id,
      version: $agent->version,
      system: 'You are a helpful coding agent. Always write tests.',
  );

  echo "New version: {$updatedAgent->version}\n";
  ```

  ```ruby Ruby
  updated_agent = client.beta.agents.update(
    agent.id,
    version: agent.version,
    system_: "You are a helpful coding agent. Always write tests."
  )

  puts "New version: #{updated_agent.version}"
  ```
</CodeGroup>

В предыдущем примере передаётся `version` из ответа на создание, поэтому обновление применяется, только если с момента чтения агента его больше ничто не изменило. Чтобы применить обновление безусловно, опустите `version` в запросе:

<CodeGroup>
  ```bash cURL
  curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID" \
    -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 '{
      "description": "Writes and reviews code."
    }'
  ```

  ```bash CLI
  ant beta:agents update \
    --agent-id "$AGENT_ID" \
    --description "Writes and reviews code."
  ```

  ```python Python
  unconditional_agent = client.beta.agents.update(
      agent.id,
      description="Writes and reviews code.",
  )

  print(f"New version: {unconditional_agent.version}")
  ```

  ```typescript TypeScript
  const unconditionalAgent = await client.beta.agents.update(agent.id, {
    description: "Writes and reviews code."
  });

  console.log(`New version: ${unconditionalAgent.version}`);
  ```

  ```csharp C#
  var unconditionalAgent = await client.Beta.Agents.Update(agent.ID, new()
  {
      Description = "Writes and reviews code.",
  });

  Console.WriteLine($"New version: {unconditionalAgent.Version}");
  ```

  ```go Go
  unconditionalAgent, err := client.Beta.Agents.Update(ctx, agent.ID, anthropic.BetaAgentUpdateParams{
  	Description: anthropic.String("Writes and reviews code."),
  })
  if err != nil {
  	panic(err)
  }

  fmt.Printf("New version: %d\n", unconditionalAgent.Version)
  ```

  ```java Java
  var unconditionalAgent = client.beta().agents().update(
      agent.id(),
      AgentUpdateParams.builder()
          .description("Writes and reviews code.")
          .build()
  );

  IO.println("New version: " + unconditionalAgent.version());
  ```

  ```php PHP
  $unconditionalAgent = $client->beta->agents->update(
      $agent->id,
      description: 'Writes and reviews code.',
  );

  echo "New version: {$unconditionalAgent->version}\n";
  ```

  ```ruby Ruby
  unconditional_agent = client.beta.agents.update(
    agent.id,
    description: "Writes and reviews code."
  )

  puts "New version: #{unconditional_agent.version}"
  ```
</CodeGroup>

### Семантика обновления

* **`version` (csharp, go: `Version`)** необязательно и, если указано, должно быть не меньше 1. Если оно указано, запрос возвращает 409, когда значение не совпадает с текущей версией агента, даже если отправляемые вами поля уже совпадают с сохранёнными значениями; перечитайте агента и повторите попытку. Если оно опущено, обновление применяется безусловно, и самое последнее обновление молча заменяет любое параллельное, без ошибки для какого-либо из вызывающих. Передача `version` (csharp, go: `Version`) — рекомендуемый вариант по умолчанию для интерактивных вызывающих, а его отсутствие подходит для декларативных циклов применения, например задания CI, которое синхронизирует зафиксированные в репозитории определения агентов, когда агентом владеет этот цикл.

* **Опущенные поля сохраняются.** Нужно включать только те поля, которые вы хотите изменить.

* **Скалярные поля** (`model` (csharp, go: `Model`), `system` (csharp, go: `System`; ruby: `system_`), `name` (csharp, go: `Name`), `description` (csharp, go: `Description`)) заменяются новым значением. `system` (csharp, go: `System`; ruby: `system_`) и `description` (csharp, go: `Description`) можно очистить, передав `null` (python: `None`; ruby: `nil`; java: `Optional.empty()`; go: `param.Null[string]()`; php: `requestOptions: ['extraBodyParams' => ['system' => null, 'description' => null]]`). `model` (csharp, go: `Model`) и `name` (csharp, go: `Name`) обязательны и не могут быть очищены. Внутри передаваемого вами объекта `model` (csharp, go: `Model`) единственным исключением является `effort` (csharp, go: `Effort`): если `id` (csharp, go: `ID`) модели не изменился, отсутствие `effort` (csharp, go: `Effort`) оставляет сохранённый уровень усилий без изменений. Если вы меняете `id` (csharp, go: `ID`) модели, опущенное `effort` (csharp, go: `Effort`) сбрасывается к значению по умолчанию для новой модели. Остальные поля `model` (csharp, go: `Model`) заменяются вместе с объектом: передача `model` (csharp, go: `Model`) без `inference_geo` (java, php: `inferenceGeo`; csharp, go: `InferenceGeo`) снимает закрепление географии инференса агента.

* **Поля-массивы** (`tools` (csharp, go: `Tools`), `mcp_servers` (java, php: `mcpServers`; csharp: `McpServers`; go: `MCPServers`), `skills` (csharp, go: `Skills`)) полностью заменяются новым массивом. Чтобы полностью очистить поле-массив, передайте `null` (python: `None`; ruby: `nil`; java: `Optional.empty()`; go: `param.NullSlice[[]anthropic.BetaAgentUpdateParamsToolUnion]()`; php: `requestOptions: ['extraBodyParams' => ['mcp_servers' => null]]`) или пустой массив.

* **`multiagent` (csharp, go: `Multiagent`)** объединяется с сохранённым блоком уровень за уровнем, если обновление сохраняет тип `multiagent_20261001`. Опущенная вами настройка сохраняет своё сохранённое значение, а отправленный вами список `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) заменяет сохранённый список. Любое другое обновление, отправляющее `multiagent` (csharp, go: `Multiagent`), заменяет сохранённый блок целиком, а опущенные в нём настройки принимают значения по умолчанию. Передайте `"multiagent": null` (python: `multiagent=None`; typescript: `multiagent: null`; ruby: `multiagent: nil`; go: `Multiagent: param.NullStruct[anthropic.BetaManagedAgentsMultiagentParamsUnion]()`; java: `.multiagent(Optional.empty())`; csharp: `Multiagent = null`; php: `requestOptions: ['extraBodyParams' => ['multiagent' => null]]`), чтобы очистить весь блок. Внутри блока `null` сбрасывает настройку к значению по умолчанию, поэтому установка `workflows` (csharp, go: `Workflows`) в `null` включает динамические рабочие процессы. См. [Включение динамических рабочих процессов](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration#turn-on-dynamic-workflows).

* **Метаданные** объединяются на уровне ключей. Переданные вами ключи добавляются или обновляются. Опущенные ключи сохраняются. Чтобы удалить определённый ключ, установите его значение в `null`.

* **Обнаружение пустых операций.** Если обновление не вносит изменений относительно текущей версии, новая версия не создаётся и возвращается существующая версия.

* **Списки `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) других агентов не обновляются.** Агенты, которые указывают этого агента в списке `predefined_agents` (java, php: `predefinedAgents`; csharp, go: `PredefinedAgents`) в `subagents` (csharp, go: `Subagents`) или `workflows` (csharp, go: `Workflows`), сохраняют версию, которая была закреплена при их создании или при последнем обновлении, отправившем этот список, даже если ссылка не содержит `version` (csharp, go: `Version`). Чтобы делегировать работу новой версии, [обновите агента, который её указывает](https://platform.claude.com/docs/ru/managed-agents/multiagent-orchestration#list-the-subagents), чтобы список ссылался на новую версию.

Следующее обновление очищает описание, удаляет ключ `team` из `metadata` (csharp, go: `Metadata`) и устанавливает `workflows` (csharp, go: `Workflows`) в `null`, что включает динамические рабочие процессы:

<CodeGroup defaultLanguage="CLI">
  ```bash cURL
  curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID" \
    -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 '{
      "description": null,
      "metadata": {"team": null},
      "multiagent": {"type": "multiagent_20261001", "workflows": null}
    }'
  ```

  <CodeGroupItem>
    ```bash CLI
    ant apply code-reviewer.md
    ```

    <File filename="code-reviewer.md">
      ```markdown
      ---
      name: Code Reviewer
      model: claude-opus-5-5
      tools:
        - type: agent_toolset_20260401
      metadata:
        owner: docs
      multiagent:
        type: multiagent_20261001
        workflows: null
      ---

      You are a helpful coding agent.
      ```
    </File>

    В файле больше нет `description` и ключа `team`, поэтому `ant apply` отправляет для них `null`. Удаление настройки внутри `multiagent` сохраняет её сохранённое значение, поэтому в файле `workflows` устанавливается в `null`.
  </CodeGroupItem>

  ```python Python
  cleared_agent = client.beta.agents.update(
      agent.id,
      description=None,
      metadata={"team": None},
      multiagent={"type": "multiagent_20261001", "workflows": None},
  )

  print(f"Description: {cleared_agent.description}")
  ```

  ```typescript TypeScript
  const clearedAgent = await client.beta.agents.update(agent.id, {
    description: null,
    metadata: { team: null },
    multiagent: { type: "multiagent_20261001", workflows: null }
  });

  console.log(`Description: ${clearedAgent.description}`);
  ```

  ```csharp C#
  var clearedAgent = await client.Beta.Agents.Update(agent.ID, new()
  {
      Description = null,
      Metadata = new Dictionary<string, string?> { ["team"] = null },
      Multiagent = new BetaManagedAgentsMultiagent20261001Params { Workflows = null },
  });

  Console.WriteLine($"Description: {clearedAgent.Description}");
  ```

  ```go Go
  // Metadata имеет тип map[string]string, поэтому null для team передаётся как опция запроса.
  clearedAgent, err := client.Beta.Agents.Update(ctx, agent.ID, anthropic.BetaAgentUpdateParams{
  	Description: param.Null[string](),
  	Multiagent: anthropic.BetaManagedAgentsMultiagentParamsUnion{
  		OfMultiagent20261001: &anthropic.BetaManagedAgentsMultiagent20261001Params{
  			Workflows: param.NullStruct[anthropic.BetaManagedAgentsMultiagentWorkflowsParamsUnion](),
  		},
  	},
  }, option.WithJSONSet("metadata.team", nil))
  if err != nil {
  	panic(err)
  }

  fmt.Printf("Description: %q\n", clearedAgent.Description)
  ```

  ```java Java
  var clearedAgent = client.beta().agents().update(
      agent.id(),
      AgentUpdateParams.builder()
          .description(Optional.empty())
          .metadata(
              AgentUpdateParams.Metadata.builder()
                  .putAdditionalProperty("team", JsonValue.from(null))
                  .build()
          )
          .multiagent(
              BetaManagedAgentsMultiagent20261001Params.builder()
                  .workflows(Optional.empty())
                  .build()
          )
          .build()
  );

  IO.println("Description: " + clearedAgent.description().orElse(null));
  ```

  ```php PHP
  // update() отбрасывает аргументы со значением null, поэтому передавайте null в extraBodyParams.
  $clearedAgent = $client->beta->agents->update(
      $agent->id,
      requestOptions: [
          'extraBodyParams' => [
              'description' => null,
              'metadata' => ['team' => null],
              'multiagent' => ['type' => 'multiagent_20261001', 'workflows' => null],
          ],
      ],
  );

  echo 'Description: ' . json_encode($clearedAgent->description) . "\n";
  ```

  ```ruby Ruby
  cleared_agent = client.beta.agents.update(
    agent.id,
    description: nil,
    metadata: {team: nil},
    multiagent: {type: :multiagent_20261001, workflows: nil}
  )

  puts "Description: #{cleared_agent.description.inspect}"
  ```
</CodeGroup>

## Жизненный цикл агента

| Операция          | Поведение                                                                                                                       |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Обновление**    | Создаёт новую версию агента, если конфигурация изменяется.                                                                      |
| **Список версий** | Возвращает полную историю версий, чтобы вы могли отслеживать изменения со временем.                                             |
| **Архивирование** | Делает агента доступным только для чтения. Новые сеансы не могут ссылаться на него, но существующие сеансы продолжают работать. |

### Список версий

Получите полную историю версий, чтобы отслеживать, как агент менялся со временем. Результаты разбиты на страницы, и примеры SDK автоматически получают все страницы.

<CodeGroup>
  ```bash cURL
  curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID/versions" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  ```

  ```bash CLI
  ant beta:agents:versions list --agent-id "$AGENT_ID"
  ```

  ```python Python
  for version in client.beta.agents.versions.list(agent.id):
      print(f"Version {version.version}: {version.updated_at.isoformat()}")
  ```

  ```typescript TypeScript
  for await (const version of client.beta.agents.versions.list(agent.id)) {
    console.log(`Version ${version.version}: ${version.updated_at}`);
  }
  ```

  ```csharp C#
  var versions = await client.Beta.Agents.Versions.List(agent.ID);
  await foreach (var version in versions.Paginate())
  {
      Console.WriteLine($"Version {version.Version}: {version.UpdatedAt:O}");
  }
  ```

  ```go Go
  iter := client.Beta.Agents.Versions.ListAutoPaging(ctx, agent.ID, anthropic.BetaAgentVersionListParams{})
  for iter.Next() {
  	version := iter.Current()
  	fmt.Printf("Version %d: %s\n", version.Version, version.UpdatedAt.Format(time.RFC3339))
  }
  if err := iter.Err(); err != nil {
  	panic(err)
  }
  ```

  ```java Java
  for (var version : client.beta().agents().versions().list(agent.id()).autoPager()) {
      IO.println("Version " + version.version() + ": " + version.updatedAt());
  }
  ```

  ```php PHP
  foreach ($client->beta->agents->versions->list($agent->id)->pagingEachItem() as $version) {
      echo "Version {$version->version}: {$version->updatedAt->format(\DateTimeInterface::ATOM)}\n";
  }
  ```

  ```ruby Ruby
  client.beta.agents.versions.list(agent.id).auto_paging_each do |agent_version|
    puts "Version #{agent_version.version}: #{agent_version.updated_at.iso8601}"
  end
  ```
</CodeGroup>

### Архивирование агента

Архивирование делает агента доступным только для чтения, и его нельзя отменить. Существующие сеансы продолжают работать, но новые сеансы не могут ссылаться на агента. В ответе поле `archived_at` (java, php: `archivedAt`; csharp, go: `ArchivedAt`) устанавливается в метку времени архивирования.

<CodeGroup>
  ```bash cURL
  curl -fsSL -X POST "https://api.anthropic.com/v1/agents/$AGENT_ID/archive" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: managed-agents-2026-04-01"
  ```

  ```bash CLI
  ant beta:agents archive --agent-id "$AGENT_ID"
  ```

  ```python Python
  archived = client.beta.agents.archive(agent.id)

  print(f"Archived at: {archived.archived_at.isoformat()}")
  ```

  ```typescript TypeScript
  const archived = await client.beta.agents.archive(agent.id);
  console.log(`Archived at: ${archived.archived_at}`);
  ```

  ```csharp C#
  var archived = await client.Beta.Agents.Archive(agent.ID);
  Console.WriteLine($"Archived at: {archived.ArchivedAt:O}");
  ```

  ```go Go
  archived, err := client.Beta.Agents.Archive(ctx, agent.ID, anthropic.BetaAgentArchiveParams{})
  if err != nil {
  	panic(err)
  }
  fmt.Printf("Archived at: %s\n", archived.ArchivedAt.Format(time.RFC3339))
  ```

  ```java Java
  var archived = client.beta().agents().archive(agent.id());
  IO.println("Archived at: " + archived.archivedAt().orElseThrow());
  ```

  ```php PHP
  $archived = $client->beta->agents->archive($agent->id);

  echo "Archived at: {$archived->archivedAt->format(\DateTimeInterface::ATOM)}\n";
  ```

  ```ruby Ruby
  archived = client.beta.agents.archive(agent.id)
  puts "Archived at: #{archived.archived_at.iso8601}"
  ```
</CodeGroup>

## Следующие шаги

<CardGroup cols={2}>
  <Card title="Инструменты" icon="tool" href="https://platform.claude.com/docs/ru/managed-agents/tools">
    Настройте инструменты, доступные вашему агенту.
  </Card>

  <Card title="Навыки" icon="graduation-cap" href="https://platform.claude.com/docs/ru/managed-agents/skills">
    Подключите к агенту многократно используемую экспертизу на основе файловой системы для предметно-ориентированных рабочих процессов.
  </Card>

  <Card title="Запуск сеанса" icon="play" href="https://platform.claude.com/docs/ru/managed-agents/sessions">
    Создайте сеанс, чтобы запустить агента и начать выполнение задач.
  </Card>

  <Card title="Справочник" icon="book" href="https://platform.claude.com/docs/ru/managed-agents/reference">
    Типы событий, флаги CLI для самостоятельно размещаемых воркеров, поддерживаемые типы серверов MCP, ограничения скорости и рекомендации по брендингу для Claude Managed Agents.
  </Card>
</CardGroup>
