SpyBara
Go Premium

Documentation 2026-05-07 22:59 UTC to 2026-05-08 22:00 UTC

29 files changed +2,209 −1,654. View all changes and history on the product overview
2026
Sun 31 06:39 Sat 30 06:23 Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Tue 26 06:33 Sun 24 06:25 Sat 23 06:18 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 06:34 Mon 18 23:59 Sun 17 01:01 Fri 15 22:58 Thu 14 17:02 Wed 13 23:01 Tue 12 22:57 Mon 11 23:00 Sun 10 23:03 Sat 9 04:57 Fri 8 22:00 Thu 7 22:59 Tue 5 23:00 Mon 4 22:58 Sat 2 18:14 Fri 1 18:19
Details

14 14 

15## Управление параметрами файловой системы с помощью settingSources15## Управление параметрами файловой системы с помощью settingSources

16 16 

17Параметр источников параметров ([`setting_sources`](/ru/agent-sdk/python#claude-agent-options) в Python, [`settingSources`](/ru/agent-sdk/typescript#setting-source) в TypeScript) контролирует, какие параметры на основе файловой системы загружает SDK. Передайте явный список для включения определённых источников или передайте пустой массив для отключения пользовательских, проектных и локальных параметров.17Параметр источников параметров ([`setting_sources`](/ru/agent-sdk/python#claudeagentoptions) в Python, [`settingSources`](/ru/agent-sdk/typescript#settingsource) в TypeScript) контролирует, какие параметры на основе файловой системы загружает SDK. Передайте явный список для включения определённых источников или передайте пустой массив для отключения пользовательских, проектных и локальных параметров.

18 18 

19Этот пример загружает как пользовательские, так и проектные параметры, устанавливая `settingSources` на `["user", "project"]`:19Этот пример загружает как пользовательские, так и проектные параметры, устанавливая `settingSources` на `["user", "project"]`:

20 20 


65 ```65 ```

66</CodeGroup>66</CodeGroup>

67 67 

68Каждый источник загружает параметры из определённого местоположения, где `<cwd>` — это рабочий каталог, который вы передаёте через параметр `cwd` (или текущий каталог процесса, если не установлен). Для полного определения типа см. [`SettingSource`](/ru/agent-sdk/typescript#setting-source) (TypeScript) или [`SettingSource`](/ru/agent-sdk/python#setting-source) (Python).68Каждый источник загружает параметры из определённого местоположения, где `<cwd>` — это рабочий каталог, который вы передаёте через параметр `cwd` (или текущий каталог процесса, если не установлен). Для полного определения типа см. [`SettingSource`](/ru/agent-sdk/typescript#settingsource) (TypeScript) или [`SettingSource`](/ru/agent-sdk/python#settingsource) (Python).

69 69 

70| Источник | Что он загружает | Местоположение |70| Источник | Что он загружает | Местоположение |

71| :---------- | :---------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |71| :---------- | :---------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------ |


119 119 

120Skills — это файлы markdown, которые дают вашему агенту специализированные знания и вызываемые рабочие процессы. В отличие от `CLAUDE.md` (который загружается каждый сеанс), skills загружаются по требованию. Агент получает описания skills при запуске и загружает полное содержимое при необходимости.120Skills — это файлы markdown, которые дают вашему агенту специализированные знания и вызываемые рабочие процессы. В отличие от `CLAUDE.md` (который загружается каждый сеанс), skills загружаются по требованию. Агент получает описания skills при запуске и загружает полное содержимое при необходимости.

121 121 

122Skills обнаруживаются из файловой системы через `settingSources`. С параметрами по умолчанию пользовательские и проектные skills загружаются автоматически. Инструмент `Skill` включен по умолчанию, когда вы не указываете `allowedTools`. Если вы используете список разрешений `allowedTools`, включите `"Skill"` явно.122Skills обнаруживаются из файловой системы через `settingSources`. Когда параметр `skills` в `query()` опущен, обнаруженные пользовательские и проектные skills включены и инструмент Skill доступен, что соответствует поведению CLI. Для управления тем, какие skills включены, передайте `skills` как `"all"`, список имён skills или `[]` для отключения всех. SDK автоматически включает инструмент Skill, когда `skills` установлен, поэтому вам не нужно добавлять его в `allowedTools`.

123 123 

124<CodeGroup>124<CodeGroup>

125 ```python Python theme={null}125 ```python Python theme={null}


131 prompt="Review this PR using our code review checklist",131 prompt="Review this PR using our code review checklist",

132 options=ClaudeAgentOptions(132 options=ClaudeAgentOptions(

133 setting_sources=["user", "project"],133 setting_sources=["user", "project"],

134 allowed_tools=["Skill", "Read", "Grep", "Glob"],134 skills="all",

135 allowed_tools=["Read", "Grep", "Glob"],

135 ),136 ),

136 ):137 ):

137 if isinstance(message, ResultMessage) and message.subtype == "success":138 if isinstance(message, ResultMessage) and message.subtype == "success":


147 prompt: "Review this PR using our code review checklist",148 prompt: "Review this PR using our code review checklist",

148 options: {149 options: {

149 settingSources: ["user", "project"],150 settingSources: ["user", "project"],

150 allowedTools: ["Skill", "Read", "Grep", "Glob"]151 skills: "all",

152 allowedTools: ["Read", "Grep", "Glob"]

151 }153 }

152 })) {154 })) {

153 if (message.type === "result" && message.subtype === "success") {155 if (message.type === "result" && message.subtype === "success") {


260| Вы хотите... | Используйте | Поверхность SDK |262| Вы хотите... | Используйте | Поверхность SDK |

261| :------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |263| :------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

262| Установить соглашения проекта, которые ваш агент всегда соблюдает | [CLAUDE.md](/ru/memory) | `settingSources: ["project"]` загружает его автоматически |264| Установить соглашения проекта, которые ваш агент всегда соблюдает | [CLAUDE.md](/ru/memory) | `settingSources: ["project"]` загружает его автоматически |

263| Дать агенту справочный материал, который он загружает при необходимости | [Skills](/ru/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |265| Дать агенту справочный материал, который он загружает при необходимости | [Skills](/ru/agent-sdk/skills) | `settingSources` + `skills` опция |

264| Запустить повторно используемый рабочий процесс (развёртывание, проверка, выпуск) | [User-invocable skills](/ru/agent-sdk/skills) | `settingSources` + `allowedTools: ["Skill"]` |266| Запустить повторно используемый рабочий процесс (развёртывание, проверка, выпуск) | [User-invocable skills](/ru/agent-sdk/skills) | `settingSources` + `skills` опция |

265| Делегировать изолированную подзадачу свежему контексту (исследование, проверка) | [Subagents](/ru/agent-sdk/subagents) | параметр `agents` + `allowedTools: ["Agent"]` |267| Делегировать изолированную подзадачу свежему контексту (исследование, проверка) | [Subagents](/ru/agent-sdk/subagents) | параметр `agents` + `allowedTools: ["Agent"]` |

266| Координировать несколько экземпляров Claude Code с общими списками задач и прямой передачей сообщений между агентами | [Agent teams](/ru/agent-teams) | Не настраивается напрямую через параметры SDK. Agent teams — это функция CLI, где один сеанс действует как лидер команды, координируя работу независимых товарищей по команде |268| Координировать несколько экземпляров Claude Code с общими списками задач и прямой передачей сообщений между агентами | [Agent teams](/ru/agent-teams) | Не настраивается напрямую через параметры SDK. Agent teams — это функция CLI, где один сеанс действует как лидер команды, координируя работу независимых товарищей по команде |

267| Запустить детерминированную логику на вызовах инструментов (аудит, блокировка, преобразование) | [Hooks](/ru/agent-sdk/hooks) | параметр `hooks` с обратными вызовами или shell-скрипты, загруженные через `settingSources` |269| Запустить детерминированную логику на вызовах инструментов (аудит, блокировка, преобразование) | [Hooks](/ru/agent-sdk/hooks) | параметр `hooks` с обратными вызовами или shell-скрипты, загруженные через `settingSources` |

agent-sdk/mcp.md +772 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Подключение к внешним инструментам с помощью MCP

6 

7> Настройте MCP серверы для расширения вашего агента внешними инструментами. Охватывает типы транспорта, поиск инструментов для больших наборов инструментов, аутентификацию и обработку ошибок.

8 

9[Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) — это открытый стандарт для подключения AI агентов к внешним инструментам и источникам данных. С помощью MCP ваш агент может запрашивать базы данных, интегрироваться с API, такими как Slack и GitHub, и подключаться к другим сервисам без написания пользовательских реализаций инструментов.

10 

11MCP серверы могут работать как локальные процессы, подключаться через HTTP или выполняться непосредственно в вашем приложении SDK.

12 

13<Note>

14 На этой странице рассматривается конфигурация MCP для Agent SDK. Чтобы добавить MCP серверы в Claude Code CLI так, чтобы они загружались в каждом проекте, см. [Области установки MCP](/ru/mcp#mcp-installation-scopes).

15</Note>

16 

17## Быстрый старт

18 

19Этот пример подключается к MCP серверу [документации Claude Code](https://code.claude.com/docs) с использованием [HTTP транспорта](#httpsse-servers) и использует [`allowedTools`](#allow-mcp-tools) с подстановочным знаком для разрешения всех инструментов с сервера.

20 

21<CodeGroup>

22 ```typescript TypeScript theme={null}

23 import { query } from "@anthropic-ai/claude-agent-sdk";

24 

25 for await (const message of query({

26 prompt: "Use the docs MCP server to explain what hooks are in Claude Code",

27 options: {

28 mcpServers: {

29 "claude-code-docs": {

30 type: "http",

31 url: "https://code.claude.com/docs/mcp"

32 }

33 },

34 allowedTools: ["mcp__claude-code-docs__*"]

35 }

36 })) {

37 if (message.type === "result" && message.subtype === "success") {

38 console.log(message.result);

39 }

40 }

41 ```

42 

43 ```python Python theme={null}

44 import asyncio

45 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

46 

47 

48 async def main():

49 options = ClaudeAgentOptions(

50 mcp_servers={

51 "claude-code-docs": {

52 "type": "http",

53 "url": "https://code.claude.com/docs/mcp",

54 }

55 },

56 allowed_tools=["mcp__claude-code-docs__*"],

57 )

58 

59 async for message in query(

60 prompt="Use the docs MCP server to explain what hooks are in Claude Code",

61 options=options,

62 ):

63 if isinstance(message, ResultMessage) and message.subtype == "success":

64 print(message.result)

65 

66 

67 asyncio.run(main())

68 ```

69</CodeGroup>

70 

71Агент подключается к серверу документации, ищет информацию о hooks и возвращает результаты.

72 

73## Добавление MCP сервера

74 

75Вы можете настроить MCP серверы в коде при вызове `query()` или в файле `.mcp.json`, загруженном через [`settingSources`](#from-a-config-file).

76 

77### В коде

78 

79Передайте MCP серверы непосредственно в опции `mcpServers`:

80 

81<CodeGroup>

82 ```typescript TypeScript theme={null}

83 import { query } from "@anthropic-ai/claude-agent-sdk";

84 

85 for await (const message of query({

86 prompt: "List files in my project",

87 options: {

88 mcpServers: {

89 filesystem: {

90 command: "npx",

91 args: ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]

92 }

93 },

94 allowedTools: ["mcp__filesystem__*"]

95 }

96 })) {

97 if (message.type === "result" && message.subtype === "success") {

98 console.log(message.result);

99 }

100 }

101 ```

102 

103 ```python Python theme={null}

104 import asyncio

105 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

106 

107 

108 async def main():

109 options = ClaudeAgentOptions(

110 mcp_servers={

111 "filesystem": {

112 "command": "npx",

113 "args": [

114 "-y",

115 "@modelcontextprotocol/server-filesystem",

116 "/Users/me/projects",

117 ],

118 }

119 },

120 allowed_tools=["mcp__filesystem__*"],

121 )

122 

123 async for message in query(prompt="List files in my project", options=options):

124 if isinstance(message, ResultMessage) and message.subtype == "success":

125 print(message.result)

126 

127 

128 asyncio.run(main())

129 ```

130</CodeGroup>

131 

132### Из файла конфигурации

133 

134Создайте файл `.mcp.json` в корне вашего проекта. Файл загружается, когда включен источник параметров `project`, что происходит по умолчанию для опций `query()`. Если вы явно установите `settingSources`, включите `"project"` для загрузки этого файла:

135 

136```json theme={null}

137{

138 "mcpServers": {

139 "filesystem": {

140 "command": "npx",

141 "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]

142 }

143 }

144}

145```

146 

147## Разрешение MCP инструментов

148 

149MCP инструменты требуют явного разрешения перед тем, как Claude сможет их использовать. Без разрешения Claude увидит, что инструменты доступны, но не сможет их вызывать.

150 

151### Соглашение об именовании инструментов

152 

153MCP инструменты следуют шаблону именования `mcp__<server-name>__<tool-name>`. Например, сервер GitHub с именем `"github"` с инструментом `list_issues` становится `mcp__github__list_issues`.

154 

155### Предоставление доступа с помощью allowedTools

156 

157Используйте `allowedTools` для указания, какие MCP инструменты может использовать Claude:

158 

159```typescript hidelines={1,-1} theme={null}

160const _ = {

161 options: {

162 mcpServers: {

163 // your servers

164 },

165 allowedTools: [

166 "mcp__github__*", // All tools from the github server

167 "mcp__db__query", // Only the query tool from db server

168 "mcp__slack__send_message" // Only send_message from slack server

169 ]

170 }

171};

172```

173 

174Подстановочные знаки (`*`) позволяют разрешить все инструменты с сервера без перечисления каждого отдельно.

175 

176<Note>

177 **Предпочитайте `allowedTools` режимам разрешений для доступа MCP.** `permissionMode: "acceptEdits"` не одобряет автоматически MCP инструменты (только редактирование файлов и команды Bash файловой системы). `permissionMode: "bypassPermissions"` одобряет автоматически MCP инструменты, но также отключает все остальные подсказки безопасности, что шире, чем необходимо. Подстановочный знак в `allowedTools` предоставляет доступ ровно к нужному MCP серверу и ничему больше. См. [Режимы разрешений](/ru/agent-sdk/permissions#permission-modes) для полного сравнения.

178</Note>

179 

180### Обнаружение доступных инструментов

181 

182Чтобы увидеть, какие инструменты предоставляет MCP сервер, проверьте документацию сервера или подключитесь к серверу и проверьте сообщение инициализации `system`:

183 

184```typescript theme={null}

185for await (const message of query({ prompt: "...", options })) {

186 if (message.type === "system" && message.subtype === "init") {

187 console.log("Available MCP tools:", message.mcp_servers);

188 }

189}

190```

191 

192## Типы транспорта

193 

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

195 

196* Если в документации указана **команда для запуска** (например, `npx @modelcontextprotocol/server-github`), используйте stdio

197* Если в документации указан **URL**, используйте HTTP или SSE

198* Если вы создаёте свои собственные инструменты в коде, используйте SDK MCP сервер

199 

200### Серверы stdio

201 

202Локальные процессы, которые взаимодействуют через stdin/stdout. Используйте это для MCP серверов, которые вы запускаете на той же машине:

203 

204<Tabs>

205 <Tab title="В коде">

206 <CodeGroup>

207 ```typescript TypeScript hidelines={1,-1} theme={null}

208 const _ = {

209 options: {

210 mcpServers: {

211 github: {

212 command: "npx",

213 args: ["-y", "@modelcontextprotocol/server-github"],

214 env: {

215 GITHUB_TOKEN: process.env.GITHUB_TOKEN

216 }

217 }

218 },

219 allowedTools: ["mcp__github__list_issues", "mcp__github__search_issues"]

220 }

221 };

222 ```

223 

224 ```python Python theme={null}

225 options = ClaudeAgentOptions(

226 mcp_servers={

227 "github": {

228 "command": "npx",

229 "args": ["-y", "@modelcontextprotocol/server-github"],

230 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

231 }

232 },

233 allowed_tools=["mcp__github__list_issues", "mcp__github__search_issues"],

234 )

235 ```

236 </CodeGroup>

237 </Tab>

238 

239 <Tab title=".mcp.json">

240 ```json theme={null}

241 {

242 "mcpServers": {

243 "github": {

244 "command": "npx",

245 "args": ["-y", "@modelcontextprotocol/server-github"],

246 "env": {

247 "GITHUB_TOKEN": "${GITHUB_TOKEN}"

248 }

249 }

250 }

251 }

252 ```

253 </Tab>

254</Tabs>

255 

256### Серверы HTTP/SSE

257 

258Используйте HTTP или SSE для облачных MCP серверов и удалённых API:

259 

260<Tabs>

261 <Tab title="В коде">

262 <CodeGroup>

263 ```typescript TypeScript hidelines={1,-1} theme={null}

264 const _ = {

265 options: {

266 mcpServers: {

267 "remote-api": {

268 type: "sse",

269 url: "https://api.example.com/mcp/sse",

270 headers: {

271 Authorization: `Bearer ${process.env.API_TOKEN}`

272 }

273 }

274 },

275 allowedTools: ["mcp__remote-api__*"]

276 }

277 };

278 ```

279 

280 ```python Python theme={null}

281 options = ClaudeAgentOptions(

282 mcp_servers={

283 "remote-api": {

284 "type": "sse",

285 "url": "https://api.example.com/mcp/sse",

286 "headers": {"Authorization": f"Bearer {os.environ['API_TOKEN']}"},

287 }

288 },

289 allowed_tools=["mcp__remote-api__*"],

290 )

291 ```

292 </CodeGroup>

293 </Tab>

294 

295 <Tab title=".mcp.json">

296 ```json theme={null}

297 {

298 "mcpServers": {

299 "remote-api": {

300 "type": "sse",

301 "url": "https://api.example.com/mcp/sse",

302 "headers": {

303 "Authorization": "Bearer ${API_TOKEN}"

304 }

305 }

306 }

307 }

308 ```

309 </Tab>

310</Tabs>

311 

312Для HTTP (без потоковой передачи) используйте `"type": "http"` вместо этого.

313 

314### SDK MCP серверы

315 

316Определите пользовательские инструменты непосредственно в коде вашего приложения вместо запуска отдельного процесса сервера. Подробности реализации см. в [руководстве по пользовательским инструментам](/ru/agent-sdk/custom-tools).

317 

318## Поиск MCP инструментов

319 

320Когда у вас настроено много MCP инструментов, определения инструментов могут потребить значительную часть вашего контекстного окна. Поиск инструментов решает эту проблему, скрывая определения инструментов из контекста и загружая только те, которые Claude нужны для каждого хода.

321 

322Поиск инструментов включен по умолчанию. Подробности конфигурации см. в [Поиск инструментов](/ru/agent-sdk/tool-search).

323 

324Для получения дополнительной информации, включая лучшие практики и использование поиска инструментов с пользовательскими SDK инструментами, см. [руководство по поиску инструментов](/ru/agent-sdk/tool-search).

325 

326## Аутентификация

327 

328Большинство MCP серверов требуют аутентификации для доступа к внешним сервисам. Передавайте учётные данные через переменные окружения в конфигурации сервера.

329 

330### Передача учётных данных через переменные окружения

331 

332Используйте поле `env` для передачи ключей API, токенов и других учётных данных на MCP сервер:

333 

334<Tabs>

335 <Tab title="В коде">

336 <CodeGroup>

337 ```typescript TypeScript hidelines={1,-1} theme={null}

338 const _ = {

339 options: {

340 mcpServers: {

341 github: {

342 command: "npx",

343 args: ["-y", "@modelcontextprotocol/server-github"],

344 env: {

345 GITHUB_TOKEN: process.env.GITHUB_TOKEN

346 }

347 }

348 },

349 allowedTools: ["mcp__github__list_issues"]

350 }

351 };

352 ```

353 

354 ```python Python theme={null}

355 options = ClaudeAgentOptions(

356 mcp_servers={

357 "github": {

358 "command": "npx",

359 "args": ["-y", "@modelcontextprotocol/server-github"],

360 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

361 }

362 },

363 allowed_tools=["mcp__github__list_issues"],

364 )

365 ```

366 </CodeGroup>

367 </Tab>

368 

369 <Tab title=".mcp.json">

370 ```json theme={null}

371 {

372 "mcpServers": {

373 "github": {

374 "command": "npx",

375 "args": ["-y", "@modelcontextprotocol/server-github"],

376 "env": {

377 "GITHUB_TOKEN": "${GITHUB_TOKEN}"

378 }

379 }

380 }

381 }

382 ```

383 

384 Синтаксис `${GITHUB_TOKEN}` расширяет переменные окружения во время выполнения.

385 </Tab>

386</Tabs>

387 

388Полный рабочий пример с логированием отладки см. в разделе [Список проблем из репозитория](#list-issues-from-a-repository).

389 

390### HTTP заголовки для удалённых серверов

391 

392Для серверов HTTP и SSE передавайте заголовки аутентификации непосредственно в конфигурации сервера:

393 

394<Tabs>

395 <Tab title="В коде">

396 <CodeGroup>

397 ```typescript TypeScript hidelines={1,-1} theme={null}

398 const _ = {

399 options: {

400 mcpServers: {

401 "secure-api": {

402 type: "http",

403 url: "https://api.example.com/mcp",

404 headers: {

405 Authorization: `Bearer ${process.env.API_TOKEN}`

406 }

407 }

408 },

409 allowedTools: ["mcp__secure-api__*"]

410 }

411 };

412 ```

413 

414 ```python Python theme={null}

415 options = ClaudeAgentOptions(

416 mcp_servers={

417 "secure-api": {

418 "type": "http",

419 "url": "https://api.example.com/mcp",

420 "headers": {"Authorization": f"Bearer {os.environ['API_TOKEN']}"},

421 }

422 },

423 allowed_tools=["mcp__secure-api__*"],

424 )

425 ```

426 </CodeGroup>

427 </Tab>

428 

429 <Tab title=".mcp.json">

430 ```json theme={null}

431 {

432 "mcpServers": {

433 "secure-api": {

434 "type": "http",

435 "url": "https://api.example.com/mcp",

436 "headers": {

437 "Authorization": "Bearer ${API_TOKEN}"

438 }

439 }

440 }

441 }

442 ```

443 

444 Синтаксис `${API_TOKEN}` расширяет переменные окружения во время выполнения.

445 </Tab>

446</Tabs>

447 

448### Аутентификация OAuth2

449 

450[Спецификация MCP поддерживает OAuth 2.1](https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization) для авторизации. SDK не обрабатывает потоки OAuth автоматически, но вы можете передавать токены доступа через заголовки после завершения потока OAuth в вашем приложении:

451 

452<CodeGroup>

453 ```typescript TypeScript theme={null}

454 // After completing OAuth flow in your app

455 const accessToken = await getAccessTokenFromOAuthFlow();

456 

457 const options = {

458 mcpServers: {

459 "oauth-api": {

460 type: "http",

461 url: "https://api.example.com/mcp",

462 headers: {

463 Authorization: `Bearer ${accessToken}`

464 }

465 }

466 },

467 allowedTools: ["mcp__oauth-api__*"]

468 };

469 ```

470 

471 ```python Python theme={null}

472 # After completing OAuth flow in your app

473 access_token = await get_access_token_from_oauth_flow()

474 

475 options = ClaudeAgentOptions(

476 mcp_servers={

477 "oauth-api": {

478 "type": "http",

479 "url": "https://api.example.com/mcp",

480 "headers": {"Authorization": f"Bearer {access_token}"},

481 }

482 },

483 allowed_tools=["mcp__oauth-api__*"],

484 )

485 ```

486</CodeGroup>

487 

488## Примеры

489 

490### Список проблем из репозитория

491 

492Этот пример подключается к [GitHub MCP серверу](https://github.com/modelcontextprotocol/servers/tree/main/src/github) для списка последних проблем. Пример включает логирование отладки для проверки подключения MCP и вызовов инструментов.

493 

494Перед запуском создайте [личный токен доступа GitHub](https://github.com/settings/tokens) с областью `repo` и установите его как переменную окружения:

495 

496```bash theme={null}

497export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

498```

499 

500<CodeGroup>

501 ```typescript TypeScript theme={null}

502 import { query } from "@anthropic-ai/claude-agent-sdk";

503 

504 for await (const message of query({

505 prompt: "List the 3 most recent issues in anthropics/claude-code",

506 options: {

507 mcpServers: {

508 github: {

509 command: "npx",

510 args: ["-y", "@modelcontextprotocol/server-github"],

511 env: {

512 GITHUB_TOKEN: process.env.GITHUB_TOKEN

513 }

514 }

515 },

516 allowedTools: ["mcp__github__list_issues"]

517 }

518 })) {

519 // Verify MCP server connected successfully

520 if (message.type === "system" && message.subtype === "init") {

521 console.log("MCP servers:", message.mcp_servers);

522 }

523 

524 // Log when Claude calls an MCP tool

525 if (message.type === "assistant") {

526 for (const block of message.message.content) {

527 if (block.type === "tool_use" && block.name.startsWith("mcp__")) {

528 console.log("MCP tool called:", block.name);

529 }

530 }

531 }

532 

533 // Print the final result

534 if (message.type === "result" && message.subtype === "success") {

535 console.log(message.result);

536 }

537 }

538 ```

539 

540 ```python Python theme={null}

541 import asyncio

542 import os

543 from claude_agent_sdk import (

544 query,

545 ClaudeAgentOptions,

546 ResultMessage,

547 SystemMessage,

548 AssistantMessage,

549 )

550 

551 

552 async def main():

553 options = ClaudeAgentOptions(

554 mcp_servers={

555 "github": {

556 "command": "npx",

557 "args": ["-y", "@modelcontextprotocol/server-github"],

558 "env": {"GITHUB_TOKEN": os.environ["GITHUB_TOKEN"]},

559 }

560 },

561 allowed_tools=["mcp__github__list_issues"],

562 )

563 

564 async for message in query(

565 prompt="List the 3 most recent issues in anthropics/claude-code",

566 options=options,

567 ):

568 # Verify MCP server connected successfully

569 if isinstance(message, SystemMessage) and message.subtype == "init":

570 print("MCP servers:", message.data.get("mcp_servers"))

571 

572 # Log when Claude calls an MCP tool

573 if isinstance(message, AssistantMessage):

574 for block in message.content:

575 if hasattr(block, "name") and block.name.startswith("mcp__"):

576 print("MCP tool called:", block.name)

577 

578 # Print the final result

579 if isinstance(message, ResultMessage) and message.subtype == "success":

580 print(message.result)

581 

582 

583 asyncio.run(main())

584 ```

585</CodeGroup>

586 

587### Запрос к базе данных

588 

589Этот пример использует [Postgres MCP сервер](https://github.com/modelcontextprotocol/servers/tree/main/src/postgres) для запроса к базе данных. Строка подключения передаётся как аргумент серверу. Агент автоматически обнаруживает схему базы данных, пишет SQL запрос и возвращает результаты:

590 

591<CodeGroup>

592 ```typescript TypeScript theme={null}

593 import { query } from "@anthropic-ai/claude-agent-sdk";

594 

595 // Connection string from environment variable

596 const connectionString = process.env.DATABASE_URL;

597 

598 for await (const message of query({

599 // Natural language query - Claude writes the SQL

600 prompt: "How many users signed up last week? Break it down by day.",

601 options: {

602 mcpServers: {

603 postgres: {

604 command: "npx",

605 // Pass connection string as argument to the server

606 args: ["-y", "@modelcontextprotocol/server-postgres", connectionString]

607 }

608 },

609 // Allow only read queries, not writes

610 allowedTools: ["mcp__postgres__query"]

611 }

612 })) {

613 if (message.type === "result" && message.subtype === "success") {

614 console.log(message.result);

615 }

616 }

617 ```

618 

619 ```python Python theme={null}

620 import asyncio

621 import os

622 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

623 

624 

625 async def main():

626 # Connection string from environment variable

627 connection_string = os.environ["DATABASE_URL"]

628 

629 options = ClaudeAgentOptions(

630 mcp_servers={

631 "postgres": {

632 "command": "npx",

633 # Pass connection string as argument to the server

634 "args": [

635 "-y",

636 "@modelcontextprotocol/server-postgres",

637 connection_string,

638 ],

639 }

640 },

641 # Allow only read queries, not writes

642 allowed_tools=["mcp__postgres__query"],

643 )

644 

645 # Natural language query - Claude writes the SQL

646 async for message in query(

647 prompt="How many users signed up last week? Break it down by day.",

648 options=options,

649 ):

650 if isinstance(message, ResultMessage) and message.subtype == "success":

651 print(message.result)

652 

653 

654 asyncio.run(main())

655 ```

656</CodeGroup>

657 

658## Обработка ошибок

659 

660MCP серверы могут не подключиться по различным причинам: процесс сервера может быть не установлен, учётные данные могут быть неверными или удалённый сервер может быть недоступен.

661 

662SDK отправляет сообщение `system` с подтипом `init` в начале каждого запроса. Это сообщение включает статус подключения для каждого MCP сервера. Проверьте поле `status` для обнаружения сбоев подключения перед тем, как агент начнёт работать:

663 

664<CodeGroup>

665 ```typescript TypeScript theme={null}

666 import { query } from "@anthropic-ai/claude-agent-sdk";

667 

668 for await (const message of query({

669 prompt: "Process data",

670 options: {

671 mcpServers: {

672 "data-processor": dataServer

673 }

674 }

675 })) {

676 if (message.type === "system" && message.subtype === "init") {

677 const failedServers = message.mcp_servers.filter((s) => s.status !== "connected");

678 

679 if (failedServers.length > 0) {

680 console.warn("Failed to connect:", failedServers);

681 }

682 }

683 

684 if (message.type === "result" && message.subtype === "error_during_execution") {

685 console.error("Execution failed");

686 }

687 }

688 ```

689 

690 ```python Python theme={null}

691 import asyncio

692 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage, ResultMessage

693 

694 

695 async def main():

696 options = ClaudeAgentOptions(mcp_servers={"data-processor": data_server})

697 

698 async for message in query(prompt="Process data", options=options):

699 if isinstance(message, SystemMessage) and message.subtype == "init":

700 failed_servers = [

701 s

702 for s in message.data.get("mcp_servers", [])

703 if s.get("status") != "connected"

704 ]

705 

706 if failed_servers:

707 print(f"Failed to connect: {failed_servers}")

708 

709 if (

710 isinstance(message, ResultMessage)

711 and message.subtype == "error_during_execution"

712 ):

713 print("Execution failed")

714 

715 

716 asyncio.run(main())

717 ```

718</CodeGroup>

719 

720## Troubleshooting

721 

722### Сервер показывает статус "failed"

723 

724Проверьте сообщение `init`, чтобы увидеть, какие серверы не подключились:

725 

726```typescript theme={null}

727if (message.type === "system" && message.subtype === "init") {

728 for (const server of message.mcp_servers) {

729 if (server.status === "failed") {

730 console.error(`Server ${server.name} failed to connect`);

731 }

732 }

733}

734```

735 

736Частые причины:

737 

738* **Отсутствующие переменные окружения**: Убедитесь, что требуемые токены и учётные данные установлены. Для серверов stdio проверьте, что поле `env` соответствует тому, что ожидает сервер.

739* **Сервер не установлен**: Для команд `npx` проверьте, что пакет существует и Node.js находится в вашем PATH.

740* **Неверная строка подключения**: Для серверов баз данных проверьте формат строки подключения и что база данных доступна.

741* **Проблемы с сетью**: Для удалённых серверов HTTP/SSE проверьте, что URL доступен и любые брандмауэры разрешают подключение.

742 

743### Инструменты не вызываются

744 

745Если Claude видит инструменты, но не использует их, проверьте, что вы предоставили разрешение с помощью `allowedTools`:

746 

747```typescript hidelines={1,-1} theme={null}

748const _ = {

749 options: {

750 mcpServers: {

751 // your servers

752 },

753 allowedTools: ["mcp__servername__*"] // Required for Claude to use the tools

754 }

755};

756```

757 

758### Тайм-ауты подключения

759 

760SDK MCP имеет тайм-аут по умолчанию 60 секунд для подключений сервера. Если ваш сервер требует больше времени для запуска, подключение не удастся. Для серверов, которым требуется больше времени на запуск, рассмотрите:

761 

762* Использование более лёгкого сервера, если доступно

763* Предварительный прогрев сервера перед запуском вашего агента

764* Проверку логов сервера на предмет причин медленной инициализации

765 

766## Связанные ресурсы

767 

768* **[Руководство по пользовательским инструментам](/ru/agent-sdk/custom-tools)**: Создайте свой собственный MCP сервер, который работает в процессе с вашим приложением SDK

769* **[Разрешения](/ru/agent-sdk/permissions)**: Контролируйте, какие MCP инструменты может использовать ваш агент с помощью `allowedTools` и `disallowedTools`

770* **[Справочник TypeScript SDK](/ru/agent-sdk/typescript)**: Полный справочник API, включая опции конфигурации MCP

771* **[Справочник Python SDK](/ru/agent-sdk/python)**: Полный справочник API, включая опции конфигурации MCP

772* **[Каталог MCP серверов](https://github.com/modelcontextprotocol/servers)**: Просмотрите доступные MCP серверы для баз данных, API и многого другого

Details

834| `plugins` | `list[SdkPluginConfig]` | `[]` | Загрузите пользовательские plugins из локальных путей. См. [Plugins](/ru/agent-sdk/plugins) для деталей |834| `plugins` | `list[SdkPluginConfig]` | `[]` | Загрузите пользовательские plugins из локальных путей. См. [Plugins](/ru/agent-sdk/plugins) для деталей |

835| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Программно настройте поведение sandbox. См. [Sandbox settings](#sandboxsettings) для деталей |835| `sandbox` | [`SandboxSettings`](#sandboxsettings) ` \| None` | `None` | Программно настройте поведение sandbox. См. [Sandbox settings](#sandboxsettings) для деталей |

836| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Контролируйте, какие параметры файловой системы загружать. Передайте `[]` для отключения пользовательских, проектных и локальных параметров. Управляемые параметры политики загружаются независимо. См. [Use Claude Code features](/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) |836| `setting_sources` | `list[SettingSource] \| None` | `None` (CLI defaults: all sources) | Контролируйте, какие параметры файловой системы загружать. Передайте `[]` для отключения пользовательских, проектных и локальных параметров. Управляемые параметры политики загружаются независимо. См. [Use Claude Code features](/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

837| `skills` | `list[str] \| Literal["all"] \| None` | `None` | Skills, доступные сеансу. Передайте `"all"` для включения каждого обнаруженного skill, или список имен skills. Когда установлено, SDK автоматически включает инструмент Skill без указания его в `allowed_tools`. См. [Skills](/ru/agent-sdk/skills) |

837| `max_thinking_tokens` | `int \| None` | `None` | *Устарело* - Максимальные токены для блоков мышления. Вместо этого используйте `thinking` |838| `max_thinking_tokens` | `int \| None` | `None` | *Устарело* - Максимальные токены для блоков мышления. Вместо этого используйте `thinking` |

838| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Управляет поведением расширенного мышления. Имеет приоритет над `max_thinking_tokens` |839| `thinking` | [`ThinkingConfig`](#thinkingconfig) ` \| None` | `None` | Управляет поведением расширенного мышления. Имеет приоритет над `max_thinking_tokens` |

839| `effort` | `Literal["low", "medium", "high", "xhigh", "max"] \| None` | `None` | Уровень усилий для глубины мышления |840| `effort` | `Literal["low", "medium", "high", "xhigh", "max"] \| None` | `None` | Уровень усилий для глубины мышления |


1049| `tools` | Нет | Массив разрешенных имен инструментов. Если опущено, наследует все инструменты |1050| `tools` | Нет | Массив разрешенных имен инструментов. Если опущено, наследует все инструменты |

1050| `disallowedTools` | Нет | Массив имен инструментов для удаления из набора инструментов агента |1051| `disallowedTools` | Нет | Массив имен инструментов для удаления из набора инструментов агента |

1051| `model` | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как `"sonnet"`, `"opus"`, `"haiku"` или `"inherit"`, или полный ID модели. Если опущено, использует основную модель |1052| `model` | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как `"sonnet"`, `"opus"`, `"haiku"` или `"inherit"`, или полный ID модели. Если опущено, использует основную модель |

1052| `skills` | Нет | Список имен skills, доступных этому агенту |1053| `skills` | Нет | Список имен skills для предварительной загрузки в контекст агента при запуске. Неуказанные skills остаются вызываемыми через инструмент Skill |

1053| `memory` | Нет | Источник памяти для этого агента: `"user"`, `"project"` или `"local"` |1054| `memory` | Нет | Источник памяти для этого агента: `"user"`, `"project"` или `"local"` |

1054| `mcpServers` | Нет | MCP servers, доступные этому агенту. Каждая запись - это имя сервера или встроенный словарь `{name: config}` |1055| `mcpServers` | Нет | MCP servers, доступные этому агенту. Каждая запись - это имя сервера или встроенный словарь `{name: config}` |

1055| `initialPrompt` | Нет | Автоматически отправляется как первый ход пользователя, когда этот агент работает как основной агент потока |1056| `initialPrompt` | Нет | Автоматически отправляется как первый ход пользователя, когда этот агент работает как основной агент потока |

agent-sdk/sessions.md +324 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Работа с сеансами

6 

7> Как сеансы сохраняют историю разговора агента, и когда использовать continue, resume и fork для возврата к предыдущему запуску.

8 

9Сеанс — это история разговора, которую SDK накапливает во время работы вашего агента. Она содержит ваш запрос, каждый вызов инструмента, который сделал агент, каждый результат инструмента и каждый ответ. SDK автоматически записывает его на диск, чтобы вы могли вернуться к нему позже.

10 

11Возврат к сеансу означает, что агент имеет полный контекст с предыдущего момента: файлы, которые он уже прочитал, анализ, который он уже выполнил, решения, которые он уже принял. Вы можете задать дополнительный вопрос, восстановиться после прерывания или перейти к другому подходу.

12 

13<Note>

14 Сеансы сохраняют **разговор**, а не файловую систему. Чтобы создать снимок и отменить изменения файлов, которые сделал агент, используйте [file checkpointing](/ru/agent-sdk/file-checkpointing).

15</Note>

16 

17Это руководство охватывает, как выбрать правильный подход для вашего приложения, интерфейсы SDK, которые автоматически отслеживают сеансы, как захватить ID сеанса и использовать `resume` и `fork` вручную, и что нужно знать о возобновлении сеансов на разных хостах.

18 

19## Выберите подход

20 

21Объем управления сеансами, который вам нужен, зависит от структуры вашего приложения. Управление сеансами вступает в игру, когда вы отправляете несколько запросов, которые должны совместно использовать контекст. В рамках одного вызова `query()` агент уже делает столько ходов, сколько ему нужно, и запросы разрешения и `AskUserQuestion` [обрабатываются в цикле](/ru/agent-sdk/user-input) (они не завершают вызов).

22 

23| Что вы создаёте | Что использовать |

24| :------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------- |

25| Одноразовая задача: один запрос, без дополнительных вопросов | Ничего дополнительного. Один вызов `query()` справляется с этим. |

26| Многоходовой чат в одном процессе | [`ClaudeSDKClient` (Python) или `continue: true` (TypeScript)](#automatic-session-management). SDK отслеживает сеанс для вас без обработки ID. |

27| Продолжить с того же места после перезагрузки процесса | `continue_conversation=True` (Python) / `continue: true` (TypeScript). Возобновляет самый последний сеанс в каталоге, ID не требуется. |

28| Возобновить конкретный прошлый сеанс (не самый последний) | Захватите ID сеанса и передайте его в `resume`. |

29| Попробовать альтернативный подход без потери оригинала | Разветвите сеанс. |

30| Задача без состояния, не хотите ничего писать на диск (только TypeScript) | Установите [`persistSession: false`](/ru/agent-sdk/typescript#options). Сеанс существует только в памяти на время вызова. Python всегда сохраняет на диск. |

31 

32### Continue, resume и fork

33 

34Continue, resume и fork — это поля опций, которые вы устанавливаете на `query()` ([`ClaudeAgentOptions`](/ru/agent-sdk/python#claudeagentoptions) в Python, [`Options`](/ru/agent-sdk/typescript#options) в TypeScript).

35 

36**Continue** и **resume** оба подхватывают существующий сеанс и добавляют к нему. Разница в том, как они находят этот сеанс:

37 

38* **Continue** находит самый последний сеанс в текущем каталоге. Вы ничего не отслеживаете. Хорошо работает, когда ваше приложение запускает один разговор за раз.

39* **Resume** принимает конкретный ID сеанса. Вы отслеживаете ID. Требуется, когда у вас есть несколько сеансов (например, один на пользователя в многопользовательском приложении) или вы хотите вернуться к тому, который не является самым последним.

40 

41**Fork** отличается: он создаёт новый сеанс, который начинается с копии истории оригинала. Оригинал остаётся неизменным. Используйте fork, чтобы попробовать другое направление, сохраняя возможность вернуться назад.

42 

43## Автоматическое управление сеансами

44 

45Оба SDK предлагают интерфейс, который отслеживает состояние сеанса для вас между вызовами, поэтому вам не нужно вручную передавать ID. Используйте их для многоходовых разговоров в рамках одного процесса.

46 

47### Python: `ClaudeSDKClient`

48 

49[`ClaudeSDKClient`](/ru/agent-sdk/python#claudesdkclient) обрабатывает ID сеансов внутри. Каждый вызов `client.query()` автоматически продолжает тот же сеанс. Вызовите [`client.receive_response()`](/ru/agent-sdk/python#claudesdkclient) для итерации по сообщениям для текущего запроса. Клиент должен использоваться как асинхронный контекстный менеджер.

50 

51Этот пример запускает два запроса к одному и тому же `client`. Первый просит агента проанализировать модуль; второй просит её переделать эту модуль. Поскольку оба вызова проходят через один и тот же экземпляр клиента, второй запрос имеет полный контекст из первого без явного `resume` или ID сеанса:

52 

53```python Python theme={null}

54import asyncio

55from claude_agent_sdk import (

56 ClaudeSDKClient,

57 ClaudeAgentOptions,

58 AssistantMessage,

59 ResultMessage,

60 TextBlock,

61)

62 

63 

64def print_response(message):

65 """Print only the human-readable parts of a message."""

66 if isinstance(message, AssistantMessage):

67 for block in message.content:

68 if isinstance(block, TextBlock):

69 print(block.text)

70 elif isinstance(message, ResultMessage):

71 cost = (

72 f"${message.total_cost_usd:.4f}"

73 if message.total_cost_usd is not None

74 else "N/A"

75 )

76 print(f"[done: {message.subtype}, cost: {cost}]")

77 

78 

79async def main():

80 options = ClaudeAgentOptions(

81 allowed_tools=["Read", "Edit", "Glob", "Grep"],

82 )

83 

84 async with ClaudeSDKClient(options=options) as client:

85 # First query: client captures the session ID internally

86 await client.query("Analyze the auth module")

87 async for message in client.receive_response():

88 print_response(message)

89 

90 # Second query: automatically continues the same session

91 await client.query("Now refactor it to use JWT")

92 async for message in client.receive_response():

93 print_response(message)

94 

95 

96asyncio.run(main())

97```

98 

99Смотрите [справку Python SDK](/ru/agent-sdk/python#choosing-between-query-and-claudesdkclient) для деталей о том, когда использовать `ClaudeSDKClient` в сравнении с автономной функцией `query()`.

100 

101### TypeScript: `continue: true`

102 

103Стабильный TypeScript SDK (функция `query()`, используемая во всех этих документах, иногда называемая V1) не имеет объекта клиента, удерживающего сеанс, как Python's `ClaudeSDKClient`. Вместо этого передайте `continue: true` на каждом последующем вызове `query()` и SDK подхватит самый последний сеанс в текущем каталоге. Отслеживание ID не требуется.

104 

105Этот пример делает два отдельных вызова `query()`. Первый создаёт свежий сеанс; второй устанавливает `continue: true`, что говорит SDK найти и возобновить самый последний сеанс на диске. Агент имеет полный контекст из первого вызова:

106 

107```typescript TypeScript theme={null}

108import { query } from "@anthropic-ai/claude-agent-sdk";

109 

110// First query: creates a new session

111for await (const message of query({

112 prompt: "Analyze the auth module",

113 options: { allowedTools: ["Read", "Glob", "Grep"] }

114})) {

115 if (message.type === "result" && message.subtype === "success") {

116 console.log(message.result);

117 }

118}

119 

120// Second query: continue: true resumes the most recent session

121for await (const message of query({

122 prompt: "Now refactor it to use JWT",

123 options: {

124 continue: true,

125 allowedTools: ["Read", "Edit", "Write", "Glob", "Grep"]

126 }

127})) {

128 if (message.type === "result" && message.subtype === "success") {

129 console.log(message.result);

130 }

131}

132```

133 

134<Note>

135 Экспериментальный [V2 session API](/ru/agent-sdk/typescript-v2-preview), который предоставлял `createSession()` с паттерном `send` / `stream`, устарел. Используйте функцию V1 `query()` и параметры сеанса, описанные на этой странице.

136</Note>

137 

138## Используйте параметры сеанса с `query()`

139 

140### Захватите ID сеанса

141 

142Resume и fork требуют ID сеанса. Прочитайте его из поля `session_id` на сообщении результата ([`ResultMessage`](/ru/agent-sdk/python#resultmessage) в Python, [`SDKResultMessage`](/ru/agent-sdk/typescript#sdkresultmessage) в TypeScript), которое присутствует на каждом результате независимо от успеха или ошибки. В TypeScript ID также доступен раньше как прямое поле на инициализирующем `SystemMessage`; в Python он вложен внутри `SystemMessage.data`.

143 

144<CodeGroup>

145 ```python Python theme={null}

146 import asyncio

147 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage

148 

149 

150 async def main():

151 session_id = None

152 

153 async for message in query(

154 prompt="Analyze the auth module and suggest improvements",

155 options=ClaudeAgentOptions(

156 allowed_tools=["Read", "Glob", "Grep"],

157 ),

158 ):

159 if isinstance(message, ResultMessage):

160 session_id = message.session_id

161 if message.subtype == "success":

162 print(message.result)

163 

164 print(f"Session ID: {session_id}")

165 return session_id

166 

167 

168 session_id = asyncio.run(main())

169 ```

170 

171 ```typescript TypeScript theme={null}

172 import { query } from "@anthropic-ai/claude-agent-sdk";

173 

174 let sessionId: string | undefined;

175 

176 for await (const message of query({

177 prompt: "Analyze the auth module and suggest improvements",

178 options: { allowedTools: ["Read", "Glob", "Grep"] }

179 })) {

180 if (message.type === "result") {

181 sessionId = message.session_id;

182 if (message.subtype === "success") {

183 console.log(message.result);

184 }

185 }

186 }

187 

188 console.log(`Session ID: ${sessionId}`);

189 ```

190</CodeGroup>

191 

192### Возобновите по ID

193 

194Передайте ID сеанса в `resume`, чтобы вернуться к этому конкретному сеансу. Агент подхватывает с полным контекстом с того момента, где сеанс остановился. Распространённые причины для возобновления:

195 

196* **Продолжить завершённую задачу.** Агент уже что-то проанализировал; теперь вы хотите, чтобы он действовал на основе этого анализа без повторного чтения файлов.

197* **Восстановиться от лимита.** Первый запуск закончился с `error_max_turns` или `error_max_budget_usd` (смотрите [Handle the result](/ru/agent-sdk/agent-loop#handle-the-result)); возобновите с более высоким лимитом.

198* **Перезагрузить ваш процесс.** Вы захватили ID перед выключением и хотите восстановить разговор.

199 

200Этот пример возобновляет сеанс из [Захватите ID сеанса](#capture-the-session-id) с дополнительным запросом. Поскольку вы возобновляете, агент уже имеет предыдущий анализ в контексте:

201 

202<CodeGroup>

203 ```python Python theme={null}

204 # Earlier session analyzed the code; now build on that analysis

205 async for message in query(

206 prompt="Now implement the refactoring you suggested",

207 options=ClaudeAgentOptions(

208 resume=session_id,

209 allowed_tools=["Read", "Edit", "Write", "Glob", "Grep"],

210 ),

211 ):

212 if isinstance(message, ResultMessage) and message.subtype == "success":

213 print(message.result)

214 ```

215 

216 ```typescript TypeScript theme={null}

217 // Earlier session analyzed the code; now build on that analysis

218 for await (const message of query({

219 prompt: "Now implement the refactoring you suggested",

220 options: {

221 resume: sessionId,

222 allowedTools: ["Read", "Edit", "Write", "Glob", "Grep"]

223 }

224 })) {

225 if (message.type === "result" && message.subtype === "success") {

226 console.log(message.result);

227 }

228 }

229 ```

230</CodeGroup>

231 

232<Tip>

233 Если вызов `resume` возвращает свежий сеанс вместо ожидаемой истории, наиболее распространённая причина — несовпадающий `cwd`. Сеансы хранятся под `~/.claude/projects/<encoded-cwd>/*.jsonl`, где `<encoded-cwd>` — это абсолютный рабочий каталог со всеми буквенно-цифровыми символами, заменённые на `-` (так `/Users/me/proj` становится `-Users-me-proj`). Если ваш вызов resume запускается из другого каталога, SDK ищет в неправильном месте. Файл сеанса также должен существовать на текущей машине.

234</Tip>

235 

236Чтобы возобновить сеансы на разных машинах или в бессерверных окружениях, зеркалируйте стенограммы в общее хранилище с адаптером [`SessionStore`](/ru/agent-sdk/session-storage).

237 

238### Разветвите для изучения альтернатив

239 

240Разветвление создаёт новый сеанс, который начинается с копии истории оригинала, но расходится с этого момента. Разветвление получает свой собственный ID сеанса; ID оригинала и история остаются неизменными. Вы получаете два независимых сеанса, которые можете возобновить отдельно.

241 

242<Note>

243 Разветвление ветвит историю разговора, а не файловую систему. Если разветвлённый агент редактирует файлы, эти изменения реальны и видны любому сеансу, работающему в том же каталоге. Чтобы разветвить и отменить изменения файлов, используйте [file checkpointing](/ru/agent-sdk/file-checkpointing).

244</Note>

245 

246Этот пример основывается на [Захватите ID сеанса](#capture-the-session-id): вы уже проанализировали модуль аутентификации в `session_id` и хотите изучить OAuth2 без потери потока, сосредоточенного на JWT. Первый блок разветвляет сеанс и захватывает ID разветвления (`forked_id`); второй блок возобновляет оригинальный `session_id` для продолжения по пути JWT. Теперь у вас есть два ID сеанса, указывающих на две отдельные истории:

247 

248<CodeGroup>

249 ```python Python theme={null}

250 # Fork: branch from session_id into a new session

251 forked_id = None

252 async for message in query(

253 prompt="Instead of JWT, implement OAuth2 for the auth module",

254 options=ClaudeAgentOptions(

255 resume=session_id,

256 fork_session=True,

257 ),

258 ):

259 if isinstance(message, ResultMessage):

260 forked_id = message.session_id # The fork's ID, distinct from session_id

261 if message.subtype == "success":

262 print(message.result)

263 

264 print(f"Forked session: {forked_id}")

265 

266 # Original session is untouched; resuming it continues the JWT thread

267 async for message in query(

268 prompt="Continue with the JWT approach",

269 options=ClaudeAgentOptions(resume=session_id),

270 ):

271 if isinstance(message, ResultMessage) and message.subtype == "success":

272 print(message.result)

273 ```

274 

275 ```typescript TypeScript theme={null}

276 // Fork: branch from sessionId into a new session

277 let forkedId: string | undefined;

278 

279 for await (const message of query({

280 prompt: "Instead of JWT, implement OAuth2 for the auth module",

281 options: {

282 resume: sessionId,

283 forkSession: true

284 }

285 })) {

286 if (message.type === "system" && message.subtype === "init") {

287 forkedId = message.session_id; // The fork's ID, distinct from sessionId

288 }

289 if (message.type === "result" && message.subtype === "success") {

290 console.log(message.result);

291 }

292 }

293 

294 console.log(`Forked session: ${forkedId}`);

295 

296 // Original session is untouched; resuming it continues the JWT thread

297 for await (const message of query({

298 prompt: "Continue with the JWT approach",

299 options: { resume: sessionId }

300 })) {

301 if (message.type === "result" && message.subtype === "success") {

302 console.log(message.result);

303 }

304 }

305 ```

306</CodeGroup>

307 

308## Возобновите на разных хостах

309 

310Файлы сеансов локальны для машины, которая их создала. Чтобы возобновить сеанс на другом хосте (рабочие CI, эфемерные контейнеры, бессерверные), у вас есть два варианта:

311 

312* **Переместите файл сеанса.** Сохраните `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` из первого запуска и восстановите его по тому же пути на новом хосте перед вызовом `resume`. `cwd` должен совпадать.

313* **Не полагайтесь на возобновление сеанса.** Захватите результаты, которые вам нужны (вывод анализа, решения, различия файлов) как состояние приложения и передайте их в запрос свежего сеанса. Это часто более надёжно, чем отправка файлов стенограмм.

314 

315Оба SDK предоставляют функции для перечисления сеансов на диске и чтения их сообщений: [`listSessions()`](/ru/agent-sdk/typescript#listsessions) и [`getSessionMessages()`](/ru/agent-sdk/typescript#getsessionmessages) в TypeScript, [`list_sessions()`](/ru/agent-sdk/python#list_sessions) и [`get_session_messages()`](/ru/agent-sdk/python#get_session_messages) в Python. Используйте их для создания пользовательских средств выбора сеансов, логики очистки или средств просмотра стенограмм.

316 

317Оба SDK также предоставляют функции для поиска и изменения отдельных сеансов: [`get_session_info()`](/ru/agent-sdk/python#get_session_info), [`rename_session()`](/ru/agent-sdk/python#rename_session) и [`tag_session()`](/ru/agent-sdk/python#tag_session) в Python, и [`getSessionInfo()`](/ru/agent-sdk/typescript#getsessioninfo), [`renameSession()`](/ru/agent-sdk/typescript#renamesession) и [`tagSession()`](/ru/agent-sdk/typescript#tagsession) в TypeScript. Используйте их для организации сеансов по тегам или присвоения им удобочитаемых названий.

318 

319## Связанные ресурсы

320 

321* [Как работает цикл агента](/ru/agent-sdk/agent-loop): Поймите ходы, сообщения и накопление контекста в рамках сеанса

322* [File checkpointing](/ru/agent-sdk/file-checkpointing): Отслеживайте и отменяйте изменения файлов между сеансами

323* [Python `ClaudeAgentOptions`](/ru/agent-sdk/python#claudeagentoptions): Полная справка параметров сеанса для Python

324* [TypeScript `Options`](/ru/agent-sdk/typescript#options): Полная справка параметров сеанса для TypeScript

agent-sdk/skills.md +314 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Agent Skills в SDK

6 

7> Расширьте Claude специализированными возможностями, используя Agent Skills в Claude Agent SDK

8 

9## Обзор

10 

11Agent Skills расширяют Claude специализированными возможностями, которые Claude автономно вызывает при необходимости. Skills упаковываются в виде файлов `SKILL.md`, содержащих инструкции, описания и дополнительные вспомогательные ресурсы.

12 

13Для получения полной информации о Skills, включая преимущества, архитектуру и рекомендации по разработке, см. [обзор Agent Skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview).

14 

15## Как Skills работают с SDK

16 

17При использовании Claude Agent SDK Skills:

18 

191. **Определяются как артефакты файловой системы**: Создаются как файлы `SKILL.md` в определённых каталогах (`.claude/skills/`)

202. **Загружаются из файловой системы**: Skills загружаются из расположений файловой системы, управляемых `settingSources` (TypeScript) или `setting_sources` (Python)

213. **Автоматически обнаруживаются**: После загрузки параметров файловой системы метаданные Skill обнаруживаются при запуске из пользовательских и проектных каталогов; полное содержимое загружается при срабатывании

224. **Вызываются моделью**: Claude автономно выбирает, когда их использовать, на основе контекста

235. **Фильтруются через опцию `skills`**: Обнаруженные Skills включены по умолчанию. Передайте список имён Skills, `"all"` или `[]` для управления доступными в сеансе

24 

25В отличие от subagents (которые можно определить программно), Skills должны быть созданы как артефакты файловой системы. SDK не предоставляет программный API для регистрации Skills.

26 

27<Note>

28 Skills обнаруживаются через источники параметров файловой системы. С параметрами `query()` по умолчанию SDK загружает пользовательские и проектные источники, поэтому Skills в `~/.claude/skills/` и `<cwd>/.claude/skills/` доступны. Если вы явно установите `settingSources`, включите `'user'` или `'project'` для сохранения обнаружения Skills, или используйте [опцию `plugins`](/ru/agent-sdk/plugins) для загрузки Skills из определённого пути.

29</Note>

30 

31## Использование Skills с SDK

32 

33Установите опцию `skills` на `query()` для управления тем, какие Skills доступны для сеанса. Если опция опущена, обнаруженные Skills включены и инструмент Skill доступен, что соответствует поведению CLI. Передайте `"all"` для включения каждого обнаруженного Skill, список имён Skill для включения только тех или `[]` для отключения всех. Когда вы устанавливаете `skills`, SDK автоматически включает инструмент Skill, поэтому вам не нужно указывать его в `allowedTools`.

34 

35После настройки Claude автоматически обнаруживает Skills из файловой системы и вызывает их при необходимости для запроса пользователя.

36 

37<CodeGroup>

38 ```python Python theme={null}

39 import asyncio

40 from claude_agent_sdk import query, ClaudeAgentOptions

41 

42 

43 async def main():

44 options = ClaudeAgentOptions(

45 cwd="/path/to/project", # Project with .claude/skills/

46 setting_sources=["user", "project"], # Load Skills from filesystem

47 skills="all", # Enable every discovered Skill

48 allowed_tools=["Read", "Write", "Bash"],

49 )

50 

51 async for message in query(

52 prompt="Help me process this PDF document", options=options

53 ):

54 print(message)

55 

56 

57 asyncio.run(main())

58 ```

59 

60 ```typescript TypeScript theme={null}

61 import { query } from "@anthropic-ai/claude-agent-sdk";

62 

63 for await (const message of query({

64 prompt: "Help me process this PDF document",

65 options: {

66 cwd: "/path/to/project", // Project with .claude/skills/

67 settingSources: ["user", "project"], // Load Skills from filesystem

68 skills: "all", // Enable every discovered Skill

69 allowedTools: ["Read", "Write", "Bash"]

70 }

71 })) {

72 console.log(message);

73 }

74 ```

75</CodeGroup>

76 

77Для включения только определённых Skills передайте их имена. Имена соответствуют полю `name` в `SKILL.md` или имени каталога Skill. Используйте `plugin:skill` для Skills, предоставляемых плагинами.

78 

79<CodeGroup>

80 ```python Python theme={null}

81 options = ClaudeAgentOptions(skills=["pdf", "docx"])

82 ```

83 

84 ```typescript TypeScript theme={null}

85 const options = { skills: ["pdf", "docx"] };

86 ```

87</CodeGroup>

88 

89Опция `skills` является фильтром контекста, а не песочницей. Неуказанные Skills скрыты от модели и отклонены инструментом Skill, но их файлы остаются на диске и доступны через Read и Bash.

90 

91## Расположение Skills

92 

93Skills загружаются из каталогов файловой системы на основе конфигурации `settingSources`/`setting_sources`:

94 

95* **Project Skills** (`.claude/skills/`): Общие с вашей командой через git - загружаются, когда `setting_sources` включает `"project"`

96* **User Skills** (`~/.claude/skills/`): Личные Skills для всех проектов - загружаются, когда `setting_sources` включает `"user"`

97* **Plugin Skills**: Поставляются с установленными Claude Code плагинами

98 

99## Создание Skills

100 

101Skills определяются как каталоги, содержащие файл `SKILL.md` с YAML frontmatter и содержимым Markdown. Поле `description` определяет, когда Claude вызывает ваш Skill.

102 

103**Пример структуры каталога**:

104 

105```bash theme={null}

106.claude/skills/processing-pdfs/

107└── SKILL.md

108```

109 

110Для полного руководства по созданию Skills, включая структуру SKILL.md, многофайловые Skills и примеры, см.:

111 

112* [Agent Skills в Claude Code](/ru/skills): Полное руководство с примерами

113* [Agent Skills Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices): Рекомендации по разработке и соглашения об именовании

114 

115## Ограничения инструментов

116 

117<Note>

118 Поле frontmatter `allowed-tools` в SKILL.md поддерживается только при прямом использовании Claude Code CLI. **Оно не применяется при использовании Skills через SDK**.

119 

120 При использовании SDK управляйте доступом к инструментам через основную опцию `allowedTools` в конфигурации запроса.

121</Note>

122 

123Для управления доступом к инструментам для Skills в приложениях SDK используйте `allowedTools` для предварительного одобрения определённых инструментов. Без обратного вызова `canUseTool` всё, что не в списке, отклоняется:

124 

125<Note>

126 Предполагается, что операторы импорта из первого примера используются в следующих фрагментах кода.

127</Note>

128 

129<CodeGroup>

130 ```python Python theme={null}

131 options = ClaudeAgentOptions(

132 setting_sources=["user", "project"], # Load Skills from filesystem

133 skills="all",

134 allowed_tools=["Read", "Grep", "Glob"],

135 )

136 

137 async for message in query(prompt="Analyze the codebase structure", options=options):

138 print(message)

139 ```

140 

141 ```typescript TypeScript theme={null}

142 for await (const message of query({

143 prompt: "Analyze the codebase structure",

144 options: {

145 settingSources: ["user", "project"], // Load Skills from filesystem

146 skills: "all",

147 allowedTools: ["Read", "Grep", "Glob"],

148 permissionMode: "dontAsk" // Deny anything not in allowedTools

149 }

150 })) {

151 console.log(message);

152 }

153 ```

154</CodeGroup>

155 

156## Обнаружение доступных Skills

157 

158Чтобы узнать, какие Skills доступны в вашем приложении SDK, просто спросите Claude:

159 

160<CodeGroup>

161 ```python Python theme={null}

162 options = ClaudeAgentOptions(

163 setting_sources=["user", "project"], # Load Skills from filesystem

164 skills="all",

165 )

166 

167 async for message in query(prompt="What Skills are available?", options=options):

168 print(message)

169 ```

170 

171 ```typescript TypeScript theme={null}

172 for await (const message of query({

173 prompt: "What Skills are available?",

174 options: {

175 settingSources: ["user", "project"], // Load Skills from filesystem

176 skills: "all"

177 }

178 })) {

179 console.log(message);

180 }

181 ```

182</CodeGroup>

183 

184Claude выведет список доступных Skills на основе вашего текущего рабочего каталога и установленных плагинов.

185 

186## Тестирование Skills

187 

188Тестируйте Skills, задавая вопросы, которые соответствуют их описаниям:

189 

190<CodeGroup>

191 ```python Python theme={null}

192 options = ClaudeAgentOptions(

193 cwd="/path/to/project",

194 setting_sources=["user", "project"], # Load Skills from filesystem

195 skills="all",

196 allowed_tools=["Read", "Bash"],

197 )

198 

199 async for message in query(prompt="Extract text from invoice.pdf", options=options):

200 print(message)

201 ```

202 

203 ```typescript TypeScript theme={null}

204 for await (const message of query({

205 prompt: "Extract text from invoice.pdf",

206 options: {

207 cwd: "/path/to/project",

208 settingSources: ["user", "project"], // Load Skills from filesystem

209 skills: "all",

210 allowedTools: ["Read", "Bash"]

211 }

212 })) {

213 console.log(message);

214 }

215 ```

216</CodeGroup>

217 

218Claude автоматически вызывает соответствующий Skill, если описание соответствует вашему запросу.

219 

220## Troubleshooting

221 

222### Skills не найдены

223 

224**Проверьте конфигурацию settingSources**: Skills обнаруживаются через источники параметров `user` и `project`. Если вы явно установите `settingSources`/`setting_sources` и опустите эти источники, Skills не загружаются:

225 

226<CodeGroup>

227 ```python Python theme={null}

228 # Skills not loaded: setting_sources excludes user and project

229 options = ClaudeAgentOptions(setting_sources=[], skills="all")

230 

231 # Skills loaded: user and project sources included

232 options = ClaudeAgentOptions(

233 setting_sources=["user", "project"],

234 skills="all",

235 )

236 ```

237 

238 ```typescript TypeScript theme={null}

239 // Skills not loaded: settingSources excludes user and project

240 const options = {

241 settingSources: [],

242 skills: "all"

243 };

244 

245 // Skills loaded: user and project sources included

246 const options = {

247 settingSources: ["user", "project"],

248 skills: "all"

249 };

250 ```

251</CodeGroup>

252 

253Для получения дополнительной информации о `settingSources`/`setting_sources` см. [справочник TypeScript SDK](/ru/agent-sdk/typescript#settingsource) или [справочник Python SDK](/ru/agent-sdk/python#settingsource).

254 

255**Проверьте рабочий каталог**: SDK загружает Skills относительно опции `cwd`. Убедитесь, что она указывает на каталог, содержащий `.claude/skills/`:

256 

257<CodeGroup>

258 ```python Python theme={null}

259 # Ensure your cwd points to the directory containing .claude/skills/

260 options = ClaudeAgentOptions(

261 cwd="/path/to/project", # Must contain .claude/skills/

262 setting_sources=["user", "project"], # Loads skills from these sources

263 skills="all",

264 )

265 ```

266 

267 ```typescript TypeScript theme={null}

268 // Ensure your cwd points to the directory containing .claude/skills/

269 const options = {

270 cwd: "/path/to/project", // Must contain .claude/skills/

271 settingSources: ["user", "project"], // Loads skills from these sources

272 skills: "all"

273 };

274 ```

275</CodeGroup>

276 

277Полный паттерн см. в разделе "Использование Skills с SDK" выше.

278 

279**Проверьте расположение файловой системы**:

280 

281```bash theme={null}

282# Check project Skills

283ls .claude/skills/*/SKILL.md

284 

285# Check personal Skills

286ls ~/.claude/skills/*/SKILL.md

287```

288 

289### Skill не используется

290 

291**Проверьте опцию `skills`**: Если вы передали список `skills`, подтвердите, что имя Skill включено. Передача `[]` отключает все Skills.

292 

293**Проверьте описание**: Убедитесь, что оно конкретно и включает соответствующие ключевые слова. Рекомендации по написанию эффективных описаний см. в [Agent Skills Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices#writing-effective-descriptions).

294 

295### Дополнительное Troubleshooting

296 

297Для общего Troubleshooting Skills (синтаксис YAML, отладка и т. д.) см. [раздел Troubleshooting Claude Code Skills](/ru/skills#troubleshooting).

298 

299## Связанная документация

300 

301### Руководства Skills

302 

303* [Agent Skills в Claude Code](/ru/skills): Полное руководство Skills с созданием, примерами и Troubleshooting

304* [Agent Skills Overview](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview): Концептуальный обзор, преимущества и архитектура

305* [Agent Skills Best Practices](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices): Рекомендации по разработке эффективных Skills

306* [Agent Skills Cookbook](https://platform.claude.com/cookbook/skills-notebooks-01-skills-introduction): Примеры Skills и шаблоны

307 

308### Ресурсы SDK

309 

310* [Subagents в SDK](/ru/agent-sdk/subagents): Похожие агенты на основе файловой системы с программными опциями

311* [Slash Commands в SDK](/ru/agent-sdk/slash-commands): Команды, вызываемые пользователем

312* [Обзор SDK](/ru/agent-sdk/overview): Общие концепции SDK

313* [Справочник TypeScript SDK](/ru/agent-sdk/typescript): Полная документация API

314* [Справочник Python SDK](/ru/agent-sdk/python): Полная документация API

agent-sdk/subagents.md +601 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Подагенты в SDK

6 

7> Определяйте и вызывайте подагентов для изоляции контекста, параллельного выполнения задач и применения специализированных инструкций в приложениях Claude Agent SDK.

8 

9Подагенты — это отдельные экземпляры агентов, которые ваш основной агент может создавать для обработки сосредоточенных подзадач.

10Используйте подагентов для изоляции контекста при выполнении сосредоточенных подзадач, параллельного запуска нескольких анализов и применения специализированных инструкций без перегрузки основного промпта агента.

11 

12В этом руководстве объясняется, как определять и использовать подагентов в SDK с помощью параметра `agents`.

13 

14## Обзор

15 

16Вы можете создавать подагентов тремя способами:

17 

18* **Программно**: используйте параметр `agents` в параметрах `query()` ([TypeScript](/ru/agent-sdk/typescript#agentdefinition), [Python](/ru/agent-sdk/python#agentdefinition))

19* **На основе файловой системы**: определяйте агентов как файлы markdown в директориях `.claude/agents/` (см. [определение подагентов как файлов](/ru/sub-agents))

20* **Встроенный универсальный**: Claude может вызывать встроенного подагента `general-purpose` в любое время через инструмент Agent без необходимости что-либо определять

21 

22Это руководство сосредоточено на программном подходе, который рекомендуется для приложений SDK.

23 

24Когда вы определяете подагентов, Claude определяет, следует ли их вызывать, на основе поля `description` каждого подагента. Напишите четкие описания, которые объясняют, когда следует использовать подагента, и Claude автоматически делегирует соответствующие задачи. Вы также можете явно запросить подагента по имени в своем промпте (например, "Используйте агента code-reviewer для...").

25 

26## Преимущества использования подагентов

27 

28### Изоляция контекста

29 

30Каждый подагент работает в своей собственной свежей беседе. Промежуточные вызовы инструментов и результаты остаются внутри подагента; только его финальное сообщение возвращается к родительскому агенту. См. [Что наследуют подагенты](#what-subagents-inherit) для точного понимания того, что находится в контексте подагента.

31 

32**Пример:** подагент `research-assistant` может исследовать десятки файлов без накопления этого содержимого в основной беседе. Родительский агент получает краткое резюме, а не каждый файл, который прочитал подагент.

33 

34### Параллелизация

35 

36Несколько подагентов могут работать одновременно, что значительно ускоряет сложные рабочие процессы.

37 

38**Пример:** во время проверки кода вы можете одновременно запустить подагентов `style-checker`, `security-scanner` и `test-coverage`, сократив время проверки с минут до секунд.

39 

40### Специализированные инструкции и знания

41 

42Каждый подагент может иметь адаптированные системные промпты со специфической экспертизой, лучшими практиками и ограничениями.

43 

44**Пример:** подагент `database-migration` может иметь подробные знания о лучших практиках SQL, стратегиях отката и проверках целостности данных, которые были бы ненужным шумом в инструкциях основного агента.

45 

46### Ограничения инструментов

47 

48Подагенты могут быть ограничены определенными инструментами, снижая риск непредвиденных действий.

49 

50**Пример:** подагент `doc-reviewer` может иметь доступ только к инструментам Read и Grep, обеспечивая анализ, но никогда случайно не модифицируя файлы документации.

51 

52## Создание подагентов

53 

54### Программное определение (рекомендуется)

55 

56Определяйте подагентов непосредственно в коде, используя параметр `agents`. Этот пример создает двух подагентов: рецензента кода с доступом только для чтения и средство запуска тестов, которое может выполнять команды. Инструмент `Agent` должен быть включен в `allowedTools`, так как Claude вызывает подагентов через инструмент Agent.

57 

58<CodeGroup>

59 ```python Python theme={null}

60 import asyncio

61 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

62 

63 

64 async def main():

65 async for message in query(

66 prompt="Review the authentication module for security issues",

67 options=ClaudeAgentOptions(

68 # Agent tool is required for subagent invocation

69 allowed_tools=["Read", "Grep", "Glob", "Agent"],

70 agents={

71 "code-reviewer": AgentDefinition(

72 # description tells Claude when to use this subagent

73 description="Expert code review specialist. Use for quality, security, and maintainability reviews.",

74 # prompt defines the subagent's behavior and expertise

75 prompt="""You are a code review specialist with expertise in security, performance, and best practices.

76 

77 When reviewing code:

78 - Identify security vulnerabilities

79 - Check for performance issues

80 - Verify adherence to coding standards

81 - Suggest specific improvements

82 

83 Be thorough but concise in your feedback.""",

84 # tools restricts what the subagent can do (read-only here)

85 tools=["Read", "Grep", "Glob"],

86 # model overrides the default model for this subagent

87 model="sonnet",

88 ),

89 "test-runner": AgentDefinition(

90 description="Runs and analyzes test suites. Use for test execution and coverage analysis.",

91 prompt="""You are a test execution specialist. Run tests and provide clear analysis of results.

92 

93 Focus on:

94 - Running test commands

95 - Analyzing test output

96 - Identifying failing tests

97 - Suggesting fixes for failures""",

98 # Bash access lets this subagent run test commands

99 tools=["Bash", "Read", "Grep"],

100 ),

101 },

102 ),

103 ):

104 if hasattr(message, "result"):

105 print(message.result)

106 

107 

108 asyncio.run(main())

109 ```

110 

111 ```typescript TypeScript theme={null}

112 import { query } from "@anthropic-ai/claude-agent-sdk";

113 

114 for await (const message of query({

115 prompt: "Review the authentication module for security issues",

116 options: {

117 // Agent tool is required for subagent invocation

118 allowedTools: ["Read", "Grep", "Glob", "Agent"],

119 agents: {

120 "code-reviewer": {

121 // description tells Claude when to use this subagent

122 description:

123 "Expert code review specialist. Use for quality, security, and maintainability reviews.",

124 // prompt defines the subagent's behavior and expertise

125 prompt: `You are a code review specialist with expertise in security, performance, and best practices.

126 

127 When reviewing code:

128 - Identify security vulnerabilities

129 - Check for performance issues

130 - Verify adherence to coding standards

131 - Suggest specific improvements

132 

133 Be thorough but concise in your feedback.`,

134 // tools restricts what the subagent can do (read-only here)

135 tools: ["Read", "Grep", "Glob"],

136 // model overrides the default model for this subagent

137 model: "sonnet"

138 },

139 "test-runner": {

140 description:

141 "Runs and analyzes test suites. Use for test execution and coverage analysis.",

142 prompt: `You are a test execution specialist. Run tests and provide clear analysis of results.

143 

144 Focus on:

145 - Running test commands

146 - Analyzing test output

147 - Identifying failing tests

148 - Suggesting fixes for failures`,

149 // Bash access lets this subagent run test commands

150 tools: ["Bash", "Read", "Grep"]

151 }

152 }

153 }

154 })) {

155 if ("result" in message) console.log(message.result);

156 }

157 ```

158</CodeGroup>

159 

160### Конфигурация AgentDefinition

161 

162| Поле | Тип | Обязательно | Описание |

163| :---------------- | :---------------------------------------------------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

164| `description` | `string` | Да | Описание на естественном языке того, когда использовать этого агента |

165| `prompt` | `string` | Да | Системный промпт агента, определяющий его роль и поведение |

166| `tools` | `string[]` | Нет | Массив разрешенных имен инструментов. Если опущено, наследует все инструменты |

167| `disallowedTools` | `string[]` | Нет | Массив имен инструментов для удаления из набора инструментов агента |

168| `model` | `string` | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, или полный ID модели. По умолчанию используется основная модель, если опущено |

169| `skills` | `string[]` | Нет | Список имен skills для предварительной загрузки в контекст агента при запуске. Неперечисленные skills остаются вызываемыми через инструмент Skill |

170| `memory` | `'user' \| 'project' \| 'local'` | Нет | Источник памяти для этого агента |

171| `mcpServers` | `(string \| object)[]` | Нет | MCP серверы, доступные этому агенту, по имени или встроенной конфигурации |

172| `maxTurns` | `number` | Нет | Максимальное количество ходов агента перед остановкой |

173| `background` | `boolean` | Нет | Запустить этого агента как неблокирующую фоновую задачу при вызове |

174| `effort` | `'low' \| 'medium' \| 'high' \| 'xhigh' \| 'max' \| number` | Нет | Уровень усилий рассуждения для этого агента |

175| `permissionMode` | `PermissionMode` | Нет | Режим разрешений для выполнения инструментов в этом агенте |

176 

177В Python SDK эти имена полей используют camelCase для соответствия формату передачи. Подробности см. в [справочнике `AgentDefinition`](/ru/agent-sdk/python#agentdefinition).

178 

179<Note>

180 Подагенты не могут создавать своих собственных подагентов. Не включайте `Agent` в массив `tools` подагента.

181</Note>

182 

183### Определение на основе файловой системы (альтернатива)

184 

185Вы также можете определять подагентов как файлы markdown в директориях `.claude/agents/`. Подробности об этом подходе см. в [документации подагентов Claude Code](/ru/sub-agents). Программно определенные агенты имеют приоритет над агентами на основе файловой системы с тем же именем.

186 

187<Note>

188 Даже без определения пользовательских подагентов, Claude может создавать встроенного подагента `general-purpose`, когда `Agent` находится в вашем `allowedTools`. Это полезно для делегирования задач исследования или исследования без создания специализированных агентов.

189</Note>

190 

191## Что наследуют подагенты

192 

193Окно контекста подагента начинается свежим (без истории родительской беседы), но не пусто. Единственный канал от родителя к подагенту — это строка промпта инструмента Agent, поэтому включайте любые пути файлов, сообщения об ошибках или решения, которые нужны подагенту, непосредственно в этот промпт.

194 

195| Подагент получает | Подагент не получает |

196| :------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------- |

197| Его собственный системный промпт (`AgentDefinition.prompt`) и промпт инструмента Agent | История беседы родителя или результаты инструментов |

198| Проект CLAUDE.md (загруженный через `settingSources`) | Предварительно загруженное содержимое skills, если не указано в `AgentDefinition.skills` |

199| Определения инструментов (унаследованные от родителя или подмножество в `tools`) | Системный промпт родителя |

200 

201<Note>

202 Родитель получает финальное сообщение подагента дословно как результат инструмента Agent, но может суммировать его в своем собственном ответе. Чтобы сохранить выходные данные подагента дословно в ответе, обращенном к пользователю, включите инструкцию об этом в промпт или опцию `systemPrompt`, которую вы передаете основному вызову `query()`.

203</Note>

204 

205## Вызов подагентов

206 

207### Автоматический вызов

208 

209Claude автоматически решает, когда вызывать подагентов, на основе задачи и поля `description` каждого подагента. Например, если вы определяете подагента `performance-optimizer` с описанием "Performance optimization specialist for query tuning", Claude вызовет его, когда ваш промпт упоминает оптимизацию запросов.

210 

211Напишите четкие, конкретные описания, чтобы Claude мог сопоставить задачи с правильным подагентом.

212 

213### Явный вызов

214 

215Чтобы гарантировать, что Claude использует определенного подагента, упомяните его по имени в своем промпте:

216 

217```text theme={null}

218"Use the code-reviewer agent to check the authentication module"

219```

220 

221Это обходит автоматическое сопоставление и напрямую вызывает названного подагента.

222 

223### Динамическая конфигурация агента

224 

225Вы можете создавать определения агентов динамически на основе условий во время выполнения. Этот пример создает рецензента безопасности с разными уровнями строгости, используя более мощную модель для строгих проверок.

226 

227<CodeGroup>

228 ```python Python theme={null}

229 import asyncio

230 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

231 

232 

233 # Factory function that returns an AgentDefinition

234 # This pattern lets you customize agents based on runtime conditions

235 def create_security_agent(security_level: str) -> AgentDefinition:

236 is_strict = security_level == "strict"

237 return AgentDefinition(

238 description="Security code reviewer",

239 # Customize the prompt based on strictness level

240 prompt=f"You are a {'strict' if is_strict else 'balanced'} security reviewer...",

241 tools=["Read", "Grep", "Glob"],

242 # Key insight: use a more capable model for high-stakes reviews

243 model="opus" if is_strict else "sonnet",

244 )

245 

246 

247 async def main():

248 # The agent is created at query time, so each request can use different settings

249 async for message in query(

250 prompt="Review this PR for security issues",

251 options=ClaudeAgentOptions(

252 allowed_tools=["Read", "Grep", "Glob", "Agent"],

253 agents={

254 # Call the factory with your desired configuration

255 "security-reviewer": create_security_agent("strict")

256 },

257 ),

258 ):

259 if hasattr(message, "result"):

260 print(message.result)

261 

262 

263 asyncio.run(main())

264 ```

265 

266 ```typescript TypeScript theme={null}

267 import { query, type AgentDefinition } from "@anthropic-ai/claude-agent-sdk";

268 

269 // Factory function that returns an AgentDefinition

270 // This pattern lets you customize agents based on runtime conditions

271 function createSecurityAgent(securityLevel: "basic" | "strict"): AgentDefinition {

272 const isStrict = securityLevel === "strict";

273 return {

274 description: "Security code reviewer",

275 // Customize the prompt based on strictness level

276 prompt: `You are a ${isStrict ? "strict" : "balanced"} security reviewer...`,

277 tools: ["Read", "Grep", "Glob"],

278 // Key insight: use a more capable model for high-stakes reviews

279 model: isStrict ? "opus" : "sonnet"

280 };

281 }

282 

283 // The agent is created at query time, so each request can use different settings

284 for await (const message of query({

285 prompt: "Review this PR for security issues",

286 options: {

287 allowedTools: ["Read", "Grep", "Glob", "Agent"],

288 agents: {

289 // Call the factory with your desired configuration

290 "security-reviewer": createSecurityAgent("strict")

291 }

292 }

293 })) {

294 if ("result" in message) console.log(message.result);

295 }

296 ```

297</CodeGroup>

298 

299## Обнаружение вызова подагента

300 

301Подагенты вызываются через инструмент Agent. Чтобы обнаружить, когда вызывается подагент, проверьте блоки `tool_use`, где `name` — это `"Agent"`. Сообщения из контекста подагента включают поле `parent_tool_use_id`.

302 

303<Note>

304 Имя инструмента было переименовано с `"Task"` на `"Agent"` в Claude Code v2.1.63. Текущие выпуски SDK выдают `"Agent"` в блоках `tool_use`, но все еще используют `"Task"` в списке инструментов `system:init` и в `result.permission_denials[].tool_name`. Проверка обоих значений в `block.name` обеспечивает совместимость между версиями SDK.

305</Note>

306 

307Этот пример проходит через потоковые сообщения, логируя, когда вызывается подагент и когда последующие сообщения исходят из контекста выполнения этого подагента.

308 

309<Note>

310 Структура сообщения отличается между SDK. В Python блоки содержимого доступны непосредственно через `message.content`. В TypeScript `SDKAssistantMessage` оборачивает сообщение Claude API, поэтому содержимое доступно через `message.message.content`.

311</Note>

312 

313<CodeGroup>

314 ```python Python theme={null}

315 import asyncio

316 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

317 

318 

319 async def main():

320 async for message in query(

321 prompt="Use the code-reviewer agent to review this codebase",

322 options=ClaudeAgentOptions(

323 allowed_tools=["Read", "Glob", "Grep", "Agent"],

324 agents={

325 "code-reviewer": AgentDefinition(

326 description="Expert code reviewer.",

327 prompt="Analyze code quality and suggest improvements.",

328 tools=["Read", "Glob", "Grep"],

329 )

330 },

331 ),

332 ):

333 # Check for subagent invocation. Match both names: older SDK

334 # versions emitted "Task", current versions emit "Agent".

335 if hasattr(message, "content") and message.content:

336 for block in message.content:

337 if getattr(block, "type", None) == "tool_use" and block.name in (

338 "Task",

339 "Agent",

340 ):

341 print(f"Subagent invoked: {block.input.get('subagent_type')}")

342 

343 # Check if this message is from within a subagent's context

344 if hasattr(message, "parent_tool_use_id") and message.parent_tool_use_id:

345 print(" (running inside subagent)")

346 

347 if hasattr(message, "result"):

348 print(message.result)

349 

350 

351 asyncio.run(main())

352 ```

353 

354 ```typescript TypeScript theme={null}

355 import { query } from "@anthropic-ai/claude-agent-sdk";

356 

357 for await (const message of query({

358 prompt: "Use the code-reviewer agent to review this codebase",

359 options: {

360 allowedTools: ["Read", "Glob", "Grep", "Agent"],

361 agents: {

362 "code-reviewer": {

363 description: "Expert code reviewer.",

364 prompt: "Analyze code quality and suggest improvements.",

365 tools: ["Read", "Glob", "Grep"]

366 }

367 }

368 }

369 })) {

370 const msg = message as any;

371 

372 // Check for subagent invocation. Match both names: older SDK versions

373 // emitted "Task", current versions emit "Agent".

374 for (const block of msg.message?.content ?? []) {

375 if (block.type === "tool_use" && (block.name === "Task" || block.name === "Agent")) {

376 console.log(`Subagent invoked: ${block.input.subagent_type}`);

377 }

378 }

379 

380 // Check if this message is from within a subagent's context

381 if (msg.parent_tool_use_id) {

382 console.log(" (running inside subagent)");

383 }

384 

385 if ("result" in message) {

386 console.log(message.result);

387 }

388 }

389 ```

390</CodeGroup>

391 

392## Возобновление подагентов

393 

394Подагенты можно возобновить, чтобы продолжить с того места, где они остановились. Возобновленные подагенты сохраняют полную историю беседы, включая все предыдущие вызовы инструментов, результаты и рассуждения. Подагент продолжает работу ровно с того места, где он остановился, а не начинает заново.

395 

396Когда подагент завершается, Claude получает его ID агента в результате инструмента Agent. Чтобы программно возобновить подагента:

397 

3981. **Захватите ID сессии**: извлеките `session_id` из сообщений во время первого запроса

3992. **Извлеките ID агента**: разберите `agentId` из содержимого сообщения

4003. **Возобновите сессию**: передайте `resume: sessionId` в параметрах второго запроса и включите ID агента в ваш промпт

401 

402<Note>

403 Вы должны возобновить ту же сессию, чтобы получить доступ к стенограмме подагента. Каждый вызов `query()` по умолчанию начинает новую сессию, поэтому передайте `resume: sessionId`, чтобы продолжить в той же сессии.

404 

405 Если вы используете пользовательского агента (не встроенного), вам также нужно передать то же определение агента в параметр `agents` для обоих запросов.

406</Note>

407 

408Пример ниже демонстрирует этот поток: первый запрос запускает подагента и захватывает ID сессии и ID агента, затем второй запрос возобновляет сессию, чтобы задать вопрос для уточнения, требующий контекста из первого анализа.

409 

410<CodeGroup>

411 ```typescript TypeScript theme={null}

412 import { query, type SDKMessage } from "@anthropic-ai/claude-agent-sdk";

413 

414 // Helper to extract agentId from message content

415 // Stringify to avoid traversing different block types (TextBlock, ToolResultBlock, etc.)

416 function extractAgentId(message: SDKMessage): string | undefined {

417 if (!("message" in message)) return undefined;

418 // Stringify the content so we can search it without traversing nested blocks

419 const content = JSON.stringify(message.message.content);

420 const match = content.match(/agentId:\s*([a-f0-9-]+)/);

421 return match?.[1];

422 }

423 

424 let agentId: string | undefined;

425 let sessionId: string | undefined;

426 

427 // First invocation - use the Explore agent to find API endpoints

428 for await (const message of query({

429 prompt: "Use the Explore agent to find all API endpoints in this codebase",

430 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"] }

431 })) {

432 // Capture session_id from ResultMessage (needed to resume this session)

433 if ("session_id" in message) sessionId = message.session_id;

434 // Search message content for the agentId (appears in Agent tool results)

435 const extractedId = extractAgentId(message);

436 if (extractedId) agentId = extractedId;

437 // Print the final result

438 if ("result" in message) console.log(message.result);

439 }

440 

441 // Second invocation - resume and ask follow-up

442 if (agentId && sessionId) {

443 for await (const message of query({

444 prompt: `Resume agent ${agentId} and list the top 3 most complex endpoints`,

445 options: { allowedTools: ["Read", "Grep", "Glob", "Agent"], resume: sessionId }

446 })) {

447 if ("result" in message) console.log(message.result);

448 }

449 }

450 ```

451 

452 ```python Python theme={null}

453 import asyncio

454 import json

455 import re

456 from claude_agent_sdk import query, ClaudeAgentOptions

457 

458 

459 def extract_agent_id(text: str) -> str | None:

460 """Extract agentId from Agent tool result text."""

461 match = re.search(r"agentId:\s*([a-f0-9-]+)", text)

462 return match.group(1) if match else None

463 

464 

465 async def main():

466 agent_id = None

467 session_id = None

468 

469 # First invocation - use the Explore agent to find API endpoints

470 async for message in query(

471 prompt="Use the Explore agent to find all API endpoints in this codebase",

472 options=ClaudeAgentOptions(allowed_tools=["Read", "Grep", "Glob", "Agent"]),

473 ):

474 # Capture session_id from ResultMessage (needed to resume this session)

475 if hasattr(message, "session_id"):

476 session_id = message.session_id

477 # Search message content for the agentId (appears in Agent tool results)

478 if hasattr(message, "content"):

479 # Stringify the content so we can search it without traversing nested blocks

480 content_str = json.dumps(message.content, default=str)

481 extracted = extract_agent_id(content_str)

482 if extracted:

483 agent_id = extracted

484 # Print the final result

485 if hasattr(message, "result"):

486 print(message.result)

487 

488 # Second invocation - resume and ask follow-up

489 if agent_id and session_id:

490 async for message in query(

491 prompt=f"Resume agent {agent_id} and list the top 3 most complex endpoints",

492 options=ClaudeAgentOptions(

493 allowed_tools=["Read", "Grep", "Glob", "Agent"], resume=session_id

494 ),

495 ):

496 if hasattr(message, "result"):

497 print(message.result)

498 

499 

500 asyncio.run(main())

501 ```

502</CodeGroup>

503 

504Стенограммы подагентов сохраняются независимо от основной беседы:

505 

506* **Компактирование основной беседы**: когда основная беседа компактируется, стенограммы подагентов не затрагиваются. Они хранятся в отдельных файлах.

507* **Сохранение сессии**: стенограммы подагентов сохраняются в пределах их сессии. Вы можете возобновить подагента после перезагрузки Claude Code, возобновив ту же сессию.

508* **Автоматическая очистка**: стенограммы очищаются на основе параметра `cleanupPeriodDays` (по умолчанию: 30 дней).

509 

510## Ограничения инструментов

511 

512Подагенты могут иметь ограниченный доступ к инструментам через поле `tools`:

513 

514* **Опустить поле**: агент наследует все доступные инструменты (по умолчанию)

515* **Указать инструменты**: агент может использовать только перечисленные инструменты

516 

517Этот пример создает агента анализа только для чтения, который может изучать код, но не может изменять файлы или запускать команды.

518 

519<CodeGroup>

520 ```python Python theme={null}

521 import asyncio

522 from claude_agent_sdk import query, ClaudeAgentOptions, AgentDefinition

523 

524 

525 async def main():

526 async for message in query(

527 prompt="Analyze the architecture of this codebase",

528 options=ClaudeAgentOptions(

529 allowed_tools=["Read", "Grep", "Glob", "Agent"],

530 agents={

531 "code-analyzer": AgentDefinition(

532 description="Static code analysis and architecture review",

533 prompt="""You are a code architecture analyst. Analyze code structure,

534 identify patterns, and suggest improvements without making changes.""",

535 # Read-only tools: no Edit, Write, or Bash access

536 tools=["Read", "Grep", "Glob"],

537 )

538 },

539 ),

540 ):

541 if hasattr(message, "result"):

542 print(message.result)

543 

544 

545 asyncio.run(main())

546 ```

547 

548 ```typescript TypeScript theme={null}

549 import { query } from "@anthropic-ai/claude-agent-sdk";

550 

551 for await (const message of query({

552 prompt: "Analyze the architecture of this codebase",

553 options: {

554 allowedTools: ["Read", "Grep", "Glob", "Agent"],

555 agents: {

556 "code-analyzer": {

557 description: "Static code analysis and architecture review",

558 prompt: `You are a code architecture analyst. Analyze code structure,

559 identify patterns, and suggest improvements without making changes.`,

560 // Read-only tools: no Edit, Write, or Bash access

561 tools: ["Read", "Grep", "Glob"]

562 }

563 }

564 }

565 })) {

566 if ("result" in message) console.log(message.result);

567 }

568 ```

569</CodeGroup>

570 

571### Распространенные комбинации инструментов

572 

573| Вариант использования | Инструменты | Описание |

574| :----------------------- | :-------------------------------------- | :------------------------------------------------------------ |

575| Анализ только для чтения | `Read`, `Grep`, `Glob` | Может изучать код, но не может изменять или выполнять |

576| Выполнение тестов | `Bash`, `Read`, `Grep` | Может запускать команды и анализировать выходные данные |

577| Модификация кода | `Read`, `Edit`, `Write`, `Grep`, `Glob` | Полный доступ на чтение/запись без выполнения команд |

578| Полный доступ | Все инструменты | Наследует все инструменты от родителя (опустите поле `tools`) |

579 

580## Troubleshooting

581 

582### Claude не делегирует подагентам

583 

584Если Claude выполняет задачи напрямую вместо делегирования вашему подагенту:

585 

5861. **Включите инструмент Agent**: подагенты вызываются через инструмент Agent, поэтому он должен быть в `allowedTools`

5872. **Используйте явное указание**: упомяните подагента по имени в своем промпте (например, "Use the code-reviewer agent to...")

5883. **Напишите четкое описание**: объясните ровно, когда следует использовать подагента, чтобы Claude мог правильно сопоставить задачи

589 

590### Агенты на основе файловой системы не загружаются

591 

592Агенты, определенные в `.claude/agents/`, загружаются только при запуске. Если вы создаете новый файл агента во время работы Claude Code, перезагрузите сессию, чтобы загрузить его.

593 

594### Windows: сбои при длинных промптах

595 

596В Windows подагенты с очень длинными промптами могут не работать из-за ограничений длины командной строки (8191 символов). Держите промпты краткими или используйте агентов на основе файловой системы для сложных инструкций.

597 

598## Связанная документация

599 

600* [Подагенты Claude Code](/ru/sub-agents): полная документация подагентов, включая определения на основе файловой системы

601* [Обзор SDK](/ru/agent-sdk/overview): начало работы с Claude Agent SDK

Details

358| `sessionStore` | [`SessionStore`](/ru/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | Зеркалируйте транскрипты сессий на внешний бэкенд, чтобы любой хост мог их возобновить. См. [Сохранение сессий на внешнее хранилище](/ru/agent-sdk/session-storage) |358| `sessionStore` | [`SessionStore`](/ru/agent-sdk/session-storage#the-sessionstore-interface) | `undefined` | Зеркалируйте транскрипты сессий на внешний бэкенд, чтобы любой хост мог их возобновить. См. [Сохранение сессий на внешнее хранилище](/ru/agent-sdk/session-storage) |

359| `settings` | `string \| Settings` | `undefined` | Встроенный объект [settings](/ru/settings) или путь к файлу настроек. Заполняет слой flag-settings в [порядке приоритета](/ru/settings#settings-precedence). Измените во время выполнения с помощью [`applyFlagSettings()`](#applyflagsettings) |359| `settings` | `string \| Settings` | `undefined` | Встроенный объект [settings](/ru/settings) или путь к файлу настроек. Заполняет слой flag-settings в [порядке приоритета](/ru/settings#settings-precedence). Измените во время выполнения с помощью [`applyFlagSettings()`](#applyflagsettings) |

360| `settingSources` | [`SettingSource`](#settingsource)`[]` | Значения по умолчанию CLI (все источники) | Контролируйте, какие настройки файловой системы загружать. Передайте `[]` для отключения пользовательских, проектных и локальных настроек. Управляемые политикой настройки загружаются независимо. См. [Используйте функции Claude Code](/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) |360| `settingSources` | [`SettingSource`](#settingsource)`[]` | Значения по умолчанию CLI (все источники) | Контролируйте, какие настройки файловой системы загружать. Передайте `[]` для отключения пользовательских, проектных и локальных настроек. Управляемые политикой настройки загружаются независимо. См. [Используйте функции Claude Code](/ru/agent-sdk/claude-code-features#what-settingsources-does-not-control) |

361| `skills` | `string[] \| 'all'` | `undefined` | Skills доступные для сессии. Передайте `'all'` для включения каждого обнаруженного skill, или список имён skills. Когда установлено, SDK включает инструмент Skill автоматически без указания его в `allowedTools`. См. [Skills](/ru/agent-sdk/skills) |

361| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Пользовательская функция для запуска процесса Claude Code. Используйте для запуска Claude Code на ВМ, контейнерах или удалённых окружениях |362| `spawnClaudeCodeProcess` | `(options: SpawnOptions) => SpawnedProcess` | `undefined` | Пользовательская функция для запуска процесса Claude Code. Используйте для запуска Claude Code на ВМ, контейнерах или удалённых окружениях |

362| `stderr` | `(data: string) => void` | `undefined` | Обратный вызов для вывода stderr |363| `stderr` | `(data: string) => void` | `undefined` | Обратный вызов для вывода stderr |

363| `strictMcpConfig` | `boolean` | `false` | Принудительно применяйте строгую валидацию MCP |364| `strictMcpConfig` | `boolean` | `false` | Принудительно применяйте строгую валидацию MCP |


530| Поле | Обязательно | Описание |531| Поле | Обязательно | Описание |

531| :------------------------------------ | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :------------------------------------ | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

532| `description` | Да | Описание на естественном языке, когда использовать этого агента |533| `description` | Да | Описание на естественном языке, когда использовать этого агента |

533| `tools` | Нет | Массив разрешённых имён tool. Если опущено, наследует все tools от родителя |534| `tools` | Нет | Массив разрешённых имён tool. Если опущено, наследует все tools от родителя. Для предварительной загрузки Skills в контекст агента используйте поле `skills` вместо указания `'Skill'` здесь |

534| `disallowedTools` | Нет | Массив имён tool для явного запрещения для этого агента |535| `disallowedTools` | Нет | Массив имён tool для явного запрещения для этого агента |

535| `prompt` | Да | Системный запрос агента |536| `prompt` | Да | Системный запрос агента |

536| `model` | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, или полный ID модели. Если опущено или `'inherit'`, использует основную модель |537| `model` | Нет | Переопределение модели для этого агента. Принимает псевдоним, такой как `'sonnet'`, `'opus'`, `'haiku'`, `'inherit'`, или полный ID модели. Если опущено или `'inherit'`, использует основную модель |


1176 transcript_path: string;1177 transcript_path: string;

1177 cwd: string;1178 cwd: string;

1178 permission_mode?: string;1179 permission_mode?: string;

1180 effort?: { level: string };

1179 agent_id?: string;1181 agent_id?: string;

1180 agent_type?: string;1182 agent_type?: string;

1181};1183};

Details

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.

4 4 

5# TypeScript SDK V2 interface (preview)5# TypeScript SDK V2 session API (deprecated)

6 6 

7> Предпросмотр упрощённого V2 TypeScript Agent SDK с паттернами отправки/потока на основе сессий для многооборотных разговоров.7> Справочник по устаревшему V2 TypeScript Agent SDK session API с паттернами отправки/потока на основе сессий для многооборотных разговоров.

8 8 

9<Warning>9<Warning>

10 Интерфейс V2 является **нестабильным предпросмотром**. API могут измениться на основе обратной связи перед тем, как стать стабильными. Некоторые функции, такие как разветвление сессий, доступны только в [V1 SDK](/ru/agent-sdk/typescript).10 Функции V2 session API `unstable_v2_createSession`, `unstable_v2_resumeSession` и `unstable_v2_prompt` устарели и будут удалены в будущем выпуске. Используйте вместо этого [V1 `query()` API](/ru/agent-sdk/typescript).

11</Warning>11</Warning>

12 12 

13V2 Claude Agent TypeScript SDK устраняет необходимость в асинхронных генераторах и координации yield. Это делает многооборотные разговоры проще — вместо управления состоянием генератора между оборотами, каждый оборот представляет собой отдельный цикл `send()`/`stream()`. Поверхность API сводится к трём концепциям:13V2 был экспериментальным session API, который устранил необходимость в асинхронных генераторах и координации yield. Вместо управления состоянием генератора между оборотами, каждый оборот представлял собой отдельный цикл `send()`/`stream()`. Поверхность API сводилась к трём концепциям:

14 14 

15* `createSession()` / `resumeSession()`: Начать или продолжить разговор15* `createSession()` / `resumeSession()`: Начать или продолжить разговор

16* `session.send()`: Отправить сообщение16* `session.send()`: Отправить сообщение


380 380 

381## Доступность функций381## Доступность функций

382 382 

383Не все функции V1 доступны в V2 пока. Следующие требуют использования [V1 SDK](/ru/agent-sdk/typescript):383V2 session API не поддерживает все функции V1. Следующие требуют использования [V1 SDK](/ru/agent-sdk/typescript):

384 384 

385* Разветвление сессий (опция `forkSession`)385* Разветвление сессий (опция `forkSession`)

386* Некоторые продвинутые паттерны потокового ввода386* Некоторые продвинутые паттерны потокового ввода

387 387 

388## Обратная связь

389 

390Поделитесь своей обратной связью по интерфейсу V2 перед тем, как он станет стабильным. Сообщайте о проблемах и предложениях через [GitHub Issues](https://github.com/anthropics/claude-code/issues).

391 

392## См. также388## См. также

393 389 

394* [Справочник TypeScript SDK (V1)](/ru/agent-sdk/typescript) - Полная документация V1 SDK390* [Справочник TypeScript SDK (V1)](/ru/agent-sdk/typescript) - Полная документация V1 SDK

agent-teams.md +1 −1

Details

420Изучите связанные подходы для параллельной работы и делегирования:420Изучите связанные подходы для параллельной работы и делегирования:

421 421 

422* **Легкое делегирование**: [subagents](/ru/sub-agents) порождают вспомогательных агентов для исследования или проверки в вашем сеансе, лучше для задач, которые не нуждаются в координации между агентами422* **Легкое делегирование**: [subagents](/ru/sub-agents) порождают вспомогательных агентов для исследования или проверки в вашем сеансе, лучше для задач, которые не нуждаются в координации между агентами

423* **Ручные параллельные сеансы**: [Git worktrees](/ru/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees) позволяют вам запускать несколько сеансов Claude Code самостоятельно без автоматической координации команды423* **Ручные параллельные сеансы**: [Git worktrees](/ru/worktrees) позволяют вам запускать несколько сеансов Claude Code самостоятельно без автоматической координации команды

424* **Сравнение подходов**: см. [сравнение subagent vs agent team](/ru/features-overview#compare-similar-features) для разбора рядом424* **Сравнение подходов**: см. [сравнение subagent vs agent team](/ru/features-overview#compare-similar-features) для разбора рядом

amazon-bedrock.md +1 −111

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="bedrock" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="bedrock" />} />

190 80 

191## Предварительные требования81## Предварительные требования

192 82 

Details

84| `--permission-mode` | Начать в указанном [режиме разрешения](/ru/permission-modes). Принимает `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` или `bypassPermissions`. Переопределяет `defaultMode` из файлов параметров | `claude --permission-mode plan` |84| `--permission-mode` | Начать в указанном [режиме разрешения](/ru/permission-modes). Принимает `default`, `acceptEdits`, `plan`, `auto`, `dontAsk` или `bypassPermissions`. Переопределяет `defaultMode` из файлов параметров | `claude --permission-mode plan` |

85| `--permission-prompt-tool` | Указать инструмент MCP для обработки запросов разрешения в неинтерактивном режиме | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |85| `--permission-prompt-tool` | Указать инструмент MCP для обработки запросов разрешения в неинтерактивном режиме | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

86| `--plugin-dir` | Загрузить plugin из каталога или архива `.zip` только для этого сеанса. Каждый флаг принимает один путь. Повторите флаг для нескольких plugins: `--plugin-dir A --plugin-dir B.zip` | `claude --plugin-dir ./my-plugin` |86| `--plugin-dir` | Загрузить plugin из каталога или архива `.zip` только для этого сеанса. Каждый флаг принимает один путь. Повторите флаг для нескольких plugins: `--plugin-dir A --plugin-dir B.zip` | `claude --plugin-dir ./my-plugin` |

87| `--plugin-url` | Получить plugin архив `.zip` из URL только для этого сеанса. Каждый флаг принимает один URL. Повторите флаг для нескольких plugins | `claude --plugin-url https://example.com/plugin.zip` |87| `--plugin-url` | Получить plugin архив `.zip` из URL только для этого сеанса. Повторите флаг для нескольких plugins или передайте разделенные пробелом URL в одном значении в кавычках | `claude --plugin-url https://example.com/plugin.zip` |

88| `--print`, `-p` | Вывести ответ без интерактивного режима (см. [документацию Agent SDK](/ru/agent-sdk/overview) для деталей программного использования) | `claude -p "query"` |88| `--print`, `-p` | Вывести ответ без интерактивного режима (см. [документацию Agent SDK](/ru/agent-sdk/overview) для деталей программного использования) | `claude -p "query"` |

89| `--remote` | Создать новый [веб-сеанс](/ru/claude-code-on-the-web) на claude.ai с предоставленным описанием задачи | `claude --remote "Fix the login bug"` |89| `--remote` | Создать новый [веб-сеанс](/ru/claude-code-on-the-web) на claude.ai с предоставленным описанием задачи | `claude --remote "Fix the login bug"` |

90| `--remote-control`, `--rc` | Запустить интерактивный сеанс с включенным [Remote Control](/ru/remote-control#start-a-remote-control-session), чтобы вы также могли управлять им из claude.ai или приложения Claude. Опционально передайте имя для сеанса | `claude --remote-control "My Project"` |90| `--remote-control`, `--rc` | Запустить интерактивный сеанс с включенным [Remote Control](/ru/remote-control#start-a-remote-control-session), чтобы вы также могли управлять им из claude.ai или приложения Claude. Опционально передайте имя для сеанса | `claude --remote-control "My Project"` |


103| `--tools` | Ограничить, какие встроенные инструменты может использовать Claude. Используйте `""` для отключения всех, `"default"` для всех или имена инструментов, такие как `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |103| `--tools` | Ограничить, какие встроенные инструменты может использовать Claude. Используйте `""` для отключения всех, `"default"` для всех или имена инструментов, такие как `"Bash,Edit,Read"` | `claude --tools "Bash,Edit,Read"` |

104| `--verbose` | Включить подробное логирование, показывает полный вывод по ходам. Переопределяет параметр [`viewMode`](/ru/settings#available-settings) для этого сеанса | `claude --verbose` |104| `--verbose` | Включить подробное логирование, показывает полный вывод по ходам. Переопределяет параметр [`viewMode`](/ru/settings#available-settings) для этого сеанса | `claude --verbose` |

105| `--version`, `-v` | Вывести номер версии | `claude -v` |105| `--version`, `-v` | Вывести номер версии | `claude -v` |

106| `--worktree`, `-w` | Запустить Claude в изолированном [git worktree](/ru/worktrees) в `<repo>/.claude/worktrees/<name>`. Если имя не указано, оно генерируется автоматически | `claude -w feature-auth` |106| `--worktree`, `-w` | Запустить Claude в изолированном [git worktree](/ru/worktrees) в `<repo>/.claude/worktrees/<name>`. Если имя не указано, оно генерируется автоматически. Передайте `#<number>` или URL GitHub pull request для получения этого PR из `origin` и ветвления worktree из него | `claude -w feature-auth` |

107 107 

108### Флаги системного приглашения108### Флаги системного приглашения

109 109 

commands.md +21 −3

Details

12 12 

13Команда распознается только в начале вашего сообщения. Текст, который следует за названием команды, передается ей в качестве аргументов.13Команда распознается только в начале вашего сообщения. Текст, который следует за названием команды, передается ей в качестве аргументов.

14 14 

15В таблице ниже перечислены все команды, включенные в Claude Code. Записи, отмеченные как **[Skill](/ru/skills#bundled-skills)**, являются встроенными skills. Они используют тот же механизм, что и skills, которые вы пишете сами: подсказка, переданная Claude, которую Claude также может автоматически вызывать при необходимости. Все остальное — это встроенная команда, поведение которой закодировано в CLI. Чтобы добавить свои собственные команды, см. [skills](/ru/skills).15## Команды в типичном рабочем процессе

16 

17Большинство команд полезны в определенной точке сеанса, от настройки проекта до отправки изменения.

18 

19**Первый сеанс в репозитории.** Запустите `/init` для создания стартового `CLAUDE.md`, затем `/memory` для его уточнения. Используйте `/mcp` и `/agents` для настройки любых серверов или subagents, которые нужны проекту, и `/permissions` для установки правил одобрения, которые вы хотите.

20 

21**Во время задачи.** `/plan` переключает в режим плана перед крупным изменением. `/model` и `/effort` регулируют, сколько рассуждений вы тратите. Когда беседа становится длинной, `/context` показывает, куда идет окно, и `/compact` сжимает его; используйте `/btw` для быстрого замечания, которое не должно раздувать историю.

22 

23**Перед отправкой.** `/diff` показывает, что изменилось, `/simplify` проверяет недавние файлы и применяет исправления качества и эффективности, а `/review` или `/security-review` дают более глубокий проход только для чтения.

16 24 

17Не каждая команда отображается для каждого пользователя. Доступность зависит от вашей платформы, плана и окружения. Например, `/desktop` отображается только на macOS и Windows, а `/upgrade` отображается только на планах Pro и Max.25**Между сеансами.** `/clear` начинает заново с новой задачей, сохраняя память проекта. `/resume` и `/branch` позволяют вернуться к более ранней беседе или создать ветвь. `/teleport` переносит веб-сеанс в этот терминал, а `/remote-control` позволяет продолжить этот локальный сеанс с другого устройства.

26 

27**Когда что-то не так.** `/rewind` откатывает код и беседу к контрольной точке. `/doctor` и `/debug` диагностируют проблемы установки и выполнения, а `/feedback` сообщает об ошибке с контекстом сеанса.

28 

29## Все команды

30 

31В таблице ниже перечислены все команды, включенные в Claude Code. Записи, отмеченные как **[Skill](/ru/skills#bundled-skills)**, являются встроенными skills. Они используют тот же механизм, что и skills, которые вы пишете сами: подсказка, переданная Claude, которую Claude также может автоматически вызывать при необходимости. Все остальное — это встроенная команда, поведение которой закодировано в CLI. Чтобы добавить свои собственные команды, см. [skills](/ru/skills).

18 32 

19В таблице ниже `<arg>` указывает на обязательный аргумент, а `[arg]` указывает на необязательный.33В таблице ниже `<arg>` указывает на обязательный аргумент, а `[arg]` указывает на необязательный.

20 34 

35<Note>

36 Не каждая команда отображается для каждого пользователя. Доступность зависит от вашей платформы, плана и окружения. Например, `/desktop` отображается только на macOS и Windows, а `/upgrade` отображается только на планах Pro и Max.

37</Note>

38 

21| Команда | Назначение |39| Команда | Назначение |

22| :---------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |40| :---------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

23| `/add-dir <path>` | Добавить рабочий каталог для доступа к файлам во время текущего сеанса. Большинство конфигурации `.claude/` [не обнаруживается](/ru/permissions#additional-directories-grant-file-access-not-configuration) из добавленного каталога. Вы можете позже возобновить сеанс из добавленного каталога с помощью `--continue` или `--resume` |41| `/add-dir <path>` | Добавить рабочий каталог для доступа к файлам во время текущего сеанса. Большинство конфигурации `.claude/` [не обнаруживается](/ru/permissions#additional-directories-grant-file-access-not-configuration) из добавленного каталога. Вы можете позже возобновить сеанс из добавленного каталога с помощью `--continue` или `--resume` |


80| `/review [PR]` | Просмотреть pull request локально в вашем текущем сеансе. Для более глубокого облачного просмотра см. [`/ultrareview`](/ru/ultrareview) |98| `/review [PR]` | Просмотреть pull request локально в вашем текущем сеансе. Для более глубокого облачного просмотра см. [`/ultrareview`](/ru/ultrareview) |

81| `/rewind` | Перемотать беседу и/или код к предыдущей точке или суммировать с выбранного сообщения. См. [checkpointing](/ru/checkpointing). Псевдонимы: `/checkpoint`, `/undo` |99| `/rewind` | Перемотать беседу и/или код к предыдущей точке или суммировать с выбранного сообщения. См. [checkpointing](/ru/checkpointing). Псевдонимы: `/checkpoint`, `/undo` |

82| `/sandbox` | Переключить [режим sandbox](/ru/sandboxing). Доступно только на поддерживаемых платформах |100| `/sandbox` | Переключить [режим sandbox](/ru/sandboxing). Доступно только на поддерживаемых платформах |

83| `/schedule [description]` | Создать, обновить, перечислить или запустить [routines](/ru/routines). Claude проведет вас через настройку в диалоговом режиме. Псевдоним: `/routines` |101| `/schedule [description]` | Создать, обновить, перечислить или запустить [routines](/ru/routines), которые выполняются на управляемой Anthropic облачной инфраструктуре. Claude проведет вас через настройку в диалоговом режиме. Псевдоним: `/routines` |

84| `/security-review` | Анализировать ожидающие изменения на текущей ветви на предмет уязвимостей безопасности. Проверяет git diff и определяет риски, такие как инъекции, проблемы с аутентификацией и утечка данных |102| `/security-review` | Анализировать ожидающие изменения на текущей ветви на предмет уязвимостей безопасности. Проверяет git diff и определяет риски, такие как инъекции, проблемы с аутентификацией и утечка данных |

85| `/setup-bedrock` | Настроить аутентификацию [Amazon Bedrock](/ru/amazon-bedrock), регион и привязки моделей через интерактивный мастер. Видна только когда установлено `CLAUDE_CODE_USE_BEDROCK=1`. Пользователи Bedrock в первый раз также могут получить доступ к этому мастеру с экрана входа |103| `/setup-bedrock` | Настроить аутентификацию [Amazon Bedrock](/ru/amazon-bedrock), регион и привязки моделей через интерактивный мастер. Видна только когда установлено `CLAUDE_CODE_USE_BEDROCK=1`. Пользователи Bedrock в первый раз также могут получить доступ к этому мастеру с экрана входа |

86| `/setup-vertex` | Настроить аутентификацию [Google Vertex AI](/ru/google-vertex-ai), проект, регион и привязки моделей через интерактивный мастер. Видна только когда установлено `CLAUDE_CODE_USE_VERTEX=1`. Пользователи Vertex AI в первый раз также могут получить доступ к этому мастеру с экрана входа |104| `/setup-vertex` | Настроить аутентификацию [Google Vertex AI](/ru/google-vertex-ai), проект, регион и привязки моделей через интерактивный мастер. Видна только когда установлено `CLAUDE_CODE_USE_VERTEX=1`. Пользователи Vertex AI в первый раз также могут получить доступ к этому мастеру с экрана входа |

desktop.md +18 −1

Details

564 564 

565Каждая запись требует `id`, `name` и `sshHost`. Поля `sshPort`, `sshIdentityFile` и `startDirectory` являются необязательными. Пользователи также могут добавить `sshConfigs` в свой собственный `~/.claude/settings.json`, где хранятся соединения, добавленные через диалог.565Каждая запись требует `id`, `name` и `sshHost`. Поля `sshPort`, `sshIdentityFile` и `startDirectory` являются необязательными. Пользователи также могут добавить `sshConfigs` в свой собственный `~/.claude/settings.json`, где хранятся соединения, добавленные через диалог.

566 566 

567#### Ограничение SSH-хостов, к которым могут подключаться пользователи

568 

569Администраторы могут ограничить SSH-сеансы Desktop утверждённым набором хостов, добавляя `sshHostAllowlist` в файл [управляемых параметров](/ru/settings#settings-precedence). Когда это установлено, пользователи могут подключаться только к хостам, разрешённое имя хоста которых совпадает с одним из шаблонов. Установите его в пустой массив, чтобы полностью отключить SSH-сеансы.

570 

571Следующий пример разрешает соединения с любым хостом под `devboxes.example.com` и с одним именованным хостом-бастионом:

572 

573```json theme={null}

574{

575 "sshHostAllowlist": ["*.devboxes.example.com", "bastion.example.com"]

576}

577```

578 

579Шаблоны не чувствительны к регистру. `*` совпадает с любым хостом, и `*.example.com` совпадает с `example.com` и любым поддоменом. Всё остальное — это точное совпадение. Проверка выполняется для имени хоста после разрешения `~/.ssh/config` через `ssh -G`, поэтому псевдонимы `Host` и записи `ProxyCommand`/`ProxyJump` разрешены, пока разрешённое `HostName` совпадает.

580 

581`sshHostAllowlist` читается только из управляемых параметров; значения в параметрах пользователя или проекта игнорируются. Только приложение Claude Desktop соблюдает этот параметр; Claude Code CLI и расширения IDE не читают его, и он не ограничивает команды `ssh`, выполняемые через инструмент Bash. Он управляет тем, к каким хостам подключается приложение Desktop, а не сетевым исходящим трафиком, поэтому объедините его с сетевыми элементами управления вашей организации или элементами управления с нулевым доверием, если вам нужна жёсткая граница.

582 

567## Конфигурация предприятия583## Конфигурация предприятия

568 584 

569Организации на планах Team или Enterprise могут управлять поведением приложения desktop через элементы управления консоли администратора, управляемые файлы параметров и политики управления устройствами.585Организации на планах Team или Enterprise могут управлять поведением приложения desktop через элементы управления консоли администратора, управляемые файлы параметров и политики управления устройствами.


582Управляемые параметры переопределяют параметры проекта и пользователя и применяются, когда Desktop порождает сеансы CLI. Вы можете установить эти ключи в файле [управляемых параметров](/ru/settings#settings-precedence) вашей организации или отправить их удалённо через консоль администратора.598Управляемые параметры переопределяют параметры проекта и пользователя и применяются, когда Desktop порождает сеансы CLI. Вы можете установить эти ключи в файле [управляемых параметров](/ru/settings#settings-precedence) вашей организации или отправить их удалённо через консоль администратора.

583 599 

584| Ключ | Описание |600| Ключ | Описание |

585| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |601| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

586| `permissions.disableBypassPermissionsMode` | установите на `"disable"`, чтобы предотвратить пользователей от включения режима bypass permissions. |602| `permissions.disableBypassPermissionsMode` | установите на `"disable"`, чтобы предотвратить пользователей от включения режима bypass permissions. |

587| `disableAutoMode` | установите на `"disable"`, чтобы предотвратить пользователей от включения режима [Auto](/ru/permission-modes#eliminate-prompts-with-auto-mode). Удаляет Auto из селектора режима. Также принимается под `permissions`. |603| `disableAutoMode` | установите на `"disable"`, чтобы предотвратить пользователей от включения режима [Auto](/ru/permission-modes#eliminate-prompts-with-auto-mode). Удаляет Auto из селектора режима. Также принимается под `permissions`. |

588| `autoMode` | настройте, что классификатор auto mode доверяет и блокирует во всей вашей организации. См. [Configure auto mode](/ru/auto-mode-config). |604| `autoMode` | настройте, что классификатор auto mode доверяет и блокирует во всей вашей организации. См. [Configure auto mode](/ru/auto-mode-config). |

589| `sshConfigs` | предварительно настройте [SSH-соединения](#pre-configure-ssh-connections-for-your-team), которые появляются в раскрывающемся списке окружения. Пользователи не могут редактировать или удалять управляемые соединения. |605| `sshConfigs` | предварительно настройте [SSH-соединения](#pre-configure-ssh-connections-for-your-team), которые появляются в раскрывающемся списке окружения. Пользователи не могут редактировать или удалять управляемые соединения. |

606| `sshHostAllowlist` | ограничьте [SSH-сеансы](#restrict-which-ssh-hosts-users-can-connect-to) хостами, чьё разрешённое имя хоста совпадает с одним из этих шаблонов. Пустой массив отключает SSH-сеансы. Читается только из управляемых параметров. |

590 607 

591Управляемый файл параметров, развёрнутый на диск на каждой машине, применяется к сеансам Desktop. Управляемые параметры, отправленные удалённо через консоль администратора, в настоящее время достигают только сеансов CLI и IDE, поэтому для развёртываний Desktop либо распространяйте файл через MDM, либо используйте [элементы управления консоли администратора](#admin-console-controls) выше.608Управляемый файл параметров, развёрнутый на диск на каждой машине, применяется к сеансам Desktop. Управляемые параметры, отправленные удалённо через консоль администратора, в настоящее время достигают только сеансов CLI и IDE, поэтому для развёртываний Desktop либо распространяйте файл через MDM, либо используйте [элементы управления консоли администратора](#admin-console-controls) выше.

592 609 

env-vars.md +3 −1

Details

92| `CLAUDE_CODE_EFFORT_LEVEL` | Установите уровень усилий для поддерживаемых моделей. Значения: `low`, `medium`, `high`, `xhigh`, `max` или `auto` для использования значения по умолчанию модели. Доступные уровни зависят от модели. Имеет приоритет над `/effort` и параметром `effortLevel`. См. [Отрегулировать уровень усилий](/ru/model-config#adjust-effort-level) |92| `CLAUDE_CODE_EFFORT_LEVEL` | Установите уровень усилий для поддерживаемых моделей. Значения: `low`, `medium`, `high`, `xhigh`, `max` или `auto` для использования значения по умолчанию модели. Доступные уровни зависят от модели. Имеет приоритет над `/effort` и параметром `effortLevel`. См. [Отрегулировать уровень усилий](/ru/model-config#adjust-effort-level) |

93| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Переопределить доступность [сводки сессии](/ru/interactive-mode#session-recap). Установите на `0`, чтобы принудительно отключить сводки независимо от переключателя `/config`. Установите на `1`, чтобы принудительно включить сводки, когда [`awaySummaryEnabled`](/ru/settings#available-settings) имеет значение `false`. Имеет приоритет над параметром и переключателем `/config` |93| `CLAUDE_CODE_ENABLE_AWAY_SUMMARY` | Переопределить доступность [сводки сессии](/ru/interactive-mode#session-recap). Установите на `0`, чтобы принудительно отключить сводки независимо от переключателя `/config`. Установите на `1`, чтобы принудительно включить сводки, когда [`awaySummaryEnabled`](/ru/settings#available-settings) имеет значение `false`. Имеет приоритет над параметром и переключателем `/config` |

94| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Установите на `1`, чтобы обновлять состояние plugin на границах хода в [неинтерактивном режиме](/ru/headless) после завершения фоновой установки. Отключено по умолчанию, потому что обновление изменяет системное приглашение в середине сессии, что делает недействительным [кэширование приглашений](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) для этого хода |94| `CLAUDE_CODE_ENABLE_BACKGROUND_PLUGIN_REFRESH` | Установите на `1`, чтобы обновлять состояние plugin на границах хода в [неинтерактивном режиме](/ru/headless) после завершения фоновой установки. Отключено по умолчанию, потому что обновление изменяет системное приглашение в середине сессии, что делает недействительным [кэширование приглашений](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) для этого хода |

95| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Управляет потоковой передачей входных данных инструмента с тонкой зернистостью из API по мере их создания Claude. При отключении большой входной параметр инструмента, такой как длинная запись файла, поступает только после завершения создания Claude, что может выглядеть как зависание. Включено по умолчанию для прямых соединений Anthropic API. Установите на `0`, чтобы отказаться. Установите на `1`, чтобы принудительно включить, даже когда значение по умолчанию на стороне сервера отключено. Не влияет на Bedrock, Vertex, Foundry или соединения [шлюза](/ru/llm-gateway) |95| `CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING` | Управляет потоковой передачей входных данных инструмента с тонкой зернистостью из API по мере их создания Claude. С этим отключением большой входной параметр инструмента, такой как длинная запись файла, поступает только после завершения создания Claude, что может выглядеть как зависание. Включено по умолчанию на Anthropic API. На Bedrock и Vertex включено для каждой модели, где развёрнутый контейнер это поддерживает. Установите на `0`, чтобы отказаться. Установите на `1`, чтобы принудительно включить при маршрутизации через прокси через `ANTHROPIC_BASE_URL`, `ANTHROPIC_VERTEX_BASE_URL` или `ANTHROPIC_BEDROCK_BASE_URL`. Отключено по умолчанию на Foundry и соединениях [шлюза](/ru/llm-gateway) |

96| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Установите на `1`, чтобы заполнить средство выбора `/model` из конечной точки `/v1/models` вашего шлюза, когда `ANTHROPIC_BASE_URL` указывает на совместимый с Anthropic шлюз, такой как LiteLLM, Kong или внутренний прокси. Отключено по умолчанию, потому что шлюзы, поддерживаемые общим ключом API, в противном случае показывали бы каждому пользователю каждую модель, к которой может получить доступ ключ. Обнаруженные модели по-прежнему фильтруются по списку разрешений [`availableModels`](/ru/settings#available-settings) |96| `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY` | Установите на `1`, чтобы заполнить средство выбора `/model` из конечной точки `/v1/models` вашего шлюза, когда `ANTHROPIC_BASE_URL` указывает на совместимый с Anthropic шлюз, такой как LiteLLM, Kong или внутренний прокси. Отключено по умолчанию, потому что шлюзы, поддерживаемые общим ключом API, в противном случае показывали бы каждому пользователю каждую модель, к которой может получить доступ ключ. Обнаруженные модели по-прежнему фильтруются по списку разрешений [`availableModels`](/ru/settings#available-settings) |

97| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Установите на `false`, чтобы отключить предложения приглашений (переключатель "Prompt suggestions" в `/config`). Это затемнённые предсказания, которые появляются в вашем вводе приглашения после ответа Claude. См. [Предложения приглашений](/ru/interactive-mode#prompt-suggestions) |97| `CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION` | Установите на `false`, чтобы отключить предложения приглашений (переключатель "Prompt suggestions" в `/config`). Это затемнённые предсказания, которые появляются в вашем вводе приглашения после ответа Claude. См. [Предложения приглашений](/ru/interactive-mode#prompt-suggestions) |

98| `CLAUDE_CODE_ENABLE_TASKS` | Установите на `1`, чтобы включить систему отслеживания задач в неинтерактивном режиме (флаг `-p`). Задачи включены по умолчанию в интерактивном режиме. См. [Список задач](/ru/interactive-mode#task-list) |98| `CLAUDE_CODE_ENABLE_TASKS` | Установите на `1`, чтобы включить систему отслеживания задач в неинтерактивном режиме (флаг `-p`). Задачи включены по умолчанию в интерактивном режиме. См. [Список задач](/ru/interactive-mode#task-list) |


164| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Управляет инструментом PowerShell. На Windows без Git Bash инструмент включен автоматически; установите на `0`, чтобы отключить его. На Windows с установленным Git Bash инструмент постепенно развёртывается: установите на `1`, чтобы согласиться, или на `0`, чтобы отказаться. На Linux, macOS и WSL установите на `1`, чтобы включить его, что требует `pwsh` в вашем `PATH`. При включении на Windows Claude может запускать команды PowerShell изначально вместо маршрутизации через Git Bash. См. [Инструмент PowerShell](/ru/tools-reference#powershell-tool) |164| `CLAUDE_CODE_USE_POWERSHELL_TOOL` | Управляет инструментом PowerShell. На Windows без Git Bash инструмент включен автоматически; установите на `0`, чтобы отключить его. На Windows с установленным Git Bash инструмент постепенно развёртывается: установите на `1`, чтобы согласиться, или на `0`, чтобы отказаться. На Linux, macOS и WSL установите на `1`, чтобы включить его, что требует `pwsh` в вашем `PATH`. При включении на Windows Claude может запускать команды PowerShell изначально вместо маршрутизации через Git Bash. См. [Инструмент PowerShell](/ru/tools-reference#powershell-tool) |

165| `CLAUDE_CODE_USE_VERTEX` | Использовать [Vertex](/ru/google-vertex-ai) |165| `CLAUDE_CODE_USE_VERTEX` | Использовать [Vertex](/ru/google-vertex-ai) |

166| `CLAUDE_CONFIG_DIR` | Переопределить каталог конфигурации (по умолчанию: `~/.claude`). Все параметры, учётные данные, история сессии и plugins хранятся под этим путём. Полезно для запуска нескольких учётных записей рядом: например, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |166| `CLAUDE_CONFIG_DIR` | Переопределить каталог конфигурации (по умолчанию: `~/.claude`). Все параметры, учётные данные, история сессии и plugins хранятся под этим путём. Полезно для запуска нескольких учётных записей рядом: например, `alias claude-work='CLAUDE_CONFIG_DIR=~/.claude-work claude'` |

167| `CLAUDE_EFFORT` | Установите автоматически в подпроцессах инструмента Bash и командах hook на активный [уровень усилий](/ru/model-config#adjust-effort-level) для хода: `low`, `medium`, `high`, `xhigh` или `max`. Совпадает с полем `effort.level`, переданным в [hooks](/ru/hooks). Установлено только, когда текущая модель поддерживает параметр усилий |

167| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Установите на `1`, чтобы принудительно включить сторож простоя на уровне байтов, или установите на `0`, чтобы принудительно отключить его. Если не установлено, сторож включен по умолчанию для соединений Anthropic API. Сторож байтов прерывает соединение, когда на проводе не поступают байты в течение времени, установленного `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, с минимумом 5 минут, независимо от сторожа на уровне событий |168| `CLAUDE_ENABLE_BYTE_WATCHDOG` | Установите на `1`, чтобы принудительно включить сторож простоя на уровне байтов, или установите на `0`, чтобы принудительно отключить его. Если не установлено, сторож включен по умолчанию для соединений Anthropic API. Сторож байтов прерывает соединение, когда на проводе не поступают байты в течение времени, установленного `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, с минимумом 5 минут, независимо от сторожа на уровне событий |

168| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Установите на `1`, чтобы включить сторож простоя потока на уровне событий. Отключено по умолчанию. Для Bedrock, Vertex и Foundry это единственный доступный сторож простоя. Настройте тайм-аут с помощью `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |169| `CLAUDE_ENABLE_STREAM_WATCHDOG` | Установите на `1`, чтобы включить сторож простоя потока на уровне событий. Отключено по умолчанию. Для Bedrock, Vertex и Foundry это единственный доступный сторож простоя. Настройте тайм-аут с помощью `CLAUDE_STREAM_IDLE_TIMEOUT_MS` |

169| `CLAUDE_ENV_FILE` | Путь к скрипту оболочки, содержимое которого Claude Code запускает перед каждой командой Bash в том же процессе оболочки, поэтому экспорты в файле видны команде. Используйте для сохранения активации virtualenv или conda между командами. Также динамически заполняется [SessionStart](/ru/hooks#persist-environment-variables), [Setup](/ru/hooks#setup), [CwdChanged](/ru/hooks#cwdchanged) и [FileChanged](/ru/hooks#filechanged) hooks |170| `CLAUDE_ENV_FILE` | Путь к скрипту оболочки, содержимое которого Claude Code запускает перед каждой командой Bash в том же процессе оболочки, поэтому экспорты в файле видны команде. Используйте для сохранения активации virtualenv или conda между командами. Также динамически заполняется [SessionStart](/ru/hooks#persist-environment-variables), [Setup](/ru/hooks#setup), [CwdChanged](/ru/hooks#cwdchanged) и [FileChanged](/ru/hooks#filechanged) hooks |


205| `MAX_THINKING_TOKENS` | Переопределить бюджет токенов [расширенного мышления](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Потолок — это [максимальное количество выходных токенов](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) модели минус один. Установите на `0`, чтобы полностью отключить мышление. На моделях с [адаптивным рассуждением](/ru/model-config#adjust-effort-level) бюджет игнорируется, если адаптивное рассуждение не отключено через `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |206| `MAX_THINKING_TOKENS` | Переопределить бюджет токенов [расширенного мышления](https://platform.claude.com/docs/en/build-with-claude/extended-thinking). Потолок — это [максимальное количество выходных токенов](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) модели минус один. Установите на `0`, чтобы полностью отключить мышление. На моделях с [адаптивным рассуждением](/ru/model-config#adjust-effort-level) бюджет игнорируется, если адаптивное рассуждение не отключено через `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` |

206| `MCP_CLIENT_SECRET` | Секрет клиента OAuth для MCP servers, которые требуют [предварительно настроенные учётные данные](/ru/mcp#use-pre-configured-oauth-credentials). Избегает интерактивного приглашения при добавлении сервера с `--client-secret` |207| `MCP_CLIENT_SECRET` | Секрет клиента OAuth для MCP servers, которые требуют [предварительно настроенные учётные данные](/ru/mcp#use-pre-configured-oauth-credentials). Избегает интерактивного приглашения при добавлении сервера с `--client-secret` |

207| `MCP_CONNECTION_NONBLOCKING` | Установите на `true` в неинтерактивном режиме (`-p`), чтобы полностью пропустить ожидание подключения MCP. Полезно для скриптовых конвейеров, где инструменты MCP не требуются. Без этой переменной первый запрос ждёт до 5 секунд для подключения серверов `--mcp-config`. Серверы, настроенные с [`alwaysLoad: true`](/ru/mcp#exempt-a-server-from-deferral), всегда блокируют запуск независимо от этой переменной, так как их инструменты должны присутствовать при построении первого приглашения |208| `MCP_CONNECTION_NONBLOCKING` | Установите на `true` в неинтерактивном режиме (`-p`), чтобы полностью пропустить ожидание подключения MCP. Полезно для скриптовых конвейеров, где инструменты MCP не требуются. Без этой переменной первый запрос ждёт до 5 секунд для подключения серверов `--mcp-config`. Серверы, настроенные с [`alwaysLoad: true`](/ru/mcp#exempt-a-server-from-deferral), всегда блокируют запуск независимо от этой переменной, так как их инструменты должны присутствовать при построении первого приглашения |

209| `MCP_CONNECT_TIMEOUT_MS` | Как долго первый запрос ждёт, в миллисекундах, для пакета подключения MCP перед снимком списка инструментов (по умолчанию: 5000). Серверы, всё ещё ожидающие на крайнем сроке, продолжают подключаться в фоне, но не будут видны до следующего запроса. Отличается от `MCP_TIMEOUT`, который ограничивает попытку подключения отдельного сервера. Наиболее актуально для неинтерактивных сессий, которые выдают один запрос и нуждаются в медленно подключаемых серверах, чтобы быть видимыми |

208| `MCP_OAUTH_CALLBACK_PORT` | Фиксированный порт для обратного вызова перенаправления OAuth, как альтернатива `--callback-port` при добавлении MCP server с [предварительно настроенными учётными данными](/ru/mcp#use-pre-configured-oauth-credentials) |210| `MCP_OAUTH_CALLBACK_PORT` | Фиксированный порт для обратного вызова перенаправления OAuth, как альтернатива `--callback-port` при добавлении MCP server с [предварительно настроенными учётными данными](/ru/mcp#use-pre-configured-oauth-credentials) |

209| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Максимальное количество удалённых MCP servers (HTTP/SSE) для подключения параллельно при запуске (по умолчанию: 20) |211| `MCP_REMOTE_SERVER_CONNECTION_BATCH_SIZE` | Максимальное количество удалённых MCP servers (HTTP/SSE) для подключения параллельно при запуске (по умолчанию: 20) |

210| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Максимальное количество локальных MCP servers (stdio) для подключения параллельно при запуске (по умолчанию: 3) |212| `MCP_SERVER_CONNECTION_BATCH_SIZE` | Максимальное количество локальных MCP servers (stdio) для подключения параллельно при запуске (по умолчанию: 3) |

Details

249 249 

250 **Стоимость контекста:** Низкая до использования. Skills только пользователя имеют нулевую стоимость до вызова.250 **Стоимость контекста:** Низкая до использования. Skills только пользователя имеют нулевую стоимость до вызова.

251 251 

252 **В subagents:** Skills работают по-другому в subagents. Вместо загрузки по требованию, skills, переданные subagent, полностью предварительно загружаются в его контекст при запуске. Subagents не наследуют skills из основной сессии; вы должны указать их явно.252 **В subagents:** Skills работают по-другому в subagents. Вместо загрузки по требованию, skills, указанные в поле `skills:` subagent, полностью предварительно загружаются в его контекст при запуске. Subagents всё ещё могут обнаруживать и вызывать unlisted project, user и plugin skills через инструмент Skill.

253 253 

254 <Tip>Используйте `disable-model-invocation: true` для skills с побочными эффектами. Это экономит контекст и гарантирует, что только вы их запускаете.</Tip>254 <Tip>Используйте `disable-model-invocation: true` для skills с побочными эффектами. Это экономит контекст и гарантирует, что только вы их запускаете.</Tip>

255 </Tab>255 </Tab>

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="vertex" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="vertex" />} />

190 80 

191## Предварительные требования81## Предварительные требования

192 82 

hooks.md +13 −12

Details

509 509 

510Прямые редактирования hooks в файлах настроек обычно захватываются автоматически наблюдателем файлов.510Прямые редактирования hooks в файлах настроек обычно захватываются автоматически наблюдателем файлов.

511 511 

512## Hook input and output512## Входные и выходные данные Hook

513 513 

514Command hooks получают JSON данные через stdin и передают результаты через коды выхода, stdout и stderr. HTTP hooks получают тот же JSON как тело POST запроса и передают результаты через тело HTTP ответа. Этот раздел охватывает поля и поведение, общие для всех событий. Каждый раздел события под [Hook events](#hook-events) включает его специфическую схему входа и параметры управления решением.514Command hooks получают JSON данные через stdin и передают результаты через коды выхода, stdout и stderr. HTTP hooks получают тот же JSON как тело POST запроса и передают результаты через тело HTTP ответа. Этот раздел охватывает поля и поведение, общие для всех событий. Каждый раздел события под [Hook events](#hook-events) включает его специфическую схему входа и параметры управления решением.

515 515 

516### Common input fields516### Общие входные поля

517 517 

518Hook события получают эти поля как JSON, в дополнение к полям, специфичным для события, документированным в каждом разделе [hook event](#hook-events). Для command hooks этот JSON поступает через stdin. Для HTTP hooks он поступает как тело POST запроса.518Hook события получают эти поля как JSON, в дополнение к полям, специфичным для события, документированным в каждом разделе [hook event](#hook-events). Для command hooks этот JSON поступает через stdin. Для HTTP hooks он поступает как тело POST запроса.

519 519 

520| Поле | Описание |520| Поле | Описание |

521| :---------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |521| :---------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

522| `session_id` | Текущий идентификатор сеанса |522| `session_id` | Текущий идентификатор сеанса |

523| `transcript_path` | Путь к JSON разговора |523| `transcript_path` | Путь к JSON разговора |

524| `cwd` | Текущий рабочий каталог при вызове hook |524| `cwd` | Текущий рабочий каталог при вызове hook |

525| `permission_mode` | Текущий [режим разрешения](/ru/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` или `"bypassPermissions"`. Не все события получают это поле: см. пример JSON каждого события ниже для проверки |525| `permission_mode` | Текущий [режим разрешения](/ru/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` или `"bypassPermissions"`. Не все события получают это поле: см. пример JSON каждого события ниже для проверки |

526| `effort` | Объект с полем `level`, содержащим активный [уровень усилий](/ru/model-config#adjust-effort-level) для хода: `"low"`, `"medium"`, `"high"`, `"xhigh"` или `"max"`. Если запрошенный уровень усилий превышает то, что поддерживает текущая модель, это понижающий уровень, который модель фактически использовала, а не уровень, который вы запросили. Объект соответствует полю `effort` [строки статуса](/ru/statusline#available-data). Присутствует для событий, которые срабатывают в контексте использования инструмента, таких как `PreToolUse`, `PostToolUse`, `Stop` и `SubagentStop`, когда текущая модель поддерживает параметр усилий. Уровень также доступен для команд hook и инструмента Bash как переменная окружения `$CLAUDE_EFFORT`. |

526| `hook_event_name` | Имя события, которое сработало |527| `hook_event_name` | Имя события, которое сработало |

527 528 

528При запуске с `--agent` или внутри subagent включаются два дополнительных поля:529При запуске с `--agent` или внутри subagent включаются два дополнительных поля:


550 551 

551Поля `tool_name` и `tool_input` специфичны для события. Каждый раздел [hook event](#hook-events) документирует дополнительные поля для этого события.552Поля `tool_name` и `tool_input` специфичны для события. Каждый раздел [hook event](#hook-events) документирует дополнительные поля для этого события.

552 553 

553### Exit code output554### Выходные коды выхода

554 555 

555Код выхода из вашей команды hook говорит Claude Code, должно ли действие продолжаться, быть заблокировано или быть проигнорировано.556Код выхода из вашей команды hook говорит Claude Code, должно ли действие продолжаться, быть заблокировано или быть проигнорировано.

556 557 


579 Для большинства событий hook только exit code 2 блокирует действие. Claude Code рассматривает exit code 1 как неблокирующую ошибку и продолжает действие, даже хотя 1 — это обычный код отказа Unix. Если ваш hook предназначен для обеспечения политики, используйте `exit 2`. Исключение — `WorktreeCreate`, где любой ненулевой код выхода прерывает создание worktree.580 Для большинства событий hook только exit code 2 блокирует действие. Claude Code рассматривает exit code 1 как неблокирующую ошибку и продолжает действие, даже хотя 1 — это обычный код отказа Unix. Если ваш hook предназначен для обеспечения политики, используйте `exit 2`. Исключение — `WorktreeCreate`, где любой ненулевой код выхода прерывает создание worktree.

580</Warning>581</Warning>

581 582 

582#### Exit code 2 behavior per event583#### Поведение exit code 2 для каждого события

583 584 

584Exit code 2 — это способ hook сигнализировать "стоп, не делай этого". Эффект зависит от события, потому что некоторые события представляют действия, которые могут быть заблокированы (например, вызов инструмента, который ещё не произошёл), а другие представляют вещи, которые уже произошли или не могут быть предотвращены.585Exit code 2 — это способ hook сигнализировать "стоп, не делай этого". Эффект зависит от события, потому что некоторые события представляют действия, которые могут быть заблокированы (например, вызов инструмента, который ещё не произошёл), а другие представляют вещи, которые уже произошли или не могут быть предотвращены.

585 586 


615| `WorktreeRemove` | Нет | Сбои логируются только в режиме отладки |616| `WorktreeRemove` | Нет | Сбои логируются только в режиме отладки |

616| `InstructionsLoaded` | Нет | Код выхода игнорируется |617| `InstructionsLoaded` | Нет | Код выхода игнорируется |

617 618 

618### HTTP response handling619### Обработка HTTP ответа

619 620 

620HTTP hooks используют коды статуса HTTP и тела ответов вместо кодов выхода и stdout:621HTTP hooks используют коды статуса HTTP и тела ответов вместо кодов выхода и stdout:

621 622 


627 628 

628В отличие от command hooks, HTTP hooks не могут сигнализировать блокирующую ошибку только через коды статуса. Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с JSON телом, содержащим соответствующие поля решения.629В отличие от command hooks, HTTP hooks не могут сигнализировать блокирующую ошибку только через коды статуса. Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с JSON телом, содержащим соответствующие поля решения.

629 630 

630### JSON output631### JSON выход

631 632 

632Коды выхода позволяют вам разрешить или заблокировать, но JSON выход даёт вам более точное управление. Вместо выхода с кодом 2 для блокировки, выйдите с 0 и выведите JSON объект на stdout. Claude Code читает специфические поля из этого JSON для управления поведением, включая [decision control](#decision-control) для блокировки, разрешения или эскалации пользователю.633Коды выхода позволяют вам разрешить или заблокировать, но JSON выход даёт вам более точное управление. Вместо выхода с кодом 2 для блокировки, выйдите с 0 и выведите JSON объект на stdout. Claude Code читает специфические поля из этого JSON для управления поведением, включая [decision control](#decision-control) для блокировки, разрешения или эскалации пользователю.

633 634 


658{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }659{ "continue": false, "stopReason": "Build failed, fix errors before continuing" }

659```660```

660 661 

661#### Add context for Claude662#### Добавить контекст для Claude

662 663 

663Поле `additionalContext` передаёт строку из вашего hook в контекстное окно Claude. Claude Code оборачивает строку в системное напоминание и вставляет её в разговор в точке, где сработал hook. Claude читает напоминание при следующем запросе модели, но оно не появляется как сообщение чата в интерфейсе.664Поле `additionalContext` передаёт строку из вашего hook в контекстное окно Claude. Claude Code оборачивает строку в системное напоминание и вставляет её в разговор в точке, где сработал hook. Claude читает напоминание при следующем запросе модели, но оно не появляется как сообщение чата в интерфейсе.

664 665 


693 694 

694После внедрения текст сохраняется в транскрипте сеанса. Для событий в середине сеанса, таких как `PostToolUse` или `UserPromptSubmit`, возобновление с `--continue` или `--resume` воспроизводит сохранённый текст вместо повторного запуска hook для прошлых ходов, поэтому значения, такие как временные метки или SHA коммитов, становятся устаревшими при возобновлении. Hooks `SessionStart` запускаются снова при возобновлении с `source` установленным на `"resume"`, поэтому они могут обновить свой контекст.695После внедрения текст сохраняется в транскрипте сеанса. Для событий в середине сеанса, таких как `PostToolUse` или `UserPromptSubmit`, возобновление с `--continue` или `--resume` воспроизводит сохранённый текст вместо повторного запуска hook для прошлых ходов, поэтому значения, такие как временные метки или SHA коммитов, становятся устаревшими при возобновлении. Hooks `SessionStart` запускаются снова при возобновлении с `source` установленным на `"resume"`, поэтому они могут обновить свой контекст.

695 696 

696#### Decision control697#### Управление решением

697 698 

698Не каждое событие поддерживает блокировку или управление поведением через JSON. События, которые это делают, каждое использует другой набор полей для выражения этого решения. Используйте эту таблицу как быструю ссылку перед написанием hook:699Не каждое событие поддерживает блокировку или управление поведением через JSON. События, которые это делают, каждое использует другой набор полей для выражения этого решения. Используйте эту таблицу как быструю ссылку перед написанием hook:

699 700 


1225 1226 

1226Если отложенный инструмент больше не доступен при возобновлении, процесс выходит с `stop_reason: "tool_deferred_unavailable"` и `is_error: true` перед срабатыванием hook. Это происходит когда MCP сервер, который предоставил инструмент, не подключен для возобновлённого сеанса. Полезная нагрузка `deferred_tool_use` всё ещё включена, чтобы вы могли идентифицировать, какой инструмент исчез.1227Если отложенный инструмент больше не доступен при возобновлении, процесс выходит с `stop_reason: "tool_deferred_unavailable"` и `is_error: true` перед срабатыванием hook. Это происходит когда MCP сервер, который предоставил инструмент, не подключен для возобновлённого сеанса. Полезная нагрузка `deferred_tool_use` всё ещё включена, чтобы вы могли идентифицировать, какой инструмент исчез.

1227 1228 

1228<Warning>1229<Note>

1229 `--resume` не восстанавливает режим разрешения из предыдущего сеанса. Передайте тот же флаг `--permission-mode` при возобновлении, который был активен при отложении инструмента. Claude Code логирует предупреждение, если режимы отличаются.1230 `--resume` восстанавливает режим разрешения, который был активен при отложении инструмента, поэтому вам не нужно передавать `--permission-mode` снова. Исключения это `plan` и `bypassPermissions`, которые никогда не переносятся. Передача `--permission-mode` явно при возобновлении переопределяет восстановленное значение.

1230</Warning>1231</Note>

1231 1232 

1232### PermissionRequest1233### PermissionRequest

1233 1234 

memory.md +10 −0

Details

132Используйте plan mode для изменений в `src/billing/`.132Используйте plan mode для изменений в `src/billing/`.

133```133```

134 134 

135Symlink также работает, если вам не нужно добавлять содержимое, специфичное для Claude:

136 

137```bash theme={null}

138ln -s AGENTS.md CLAUDE.md

139```

140 

141На Windows создание symlink требует привилегий администратора или режима разработчика, поэтому используйте импорт `@AGENTS.md` вместо этого.

142 

143Запуск [`/init`](/ru/commands) в репозитории, который уже имеет `AGENTS.md`, читает его и включает соответствующие части в созданный `CLAUDE.md`. Он также читает другие конфигурации инструментов, такие как `.cursorrules` и `.windsurfrules`.

144 

135### Как загружаются файлы CLAUDE.md145### Как загружаются файлы CLAUDE.md

136 146 

137Claude Code читает файлы CLAUDE.md, проходя вверх по дереву каталогов из вашего текущего рабочего каталога, проверяя каждый каталог на пути для файлов `CLAUDE.md` и `CLAUDE.local.md`. Это означает, что если вы запустите Claude Code в `foo/bar/`, он загружает инструкции из `foo/bar/CLAUDE.md`, `foo/CLAUDE.md` и любых файлов `CLAUDE.local.md` рядом с ними.147Claude Code читает файлы CLAUDE.md, проходя вверх по дереву каталогов из вашего текущего рабочего каталога, проверяя каждый каталог на пути для файлов `CLAUDE.md` и `CLAUDE.local.md`. Это означает, что если вы запустите Claude Code в `foo/bar/`, он загружает инструкции из `foo/bar/CLAUDE.md`, `foo/CLAUDE.md` и любых файлов `CLAUDE.local.md` рядом с ними.

Details

76 </div>;76 </div>;

77};77};

78 78 

79export const Experiment = ({flag, treatment, children}) => {79<ContactSalesCard surface="foundry" />

80 const VID_KEY = 'exp_vid';

81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

82 const fnv1a = s => {

83 let h = 0x811c9dc5;

84 for (let i = 0; i < s.length; i++) {

85 h ^= s.charCodeAt(i);

86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

87 }

88 return h >>> 0;

89 };

90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

91 const [decision] = useState(() => {

92 const params = new URLSearchParams(location.search);

93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

94 const force = params.get('gb-force');

95 if (force) {

96 for (const p of force.split(',')) {

97 const [k, v] = p.split(':');

98 if (k === flag) return {

99 variant: v || 'treatment',

100 track: false

101 };

102 }

103 }

104 if (navigator.globalPrivacyControl) {

105 return {

106 variant: 'control',

107 track: false

108 };

109 }

110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

111 if (prefsMatch) {

112 try {

113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

114 return {

115 variant: 'control',

116 track: false

117 };

118 }

119 } catch {

120 return {

121 variant: 'control',

122 track: false

123 };

124 }

125 } else {

126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

127 if (!country || CONSENT_COUNTRIES.has(country)) {

128 return {

129 variant: 'control',

130 track: false

131 };

132 }

133 }

134 let vid;

135 try {

136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

137 if (ajsMatch) {

138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

139 } else {

140 vid = localStorage.getItem(VID_KEY);

141 if (!vid) {

142 vid = crypto.randomUUID();

143 }

144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

145 }

146 try {

147 localStorage.setItem(VID_KEY, vid);

148 } catch {}

149 } catch {

150 return {

151 variant: 'control',

152 track: false

153 };

154 }

155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

156 return {

157 variant,

158 track: true,

159 vid

160 };

161 });

162 useEffect(() => {

163 if (!decision.track) return;

164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

165 method: 'POST',

166 headers: {

167 'Content-Type': 'application/json',

168 'x-service-name': 'claude_code_docs'

169 },

170 body: JSON.stringify({

171 events: [{

172 event_type: 'GrowthbookExperimentEvent',

173 event_data: {

174 device_id: decision.vid,

175 anonymous_id: decision.vid,

176 timestamp: new Date().toISOString(),

177 experiment_id: flag,

178 variation_id: decision.variant === 'treatment' ? 1 : 0,

179 environment: 'production'

180 }

181 }]

182 }),

183 keepalive: true

184 }).catch(() => {});

185 }, []);

186 return decision.variant === 'treatment' ? treatment : children;

187};

188 

189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="foundry" />} />

190 80 

191## Предварительные требования81## Предварительные требования

192 82 

model-config.md +4 −0

Details

17 * Foundry: имя развертывания17 * Foundry: имя развертывания

18 * Vertex: имя версии18 * Vertex: имя версии

19 19 

20<Note>

21 `ANTHROPIC_BASE_URL` изменяет, куда отправляются запросы, а не какая модель на них отвечает. Чтобы маршрутизировать Claude через шлюз LLM, см. [конфигурация шлюза LLM](/ru/llm-gateway).

22</Note>

23 

20### Псевдонимы моделей24### Псевдонимы моделей

21 25 

22Псевдонимы моделей предоставляют удобный способ выбора параметров модели без необходимости запоминать точные номера версий:26Псевдонимы моделей предоставляют удобный способ выбора параметров модели без необходимости запоминать точные номера версий:

overview.md +1 −635

Details

6 6 

7> Claude Code — это агентский инструмент кодирования, который читает вашу кодовую базу, редактирует файлы, выполняет команды и интегрируется с вашими инструментами разработки. Доступен в вашем терминале, IDE, приложении для рабочего стола и браузере.7> Claude Code — это агентский инструмент кодирования, который читает вашу кодовую базу, редактирует файлы, выполняет команды и интегрируется с вашими инструментами разработки. Доступен в вашем терминале, IDE, приложении для рабочего стола и браузере.

8 8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Claude Code — это AI-помощник по кодированию, который помогает вам создавать функции, исправлять ошибки и автоматизировать задачи разработки. Он понимает всю вашу кодовую базу и может работать с несколькими файлами и инструментами для выполнения задач.9Claude Code — это AI-помощник по кодированию, который помогает вам создавать функции, исправлять ошибки и автоматизировать задачи разработки. Он понимает всю вашу кодовую базу и может работать с несколькими файлами и инструментами для выполнения задач.

640 10 

641<div data-gb-slot="overview-install-configurator">

642 <Experiment flag="overview-install-configurator" treatment={<InstallConfigurator />} />

643</div>

644 

645## Начало работы11## Начало работы

646 12 

647Выберите вашу среду для начала работы. Большинство поверхностей требуют [подписку Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) или учетную запись [Anthropic Console](https://console.anthropic.com/). Terminal CLI и VS Code также поддерживают [сторонних поставщиков](/ru/third-party-integrations).13Выберите вашу среду для начала работы. Большинство поверхностей требуют [подписку Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=overview_pricing) или учетную запись [Anthropic Console](https://console.anthropic.com/). Terminal CLI и VS Code также поддерживают [сторонних поставщиков](/ru/third-party-integrations).


798 <Accordion title="Настройте с помощью инструкций, skills и hooks" icon="sliders">164 <Accordion title="Настройте с помощью инструкций, skills и hooks" icon="sliders">

799 [`CLAUDE.md`](/ru/memory) — это файл markdown, который вы добавляете в корень вашего проекта, и Claude Code читает его в начале каждого сеанса. Используйте его для установки стандартов кодирования, архитектурных решений, предпочитаемых библиотек и контрольных списков проверки. Claude также создает [auto memory](/ru/memory#auto-memory) по мере работы, сохраняя знания, такие как команды сборки и идеи отладки, в разных сеансах без необходимости что-либо писать.165 [`CLAUDE.md`](/ru/memory) — это файл markdown, который вы добавляете в корень вашего проекта, и Claude Code читает его в начале каждого сеанса. Используйте его для установки стандартов кодирования, архитектурных решений, предпочитаемых библиотек и контрольных списков проверки. Claude также создает [auto memory](/ru/memory#auto-memory) по мере работы, сохраняя знания, такие как команды сборки и идеи отладки, в разных сеансах без необходимости что-либо писать.

800 166 

801 Создавайте [пользовательские команды](/ru/skills) для упаковки повторяемых рабочих процессов, которые ваша команда может использовать, например `/review-pr` или `/deploy-staging`.167 Создавайте [skills](/ru/skills) для упаковки повторяемых рабочих процессов, которые ваша команда может использовать, например `/review-pr` или `/deploy-staging`.

802 168 

803 [Hooks](/ru/hooks) позволяют вам запускать команды shell до или после действий Claude Code, например автоматическое форматирование после каждого редактирования файла или запуск lint перед коммитом.169 [Hooks](/ru/hooks) позволяют вам запускать команды shell до или после действий Claude Code, например автоматическое форматирование после каждого редактирования файла или запуск lint перед коммитом.

804 </Accordion>170 </Accordion>

plugins.md +9 −1

Details

317 317 

318Чтобы протестировать plugin, который уже упакован как архив `.zip` и размещён по URL-адресу, например артефакт сборки CI, используйте вместо этого `--plugin-url`. Claude Code загружает архив при запуске и загружает его только для этого сеанса. Если загрузка не удаётся или архив недействителен, Claude Code сообщает об ошибке загрузки plugin и запускается без него. Те же [соображения доверия](/ru/discover-plugins#security) применяются как для любого источника plugin: указывайте этот флаг только на архивы, которыми вы управляете или которым доверяете.318Чтобы протестировать plugin, который уже упакован как архив `.zip` и размещён по URL-адресу, например артефакт сборки CI, используйте вместо этого `--plugin-url`. Claude Code загружает архив при запуске и загружает его только для этого сеанса. Если загрузка не удаётся или архив недействителен, Claude Code сообщает об ошибке загрузки plugin и запускается без него. Те же [соображения доверия](/ru/discover-plugins#security) применяются как для любого источника plugin: указывайте этот флаг только на архивы, которыми вы управляете или которым доверяете.

319 319 

320Чтобы загружать несколько plugins, повторите флаг для каждого URL:

321 

322```bash theme={null}

323claude --plugin-url https://example.com/my-plugin.zip --plugin-url https://example.com/other.zip

324```

325 

326Или передайте разделённые пробелами URL-адреса как один аргумент в кавычках:

327 

320```bash theme={null}328```bash theme={null}

321claude --plugin-url https://example.com/my-plugin.zip329claude --plugin-url "https://example.com/my-plugin.zip https://example.com/other.zip"

322```330```

323 331 

324### Отладка проблем plugin332### Отладка проблем plugin

quickstart.md +4 −637

Details

6 6 

7> Добро пожаловать в Claude Code!7> Добро пожаловать в Claude Code!

8 8 

9export const InstallConfigurator = ({defaultSurface = 'terminal'}) => {

10 const TERM = {

11 mac: {

12 label: 'macOS / Linux',

13 cmd: 'curl -fsSL https://claude.ai/install.sh | bash'

14 },

15 win: {

16 label: 'Windows'

17 },

18 brew: {

19 label: 'Homebrew',

20 cmd: 'brew install --cask claude-code'

21 },

22 winget: {

23 label: 'WinGet',

24 cmd: 'winget install Anthropic.ClaudeCode'

25 }

26 };

27 const WIN_VARIANTS = {

28 ps: 'irm https://claude.ai/install.ps1 | iex',

29 cmd: 'curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd'

30 };

31 const TABS = [{

32 key: 'terminal',

33 label: 'Terminal'

34 }, {

35 key: 'desktop',

36 label: 'Desktop'

37 }, {

38 key: 'vscode',

39 label: 'VS Code'

40 }, {

41 key: 'jetbrains',

42 label: 'JetBrains'

43 }];

44 const ALT_TARGETS = {

45 desktop: {

46 name: 'Desktop',

47 tagline: 'The full agent in a native app for macOS and Windows.',

48 installLabel: 'Download the app',

49 installHref: 'https://claude.com/download?utm_source=claude_code&utm_medium=docs&utm_content=configurator_desktop_download',

50 guideHref: '/en/desktop-quickstart'

51 },

52 vscode: {

53 name: 'VS Code',

54 tagline: 'Review diffs, manage context, and chat without leaving your editor.',

55 installLabel: 'Install from Marketplace',

56 installHref: 'https://marketplace.visualstudio.com/items?itemName=anthropic.claude-code',

57 altCmd: 'code --install-extension anthropic.claude-code',

58 guideHref: '/en/vs-code'

59 },

60 jetbrains: {

61 name: 'JetBrains',

62 tagline: 'Native plugin for IntelliJ, PyCharm, WebStorm, and other JetBrains IDEs.',

63 installLabel: 'Install from Marketplace',

64 installHref: 'https://plugins.jetbrains.com/plugin/27310-claude-code-beta-',

65 guideHref: '/en/jetbrains'

66 }

67 };

68 const PROVIDERS = [{

69 key: 'anthropic',

70 label: 'Anthropic'

71 }, {

72 key: 'bedrock',

73 label: 'Amazon Bedrock'

74 }, {

75 key: 'foundry',

76 label: 'Microsoft Foundry'

77 }, {

78 key: 'vertex',

79 label: 'Google Vertex AI'

80 }];

81 const PROVIDER_NOTICE = {

82 bedrock: <>

83 <strong>Configure your AWS account first.</strong> Running on Bedrock

84 requires model access enabled in the AWS console and IAM credentials.{' '}

85 <a href="/en/amazon-bedrock">Bedrock setup guide →</a>

86 </>,

87 vertex: <>

88 <strong>Configure your GCP project first.</strong> Running on Vertex AI

89 requires the Vertex API enabled and a service account with the right

90 permissions.{' '}

91 <a href="/en/google-vertex-ai">Vertex setup guide →</a>

92 </>,

93 foundry: <>

94 <strong>Configure your Azure resources first.</strong> Running on

95 Microsoft Foundry requires an Azure subscription with a Foundry resource

96 and model deployments provisioned.{' '}

97 <a href="/en/microsoft-foundry">Foundry setup guide →</a>

98 </>

99 };

100 const iconCheck = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="3" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

101 <polyline points="20 6 9 17 4 12" />

102 </svg>;

103 const iconCopy = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

104 <rect x="9" y="9" width="13" height="13" rx="2" />

105 <path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" />

106 </svg>;

107 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

108 <line x1="5" y1="12" x2="19" y2="12" />

109 <polyline points="12 5 19 12 12 19" />

110 </svg>;

111 const iconArrowUpRight = (size = 14) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

112 <line x1="7" y1="17" x2="17" y2="7" />

113 <polyline points="7 7 17 7 17 17" />

114 </svg>;

115 const iconInfo = (size = 16) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

116 <circle cx="12" cy="12" r="10" />

117 <line x1="12" y1="16" x2="12" y2="12" />

118 <line x1="12" y1="8" x2="12.01" y2="8" />

119 </svg>;

120 const [target, setTarget] = useState(defaultSurface);

121 const [team, setTeam] = useState(false);

122 const [provider, setProvider] = useState('anthropic');

123 const [pkg, setPkg] = useState(() => (/Win/).test(navigator.userAgent) ? 'win' : 'mac');

124 const [winCmd, setWinCmd] = useState(false);

125 const [copied, setCopied] = useState(null);

126 const copyTimer = useRef(null);

127 const handleCopy = async (text, key) => {

128 try {

129 await navigator.clipboard.writeText(text);

130 } catch {

131 const ta = document.createElement('textarea');

132 ta.value = text;

133 document.body.appendChild(ta);

134 ta.select();

135 document.execCommand('copy');

136 document.body.removeChild(ta);

137 }

138 clearTimeout(copyTimer.current);

139 setCopied(key);

140 copyTimer.current = setTimeout(() => setCopied(null), 1800);

141 };

142 const cardBodyCmd = (cmd, prompt) => {

143 const on = copied === 'term';

144 return <div className="cc-ic-card-body">

145 <span className="cc-ic-prompt">{prompt || '$'}</span>

146 <div className="cc-ic-cmd">{cmd}</div>

147 <button type="button" className={'cc-ic-copy' + (on ? ' cc-ic-copied' : '')} onClick={() => handleCopy(cmd, 'term')}>

148 {on ? iconCheck(13) : iconCopy(13)}

149 <span>{on ? 'Copied' : 'Copy'}</span>

150 </button>

151 </div>;

152 };

153 const isWinInstaller = pkg === 'win';

154 const isWinPrompt = pkg === 'win' || pkg === 'winget';

155 const terminalCmd = isWinInstaller ? WIN_VARIANTS[winCmd ? 'cmd' : 'ps'] : TERM[pkg].cmd;

156 const alt = ALT_TARGETS[target];

157 const showNotice = team && provider !== 'anthropic';

158 const STYLES = `

159.cc-ic {

160 --ic-slate: #141413;

161 --ic-clay: #d97757;

162 --ic-clay-deep: #c6613f;

163 --ic-gray-000: #ffffff;

164 --ic-gray-150: #f0eee6;

165 --ic-gray-550: #73726c;

166 --ic-gray-700: #3d3d3a;

167 --ic-border-subtle: rgba(31, 30, 29, 0.08);

168 --ic-border-default: rgba(31, 30, 29, 0.15);

169 --ic-border-strong: rgba(31, 30, 29, 0.3);

170 --ic-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Courier New', monospace;

171 font-family: 'Anthropic Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

172 font-size: 14px; line-height: 1.5; color: var(--ic-slate);

173 margin: 8px 0 32px;

174}

175.dark .cc-ic {

176 --ic-slate: #f0eee6;

177 --ic-gray-000: #262624;

178 --ic-gray-150: #1f1e1d;

179 --ic-gray-550: #91908a;

180 --ic-gray-700: #bfbdb4;

181 --ic-border-subtle: rgba(240, 238, 230, 0.08);

182 --ic-border-default: rgba(240, 238, 230, 0.14);

183 --ic-border-strong: rgba(240, 238, 230, 0.28);

184}

185.dark .cc-ic-check { background: transparent; }

186.dark .cc-ic-card { border: 0.5px solid var(--ic-border-subtle); }

187.dark .cc-ic-p-pill.cc-ic-active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); }

188.cc-ic *, .cc-ic *::before, .cc-ic *::after { box-sizing: border-box; }

189.cc-ic a { text-decoration: none; }

190.cc-ic a:not([class]) { color: inherit; }

191.cc-ic button { font-family: inherit; cursor: pointer; }

192 

193.cc-ic-tab-strip {

194 display: inline-flex; gap: 2px;

195 padding: 4px; background: var(--ic-gray-150);

196 border-radius: 10px; overflow-x: auto;

197 max-width: 100%;

198}

199.cc-ic-tab {

200 appearance: none; background: none; border: none;

201 padding: 10px 18px; font-size: 15px; font-weight: 430;

202 color: var(--ic-gray-550); border-radius: 7px;

203 white-space: nowrap;

204 transition: color 0.12s, background-color 0.12s;

205}

206.cc-ic-tab:hover { color: var(--ic-gray-700); }

207.cc-ic-tab.cc-ic-active {

208 color: var(--ic-slate); font-weight: 500;

209 background: var(--ic-gray-000);

210 box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);

211}

212.dark .cc-ic-tab.cc-ic-active { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); }

213 

214.cc-ic-team-wrap { padding: 16px 0 20px; }

215.cc-ic-team-toggle {

216 display: flex; align-items: center; gap: 12px; font-family: inherit;

217 padding: 12px 16px; font-size: 14px; font-weight: 430;

218 color: var(--ic-gray-700); cursor: pointer; user-select: none;

219 width: fit-content; background: var(--ic-gray-150);

220 border: 0.5px solid var(--ic-border-subtle); border-radius: 8px;

221 transition: border-color 0.15s;

222}

223.cc-ic-team-toggle:hover { border-color: var(--ic-border-default); }

224.cc-ic-team-toggle.cc-ic-checked {

225 background: rgba(217, 119, 87, 0.08);

226 border-color: rgba(217, 119, 87, 0.25);

227}

228.cc-ic-check {

229 width: 16px; height: 16px;

230 border: 1px solid var(--ic-border-strong); border-radius: 4px;

231 background: var(--ic-gray-000);

232 display: flex; align-items: center; justify-content: center;

233 flex-shrink: 0;

234}

235.cc-ic-check svg { color: #fff; display: none; }

236.cc-ic-team-toggle.cc-ic-checked .cc-ic-check { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); }

237.cc-ic-team-toggle.cc-ic-checked .cc-ic-check svg { display: block; }

238 

239.cc-ic-team-reveal { display: flex; flex-direction: column; gap: 12px; margin-bottom: 16px; }

240.cc-ic-sales {

241 display: flex; align-items: center; justify-content: space-between;

242 gap: 16px; padding: 14px 16px;

243 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

244 border-radius: 8px; flex-wrap: wrap;

245}

246.cc-ic-sales-text { font-size: 13px; color: var(--ic-gray-700); line-height: 1.5; flex: 1; min-width: 200px; }

247.cc-ic-sales-text strong { font-weight: 550; color: var(--ic-slate); }

248.cc-ic-sales-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

249.cc-ic-btn-clay {

250 display: inline-flex; align-items: center; gap: 8px;

251 background: var(--ic-clay-deep); color: #fff; border: none;

252 border-radius: 8px; padding: 8px 14px;

253 font-size: 13px; font-weight: 500;

254 transition: background-color 0.15s; white-space: nowrap;

255}

256.cc-ic-btn-clay:hover { background: var(--ic-clay); }

257.cc-ic-btn-ghost {

258 display: inline-flex; align-items: center; gap: 8px;

259 background: transparent; color: var(--ic-gray-700);

260 border: 0.5px solid var(--ic-border-default);

261 border-radius: 8px; padding: 8px 14px;

262 font-size: 13px; font-weight: 500;

263}

264.cc-ic-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

265 

266.cc-ic-provider-bar {

267 display: flex; align-items: center; gap: 12px;

268 padding: 14px 16px; background: var(--ic-gray-150);

269 border-radius: 8px; font-size: 13px; flex-wrap: wrap;

270}

271.cc-ic-provider-bar .cc-ic-label { color: var(--ic-gray-550); flex-shrink: 0; }

272.cc-ic-provider-pills { display: flex; gap: 4px; flex-wrap: wrap; }

273.cc-ic-p-pill {

274 appearance: none; border: none; background: transparent;

275 padding: 6px 12px; border-radius: 6px;

276 font-size: 13px; font-weight: 430; color: var(--ic-gray-700);

277 white-space: nowrap;

278}

279.cc-ic-p-pill:hover { background: rgba(0, 0, 0, 0.04); }

280.cc-ic-p-pill.cc-ic-active {

281 background: var(--ic-gray-000); color: var(--ic-slate);

282 font-weight: 500; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);

283}

284.cc-ic-provider-notice {

285 display: flex; padding: 16px 18px;

286 background: var(--ic-gray-000); border: 0.5px solid var(--ic-border-default);

287 border-radius: 8px; gap: 14px; align-items: flex-start;

288}

289.cc-ic-provider-notice > svg { color: var(--ic-gray-550); margin-top: 2px; flex-shrink: 0; }

290.cc-ic-provider-notice-body { font-size: 14px; line-height: 1.55; color: var(--ic-gray-700); }

291.cc-ic-provider-notice-body strong { font-weight: 550; color: var(--ic-slate); }

292.cc-ic-provider-notice-body a { color: var(--ic-clay-deep); font-weight: 500; }

293.cc-ic-provider-notice-body a:hover { text-decoration: underline; }

294 

295.cc-ic-card { background: #141413; border-radius: 12px; overflow: hidden; }

296.cc-ic-subtabs {

297 display: flex; align-items: center;

298 background: #1a1918;

299 border-bottom: 0.5px solid rgba(255, 255, 255, 0.08);

300 padding: 0 8px; overflow-x: auto;

301}

302.cc-ic-subtab {

303 appearance: none; background: none; border: none;

304 padding: 12px 16px; font-size: 12px;

305 color: rgba(255, 255, 255, 0.5);

306 position: relative; white-space: nowrap;

307}

308.cc-ic-subtab:hover { color: rgba(255, 255, 255, 0.75); }

309.cc-ic-subtab.cc-ic-active { color: #fff; }

310.cc-ic-subtab.cc-ic-active::after {

311 content: ''; position: absolute;

312 left: 12px; right: 12px; bottom: -0.5px;

313 height: 2px; background: var(--ic-clay);

314}

315.cc-ic-shell-switch {

316 display: inline-flex; gap: 2px;

317 margin: 14px 26px 0; padding: 3px;

318 background: rgba(255, 255, 255, 0.06);

319 border: 0.5px solid rgba(255, 255, 255, 0.08);

320 border-radius: 8px;

321 font-family: inherit;

322}

323.cc-ic-shell-option {

324 font: inherit; font-size: 12px; font-weight: 500;

325 padding: 5px 12px; border-radius: 6px;

326 background: transparent; border: none;

327 color: rgba(255, 255, 255, 0.55);

328 cursor: pointer; user-select: none; white-space: nowrap;

329 transition: color 120ms ease, background-color 120ms ease;

330}

331.cc-ic-shell-option:hover { color: rgba(255, 255, 255, 0.85); }

332.cc-ic-shell-option.cc-ic-active {

333 background: rgba(255, 255, 255, 0.12);

334 color: #fff;

335 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);

336}

337 

338.cc-ic-card-body { padding: 24px 26px; display: flex; align-items: flex-start; gap: 14px; }

339.cc-ic-prompt {

340 color: var(--ic-clay); font-family: var(--ic-font-mono);

341 font-size: 17px; user-select: none; padding-top: 2px;

342}

343.cc-ic-cmd {

344 flex: 1; font-family: var(--ic-font-mono);

345 font-size: 17px; color: #f0eee6;

346 line-height: 1.55; white-space: pre-wrap; word-break: break-word;

347}

348.cc-ic-copy {

349 display: inline-flex; align-items: center; gap: 6px;

350 background: rgba(255, 255, 255, 0.08);

351 border: 0.5px solid rgba(255, 255, 255, 0.12);

352 color: rgba(255, 255, 255, 0.85);

353 padding: 7px 13px; border-radius: 8px;

354 font-size: 13px; font-weight: 500; flex-shrink: 0;

355}

356.cc-ic-copy:hover { background: rgba(255, 255, 255, 0.14); }

357.cc-ic-copy.cc-ic-copied { background: var(--ic-clay-deep); border-color: var(--ic-clay-deep); color: #fff; }

358 

359.cc-ic-below {

360 margin-top: 12px; font-size: 13px; color: var(--ic-gray-550);

361 display: flex; gap: 16px; flex-wrap: wrap; align-items: baseline;

362}

363.cc-ic-below a { color: var(--ic-gray-700); border-bottom: 0.5px solid var(--ic-border-default); }

364.cc-ic-below a:hover { color: var(--ic-clay-deep); border-bottom-color: var(--ic-clay-deep); }

365.cc-ic-handoff {

366 padding: 22px 24px;

367 background: linear-gradient(180deg, #faf9f4 0%, #f3f1e9 100%);

368 border: 0.5px solid var(--ic-border-default);

369 border-radius: 12px;

370 box-shadow: 0 1px 2px rgba(31, 30, 29, 0.04), 0 6px 16px -4px rgba(31, 30, 29, 0.06);

371}

372.dark .cc-ic-handoff {

373 background: linear-gradient(180deg, #262624 0%, #1f1e1d 100%);

374 box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3), 0 6px 16px -4px rgba(0, 0, 0, 0.4);

375}

376.cc-ic-handoff-title {

377 font-size: 16px; font-weight: 550; color: var(--ic-slate);

378 letter-spacing: -0.01em; margin-bottom: 4px;

379}

380.cc-ic-handoff-sub {

381 font-size: 14px; line-height: 1.5; color: var(--ic-gray-700);

382 margin-bottom: 18px;

383}

384.cc-ic-handoff-actions { display: flex; gap: 10px; flex-wrap: wrap; }

385.cc-ic-handoff-alt {

386 margin-top: 12px; font-size: 12px; color: var(--ic-gray-550);

387}

388.cc-ic-handoff-alt code {

389 font-family: var(--ic-font-mono); font-size: 11px;

390 background: var(--ic-gray-150); padding: 2px 6px;

391 border-radius: 4px; color: var(--ic-gray-700);

392}

393.cc-ic-copy-sm {

394 appearance: none; border: none;

395 display: inline-flex; align-items: center; justify-content: center;

396 width: 22px; height: 22px;

397 margin-left: 4px; vertical-align: middle;

398 background: var(--ic-gray-150); color: var(--ic-gray-550);

399 border-radius: 4px;

400 transition: color 0.1s, background-color 0.1s;

401}

402.cc-ic-copy-sm:hover { color: var(--ic-gray-700); background: var(--ic-border-default); }

403.cc-ic-copy-sm.cc-ic-copied { background: var(--ic-clay-deep); color: #fff; }

404 

405@media (max-width: 720px) {

406 .cc-ic-tab { padding: 12px 14px; font-size: 14px; }

407 .cc-ic-sales-actions { width: 100%; }

408 .cc-ic-card-body { padding: 20px; }

409 .cc-ic-cmd { font-size: 15px; }

410}

411`;

412 return <div className="cc-ic not-prose">

413 <style>{STYLES}</style>

414 

415 {}

416 <div className="cc-ic-tab-strip" role="tablist">

417 {TABS.map(t => <button key={t.key} type="button" role="tab" aria-selected={target === t.key} className={'cc-ic-tab' + (target === t.key ? ' cc-ic-active' : '')} onClick={() => setTarget(t.key)}>

418 {t.label}

419 </button>)}

420 </div>

421 

422 {}

423 <div className="cc-ic-team-wrap">

424 <button type="button" role="switch" aria-checked={team} className={'cc-ic-team-toggle' + (team ? ' cc-ic-checked' : '')} onClick={() => setTeam(!team)}>

425 <span className="cc-ic-check">{iconCheck(11)}</span>

426 <span>

427 I’m buying for a team or company (SSO, AWS/Azure/GCP, central billing)

428 </span>

429 </button>

430 </div>

431 

432 {}

433 {team && <div className="cc-ic-team-reveal">

434 <div className="cc-ic-sales">

435 <div className="cc-ic-sales-text">

436 <strong>Set up your team:</strong> self-serve or talk to sales.

437 </div>

438 <div className="cc-ic-sales-actions">

439 <a href="https://claude.ai/upgrade?initialPlanType=team&amp;utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_get_started" className="cc-ic-btn-ghost">

440 Get started

441 </a>

442 <a href="https://www.anthropic.com/contact-sales?utm_source=claude_code&amp;utm_medium=docs&amp;utm_content=configurator_team_contact_sales" className="cc-ic-btn-clay">

443 Contact sales {iconArrowRight()}

444 </a>

445 </div>

446 </div>

447 

448 <div className="cc-ic-provider-bar">

449 <span className="cc-ic-label">Run on</span>

450 <div className="cc-ic-provider-pills" role="radiogroup" aria-label="Provider">

451 {PROVIDERS.map(p => <button key={p.key} type="button" role="radio" aria-checked={provider === p.key} className={'cc-ic-p-pill' + (provider === p.key ? ' cc-ic-active' : '')} onClick={() => setProvider(p.key)}>

452 {p.label}

453 </button>)}

454 </div>

455 </div>

456 

457 {showNotice && <div className="cc-ic-provider-notice">

458 {iconInfo()}

459 <div className="cc-ic-provider-notice-body">

460 {PROVIDER_NOTICE[provider]}

461 </div>

462 </div>}

463 </div>}

464 

465 {}

466 {target === 'terminal' && <div className="cc-ic-card">

467 <div className="cc-ic-subtabs" role="tablist" aria-label="Install method">

468 {Object.keys(TERM).map(k => <button key={k} type="button" role="tab" aria-selected={pkg === k} className={'cc-ic-subtab' + (pkg === k ? ' cc-ic-active' : '')} onClick={() => setPkg(k)}>

469 {TERM[k].label}

470 </button>)}

471 </div>

472 {isWinInstaller && <div className="cc-ic-shell-switch" role="tablist" aria-label="Shell">

473 {[{

474 k: 'ps',

475 label: 'PowerShell'

476 }, {

477 k: 'cmd',

478 label: 'CMD'

479 }].map(({k, label}) => {

480 const active = k === 'cmd' === winCmd;

481 return <button key={k} type="button" role="tab" aria-selected={active} className={'cc-ic-shell-option' + (active ? ' cc-ic-active' : '')} onClick={() => setWinCmd(k === 'cmd')}>

482 {label}

483 </button>;

484 })}

485 </div>}

486 {cardBodyCmd(terminalCmd, isWinPrompt ? '>' : '$')}

487 </div>}

488 

489 {}

490 {target === 'terminal' && <div className="cc-ic-below">

491 {isWinInstaller && <span>

492 <a href="https://git-scm.com/downloads/win" target="_blank" rel="noopener">

493 Git for Windows

494 </a>{' '}

495 recommended. PowerShell is used if Git Bash is absent.

496 </span>}

497 {(pkg === 'brew' || pkg === 'winget') && <span>

498 Does not auto-update. Run{' '}

499 <code>{pkg === 'brew' ? 'brew upgrade claude-code' : 'winget upgrade Anthropic.ClaudeCode'}</code>{' '}

500 periodically.

501 </span>}

502 <a href="/en/troubleshoot-install">Installation troubleshooting</a>

503 </div>}

504 

505 {alt && <div className="cc-ic-handoff">

506 <div className="cc-ic-handoff-title">Claude Code for {alt.name}</div>

507 <div className="cc-ic-handoff-sub">{alt.tagline}</div>

508 <div className="cc-ic-handoff-actions">

509 <a href={alt.installHref} className="cc-ic-btn-clay" {...alt.installHref.startsWith('http') ? {

510 target: '_blank',

511 rel: 'noopener'

512 } : {}}>

513 {alt.installLabel} {iconArrowUpRight(13)}

514 </a>

515 <a href={alt.guideHref} className="cc-ic-btn-ghost">

516 {alt.name} guide {iconArrowRight(12)}

517 </a>

518 </div>

519 {alt.altCmd && <div className="cc-ic-handoff-alt">

520 or run <code>{alt.altCmd}</code>

521 <button type="button" className={'cc-ic-copy-sm' + (copied === 'alt' ? ' cc-ic-copied' : '')} onClick={() => handleCopy(alt.altCmd, 'alt')} aria-label="Copy command">

522 {copied === 'alt' ? iconCheck(11) : iconCopy(11)}

523 </button>

524 </div>}

525 </div>}

526 </div>;

527};

528 

529export const Experiment = ({flag, treatment, children}) => {

530 const VID_KEY = 'exp_vid';

531 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);

532 const fnv1a = s => {

533 let h = 0x811c9dc5;

534 for (let i = 0; i < s.length; i++) {

535 h ^= s.charCodeAt(i);

536 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);

537 }

538 return h >>> 0;

539 };

540 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';

541 const [decision] = useState(() => {

542 const params = new URLSearchParams(location.search);

543 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];

544 const force = params.get('gb-force');

545 if (force) {

546 for (const p of force.split(',')) {

547 const [k, v] = p.split(':');

548 if (k === flag) return {

549 variant: v || 'treatment',

550 track: false

551 };

552 }

553 }

554 if (navigator.globalPrivacyControl) {

555 return {

556 variant: 'control',

557 track: false

558 };

559 }

560 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);

561 if (prefsMatch) {

562 try {

563 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {

564 return {

565 variant: 'control',

566 track: false

567 };

568 }

569 } catch {

570 return {

571 variant: 'control',

572 track: false

573 };

574 }

575 } else {

576 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];

577 if (!country || CONSENT_COUNTRIES.has(country)) {

578 return {

579 variant: 'control',

580 track: false

581 };

582 }

583 }

584 let vid;

585 try {

586 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);

587 if (ajsMatch) {

588 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');

589 } else {

590 vid = localStorage.getItem(VID_KEY);

591 if (!vid) {

592 vid = crypto.randomUUID();

593 }

594 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;

595 }

596 try {

597 localStorage.setItem(VID_KEY, vid);

598 } catch {}

599 } catch {

600 return {

601 variant: 'control',

602 track: false

603 };

604 }

605 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);

606 return {

607 variant,

608 track: true,

609 vid

610 };

611 });

612 useEffect(() => {

613 if (!decision.track) return;

614 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {

615 method: 'POST',

616 headers: {

617 'Content-Type': 'application/json',

618 'x-service-name': 'claude_code_docs'

619 },

620 body: JSON.stringify({

621 events: [{

622 event_type: 'GrowthbookExperimentEvent',

623 event_data: {

624 device_id: decision.vid,

625 anonymous_id: decision.vid,

626 timestamp: new Date().toISOString(),

627 experiment_id: flag,

628 variation_id: decision.variant === 'treatment' ? 1 : 0,

629 environment: 'production'

630 }

631 }]

632 }),

633 keepalive: true

634 }).catch(() => {});

635 }, []);

636 return decision.variant === 'treatment' ? treatment : children;

637};

638 

639Это руководство по быстрому старту позволит вам использовать AI-powered кодирование всего за несколько минут. К концу вы поймёте, как использовать Claude Code для типичных задач разработки.9Это руководство по быстрому старту позволит вам использовать AI-powered кодирование всего за несколько минут. К концу вы поймёте, как использовать Claude Code для типичных задач разработки.

640 10 

641<Experiment flag="quickstart-install-configurator" treatment={<InstallConfigurator />} />

642 

643## Перед началом11## Перед началом

644 12 

645Убедитесь, что у вас есть:13Убедитесь, что у вас есть:


647* Открытый терминал или командная строка15* Открытый терминал или командная строка

648 * Если вы никогда раньше не использовали терминал, ознакомьтесь с [руководством по терминалу](/ru/terminal-guide)16 * Если вы никогда раньше не использовали терминал, ознакомьтесь с [руководством по терминалу](/ru/terminal-guide)

649* Проект кода для работы17* Проект кода для работы

650* [Подписка Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Teams или Enterprise), учётная запись [Claude Console](https://console.anthropic.com/) или доступ через [поддерживаемого облачного провайдера](/ru/third-party-integrations)18* [Подписка Claude](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_prereq) (Pro, Max, Team или Enterprise), учётная запись [Claude Console](https://console.anthropic.com/) или доступ через [поддерживаемого облачного провайдера](/ru/third-party-integrations)

651 19 

652<Note>20<Note>

653 Это руководство охватывает CLI терминала. Claude Code также доступен в [веб-версии](https://claude.ai/code), как [настольное приложение](/ru/desktop), в [VS Code](/ru/vs-code) и [JetBrains IDE](/ru/jetbrains), в [Slack](/ru/slack) и в CI/CD с [GitHub Actions](/ru/github-actions) и [GitLab](/ru/gitlab-ci-cd). Смотрите [все интерфейсы](/ru/overview#use-claude-code-everywhere).21 Это руководство охватывает CLI терминала. Claude Code также доступен в [веб-версии](https://claude.ai/code), как [настольное приложение](/ru/desktop), в [VS Code](/ru/vs-code) и [JetBrains IDEs](/ru/jetbrains), в [Slack](/ru/slack) и в CI/CD с [GitHub Actions](/ru/github-actions) и [GitLab](/ru/gitlab-ci-cd). Смотрите [все интерфейсы](/ru/overview#use-claude-code-everywhere).

654</Note>22</Note>

655 23 

656## Шаг 1: Установите Claude Code24## Шаг 1: Установите Claude Code


727 95 

728Вы можете войти, используя любой из этих типов учётных записей:96Вы можете войти, используя любой из этих типов учётных записей:

729 97 

730* [Claude Pro, Max, Teams или Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (рекомендуется)98* [Claude Pro, Max, Team или Enterprise](https://claude.com/pricing?utm_source=claude_code\&utm_medium=docs\&utm_content=quickstart_login) (рекомендуется)

731* [Claude Console](https://console.anthropic.com/) (доступ к API с предоплаченными кредитами). При первом входе рабочее пространство "Claude Code" автоматически создаётся в Console для централизованного отслеживания затрат.99* [Claude Console](https://console.anthropic.com/) (доступ к API с предоплаченными кредитами). При первом входе рабочее пространство "Claude Code" автоматически создаётся в Console для централизованного отслеживания затрат.

732* [Amazon Bedrock, Google Vertex AI или Microsoft Foundry](/ru/third-party-integrations) (облачные провайдеры для предприятий)100* [Amazon Bedrock, Google Vertex AI или Microsoft Foundry](/ru/third-party-integrations) (облачные провайдеры для предприятий)

733 101 


899| `claude -p "query"` | Запустить одноразовый запрос, затем выйти | `claude -p "explain this function"` |267| `claude -p "query"` | Запустить одноразовый запрос, затем выйти | `claude -p "explain this function"` |

900| `claude -c` | Продолжить самый последний разговор в текущем каталоге | `claude -c` |268| `claude -c` | Продолжить самый последний разговор в текущем каталоге | `claude -c` |

901| `claude -r` | Возобновить предыдущий разговор | `claude -r` |269| `claude -r` | Возобновить предыдущий разговор | `claude -r` |

902| `claude commit` | Создать коммит Git | `claude commit` |

903| `/clear` | Очистить историю разговора | `/clear` |270| `/clear` | Очистить историю разговора | `/clear` |

904| `/help` | Показать доступные команды | `/help` |271| `/help` | Показать доступные команды | `/help` |

905| `exit` или Ctrl+C | Выйти из Claude Code | `exit` |272| `exit` или Ctrl+D | Выйти из Claude Code | `exit` |

906 273 

907Смотрите [справочник CLI](/ru/cli-reference) для полного списка команд.274Смотрите [справочник CLI](/ru/cli-reference) для полного списка команд.

908 275 

settings.md +7 −3

Details

156`settings.json` поддерживает ряд опций:156`settings.json` поддерживает ряд опций:

157 157 

158| Ключ | Описание | Пример |158| Ключ | Описание | Пример |

159| :-------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |159| :-------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |

160| `agent` | Запустить основной поток как именованный subagent. Применяет системный запрос, ограничения инструментов и модель этого subagent. См. [Явно вызывать subagents](/ru/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |160| `agent` | Запустить основной поток как именованный subagent. Применяет системный запрос, ограничения инструментов и модель этого subagent. См. [Явно вызывать subagents](/ru/sub-agents#invoke-subagents-explicitly) | `"code-reviewer"` |

161| `allowedChannelPlugins` | (Только управляемые параметры) Список разрешений channel plugins, которые могут отправлять сообщения. Заменяет список разрешений Anthropic по умолчанию при установке. Не определено = вернуться к значению по умолчанию, пустой массив = блокировать все channel plugins. Требует `channelsEnabled: true`. См. [Ограничить, какие channel plugins могут запускаться](/ru/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |161| `allowedChannelPlugins` | (Только управляемые параметры) Список разрешений channel plugins, которые могут отправлять сообщения. Заменяет список разрешений Anthropic по умолчанию при установке. Не определено = вернуться к значению по умолчанию, пустой массив = блокировать все channel plugins. Требует `channelsEnabled: true`. См. [Ограничить, какие channel plugins могут запускаться](/ru/channels#restrict-which-channel-plugins-can-run) | `[{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]` |

162| `allowedHttpHookUrls` | Список разрешенных URL-шаблонов, на которые могут быть направлены HTTP hooks. Поддерживает `*` как подстановочный знак. При установке hooks с несовпадающими URL-адресами блокируются. Не определено = без ограничений, пустой массив = блокировать все HTTP hooks. Массивы объединяются в разных источниках параметров. См. [Конфигурация Hook](#hook-configuration) | `["https://hooks.example.com/*"]` |162| `allowedHttpHookUrls` | Список разрешенных URL-шаблонов, на которые могут быть направлены HTTP hooks. Поддерживает `*` как подстановочный знак. При установке hooks с несовпадающими URL-адресами блокируются. Не определено = без ограничений, пустой массив = блокировать все HTTP hooks. Массивы объединяются в разных источниках параметров. См. [Конфигурация Hook](#hook-configuration) | `["https://hooks.example.com/*"]` |


211| `modelOverrides` | Сопоставить ID моделей Anthropic с ID моделей, специфичными для поставщика, такими как ARN профилей вывода Bedrock. Каждая запись средства выбора модели использует свое сопоставленное значение при вызове API поставщика. См. [Переопределить ID моделей для каждой версии](/ru/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |211| `modelOverrides` | Сопоставить ID моделей Anthropic с ID моделей, специфичными для поставщика, такими как ARN профилей вывода Bedrock. Каждая запись средства выбора модели использует свое сопоставленное значение при вызове API поставщика. См. [Переопределить ID моделей для каждой версии](/ru/model-config#override-model-ids-per-version) | `{"claude-opus-4-6": "arn:aws:bedrock:..."}` |

212| `otelHeadersHelper` | Скрипт для создания динамических заголовков OpenTelemetry. Запускается при запуске и периодически. Установите интервал обновления с помощью [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/ru/env-vars). См. [Динамические заголовки](/ru/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |212| `otelHeadersHelper` | Скрипт для создания динамических заголовков OpenTelemetry. Запускается при запуске и периодически. Установите интервал обновления с помощью [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/ru/env-vars). См. [Динамические заголовки](/ru/monitoring-usage#dynamic-headers) | `/bin/generate_otel_headers.sh` |

213| `outputStyle` | Настройте стиль вывода для корректировки системного запроса. См. [документацию стилей вывода](/ru/output-styles) | `"Explanatory"` |213| `outputStyle` | Настройте стиль вывода для корректировки системного запроса. См. [документацию стилей вывода](/ru/output-styles) | `"Explanatory"` |

214| `parentSettingsBehavior` | {/* min-version: 2.1.133 */}(Только управляемые параметры) Контролирует, применяются ли управляемые параметры, предоставленные программно процессом хоста встраивания, таким как Agent SDK или расширение IDE, когда также присутствует развернутый администратором управляемый уровень. `"first-wins"`: параметры, предоставленные родителем, отбрасываются и применяется только уровень администратора. `"merge"`: параметры, предоставленные родителем, применяются под уровнем администратора, отфильтрованные так, чтобы они могли ужесточить политику, но не ослабить ее. Не имеет эффекта, когда развернут администратором уровень. По умолчанию: `"first-wins"`. Требует Claude Code v2.1.133 или позже | `"merge"` |

214| `permissions` | См. таблицу ниже для структуры разрешений. | |215| `permissions` | См. таблицу ниже для структуры разрешений. | |

215| `plansDirectory` | Настройте, где хранятся файлы плана. Путь относительно корня проекта. По умолчанию: `~/.claude/plans` | `"./plans"` |216| `plansDirectory` | Настройте, где хранятся файлы плана. Путь относительно корня проекта. По умолчанию: `~/.claude/plans` | `"./plans"` |

216| `pluginTrustMessage` | (Только управляемые параметры) Пользовательское сообщение, добавленное к предупреждению о доверии plugin, показываемому перед установкой. Используйте это для добавления контекста, специфичного для организации, например для подтверждения того, что plugins из вашего внутреннего marketplace проверены. | `"All plugins from our marketplace are approved by IT"` |217| `pluginTrustMessage` | (Только управляемые параметры) Пользовательское сообщение, добавленное к предупреждению о доверии plugin, показываемому перед установкой. Используйте это для добавления контекста, специфичного для организации, например для подтверждения того, что plugins из вашего внутреннего marketplace проверены. | `"All plugins from our marketplace are approved by IT"` |


255 256 

256### Параметры Worktree257### Параметры Worktree

257 258 

258Настройте, как `--worktree` создает и управляет git worktrees. Используйте эти параметры для уменьшения использования диска и времени запуска в больших монорепозиториях.259Настройте, как `--worktree` создает и управляет git worktrees.

259 260 

260| Ключ | Описание | Пример |261| Ключ | Описание | Пример |

261| :---------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |262| :---------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------ |

263| `worktree.baseRef` | Какой ref новые worktrees ветвятся от. `"fresh"` (по умолчанию) ветвится от `origin/<default-branch>` для чистого дерева, соответствующего удаленному. `"head"` ветвится от вашего текущего локального `HEAD`, поэтому неотправленные коммиты и состояние ветки функции присутствуют в worktree. Применяется к `--worktree`, инструменту `EnterWorktree` и изоляции subagent | `"head"` |

262| `worktree.symlinkDirectories` | Каталоги для создания символических ссылок из основного репозитория в каждый worktree, чтобы избежать дублирования больших каталогов на диске. По умолчанию никакие каталоги не создаются символическими ссылками | `["node_modules", ".cache"]` |264| `worktree.symlinkDirectories` | Каталоги для создания символических ссылок из основного репозитория в каждый worktree, чтобы избежать дублирования больших каталогов на диске. По умолчанию никакие каталоги не создаются символическими ссылками | `["node_modules", ".cache"]` |

263| `worktree.sparsePaths` | Каталоги для проверки в каждом worktree через git sparse-checkout (режим cone). На диск записываются только перечисленные пути, что быстрее в больших монорепозиториях | `["packages/my-app", "shared/utils"]` |265| `worktree.sparsePaths` | Каталоги для проверки в каждом worktree через git sparse-checkout (режим cone). На диск записываются только перечисленные пути, что быстрее в больших монорепозиториях | `["packages/my-app", "shared/utils"]` |

264 266 


318| `network.socksProxyPort` | Порт SOCKS5 прокси, используемый, если вы хотите использовать собственный прокси. Если не указано, Claude запустит собственный прокси. | `8081` |320| `network.socksProxyPort` | Порт SOCKS5 прокси, используемый, если вы хотите использовать собственный прокси. Если не указано, Claude запустит собственный прокси. | `8081` |

319| `enableWeakerNestedSandbox` | Включить более слабый sandbox для непривилегированных окружений Docker (только Linux и WSL2). **Снижает безопасность.** По умолчанию: false | `true` |321| `enableWeakerNestedSandbox` | Включить более слабый sandbox для непривилегированных окружений Docker (только Linux и WSL2). **Снижает безопасность.** По умолчанию: false | `true` |

320| `enableWeakerNetworkIsolation` | (Только macOS) Разрешить доступ к системной службе доверия TLS (`com.apple.trustd.agent`) в sandbox. Требуется для инструментов на основе Go, таких как `gh`, `gcloud` и `terraform`, для проверки сертификатов TLS при использовании `httpProxyPort` с MITM прокси и пользовательским CA. **Снижает безопасность** путем открытия потенциального пути утечки данных. По умолчанию: false | `true` |322| `enableWeakerNetworkIsolation` | (Только macOS) Разрешить доступ к системной службе доверия TLS (`com.apple.trustd.agent`) в sandbox. Требуется для инструментов на основе Go, таких как `gh`, `gcloud` и `terraform`, для проверки сертификатов TLS при использовании `httpProxyPort` с MITM прокси и пользовательским CA. **Снижает безопасность** путем открытия потенциального пути утечки данных. По умолчанию: false | `true` |

323| `bwrapPath` | (Только управляемые параметры, Linux/WSL2) Абсолютный путь к двоичному файлу bubblewrap (`bwrap`). Переопределяет автоматическое обнаружение через `PATH`. Учитывается только из [управляемых параметров](/ru/settings#settings-files), а не из параметров пользователя или проекта. Полезно, когда `bwrap` установлен в нестандартном местоположении в управляемых окружениях. | `/opt/admin/bwrap` |

324| `socatPath` | (Только управляемые параметры, Linux/WSL2) Абсолютный путь к двоичному файлу `socat`, используемому для прокси сети sandbox. Переопределяет автоматическое обнаружение через `PATH`. Учитывается только из управляемых параметров. | `/opt/admin/socat` |

321 325 

322#### Префиксы пути Sandbox326#### Префиксы пути Sandbox

323 327 

setup.md +2 −0

Details

398 398 

399Поддерживаемые платформы установки npm: `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64` и `win32-arm64`. Ваш менеджер пакетов должен разрешать дополнительные зависимости. См. [устранение неполадок](/ru/troubleshoot-install#native-binary-not-found-after-npm-install), если двоичный файл отсутствует после установки.399Поддерживаемые платформы установки npm: `darwin-arm64`, `darwin-x64`, `linux-x64`, `linux-arm64`, `linux-x64-musl`, `linux-arm64-musl`, `win32-x64` и `win32-arm64`. Ваш менеджер пакетов должен разрешать дополнительные зависимости. См. [устранение неполадок](/ru/troubleshoot-install#native-binary-not-found-after-npm-install), если двоичный файл отсутствует после установки.

400 400 

401Для обновления установки npm выполните `npm install -g @anthropic-ai/claude-code@latest`. Избегайте `npm update -g`, который соблюдает диапазон semver из исходной установки и может не переместить вас на самый новый выпуск.

402 

401<Warning>403<Warning>

402 НЕ используйте `sudo npm install -g`, так как это может привести к проблемам с разрешениями и рискам безопасности. Если вы столкнулись с ошибками разрешений, см. [устранение неполадок ошибок разрешений](/ru/troubleshoot-install#permission-errors-during-installation).404 НЕ используйте `sudo npm install -g`, так как это может привести к проблемам с разрешениями и рискам безопасности. Если вы столкнулись с ошибками разрешений, см. [устранение неполадок ошибок разрешений](/ru/troubleshoot-install#permission-errors-during-installation).

403</Warning>405</Warning>

sub-agents.md +3 −3

Details

262| :---------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |262| :---------------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

263| `name` | Yes | Уникальный идентификатор, использующий строчные буквы и дефисы |263| `name` | Yes | Уникальный идентификатор, использующий строчные буквы и дефисы |

264| `description` | Yes | Когда Claude должен делегировать этому subagent |264| `description` | Yes | Когда Claude должен делегировать этому subagent |

265| `tools` | No | [Инструменты](#available-tools), которые может использовать subagent. Наследует все инструменты, если опущено |265| `tools` | No | [Инструменты](#available-tools), которые может использовать subagent. Наследует все инструменты, если опущено. Чтобы предварительно загрузить Skills в контекст, используйте поле `skills` вместо перечисления `Skill` здесь |

266| `disallowedTools` | No | Инструменты для запрета, удалённые из унаследованного или указанного списка |266| `disallowedTools` | No | Инструменты для запрета, удалённые из унаследованного или указанного списка |

267| `model` | No | [Модель](#choose-a-model) для использования: `sonnet`, `opus`, `haiku`, полный ID модели (например, `claude-opus-4-7`), или `inherit`. По умолчанию `inherit` |267| `model` | No | [Модель](#choose-a-model) для использования: `sonnet`, `opus`, `haiku`, полный ID модели (например, `claude-opus-4-7`), или `inherit`. По умолчанию `inherit` |

268| `permissionMode` | No | [Режим разрешений](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions` или `plan`. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |268| `permissionMode` | No | [Режим разрешений](#permission-modes): `default`, `acceptEdits`, `auto`, `dontAsk`, `bypassPermissions` или `plan`. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |

269| `maxTurns` | No | Максимальное количество агентских ходов перед остановкой subagent |269| `maxTurns` | No | Максимальное количество агентских ходов перед остановкой subagent |

270| `skills` | No | [Skills](/ru/skills) для загрузки в контекст subagent при запуске. Полное содержимое skill инжектируется, а не просто становится доступным для вызова. Subagents не наследуют skills из родительского разговора |270| `skills` | No | [Skills](/ru/skills) для предварительной загрузки в контекст subagent при запуске. Полное содержимое skill инжектируется, а не просто описание. Subagents по-прежнему могут вызывать неперечисленные project, user и plugin skills через инструмент Skill |

271| `mcpServers` | No | [MCP servers](/ru/mcp) доступные этому subagent. Каждая запись — это либо имя сервера, ссылающееся на уже настроенный сервер (например, `"slack"`), либо встроенное определение с именем сервера в качестве ключа и полной [конфигурацией MCP server](/ru/mcp#installing-mcp-servers) в качестве значения. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |271| `mcpServers` | No | [MCP servers](/ru/mcp) доступные этому subagent. Каждая запись — это либо имя сервера, ссылающееся на уже настроенный сервер (например, `"slack"`), либо встроенное определение с именем сервера в качестве ключа и полной [конфигурацией MCP server](/ru/mcp#installing-mcp-servers) в качестве значения. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |

272| `hooks` | No | [Lifecycle hooks](#define-hooks-for-subagents) в области этого subagent. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |272| `hooks` | No | [Lifecycle hooks](#define-hooks-for-subagents) в области этого subagent. Игнорируется для [plugin subagents](#choose-the-subagent-scope) |

273| `memory` | No | [Область постоянной памяти](#enable-persistent-memory): `user`, `project` или `local`. Включает кросс-сессионное обучение |273| `memory` | No | [Область постоянной памяти](#enable-persistent-memory): `user`, `project` или `local`. Включает кросс-сессионное обучение |


418Implement API endpoints. Follow the conventions and patterns from the preloaded skills.418Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

419```419```

420 420 

421Полное содержимое каждого skill инжектируется в контекст subagent, а не просто становится доступным для вызова. Subagents не наследуют skills из родительского разговора; вы должны перечислить их явно.421Полное содержимое каждого перечисленного skill инжектируется в контекст subagent при запуске. Это поле контролирует, какие skills предварительно загружаются, а не какие skills может использовать subagent: без него subagent по-прежнему может открывать и вызывать project, user и plugin skills через инструмент Skill во время выполнения. Чтобы предотвратить использование subagent skills полностью, опустите `Skill` из списка [`tools`](#available-tools) или добавьте его в `disallowedTools`.

422 422 

423Вы не можете предварительно загружать skills, которые устанавливают [`disable-model-invocation: true`](/ru/skills#control-who-invokes-a-skill), поскольку предварительная загрузка берёт из того же набора skills, который Claude может вызывать. Если указанный skill отсутствует или отключен, Claude Code пропускает его и регистрирует предупреждение в журнал отладки.423Вы не можете предварительно загружать skills, которые устанавливают [`disable-model-invocation: true`](/ru/skills#control-who-invokes-a-skill), поскольку предварительная загрузка берёт из того же набора skills, который Claude может вызывать. Если указанный skill отсутствует или отключен, Claude Code пропускает его и регистрирует предупреждение в журнал отладки.

424 424 

Details

107set -as terminal-features 'xterm*:extkeys'107set -as terminal-features 'xterm*:extkeys'

108```108```

109 109 

110Строка `allow-passthrough` позволяет уведомлениям и обновлениям прогресса достичь iTerm2, Ghostty или Kitty вместо того, чтобы быть поглощёнными tmux. Строки `extended-keys` позволяют tmux различать Shift+Enter от простого Enter, чтобы сочетание клавиш разрыва строки работало.110Строка `allow-passthrough` позволяет уведомлениям и обновлениям прогресса достичь внешний терминал вместо того, чтобы быть поглощёнными tmux. Строки `extended-keys` позволяют tmux различать Shift+Enter от простого Enter, чтобы сочетание клавиш разрыва строки работало.

111 111 

112## Сопоставьте цветовую тему112## Сопоставьте цветовую тему

113 113 

Details

6 6 

7> Узнайте, как Claude Code может интегрироваться с различными сторонними сервисами и инфраструктурой для удовлетворения требований корпоративного развертывания.7> Узнайте, как Claude Code может интегрироваться с различными сторонними сервисами и инфраструктурой для удовлетворения требований корпоративного развертывания.

8 8 

9export const ContactSalesCard = ({surface}) => {

10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;

11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">

12 <line x1="5" y1="12" x2="19" y2="12" />

13 <polyline points="12 5 19 12 12 19" />

14 </svg>;

15 const STYLES = `

16.cc-cs {

17 --cs-slate: #141413;

18 --cs-clay: #d97757;

19 --cs-clay-deep: #c6613f;

20 --cs-gray-000: #ffffff;

21 --cs-gray-700: #3d3d3a;

22 --cs-border-default: rgba(31, 30, 29, 0.15);

23 font-family: inherit;

24}

25.dark .cc-cs {

26 --cs-slate: #f0eee6;

27 --cs-gray-000: #262624;

28 --cs-gray-700: #bfbdb4;

29 --cs-border-default: rgba(240, 238, 230, 0.14);

30}

31.cc-cs-card {

32 display: flex; align-items: center; justify-content: space-between;

33 gap: 16px; padding: 14px 16px; margin: 0;

34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);

35 border-radius: 8px; flex-wrap: wrap;

36}

37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }

38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }

39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }

40.cc-cs-btn-clay {

41 display: inline-flex; align-items: center; gap: 8px;

42 background: var(--cs-clay-deep); color: #fff; border: none;

43 border-radius: 8px; padding: 8px 14px;

44 font-size: 13px; font-weight: 500;

45 transition: background-color 0.15s; white-space: nowrap;

46}

47.cc-cs-btn-clay:hover { background: var(--cs-clay); }

48.cc-cs-btn-ghost {

49 display: inline-flex; align-items: center; gap: 8px;

50 background: transparent; color: var(--cs-gray-700);

51 border: 0.5px solid var(--cs-border-default);

52 border-radius: 8px; padding: 8px 14px;

53 font-size: 13px; font-weight: 500;

54}

55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }

56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }

57@media (max-width: 720px) {

58 .cc-cs-actions { width: 100%; }

59}

60`;

61 return <div className="cc-cs not-prose">

62 <style>{STYLES}</style>

63 <div className="cc-cs-card">

64 <div className="cc-cs-text">

65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.

66 </div>

67 <div className="cc-cs-actions">

68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">

69 View plans

70 </a>

71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">

72 Contact sales {iconArrowRight()}

73 </a>

74 </div>

75 </div>

76 </div>;

77};

78 

9Организации могут развертывать Claude Code непосредственно через Anthropic или через поставщика облачных услуг. Эта страница поможет вам выбрать правильную конфигурацию.79Организации могут развертывать Claude Code непосредственно через Anthropic или через поставщика облачных услуг. Эта страница поможет вам выбрать правильную конфигурацию.

10 80 

81<ContactSalesCard surface="third_party_overview" />

82 

11## Сравнение вариантов развертывания83## Сравнение вариантов развертывания

12 84 

13Для большинства организаций Claude for Teams или Claude for Enterprise обеспечивает лучший опыт. Члены команды получают доступ как к Claude Code, так и к Claude в веб-версии с одной подпиской, централизованным выставлением счетов и без необходимости настройки инфраструктуры.85Для большинства организаций Claude for Teams или Claude for Enterprise обеспечивает лучший опыт. Члены команды получают доступ как к Claude Code, так и к Claude в веб-версии с одной подпиской, централизованным выставлением счетов и без необходимости настройки инфраструктуры.


241 313 

242### Закрепите версии моделей для поставщиков облачных услуг314### Закрепите версии моделей для поставщиков облачных услуг

243 315 

244Если вы развертываете через [Bedrock](/ru/amazon-bedrock), [Vertex AI](/ru/google-vertex-ai) или [Foundry](/ru/microsoft-foundry), закрепите конкретные версии моделей, используя `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL` и `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Без закрепления, псевдонимы Claude Code разрешаются на последнюю версию, что может нарушить работу пользователей, когда Anthropic выпускает новую модель, которая еще не включена в вашей учетной записи. См. раздел [Конфигурация модели](/ru/model-config#pin-models-for-third-party-deployments) для получения подробной информации.316Если вы развертываете через [Bedrock](/ru/amazon-bedrock), [Vertex AI](/ru/google-vertex-ai) или [Foundry](/ru/microsoft-foundry), закрепите конкретные версии моделей, используя `ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL` и `ANTHROPIC_DEFAULT_HAIKU_MODEL`. Без закрепления, псевдонимы моделей разрешаются на последнюю версию, что может быть недоступно в вашей учетной записи, когда Anthropic выпускает обновление. Закрепление позволяет вам контролировать, когда ваши пользователи переходят на новую модель. См. раздел [Конфигурация модели](/ru/model-config#pin-models-for-third-party-deployments) для получения информации о том, что делает каждый поставщик, когда последняя версия недоступна.

245 317 

246### Настройте политики безопасности318### Настройте политики безопасности

247 319 

vs-code.md +3 −1

Details

32 32 

33Или в VS Code нажмите `Cmd+Shift+X` (Mac) или `Ctrl+Shift+X` (Windows/Linux), чтобы открыть представление расширений, найдите "Claude Code" и нажмите **Установить**.33Или в VS Code нажмите `Cmd+Shift+X` (Mac) или `Ctrl+Shift+X` (Windows/Linux), чтобы открыть представление расширений, найдите "Claude Code" и нажмите **Установить**.

34 34 

35Расширение также устанавливается в других форках VS Code, таких как Windsurf или Kiro. Найдите "Claude Code" в представлении расширений вашего редактора или установите из [реестра Open VSX](https://open-vsx.org/extension/Anthropic/claude-code). Если ваш редактор не может установить расширение, запустите `claude` в его встроенном терминале. [CLI](/ru/quickstart) работает в любом терминале.

36 

35<Note>Если расширение не появляется после установки, перезагрузите VS Code или выполните "Developer: Reload Window" из палитры команд.</Note>37<Note>Если расширение не появляется после установки, перезагрузите VS Code или выполните "Developer: Reload Window" из палитры команд.</Note>

36 38 

37## Начало работы39## Начало работы


318| `environmentVariables` | `[]` | Установить переменные окружения для процесса Claude. Используйте параметры Claude Code вместо этого для общей конфигурации. |320| `environmentVariables` | `[]` | Установить переменные окружения для процесса Claude. Используйте параметры Claude Code вместо этого для общей конфигурации. |

319| `disableLoginPrompt` | `false` | Пропустить запросы аутентификации (для настроек поставщика третьей стороны) |321| `disableLoginPrompt` | `false` | Пропустить запросы аутентификации (для настроек поставщика третьей стороны) |

320| `allowDangerouslySkipPermissions` | `false` | Добавляет [Auto mode](/ru/permission-modes#eliminate-prompts-with-auto-mode) и Bypass permissions к селектору режимов. Auto mode имеет [требования plan, admin, model и provider](/ru/permission-modes#eliminate-prompts-with-auto-mode), поэтому он может остаться недоступным даже с включённым этим переключателем. Используйте Bypass permissions только в песочницах без доступа в интернет. |322| `allowDangerouslySkipPermissions` | `false` | Добавляет [Auto mode](/ru/permission-modes#eliminate-prompts-with-auto-mode) и Bypass permissions к селектору режимов. Auto mode имеет [требования plan, admin, model и provider](/ru/permission-modes#eliminate-prompts-with-auto-mode), поэтому он может остаться недоступным даже с включённым этим переключателем. Используйте Bypass permissions только в песочницах без доступа в интернет. |

321| `claudeProcessWrapper` | - | Путь исполняемого файла, используемый для запуска процесса Claude |323| `claudeProcessWrapper` | - | Исполняемый файл, используемый для запуска процесса Claude. Путь к встроенному двоичному файлу передаётся в качестве аргумента при наличии. Установите это значение на отдельно установленный двоичный файл `claude`, если сборка расширения не включает его для вашей платформы. |

322 324 

323## Расширение VS Code и Claude Code CLI325## Расширение VS Code и Claude Code CLI

324 326