4 4
5# Размещение Agent SDK5# Размещение Agent SDK
6 6
7> Развертывание Agent SDK в производстве: архитектура подпроцесса, сохранение сеанса, масштабирование, наблюдаемость и изоляция нескольких арендаторов для Docker, Kubernetes и поставщиков sandbox.7> Развертывание Agent SDK в production: архитектура подпроцессов, сохранение сеансов, масштабирование, наблюдаемость и изоляция нескольких арендаторов для Docker, Kubernetes и поставщиков песочниц.
8 8
9Agent SDK порождает и контролирует подпроцесс `claude` CLI, который владеет оболочкой, рабочей директорией и файлами сеанса на диске. Размещение его не похоже на размещение stateless API-обертки. Каждый работающий агент — это долгоживущий процесс, привязанный к локальному состоянию, что определяет, как вы распределяете ресурсы, сохраняете сеансы и масштабируете несколько арендаторов.9Agent SDK порождает и контролирует подпроцесс `claude` CLI, который владеет оболочкой, рабочей директорией и файлами сеансов на диске. Размещение его отличается от размещения stateless API-обертки. Каждый работающий агент — это долгоживущий процесс, привязанный к локальному состоянию, что определяет способ выделения ресурсов, сохранения сеансов и масштабирования между арендаторами.
10 10
11На этой странице рассматривается самостоятельное размещение на вашей собственной инфраструктуре: поймите [модель подпроцесса](#the-subprocess-model), [выберите шаблон сеанса](#choose-a-session-pattern), [подготовьте контейнер](#provision-the-container) и [обработайте производственные проблемы](#handle-production-concerns), такие как сохранение, наблюдаемость, аутентификация и изоляция нескольких арендаторов. Для развертываемых Dockerfile и манифестов Kubernetes см. [руководство по размещению](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).11На этой странице рассматривается самостоятельное размещение на вашей собственной инфраструктуре. Для развертываемых Dockerfile и манифестов Kubernetes см. [hosting cookbook](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting).
12 12
13Если вам не требуется контроль инфраструктуры, пользовательская изоляция или собственная плоскость данных, рассмотрите вместо этого [Managed Agents](https://platform.claude.com/docs/ru/managed-agents/overview): размещенный REST API, где Anthropic запускает агента и sandbox, поэтому ваше приложение отправляет события и получает результаты обратно без необходимости управления инфраструктурой размещения.13Если вам не требуется контроль инфраструктуры, пользовательская изоляция или собственная плоскость данных, рассмотрите вместо этого [Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview): размещенный REST API, где Anthropic запускает агент и песочницу, поэтому ваше приложение отправляет события и получает результаты обратно без необходимости управления инфраструктурой размещения.
14
15<Info>
16 Для усиления безопасности сверх базового sandboxing, включая сетевые элементы управления, управление учетными данными и варианты изоляции, см. [Безопасное развертывание](/ru/agent-sdk/secure-deployment).
17</Info>
18 14
19<h2 id="the-subprocess-model">15<h2 id="the-subprocess-model">
20 Модель подпроцесса16 Модель подпроцесса
21</h2>17</h2>
22 18
23Каждое решение о размещении на этой странице следует из того, как SDK запускает агента. Когда ваш код вызывает `query()`, SDK порождает отдельный процесс CLI `claude` и взаимодействует с ним через stdio. Этот подпроцесс владеет оболочкой, рабочей директорией и транскриптами сеанса JSONL на локальном диске.19Каждое решение о хостинге на этой странице следует из того, как SDK запускает агента. Когда ваш код вызывает `query()`, SDK порождает отдельный процесс `claude` CLI и взаимодействует с ним через stdio. Этот подпроцесс владеет оболочкой, рабочей директорией и транскриптами сеанса JSONL на локальном диске.
20
21<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" className="dark:hidden" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />
24 22
25<img src="https://mintcdn.com/claude-code/ikqp3_70mqIahteV/images/agent-sdk/hosting-subprocess.svg?fit=max&auto=format&n=ikqp3_70mqIahteV&q=85&s=9dac857ca9d3b1410c3734900c386004" alt="Поток запроса: от клиента к вашему приложению, которое порождает подпроцесс claude CLI через stdio внутри контейнера; подпроцесс записывает на локальный диск и вызывает api.anthropic.com через HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess.svg" />23<img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/agent-sdk/hosting-subprocess-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=3fdeff3d7f44b2b67762668acfbb25f5" className="hidden dark:block" alt="Request flow: client to your app, which spawns a claude CLI subprocess over stdio inside the container; the subprocess writes to local disk and calls api.anthropic.com over HTTPS" width="920" height="220" data-path="images/agent-sdk/hosting-subprocess-dark.svg" />
26 24
27Один сеанс агента соответствует одному подпроцессу. Запуск N одновременных сеансов означает N подпроцессов, каждый со своим деревом процессов и файлом транскрипта. По умолчанию они все наследуют рабочую директорию вашего приложения, поэтому передавайте `cwd` при каждом вызове `query()`, когда сеансам нужны отдельные файловые системы:25Один сеанс агента соответствует одному подпроцессу. Запуск N одновременных сеансов означает N подпроцессов, каждый со своим деревом процессов и файлом транскрипта. По умолчанию все они наследуют рабочую директорию вашего приложения. Когда сеансам требуются отдельные файловые системы, передайте отдельный `cwd` в параметрах каждого вызова `query()` сеанса:
28 26
29<CodeGroup>27<CodeGroup>
30 ```typescript TypeScript theme={null}28 ```typescript TypeScript theme={null}
31 query({ prompt, options: { cwd: "/work/session-a" } })29 import { query } from "@anthropic-ai/claude-agent-sdk";
30
31 for await (const message of query({
32 prompt: "Summarize the files in this directory",
33 options: { cwd: "/work/session-a" },
34 })) {
35 console.log(message);
36 }
32 ```37 ```
33 38
34 ```python Python theme={null}39 ```python Python theme={null}
35 query(prompt=prompt, options=ClaudeAgentOptions(cwd="/work/session-a"))40 import asyncio
41
42 from claude_agent_sdk import ClaudeAgentOptions, query
43
44
45 async def main():
46 async for message in query(
47 prompt="Summarize the files in this directory",
48 options=ClaudeAgentOptions(cwd="/work/session-a"),
49 ):
50 print(message)
51
52
53 asyncio.run(main())
36 ```54 ```
37</CodeGroup>55</CodeGroup>
38 56
57Примеры TypeScript на этой странице используют top-level `await`, поэтому сохраняйте их как файлы `.mts` или установите `"type": "module"` в `package.json`.
58
39<h3 id="state-that-lives-on-local-disk">59<h3 id="state-that-lives-on-local-disk">
40 Состояние, которое находится на локальном диске60 Состояние, которое находится на локальном диске
41</h3>61</h3>
42 62
43Три вида состояния агента по умолчанию находятся на файловой системе контейнера. Ни одно из них не сохраняется при перезагрузке контейнера, масштабировании вниз или перемещении на другой узел.63Три вида состояния агента по умолчанию находятся в файловой системе контейнера. Ни одно из них не сохраняется при перезагрузке контейнера, масштабировании вниз или перемещении на другой узел.
44 64
45| Состояние | Расположение по умолчанию |65| Состояние | Расположение по умолчанию |
46| ---------------------------- | -------------------------------------------------------------------------------------------- |66| ---------------------------- | -------------------------------------------------------------------------------------------- |
48| Файлы памяти `CLAUDE.md` | `~/.claude/CLAUDE.md` для уровня пользователя и рабочая директория сеанса для уровня проекта |68| Файлы памяти `CLAUDE.md` | `~/.claude/CLAUDE.md` для уровня пользователя и рабочая директория сеанса для уровня проекта |
49| Артефакты рабочей директории | Рабочая директория сеанса |69| Артефакты рабочей директории | Рабочая директория сеанса |
50 70
51Чтобы сохранить транскрипты между хостами, настройте адаптер [`SessionStore`](/ru/agent-sdk/session-storage). Файлы памяти и другие артефакты рабочей директории нуждаются в собственной стратегии хранения, такой как смонтированный том или синхронизация хранилища объектов.71Чтобы сохранить транскрипты между хостами, настройте адаптер [`SessionStore`](/docs/ru/agent-sdk/session-storage). Файлы памяти и другие артефакты рабочей директории требуют собственной стратегии хранения, такой как смонтированный том или синхронизация хранилища объектов.
52 72
53Для информации о том, как сеансы, возобновление и ветвление работают на уровне API, см. [Sessions](/ru/agent-sdk/sessions).73Для информации о том, как сеансы, возобновление и ветвление работают на уровне API, см. [Sessions](/docs/ru/agent-sdk/sessions).
54 74
55<h2 id="choose-a-session-pattern">75<h2 id="choose-a-session-pattern">
56 Выберите паттерн сессии76 Выберите паттерн сеанса
57</h2>77</h2>
58 78
59Эти четыре паттерна охватывают жизненный цикл сессии: как долго контейнер существует относительно сессий, которые он обслуживает. Для информации о том, где запускается контейнер, в [hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) есть [развертываемый код](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) для локального Docker, Modal и Kubernetes. Выберите паттерн сессии здесь и цель развертывания из cookbook.79Эти четыре паттерна охватывают жизненный цикл сеанса: как долго контейнер существует относительно обслуживаемых им сеансов. Для информации о том, где запускается контейнер, в [кулинарной книге по хостингу](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb) есть [развертываемый код](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) для локального Docker, Modal и Kubernetes. Выберите паттерн сеанса здесь и цель развертывания из кулинарной книги.
60 80
61<h3 id="ephemeral-sessions">81<h3 id="ephemeral-sessions">
62 Ephemeral sessions82 Ephemeral sessions
63</h3>83</h3>
64 84
65Создайте контейнер для каждой задачи пользователя и уничтожьте его по завершении задачи. Лучше всего подходит для одноразовых задач. Пользователь может по-прежнему взаимодействовать с ИИ во время выполнения задачи, но после завершения контейнер уничтожается.85Создайте контейнер для каждой задачи пользователя и уничтожьте его после завершения задачи. Лучше всего подходит для одноразовых задач. Пользователь может по-прежнему взаимодействовать с ИИ во время выполнения задачи, но после завершения контейнер уничтожается.
66 86
67Примеры рабочих нагрузок включают исследование и исправление ошибок, извлечение счетов и квитанций, перевод документов и преобразование медиа.87Примеры рабочих нагрузок включают исследование и исправление ошибок, извлечение счетов и квитанций, перевод документов и преобразование медиа.
68 88
69Контейнер запускает одноразовую точку входа, которая вызывает SDK и завершает работу. Пример ниже показывает минимальную версию на TypeScript. Сохраните её как `entrypoint.mts` или установите `"type": "module"` в `package.json`, чтобы был доступен top-level `await`.89Контейнер запускает одноразовую точку входа, которая читает задачу из переменной окружения `TASK_PROMPT`, вызывает SDK и завершает работу.
70 90
71```typescript theme={null}91<CodeGroup>
72import { query } from "@anthropic-ai/claude-agent-sdk";92 ```typescript TypeScript theme={null}
93 import { query } from "@anthropic-ai/claude-agent-sdk";
73 94
74const prompt = process.env.TASK_PROMPT!;95 const prompt = process.env.TASK_PROMPT!;
75for await (const message of query({ prompt, options: { maxTurns: 20 } })) {96 for await (const message of query({ prompt, options: { maxTurns: 20 } })) {
76 console.log(message);97 console.log(message);
77}98 }
78```99 ```
100
101 ```python Python theme={null}
102 import asyncio
103 import os
104
105 from claude_agent_sdk import ClaudeAgentOptions, query
106
107
108 async def main():
109 async for message in query(
110 prompt=os.environ["TASK_PROMPT"],
111 options=ClaudeAgentOptions(max_turns=20),
112 ):
113 print(message)
114
115
116 asyncio.run(main())
117 ```
118</CodeGroup>
119
120Скрипт выводит каждое сообщение по мере его поступления, включая сообщение результата, чей `subtype` равен `success` при завершении задачи в пределах лимита ходов. Если задача достигает лимита в 20 ходов, `subtype` сообщения результата будет `error_max_turns` и вызов `query()` вызовет ошибку после его выдачи, поэтому оберните цикл в блок try, если контейнер должен завершить работу корректно. Смотрите [Handle the result](/docs/ru/agent-sdk/agent-loop#handle-the-result) для типов ошибок.
79 121
80<h3 id="long-running-sessions">122<h3 id="long-running-sessions">
81 Long-running sessions123 Long-running sessions
82</h3>124</h3>
83 125
84Запускайте постоянные экземпляры контейнеров, часто размещая несколько процессов SDK на контейнер, для обслуживания текущей работы. Лучше всего подходит для агентов, которые выполняют автономные действия, предоставляют контент или обрабатывают высокообъемные потоки сообщений.126Запускайте постоянные экземпляры контейнеров, часто размещая несколько процессов SDK на контейнер, для обслуживания текущей работы. Лучше всего подходит для агентов, которые принимают автономные действия, предоставляют контент или обрабатывают высокообъемные потоки сообщений.
85 127
86Примеры рабочих нагрузок включают агента электронной почты, который сортирует и отвечает на входящую почту, конструктор сайтов, который размещает редактируемый для каждого пользователя сайт через порты контейнера, и чат-бота, который обрабатывает непрерывный трафик с платформы, такой как Slack.128Примеры рабочих нагрузок включают агента электронной почты, который сортирует и отвечает на входящую почту, конструктор сайтов, который размещает редактируемый пользователем сайт через порты контейнера, и чат-бота, который обрабатывает непрерывный трафик с платформы, такой как Slack.
87 129
88Контейнер предоставляет HTTP или WebSocket endpoint и сопоставляет каждую активную сессию с долгоживущим запросом и подпроцессом позади него. В TypeScript используйте [`streamInput()`](/ru/agent-sdk/typescript#query-object) для добавления ходов в активную сессию и [`startup()`](/ru/agent-sdk/typescript#startup) для предварительного прогрева подпроцессов перед входящим трафиком. В Python используйте [`ClaudeSDKClient`](/ru/agent-sdk/python#claudesdkclient) для сохранения сессии открытой между ходами. Размер контейнера должен быть таким, чтобы он мог вмещать максимальное количество одновременных сессий в памяти.130Контейнер предоставляет конечную точку HTTP или WebSocket и сопоставляет каждый активный сеанс с долгоживущим запросом и подпроцессом позади него. В TypeScript используйте [`streamInput()`](/docs/ru/agent-sdk/typescript#query-object) для добавления ходов к активному сеансу и [`startup()`](/docs/ru/agent-sdk/typescript#startup) для предварительного прогрева подпроцессов перед входящим трафиком. В Python используйте [`ClaudeSDKClient`](/docs/ru/agent-sdk/python#claudesdkclient) для сохранения сеанса открытым между ходами. Размер контейнера должен быть таким, чтобы он мог вмещать максимальное количество одновременных сеансов в памяти.
89 131
90<h3 id="hybrid-sessions">132<h3 id="hybrid-sessions">
91 Hybrid sessions133 Hybrid sessions
92</h3>134</h3>
93 135
94Ephemeral контейнеры, которые гидрируют из [`SessionStore`](/ru/agent-sdk/session-storage) при запуске и сохраняют обновления обратно. Лучше всего подходит для сессий, которые охватывают много взаимодействий, но остаются неактивными между ними. Контейнер выключается в периоды простоя и снова включается, когда пользователь возвращается.136Ephemeral контейнеры, которые гидратируются из [`SessionStore`](/docs/ru/agent-sdk/session-storage) при запуске и сохраняют обновления обратно. Лучше всего подходит для сеансов, которые охватывают много взаимодействий, но остаются неактивными между ними. Контейнер выключается в периоды простоя и снова включается, когда пользователь возвращается.
95 137
96Примеры рабочих нагрузок включают личного менеджера проектов с периодическими проверками, глубокое исследование, которое приостанавливается и возобновляется в течение часов, и агента поддержки клиентов, который загружает историю билетов между взаимодействиями.138Примеры рабочих нагрузок включают личного менеджера проектов с периодическими проверками, глубокие исследования, которые приостанавливаются и возобновляются в течение часов, и агента поддержки клиентов, который загружает историю билетов между взаимодействиями.
97 139
98Настройте timeout простоя вашего провайдера в соответствии с тем, как часто вы ожидаете возвращения пользователей. Выключение контейнера без настроенного `SessionStore` приводит к потере транскрипта вместе с ним, поэтому хранилище требуется для этого паттерна, а не опционально.140Настройте тайм-аут простоя вашего провайдера в соответствии с тем, как часто вы ожидаете возвращения пользователей. Выключение контейнера без настроенного `SessionStore` приводит к потере транскрипта вместе с ним, поэтому хранилище требуется для этого паттерна, а не опционально.
99 141
100Паттерн основан на возобновлении сессии по ID с подключенным общим хранилищем:142Паттерн зависит от возобновления сеанса по ID с подключенным общим хранилищем:
101 143
102<CodeGroup>144<CodeGroup>
103 ```typescript TypeScript theme={null}145 ```typescript TypeScript theme={null}
116 ```158 ```
117 159
118 ```python Python theme={null}160 ```python Python theme={null}
119 from claude_agent_sdk import query, ClaudeAgentOptions161 from claude_agent_sdk import query, ClaudeAgentOptions, SessionStore
162 import asyncio
163
164 user_input: str = ...
165 session_id: str = ... # looked up from your database by user
166 session_store: SessionStore = ... # S3, Redis, Postgres, or your own adapter
120 167
168
169 async def main():
121 async for message in query(170 async for message in query(
122 prompt=user_input,171 prompt=user_input,
123 options=ClaudeAgentOptions(172 options=ClaudeAgentOptions(
124 resume=session_id, # looked up from your database by user173 resume=session_id,
125 session_store=session_store, # S3, Redis, Postgres, or your own adapter174 session_store=session_store,
126 ),175 ),
127 ):176 ):
128 ...177 ...
178
179
180 asyncio.run(main())
129 ```181 ```
130</CodeGroup>182</CodeGroup>
131 183
132Смотрите [Session storage](/ru/agent-sdk/session-storage) для полного интерфейса `SessionStore` и справочных адаптеров.
133
134<h3 id="multi-agent-container">184<h3 id="multi-agent-container">
135 Multi-agent container185 Multi-agent container
136</h3>186</h3>
137 187
138Запускайте несколько подпроцессов SDK внутри одного контейнера. Лучше всего подходит для агентов, которые должны тесно сотрудничать, например для многоагентных симуляций, где агенты взаимодействуют друг с другом в общей среде.188Запускайте несколько подпроцессов SDK внутри одного контейнера. Лучше всего подходит для агентов, которые должны тесно сотрудничать, например для многоагентных симуляций, где агенты взаимодействуют друг с другом в общей среде.
139 189
140Дайте каждому агенту свой рабочий каталог, чтобы они не перезаписывали файлы друг друга, и изолируйте загрузку параметров, чтобы файлы `CLAUDE.md` для каждого агента не утекали между агентами. Смотрите [Multi-tenant isolation](#multi-tenant-isolation) для конкретных опций.190Дайте каждому агенту свой рабочий каталог, чтобы они не перезаписывали файлы друг друга, и изолируйте загрузку параметров, чтобы файлы `CLAUDE.md` для каждого агента не просачивались между агентами. Смотрите [Multi-tenant isolation](#multi-tenant-isolation) для конкретных опций.
141 191
142<h2 id="provision-the-container">192<h2 id="provision-the-container">
143 Подготовка контейнера193 Подготовка контейнера
144</h2>194</h2>
145 195
146<h3 id="container-based-sandboxing">196<h3 id="container-based-sandboxing">
147 Изоляция на основе контейнера197 Контейнеризованная изоляция
148</h3>198</h3>
149 199
150Запустите SDK внутри изолированного контейнера для изоляции процессов, ограничения ресурсов, управления сетью и эфемерной файловой системы. Несколько поставщиков специализируются на изолированных контейнерных средах, которые соответствуют модели Agent SDK.200Запустите SDK внутри изолированного контейнера для изоляции процессов, ограничения ресурсов, управления сетью и эфемерной файловой системы.
151 201
152Вопросы, на которые следует ответить при выборе поставщика:202Вопросы, которые следует рассмотреть при выборе поставщика:
153 203
154* **Кто управляет sandbox**: поставщик sandbox-as-a-service управляет инфраструктурой для вас, в то время как самостоятельно размещаемые варианты предоставляют вам программное обеспечение для запуска на собственной инфраструктуре.204* **Кто управляет песочницей**: поставщик услуг песочницы управляет инфраструктурой для вас, в то время как самостоятельно размещаемые варианты предоставляют вам программное обеспечение для запуска на собственном сервере.
155* **Задержка холодного старта**: время от "создания sandbox" до "готовности принять первый запрос". Эфемерные паттерны требуют запусков менее чем за секунду. Долгоживущие паттерны допускают большую задержку.205* **Задержка холодного запуска**: время от "создания песочницы" до "готовности принять первый запрос". Эфемерные паттерны требуют запусков менее чем за секунду. Долгоживущие паттерны допускают большую задержку.
156* **Постоянное хранилище**: предоставляет ли поставщик долговечные тома или только эфемерный диск. Гибридный паттерн требует долговечного хранилища где-то, будь то в sandbox или рядом с ним.206* **Постоянное хранилище**: предоставляет ли поставщик долговечные тома или только эфемерный диск. Гибридный паттерн требует долговечного хранилища где-то, будь то в песочнице или рядом с ней.
157* **Модель ценообразования**: оплата за секунду, за запрос или фиксированная почасовая оплата. Ценообразование за секунду подходит для нестабильных эфемерных рабочих нагрузок. Почасовая оплата подходит для долгоживущих сеансов.207* **Модель ценообразования**: оплата за секунду, за запрос или фиксированная почасовая оплата. Ценообразование за секунду подходит для нестабильных эфемерных рабочих нагрузок. Почасовая оплата подходит для долгоживущих сеансов.
158* **Сетевые возможности**: поддержка пользовательских правил исходящего трафика, исходящих прокси и приватного VPC peering для регулируемых сред.208* **Сетевые возможности**: поддержка пользовательских правил исходящего трафика, исходящих прокси и приватного VPC пиринга для регулируемых сред.
159
160Поставщики для оценки:
161 209
162* [Modal Sandbox](https://modal.com/docs/guide/sandbox), с [демонстрационной реализацией](https://modal.com/docs/examples/claude-slack-gif-creator)210Для самостоятельно размещаемых вариантов, таких как Docker, gVisor и Firecracker, а также подробной конфигурации изоляции, см. [Isolation Technologies](/docs/ru/agent-sdk/secure-deployment#isolation-technologies).
163* [Cloudflare Sandboxes](https://github.com/cloudflare/sandbox-sdk)
164* [Daytona](https://www.daytona.io/)
165* [E2B](https://e2b.dev/)
166* [Fly Machines](https://fly.io/docs/machines/)
167* [Vercel Sandbox](https://vercel.com/docs/functions/sandbox)
168
169Для самостоятельно размещаемых вариантов, таких как Docker, gVisor и Firecracker, а также подробной конфигурации изоляции см. [Технологии изоляции](/ru/agent-sdk/secure-deployment#isolation-technologies).
170 211
171<h3 id="runtime-dependencies">212<h3 id="runtime-dependencies">
172 Зависимости среды выполнения213 Зависимости среды выполнения
173</h3>214</h3>
174 215
175Контейнер требует только среду выполнения вашего SDK:216Контейнер требует языковой среды выполнения вашего SDK:
176 217
177* Python 3.10+ для Python SDK или Node.js 18+ для TypeScript SDK218* Python 3.10+ для Python SDK или Node.js 18+ для TypeScript SDK
178* Оба пакета SDK включают встроенный бинарный файл Claude Code для платформы хоста, поэтому отдельная установка Claude Code или Node.js не требуется для порожденного CLI219* Оба SDK TypeScript и Python поставляются с нативным бинарным файлом Claude Code для большинства установок, и порожденный CLI не требует отдельной установки Node.js. См. [примечание об установке в quickstart](/docs/ru/agent-sdk/quickstart) для установок, которым требуется отдельная нативная установка Claude Code.
179 220
180Встроенный бинарный файл привязан к версии пакета SDK, поэтому обновление SDK — это способ обновления CLI. SDK следует semver: берите патч-релизы непрерывно и просмотрите [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) или [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) changelog перед принятием минорного релиза.221Поставляемый бинарный файл привязан к версии пакета SDK, поэтому обновление SDK — это способ обновления CLI. SDK следует semver: берите патч-релизы непрерывно и просмотрите [TypeScript](https://github.com/anthropics/claude-agent-sdk-typescript/blob/main/CHANGELOG.md) или [Python](https://github.com/anthropics/claude-agent-sdk-python/blob/main/CHANGELOG.md) changelog перед тем, как брать минорный релиз.
181 222
182<h3 id="resources">223<h3 id="resources">
183 Ресурсы224 Ресурсы
184</h3>225</h3>
185 226
1861 ГиБ ОЗУ, 5 ГиБ диска и 1 ЦПУ на агента — это разумная отправная точка для вновь запущенного экземпляра. Использование памяти растет с длительностью сеанса и активностью инструментов, поэтому выбирайте размер для фактических длительностей сеансов и параллелизма, которые вам нужны, а не для базовой линии в режиме ожидания. См. [Масштабирование и параллелизм](#scaling-and-concurrency) для того, как рассчитать агентов на хост.2271 ГиБ ОЗУ, 5 ГиБ диска и 1 CPU на агента — это разумная отправная точка для вновь запущенного экземпляра. Использование памяти растет с длительностью сеанса и активностью инструментов, поэтому выбирайте размер в соответствии с фактическими длительностями сеансов и параллелизмом, которые вам нужны, а не с базовым уровнем простоя. См. [Scaling and concurrency](#scaling-and-concurrency) для того, как рассчитать количество агентов на хост.
187 228
188<h3 id="network">229<h3 id="network">
189 Сеть230 Сеть
190</h3>231</h3>
191 232
192SDK требует исходящий HTTPS к `api.anthropic.com` или к региональной конечной точке вашего поставщика при запуске на Amazon Bedrock или Google Cloud's Agent Platform. Если ваши агенты используют [MCP servers](/ru/agent-sdk/mcp) или внешние инструменты, им также требуется исходящий доступ к этим конечным точкам. Для production маршрутизируйте исходящий трафик через прокси исходящего трафика, который обеспечивает списки разрешенных доменов, внедряет учетные данные и регистрирует запросы. См. [Безопасное развертывание](/ru/agent-sdk/secure-deployment) для полного паттерна.233SDK требует исходящего HTTPS к `api.anthropic.com` или к региональной конечной точке вашего поставщика при запуске на Amazon Bedrock или Google Cloud's Agent Platform. Если ваши агенты используют [MCP servers](/docs/ru/agent-sdk/mcp) или внешние инструменты, им также требуется исходящий доступ к этим конечным точкам. Для production маршрутизируйте исходящий трафик через прокси выхода, который обеспечивает списки разрешенных доменов, внедряет учетные данные и регистрирует запросы. См. [Secure Deployment](/docs/ru/agent-sdk/secure-deployment) для полного паттерна.
193 234
194Для входящего трафика откройте порт HTTP или WebSocket на контейнере. Ваше приложение обрабатывает запросы клиентов на этом порту и вызывает SDK внутренне; сам подпроцесс не прослушивает сеть.235Для входящего трафика откройте HTTP или WebSocket порт на контейнере. Ваше приложение обрабатывает запросы клиентов на этом порту и вызывает SDK внутренне; сам подпроцесс не прослушивает сеть.
195 236
196<h2 id="handle-production-concerns">237<h2 id="handle-production-concerns">
197 Решение производственных проблем238 Решение проблем в production
198</h2>239</h2>
199 240
200Рассмотрите эти решения перед развертыванием самостоятельно размещаемого агента.241Примите эти решения перед развертыванием самостоятельно размещаемого агента.
201 242
202<h3 id="session-and-state-persistence">243<h3 id="session-and-state-persistence">
203 Сохранение сеанса и состояния244 Сохранение сеанса и состояния
204</h3>245</h3>
205 246
206Локальный диск по умолчанию теряется при перезагрузке, масштабировании или перемещении на другой узел. Для любого сеанса, который пользователь ожидает возобновить, зеркалируйте стенограмму в долговечное хранилище с помощью адаптера [`SessionStore`](/ru/agent-sdk/session-storage). См. [Эталонные реализации](/ru/agent-sdk/session-storage#reference-implementations) для адаптеров S3, Redis и Postgres, а также набор соответствия для вашего собственного.247Локальный диск по умолчанию теряется при перезагрузке, масштабировании или перемещении на другой узел. Для любого сеанса, который пользователь ожидает возобновить, зеркалируйте транскрипт в долговечное хранилище с помощью адаптера [`SessionStore`](/docs/ru/agent-sdk/session-storage). См. [Эталонные реализации](/docs/ru/agent-sdk/session-storage#reference-implementations) для адаптеров S3, Redis и Postgres, а также набор соответствия для вашего собственного.
207 248
208Три вещи, которые нужно знать о том, как ведет себя `SessionStore`:249Три важных момента о том, как ведет себя `SessionStore`:
209 250
210* **Только стенограммы**: `SessionStore` зеркалирует стенограммы, а не файлы памяти `CLAUDE.md` или другие артефакты рабочего каталога. Смонтируйте общий том или синхронизируйте их отдельно.251* **Только транскрипты**: `SessionStore` зеркалирует транскрипты, а не файлы памяти `CLAUDE.md` или другие артефакты рабочего каталога. Подключите общий том или синхронизируйте их отдельно.
211* **Зеркалирование, а не замена**: подпроцесс сначала записывает на локальный диск, а хранилище получает копию каждого пакета. Локальные записи остаются авторитетными.252* **Зеркалирование, а не замена**: подпроцесс сначала записывает на локальный диск, а SDK пересылает копию каждого пакета в хранилище. Транскрипт нового сеанса на локальном диске пережидает запуск; сеанс, возобновленный из хранилища, удаляет его локальную копию в конце, поэтому хранилище содержит единственную долговечную копию. См. [Архитектура двойной записи](/docs/ru/agent-sdk/session-storage#dual-write-architecture).
212* **Сообщения `mirror_error`**: пакет, который хранилище отклоняет, отправляется до трех раз в общей сложности с коротким откатом перед каждой повторной попыткой; истекший по времени вызов не повторяется. Если пакет все еще не удается, SDK отбрасывает его, выдает сообщение `{ type: "system", subtype: "mirror_error" }` и продолжает запрос. Оповещайте об этих сообщениях, если долговечность хранилища имеет значение.253* **Сообщения `mirror_error`**: когда SDK не может доставить пакет в хранилище, он отбрасывает пакет, выдает сообщение `{ type: "system", subtype: "mirror_error" }` и продолжает запрос. Установите оповещение на эти события, если долговечность хранилища имеет значение. См. [Зеркальные записи — это лучшее усилие](/docs/ru/agent-sdk/session-storage#mirror-writes-are-best-effort) для поведения повтора и тайм-аута.
213 254
214<h3 id="observability">255<h3 id="observability">
215 Наблюдаемость256 Наблюдаемость
216</h3>257</h3>
217 258
218Агенты Agent SDK — это долгоживущие процессы, которые порождают вызовы инструментов во многих раундах API. Без телеметрии вы не можете увидеть, какие инструменты запустились, сколько времени они заняли или где сеанс застрял.259Агенты Agent SDK — это долгоживущие процессы, которые порождают вызовы инструментов во многих раундах API. Без телеметрии вы не сможете увидеть, какие инструменты запустились, сколько времени они заняли или где сеанс застрял.
219 260
220SDK наследует конфигурацию OpenTelemetry из окружения. Установите переменные окружения OTEL на уровне контейнера или оркестратора, чтобы каждый вызов `query()` экспортировал spans, метрики и события журнала в ваш сборщик. Пример ниже включает экспорт OTLP для всех трех сигналов. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` требуется только для трассировок; опустите его, если вы экспортируете только метрики и журналы.261SDK наследует конфигурацию OpenTelemetry из окружения. Установите переменные окружения OTEL на уровне контейнера или оркестратора, чтобы каждый вызов `query()` экспортировал spans, метрики и события логов в ваш сборщик. Пример ниже включает экспорт OTLP для всех трех сигналов. `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA` требуется только для трассировок; опустите его, если вы экспортируете только метрики и логи.
221 262
222```bash title=".env' theme={null}263```bash title=".env" theme={null}
223CLAUDE_CODE_ENABLE_TELEMETRY=1264CLAUDE_CODE_ENABLE_TELEMETRY=1
224CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1265CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1
225OTEL_TRACES_EXPORTER=otlp266OTEL_TRACES_EXPORTER=otlp
229OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318270OTEL_EXPORTER_OTLP_ENDPOINT=http://collector.example.com:4318
230```271```
231 272
232Текст подсказки и входные данные инструмента по умолчанию не включаются в экспорты. См. [Контроль конфиденциальных данных в экспортах](/ru/agent-sdk/observability#control-sensitive-data-in-exports) для флагов согласия и [Наблюдаемость](/ru/agent-sdk/observability) для полного каталога сигналов.273Текст подсказки и входные данные инструмента по умолчанию не включаются в экспорты. См. [Управление конфиденциальными данными в экспортах](/docs/ru/agent-sdk/observability#control-sensitive-data-in-exports) для флагов согласия и [Наблюдаемость](/docs/ru/agent-sdk/observability) для полного каталога сигналов.
233 274
234<h3 id="auth-and-secrets">275<h3 id="auth-and-secrets">
235 Аутентификация и секреты276 Аутентификация и секреты
237 278
238Три проблемы аутентификации имеют значение во время размещения:279Три проблемы аутентификации имеют значение во время размещения:
239 280
240* **Anthropic API**: подпроцесс читает `ANTHROPIC_API_KEY` из своего окружения. Предоставьте его из вашего менеджера секретов или установите `ANTHROPIC_BASE_URL` для маршрутизации вызовов модели через прокси, который внедряет ключ вне контейнера. См. [Управление учетными данными](/ru/agent-sdk/secure-deployment#credential-management) для шаблона прокси и [Обзор SDK](/ru/agent-sdk/overview#get-started) для поддерживаемых методов аутентификации.281* **Anthropic API**: подпроцесс читает `ANTHROPIC_API_KEY` из своего окружения. Предоставьте его из вашего менеджера секретов или установите `ANTHROPIC_BASE_URL` для маршрутизации вызовов модели через прокси, который внедряет ключ вне контейнера. См. [Управление учетными данными](/docs/ru/agent-sdk/secure-deployment#credential-management) для паттерна прокси и [Настройка в быстром старте SDK](/docs/ru/agent-sdk/quickstart#setup) для поддерживаемых методов аутентификации.
241* **Входящие**: поместите аутентификацию на шлюз перед контейнером агента. Агент должен получать предварительно аутентифицированные запросы и не должен быть компонентом, который проверяет токены пользователя.282* **Входящие**: поместите аутентификацию на шлюз перед контейнером агента. Агент должен получать предварительно аутентифицированные запросы и не должен быть компонентом, который проверяет токены пользователя.
242* **Исходящие инструменты**: держите учетные данные инструмента вне окружения агента. Маршрутизируйте исходящие вызовы через прокси, который внедряет ключи API после того, как запрос покидает контейнер. Агент делает вызов; прокси добавляет учетные данные.283* **Исходящие инструменты**: держите учетные данные инструмента вне окружения агента. Маршрутизируйте исходящие вызовы через прокси, который внедряет ключи API после того, как запрос покидает контейнер. Агент делает вызов; прокси добавляет учетные данные.
243 284
245 Масштабирование и параллелизм286 Масштабирование и параллелизм
246</h3>287</h3>
247 288
248Каждый сеанс работает в своем собственном подпроцессе, поэтому параллелизм на хосте ограничен тем, сколько подпроцессов его ОЗУ может вместить.289Каждый сеанс работает в своем собственном подпроцессе, поэтому параллелизм на хосте ограничен тем, сколько подпроцессов может вместить его ОЗУ.
249 290
250Размер каждого хоста по этой формуле:291Размер каждого хоста по этой формуле:
251 292
255 296
256Измерьте потолок оперативной памяти на сеанс, запустив репрезентативный сеанс до целевой длины при ожидаемой нагрузке инструмента и записав пиковое RSS. Начальная точка 1 ГиБ в [Ресурсы](#resources) — это минимум, а не потолок.297Измерьте потолок оперативной памяти на сеанс, запустив репрезентативный сеанс до целевой длины при ожидаемой нагрузке инструмента и записав пиковое RSS. Начальная точка 1 ГиБ в [Ресурсы](#resources) — это минимум, а не потолок.
257 298
258Горизонтальное масштабирование маршрутизации зависит от вашего шаблона. Для долгоживущих сеансов, где контейнеры содержат много сеансов, запустите пул контейнеров за балансировщиком нагрузки и закрепите каждый сеанс на одном контейнере, используя последовательное хеширование на `sessionId`. Закрепленный сеанс продолжает попадать на один и тот же контейнер, и, следовательно, на один и тот же работающий подпроцесс, пока он не будет вытеснен или контейнер не перезагрузится.299Маршрутизация горизонтального масштабирования зависит от вашего паттерна. Для долгоживущих сеансов, где контейнеры содержат много сеансов, запустите пул контейнеров за балансировщиком нагрузки и закрепите каждый сеанс на одном контейнере, используя согласованное хеширование на `sessionId`. Закрепленный сеанс продолжает обращаться к одному контейнеру, и, следовательно, к одному работающему подпроцессу, пока он не будет вытеснен или контейнер не перезагрузится.
259
260Большие разветвления параллельных [подагентов](/ru/agent-sdk/subagents) из одного сеанса могут достичь ограничений скорости API. Разбейте работу на меньшие пакеты, а не выполняйте одну широкую отправку.
261 300
262<h3 id="cost">301<h3 id="cost">
263 Стоимость302 Стоимость
264</h3>303</h3>
265 304
266Стоимость токенов Anthropic обычно превосходит стоимость инфраструктуры контейнера на порядок или больше. Минимально подготовленный контейнер работает примерно \$0,05 в час, в то время как один долгий сеанс агента может потратить доллары на токены. См. [Отслеживание стоимости](/ru/agent-sdk/cost-tracking) для учета токенов на сеанс.305Стоимость токенов Anthropic обычно превосходит стоимость инфраструктуры контейнера на порядок или больше. Минимально подготовленный контейнер работает примерно за \$0,05 в час, в то время как один долгий сеанс агента может потратить доллары на токены. См. [Отслеживание стоимости](/docs/ru/agent-sdk/cost-tracking) для учета токенов на сеанс.
267 306
268<h3 id="multi-tenant-isolation">307<h3 id="multi-tenant-isolation">
269 Изоляция мультитенантности308 Изоляция мультитенантности
270</h3>309</h3>
271 310
272Поведение SDK по умолчанию читает параметры и файлы памяти `CLAUDE.md` из файловой системы. В общем контейнере, который обслуживает нескольких арендаторов, эти файлы могут утечь контекст одного арендатора в сеанс другого арендатора.311Поведение SDK по умолчанию читает параметры и файлы памяти `CLAUDE.md` из файловой системы. В общем контейнере, обслуживающем нескольких арендаторов, эти файлы могут утечь контекст одного арендатора в сеанс другого арендатора.
273 312
274Для изоляции арендаторов внутри общего контейнера:313Для изоляции арендаторов внутри общего контейнера:
275 314
276* Передайте `settingSources: []` в TypeScript или `setting_sources=[]` в Python, чтобы не загружались параметры файловой системы.315* Передайте `settingSources: []` в TypeScript или `setting_sources=[]` в Python, чтобы пропустить пользовательские, проектные и локальные параметры.
277* Установите `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` в `env`. [Автоматическая память](/ru/memory#auto-memory) в `~/.claude/projects/<project>/memory/` загружается в системную подсказку независимо от `settingSources`. См. [Что settingSources не контролирует](/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) для других входных данных, которые загружаются безусловно.316* Установите `CLAUDE_CODE_DISABLE_AUTO_MEMORY=1` в `env`. [Автоматическая память](/docs/ru/memory#auto-memory) в `~/.claude/projects/<project>/memory/` загружается в системную подсказку независимо от `settingSources`. См. [Что settingSources не контролирует](/docs/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) для других входных данных, которые загружаются безусловно.
278* Укажите `CLAUDE_CONFIG_DIR` на каталог для каждого арендатора, чтобы арендаторы не делили глобальный конфиг `~/.claude.json`.317* Укажите `CLAUDE_CONFIG_DIR` на каталог для каждого арендатора, чтобы арендаторы не делили глобальный конфиг `~/.claude.json`. Когда каждый каталог конфигурации обслуживает один рабочий каталог и вы не делите [`SessionStore`](/docs/ru/agent-sdk/session-storage) между арендаторами, вы также можете установить [`CLAUDE_CODE_PROJECT_DIR_NAME`](/docs/ru/sessions#name-the-project-directory-yourself) в `env`, чтобы сохранить пути транскрипта под ним короткими. Требуется TypeScript Agent SDK v0.3.234 или позже, или Python Agent SDK v0.2.140 или позже.
279* Используйте рабочий каталог для каждого арендатора. Передайте `cwd` явно при каждом вызове `query()`.318* Используйте рабочий каталог для каждого арендатора. Передайте `cwd` явно при каждом вызове `query()`.
280* Применяйте правила исходящего трафика для каждого арендатора на вашем прокси, такие как различные исходящие IP-адреса, учетные данные или списки разрешенных доменов, чтобы скомпрометированный арендатор не мог экспортировать данные через политику исходящего трафика другого арендатора.319* Применяйте правила исходящего трафика для каждого арендатора на вашем прокси, такие как различные исходящие IP-адреса, учетные данные или списки разрешенных доменов, чтобы скомпрометированный арендатор не мог экспортировать данные через политику исходящего трафика другого арендатора.
281 320
282Пример ниже применяет четыре опции уровня SDK вместе. Создайте `tenantDir` и `configDir` так, чтобы каждый арендатор получил путь, который не может прочитать никакой другой арендатор. В TypeScript `env` заменяет окружение подпроцесса, поэтому распространите `...process.env`, чтобы сохранить унаследованные переменные, такие как `PATH` и `ANTHROPIC_API_KEY`. В Python `env` объединяется с унаследованным окружением.321Пример ниже применяет параметры, автоматическую память, каталог конфигурации и параметры рабочего каталога вместе. Создайте `tenantDir` и `configDir` так, чтобы каждый арендатор получил путь, который не может прочитать никакой другой арендатор. В TypeScript `env` заменяет окружение подпроцесса, поэтому распространите `...process.env`, чтобы сохранить унаследованные переменные, такие как `PATH` и `ANTHROPIC_API_KEY`. В Python `env` объединяется с унаследованным окружением.
283 322
284<CodeGroup>323<CodeGroup>
285 ```typescript TypeScript theme={null}324 ```typescript TypeScript theme={null}
307 346
308 ```python Python theme={null}347 ```python Python theme={null}
309 from claude_agent_sdk import query, ClaudeAgentOptions348 from claude_agent_sdk import query, ClaudeAgentOptions
349 import asyncio
310 350
351 prompt: str = ...
352 tenant_dir: str = ...
353 config_dir: str = ...
354
355
356 async def main():
311 async for message in query(357 async for message in query(
312 prompt=prompt,358 prompt=prompt,
313 options=ClaudeAgentOptions(359 options=ClaudeAgentOptions(
320 ),366 ),
321 ):367 ):
322 ...368 ...
369
370
371 asyncio.run(main())
323 ```372 ```
324</CodeGroup>373</CodeGroup>
325 374
326Для сетевых элементов управления для каждого арендатора см. [Безопасное развертывание](/ru/agent-sdk/secure-deployment).
327
328<h2 id="known-limitations">375<h2 id="known-limitations">
329 Известные ограничения376 Известные ограничения
330</h2>377</h2>
332Учитывайте их при проектировании развертывания.379Учитывайте их при проектировании развертывания.
333 380
334| Ограничение | Что делать |381| Ограничение | Что делать |
335| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |382| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
336| Нет тайм-аута сеанса верхнего уровня | Сеанс не истекает автоматически. Установите `maxTurns` в `Options` для ограничения количества раундов использования инструментов, которые агент выполняет перед остановкой. |383| Отсутствие тайм-аута сеанса верхнего уровня | Сеанс не истекает автоматически. Установите `maxTurns` в TypeScript или `max_turns` в Python, чтобы ограничить количество раундов использования инструментов, которые агент выполняет перед остановкой. |
337| Рост памяти при длительных сеансах | Ограничьте длину сеанса или периодически перезапускайте подпроцессы. См. [Масштабирование и параллелизм](#scaling-and-concurrency). |384| Рост памяти при длительных сеансах | Ограничьте длину сеанса или периодически перезапускайте подпроцессы. См. [Масштабирование и параллелизм](#scaling-and-concurrency). |
338| Большие параллельные развертывания подагентов могут достичь ограничений скорости | Разбейте работу на меньшие пакеты вместо выполнения одного широкого развертывания. |385| Большие параллельные развертывания подагентов могут достичь ограничений скорости | Разбивайте работу на меньшие пакеты вместо выполнения одного широкого развертывания. |
339| Нет дедлайна реального времени для каждого подагента | Ограничьте каждый [подагент](/ru/agent-sdk/subagents) с помощью `maxTurns` в его `AgentDefinition`. Только для фоновых подагентов `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` устанавливает сторожевой таймер зависания, который срабатывает, когда подагент `run_in_background` перестает выдавать выходные данные; это не дедлайн общего времени выполнения. |386| Отсутствие крайнего срока по времени стены для каждого подагента | Ограничьте каждый [подагент](/docs/ru/agent-sdk/subagents) с помощью `maxTurns` в его `AgentDefinition`. `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` устанавливает сторожевой таймер зависания, который срабатывает, когда подагент перестает выдавать выходные данные; это не крайний срок общего времени выполнения. |
387
388<h2 id="troubleshoot-deployment-failures">
389 Troubleshoot deployment failures
390</h2>
391
392Используйте этот раздел, когда агент, который работает на вашей машине, не работает в развёрнутом сервисе. Каждый элемент ниже называет сбой и ссылается на запись, которая его охватывает:
393
394* **CLI not found at service start**: в Python контейнер или менеджер сервисов запускает ваше приложение с другим `PATH`, чем ваша оболочка, поэтому установка, которая работает локально, не видна процессу. В TypeScript сборка образа пропустила дополнительные зависимости SDK, или `pathToClaudeCodeExecutable` указывает на файл, который не существует в образе. См. [Claude Code not found](/docs/ru/agent-sdk/troubleshooting#clinotfounderror-claude-code-not-found).
395* **CLI present in the image but won't launch**: Claude Code не может запуститься из двоичного файла, который не соответствует архитектуре контейнера или libc, или из файла, который потерял разрешение на выполнение при сборке образа. См. [Failed to start Claude Code](/docs/ru/agent-sdk/troubleshooting#cliconnectionerror-failed-to-start-claude-code).
396* **Claude Code process exits mid-run**: ошибка, которую получает ваше приложение, зависит от языка SDK и от того, сообщил ли CLI об ошибке результата в первую очередь. Записи в разделе [CLI process exit](/docs/ru/agent-sdk/troubleshooting#cli-process-exit) охватывают каждое сообщение.
340 397
341<h2 id="next-steps">398<h2 id="next-steps">
342 Следующие шаги399 Следующие шаги
343</h2>400</h2>
344 401
345* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): пошаговое руководство в виде notebook с [развертываемым кодом](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) для Docker, Modal и Kubernetes.402* [Hosting cookbook](https://github.com/anthropics/claude-cookbooks/blob/main/claude_agent_sdk/07_Hosting_the_agent.ipynb): пошаговое руководство в виде notebook с [развертываемым кодом](https://github.com/anthropics/claude-cookbooks/tree/main/claude_agent_sdk/hosting) для Docker, Modal и Kubernetes.
346* [Session storage](/ru/agent-sdk/session-storage): сохранение транскриптов между хостами с помощью адаптера `SessionStore`.403* [Session storage](/docs/ru/agent-sdk/session-storage): сохранение транскриптов между хостами с помощью адаптера `SessionStore`.
347* [Observability](/ru/agent-sdk/observability): экспорт OTEL трассировок, метрик и логов в ваш сборщик.404* [Observability](/docs/ru/agent-sdk/observability): экспорт OTEL трассировок, метрик и логов в ваш сборщик.
348* [Secure deployment](/ru/agent-sdk/secure-deployment): сетевые элементы управления, управление учетными данными и усиление изоляции.405* [Secure deployment](/docs/ru/agent-sdk/secure-deployment): сетевые элементы управления, управление учетными данными и усиление изоляции.
349* [Cost tracking](/ru/agent-sdk/cost-tracking): учет токенов и затрат для каждого сеанса.406* [Cost tracking](/docs/ru/agent-sdk/cost-tracking): учет токенов и затрат для каждого сеанса.