SpyBara
Go Premium

Documentation 2026-05-08 22:00 UTC to 2026-05-09 04:57 UTC

20 files changed +1,302 −147. 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

309 </Tab>309 </Tab>

310</Tabs>310</Tabs>

311 311 

312Для HTTP (без потоковой передачи) используйте `"type": "http"` вместо этого.312Для потокового HTTP транспорта используйте `"type": "http"` вместо этого. В `.mcp.json` и других JSON файлах конфигурации `"streamable-http"` принимается как псевдоним для `"http"`. Программный параметр `mcpServers` принимает только `"http"`.

313 313 

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

315 315 

agent-sdk/python.md +113 −111

Details

2294 2294 

2295```python theme={null}2295```python theme={null}

2296{2296{

2297 "description": str, # A short (3-5 word) description of the task2297 "description": str, # Краткое описание задачи (3-5 слов)

2298 "prompt": str, # The task for the agent to perform2298 "prompt": str, # Задача для выполнения агентом

2299 "subagent_type": str, # The type of specialized agent to use2299 "subagent_type": str, # Тип специализированного агента для использования

2300}2300}

2301```2301```

2302 2302 


2304 2304 

2305```python theme={null}2305```python theme={null}

2306{2306{

2307 "result": str, # Final result from the subagent2307 "result": str, # Финальный результат от подагента

2308 "usage": dict | None, # Token usage statistics2308 "usage": dict | None, # Статистика использования токенов

2309 "total_cost_usd": float | None, # Estimated total cost in USD2309 "total_cost_usd": float | None, # Предполагаемая общая стоимость в USD

2310 "duration_ms": int | None, # Execution duration in milliseconds2310 "duration_ms": int | None, # Длительность выполнения в миллисекундах

2311}2311}

2312```2312```

2313 2313 


2315 2315 

2316**Имя инструмента:** `AskUserQuestion`2316**Имя инструмента:** `AskUserQuestion`

2317 2317 

2318Задает пользователю уточняющие вопросы во время выполнения. См. [Handle approvals and user input](/ru/agent-sdk/user-input#handle-clarifying-questions) для деталей использования.2318Задает пользователю уточняющие вопросы во время выполнения. См. [Обработка одобрений и ввода пользователя](/ru/agent-sdk/user-input#handle-clarifying-questions) для деталей использования.

2319 2319 

2320**Ввод:**2320**Ввод:**

2321 2321 

2322```python theme={null}2322```python theme={null}

2323{2323{

2324 "questions": [ # Questions to ask the user (1-4 questions)2324 "questions": [ # Вопросы для пользователя (1-4 вопроса)

2325 {2325 {

2326 "question": str, # The complete question to ask the user2326 "question": str, # Полный вопрос для пользователя

2327 "header": str, # Very short label displayed as a chip/tag (max 12 chars)2327 "header": str, # Очень короткая метка, отображаемая как чип/тег (макс 12 символов)

2328 "options": [ # The available choices (2-4 options)2328 "options": [ # Доступные варианты (2-4 варианта)

2329 {2329 {

2330 "label": str, # Display text for this option (1-5 words)2330 "label": str, # Текст отображения для этого варианта (1-5 слов)

2331 "description": str, # Explanation of what this option means2331 "description": str, # Объяснение того, что означает этот вариант

2332 }2332 }

2333 ],2333 ],

2334 "multiSelect": bool, # Set to true to allow multiple selections2334 "multiSelect": bool, # Установите значение true, чтобы разрешить множественный выбор

2335 }2335 }

2336 ],2336 ],

2337 "answers": dict | None, # User answers populated by the permission system2337 "answers": dict[str, str | list[str]] | None,

2338 # Ответы пользователя, заполненные системой разрешений. Ответы с множественным выбором

2339 # могут быть списком меток или строкой, объединенной запятыми

2338}2340}

2339```2341```

2340 2342 


2342 2344 

2343```python theme={null}2345```python theme={null}

2344{2346{

2345 "questions": [ # The questions that were asked2347 "questions": [ # Вопросы, которые были заданы

2346 {2348 {

2347 "question": str,2349 "question": str,

2348 "header": str,2350 "header": str,


2350 "multiSelect": bool,2352 "multiSelect": bool,

2351 }2353 }

2352 ],2354 ],

2353 "answers": dict[str, str], # Maps question text to answer string2355 "answers": dict[str, str], # Сопоставляет текст вопроса со строкой ответа

2354 # Multi-select answers are comma-separated2356 # Ответы с множественным выбором разделены запятыми

2355}2357}

2356```2358```

2357 2359 


2363 2365 

2364```python theme={null}2366```python theme={null}

2365{2367{

2366 "command": str, # The command to execute2368 "command": str, # Команда для выполнения

2367 "timeout": int | None, # Optional timeout in milliseconds (max 600000)2369 "timeout": int | None, # Необязательный тайм-аут в миллисекундах (макс 600000)

2368 "description": str | None, # Clear, concise description (5-10 words)2370 "description": str | None, # Четкое, краткое описание (5-10 слов)

2369 "run_in_background": bool | None, # Set to true to run in background2371 "run_in_background": bool | None, # Установите значение true для выполнения в фоне

2370}2372}

2371```2373```

2372 2374 


2374 2376 

2375```python theme={null}2377```python theme={null}

2376{2378{

2377 "output": str, # Combined stdout and stderr output2379 "output": str, # Объединенный вывод stdout и stderr

2378 "exitCode": int, # Exit code of the command2380 "exitCode": int, # Код выхода команды

2379 "killed": bool | None, # Whether command was killed due to timeout2381 "killed": bool | None, # Была ли команда убита из-за тайм-аута

2380 "shellId": str | None, # Shell ID for background processes2382 "shellId": str | None, # ID оболочки для фоновых процессов

2381}2383}

2382```2384```

2383 2385 


2385 2387 

2386**Имя инструмента:** `Monitor`2388**Имя инструмента:** `Monitor`

2387 2389 

2388Запускает фоновый скрипт и доставляет каждую строку stdout в Claude как событие, чтобы он мог реагировать без опроса. Monitor следует тем же правилам разрешений, что и Bash. См. [Monitor tool reference](/ru/tools-reference#monitor-tool) для поведения и доступности поставщика.2390Запускает фоновый скрипт и доставляет каждую строку stdout в Claude как событие, чтобы он мог реагировать без опроса. Monitor следует тем же правилам разрешений, что и Bash. См. [Справочник инструмента Monitor](/ru/tools-reference#monitor-tool) для поведения и доступности поставщика.

2389 2391 

2390**Ввод:**2392**Ввод:**

2391 2393 

2392```python theme={null}2394```python theme={null}

2393{2395{

2394 "command": str, # Shell script; each stdout line is an event, exit ends the watch2396 "command": str, # Скрипт оболочки; каждая строка stdout является событием, выход завершает наблюдение

2395 "description": str, # Short description shown in notifications2397 "description": str, # Краткое описание, показываемое в уведомлениях

2396 "timeout_ms": int | None, # Kill after this deadline (default 300000, max 3600000)2398 "timeout_ms": int | None, # Завершить после этого срока (по умолчанию 300000, макс 3600000)

2397 "persistent": bool | None, # Run for the lifetime of the session; stop with TaskStop2399 "persistent": bool | None, # Запускать в течение всего времени сеанса; остановить с помощью TaskStop

2398}2400}

2399```2401```

2400 2402 


2402 2404 

2403```python theme={null}2405```python theme={null}

2404{2406{

2405 "taskId": str, # ID of the background monitor task2407 "taskId": str, # ID фоновой задачи мониторинга

2406 "timeoutMs": int, # Timeout deadline in milliseconds (0 when persistent)2408 "timeoutMs": int, # Срок тайм-аута в миллисекундах (0 при постоянном режиме)

2407 "persistent": bool | None, # True when running until TaskStop or session end2409 "persistent": bool | None, # True при выполнении до TaskStop или конца сеанса

2408}2410}

2409```2411```

2410 2412 


2416 2418 

2417```python theme={null}2419```python theme={null}

2418{2420{

2419 "file_path": str, # The absolute path to the file to modify2421 "file_path": str, # Абсолютный путь к файлу для изменения

2420 "old_string": str, # The text to replace2422 "old_string": str, # Текст для замены

2421 "new_string": str, # The text to replace it with2423 "new_string": str, # Текст для замены на

2422 "replace_all": bool | None, # Replace all occurrences (default False)2424 "replace_all": bool | None, # Заменить все вхождения (по умолчанию False)

2423}2425}

2424```2426```

2425 2427 


2427 2429 

2428```python theme={null}2430```python theme={null}

2429{2431{

2430 "message": str, # Confirmation message2432 "message": str, # Сообщение подтверждения

2431 "replacements": int, # Number of replacements made2433 "replacements": int, # Количество выполненных замен

2432 "file_path": str, # File path that was edited2434 "file_path": str, # Путь файла, который был отредактирован

2433}2435}

2434```2436```

2435 2437 


2441 2443 

2442```python theme={null}2444```python theme={null}

2443{2445{

2444 "file_path": str, # The absolute path to the file to read2446 "file_path": str, # Абсолютный путь к файлу для чтения

2445 "offset": int | None, # The line number to start reading from2447 "offset": int | None, # Номер строки для начала чтения

2446 "limit": int | None, # The number of lines to read2448 "limit": int | None, # Количество строк для чтения

2447}2449}

2448```2450```

2449 2451 


2451 2453 

2452```python theme={null}2454```python theme={null}

2453{2455{

2454 "content": str, # File contents with line numbers2456 "content": str, # Содержимое файла с номерами строк

2455 "total_lines": int, # Total number of lines in file2457 "total_lines": int, # Общее количество строк в файле

2456 "lines_returned": int, # Lines actually returned2458 "lines_returned": int, # Фактически возвращенные строки

2457}2459}

2458```2460```

2459 2461 


2461 2463 

2462```python theme={null}2464```python theme={null}

2463{2465{

2464 "image": str, # Base64 encoded image data2466 "image": str, # Данные изображения в кодировке Base64

2465 "mime_type": str, # Image MIME type2467 "mime_type": str, # MIME-тип изображения

2466 "file_size": int, # File size in bytes2468 "file_size": int, # Размер файла в байтах

2467}2469}

2468```2470```

2469 2471 


2475 2477 

2476```python theme={null}2478```python theme={null}

2477{2479{

2478 "file_path": str, # The absolute path to the file to write2480 "file_path": str, # Абсолютный путь к файлу для записи

2479 "content": str, # The content to write to the file2481 "content": str, # Содержимое для записи в файл

2480}2482}

2481```2483```

2482 2484 


2484 2486 

2485```python theme={null}2487```python theme={null}

2486{2488{

2487 "message": str, # Success message2489 "message": str, # Сообщение об успехе

2488 "bytes_written": int, # Number of bytes written2490 "bytes_written": int, # Количество записанных байтов

2489 "file_path": str, # File path that was written2491 "file_path": str, # Путь файла, который был записан

2490}2492}

2491```2493```

2492 2494 


2498 2500 

2499```python theme={null}2501```python theme={null}

2500{2502{

2501 "pattern": str, # The glob pattern to match files against2503 "pattern": str, # Шаблон glob для сопоставления файлов

2502 "path": str | None, # The directory to search in (defaults to cwd)2504 "path": str | None, # Каталог для поиска (по умолчанию текущий каталог)

2503}2505}

2504```2506```

2505 2507 


2507 2509 

2508```python theme={null}2510```python theme={null}

2509{2511{

2510 "matches": list[str], # Array of matching file paths2512 "matches": list[str], # Массив совпадающих путей файлов

2511 "count": int, # Number of matches found2513 "count": int, # Количество найденных совпадений

2512 "search_path": str, # Search directory used2514 "search_path": str, # Использованный каталог поиска

2513}2515}

2514```2516```

2515 2517 


2521 2523 

2522```python theme={null}2524```python theme={null}

2523{2525{

2524 "pattern": str, # The regular expression pattern2526 "pattern": str, # Шаблон регулярного выражения

2525 "path": str | None, # File or directory to search in2527 "path": str | None, # Файл или каталог для поиска

2526 "glob": str | None, # Glob pattern to filter files2528 "glob": str | None, # Шаблон glob для фильтрации файлов

2527 "type": str | None, # File type to search2529 "type": str | None, # Тип файла для поиска

2528 "output_mode": str | None, # "content", "files_with_matches", or "count"2530 "output_mode": str | None, # "content", "files_with_matches" или "count"

2529 "-i": bool | None, # Case insensitive search2531 "-i": bool | None, # Поиск без учета регистра

2530 "-n": bool | None, # Show line numbers2532 "-n": bool | None, # Показать номера строк

2531 "-B": int | None, # Lines to show before each match2533 "-B": int | None, # Строки для отображения перед каждым совпадением

2532 "-A": int | None, # Lines to show after each match2534 "-A": int | None, # Строки для отображения после каждого совпадения

2533 "-C": int | None, # Lines to show before and after2535 "-C": int | None, # Строки для отображения до и после

2534 "head_limit": int | None, # Limit output to first N lines/entries2536 "head_limit": int | None, # Ограничить вывод первыми N строками/записями

2535 "multiline": bool | None, # Enable multiline mode2537 "multiline": bool | None, # Включить многострочный режим

2536}2538}

2537```2539```

2538 2540 


2557 2559 

2558```python theme={null}2560```python theme={null}

2559{2561{

2560 "files": list[str], # Files containing matches2562 "files": list[str], # Файлы, содержащие совпадения

2561 "count": int, # Number of files with matches2563 "count": int, # Количество файлов с совпадениями

2562}2564}

2563```2565```

2564 2566 


2570 2572 

2571```python theme={null}2573```python theme={null}

2572{2574{

2573 "notebook_path": str, # Absolute path to the Jupyter notebook2575 "notebook_path": str, # Абсолютный путь к записной книжке Jupyter

2574 "cell_id": str | None, # The ID of the cell to edit2576 "cell_id": str | None, # ID ячейки для редактирования

2575 "new_source": str, # The new source for the cell2577 "new_source": str, # Новый исходный код для ячейки

2576 "cell_type": "code" | "markdown" | None, # The type of the cell2578 "cell_type": "code" | "markdown" | None, # Тип ячейки

2577 "edit_mode": "replace" | "insert" | "delete" | None, # Edit operation type2579 "edit_mode": "replace" | "insert" | "delete" | None, # Тип операции редактирования

2578}2580}

2579```2581```

2580 2582 


2582 2584 

2583```python theme={null}2585```python theme={null}

2584{2586{

2585 "message": str, # Success message2587 "message": str, # Сообщение об успехе

2586 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed2588 "edit_type": "replaced" | "inserted" | "deleted", # Тип выполненного редактирования

2587 "cell_id": str | None, # Cell ID that was affected2589 "cell_id": str | None, # ID ячейки, которая была затронута

2588 "total_cells": int, # Total cells in notebook after edit2590 "total_cells": int, # Общее количество ячеек в записной книжке после редактирования

2589}2591}

2590```2592```

2591 2593 


2597 2599 

2598```python theme={null}2600```python theme={null}

2599{2601{

2600 "url": str, # The URL to fetch content from2602 "url": str, # URL для получения содержимого

2601 "prompt": str, # The prompt to run on the fetched content2603 "prompt": str, # Подсказка для запуска на полученном содержимом

2602}2604}

2603```2605```

2604 2606 


2606 2608 

2607```python theme={null}2609```python theme={null}

2608{2610{

2609 "response": str, # AI model's response to the prompt2611 "response": str, # Ответ модели AI на подсказку

2610 "url": str, # URL that was fetched2612 "url": str, # URL, который был получен

2611 "final_url": str | None, # Final URL after redirects2613 "final_url": str | None, # Финальный URL после перенаправлений

2612 "status_code": int | None, # HTTP status code2614 "status_code": int | None, # Код статуса HTTP

2613}2615}

2614```2616```

2615 2617 


2621 2623 

2622```python theme={null}2624```python theme={null}

2623{2625{

2624 "query": str, # The search query to use2626 "query": str, # Поисковый запрос для использования

2625 "allowed_domains": list[str] | None, # Only include results from these domains2627 "allowed_domains": list[str] | None, # Включать результаты только с этих доменов

2626 "blocked_domains": list[str] | None, # Never include results from these domains2628 "blocked_domains": list[str] | None, # Никогда не включать результаты с этих доменов

2627}2629}

2628```2630```

2629 2631 


2647{2649{

2648 "todos": [2650 "todos": [

2649 {2651 {

2650 "content": str, # The task description2652 "content": str, # Описание задачи

2651 "status": "pending" | "in_progress" | "completed", # Task status2653 "status": "pending" | "in_progress" | "completed", # Статус задачи

2652 "activeForm": str, # Active form of the description2654 "activeForm": str, # Активная форма описания

2653 }2655 }

2654 ]2656 ]

2655}2657}


2659 2661 

2660```python theme={null}2662```python theme={null}

2661{2663{

2662 "message": str, # Success message2664 "message": str, # Сообщение об успехе

2663 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},2665 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},

2664}2666}

2665```2667```


2672 2674 

2673```python theme={null}2675```python theme={null}

2674{2676{

2675 "bash_id": str, # The ID of the background shell2677 "bash_id": str, # ID фоновой оболочки

2676 "filter": str | None, # Optional regex to filter output lines2678 "filter": str | None, # Необязательное регулярное выражение для фильтрации строк вывода

2677}2679}

2678```2680```

2679 2681 


2681 2683 

2682```python theme={null}2684```python theme={null}

2683{2685{

2684 "output": str, # New output since last check2686 "output": str, # Новый вывод с момента последней проверки

2685 "status": "running" | "completed" | "failed", # Current shell status2687 "status": "running" | "completed" | "failed", # Текущий статус оболочки

2686 "exitCode": int | None, # Exit code when completed2688 "exitCode": int | None, # Код выхода при завершении

2687}2689}

2688```2690```

2689 2691 


2695 2697 

2696```python theme={null}2698```python theme={null}

2697{2699{

2698 "shell_id": str # The ID of the background shell to kill2700 "shell_id": str # ID фоновой оболочки для завершения

2699}2701}

2700```2702```

2701 2703 


2703 2705 

2704```python theme={null}2706```python theme={null}

2705{2707{

2706 "message": str, # Success message2708 "message": str, # Сообщение об успехе

2707 "shell_id": str, # ID of the killed shell2709 "shell_id": str, # ID завершенной оболочки

2708}2710}

2709```2711```

2710 2712 


2716 2718 

2717```python theme={null}2719```python theme={null}

2718{2720{

2719 "plan": str # The plan to run by the user for approval2721 "plan": str # План для запуска пользователем на одобрение

2720}2722}

2721```2723```

2722 2724 


2724 2726 

2725```python theme={null}2727```python theme={null}

2726{2728{

2727 "message": str, # Confirmation message2729 "message": str, # Сообщение подтверждения

2728 "approved": bool | None, # Whether user approved the plan2730 "approved": bool | None, # Одобрил ли пользователь план

2729}2731}

2730```2732```

2731 2733 


2737 2739 

2738```python theme={null}2740```python theme={null}

2739{2741{

2740 "server": str | None # Optional server name to filter resources by2742 "server": str | None # Необязательное имя сервера для фильтрации ресурсов

2741}2743}

2742```2744```

2743 2745 


2766 2768 

2767```python theme={null}2769```python theme={null}

2768{2770{

2769 "server": str, # The MCP server name2771 "server": str, # Имя сервера MCP

2770 "uri": str, # The resource URI to read2772 "uri": str, # URI ресурса для чтения

2771}2773}

2772```2774```

2773 2775 

Details

308| `tag` | `string \| null` | обязательно | Строка тега или `null` для очистки |308| `tag` | `string \| null` | обязательно | Строка тега или `null` для очистки |

309| `options.dir` | `string` | `undefined` | Путь директории проекта. Если опущено, ищет во всех директориях проектов |309| `options.dir` | `string` | `undefined` | Путь директории проекта. Если опущено, ищет во всех директориях проектов |

310 310 

311### `resolveSettings()`

312 

313Разрешает эффективные параметры Claude Code для заданной директории, используя тот же механизм слияния, что и CLI, без запуска Claude CLI. Используйте его для проверки того, какую конфигурацию увидит вызов `query()` перед его вызовом.

314 

315<Note>

316 Эта функция находится в альфа-версии и её API может измениться перед стабилизацией. Она читает источники MDM, включая macOS plist и Windows HKLM/HKCU, для паритета с запуском CLI, но не выполняет настроенный администратором подпроцесс `policyHelper`. Поле `permissions.defaultMode` возвращается как есть из всех уровней, включая параметры проекта. Фильтр доверия, который CLI применяет перед соблюдением режимов повышенных разрешений, не применяется.

317</Note>

318 

319```typescript theme={null}

320function resolveSettings(

321 options?: ResolveSettingsOptions

322): Promise<ResolvedSettings>;

323```

324 

325#### Параметры

326 

327`resolveSettings()` принимает один объект параметров. Все поля опциональны.

328 

329| Параметр | Тип | По умолчанию | Описание |

330| :------------------------------ | :------------------------------------ | :-------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

331| `options.cwd` | `string` | `process.cwd()` | Директория для разрешения параметров проекта и локальных параметров относительно |

332| `options.settingSources` | [`SettingSource`](#settingsource)`[]` | Все источники | Какие источники файловой системы загружать. Передайте `[]` для пропуска пользовательских, проектных и локальных параметров. Параметры управляемой политики загружаются во всех случаях |

333| `options.managedSettings` | `Settings` | `undefined` | Ограничивающие параметры уровня политики, объединённые на уровне приоритета управляемой политики. Неограничивающие ключи, такие как `model`, молча отбрасываются |

334| `options.serverManagedSettings` | `Settings` | `undefined` | Полезная нагрузка параметров, управляемых сервером, из `/api/claude_code/settings`. Неограничивающие ключи проходят без фильтрации |

335 

336#### Тип возврата: `ResolvedSettings`

337 

338`resolveSettings()` возвращает объект, описывающий объединённые параметры и источник, который внёс каждый ключ.

339 

340| Свойство | Тип | Описание |

341| :----------- | :-------------------------------------------------- | :----------------------------------------------------------------------------------------------------------- |

342| `effective` | `Settings` | Объединённые параметры после применения всех включённых источников в порядке приоритета |

343| `provenance` | `Partial<Record<keyof Settings, ProvenanceEntry>>` | Для каждого ключа верхнего уровня в `effective`, какой источник предоставил значение |

344| `sources` | `Array<{ source, settings, path?, policyOrigin? }>` | Необработанные параметры для каждого источника, упорядоченные от самого низкого к самому высокому приоритету |

345 

346#### Пример

347 

348Пример ниже разрешает параметры для директории проекта и выводит источник, который контролирует период очистки.

349 

350```typescript theme={null}

351import { resolveSettings } from "@anthropic-ai/claude-agent-sdk";

352 

353const { effective, provenance } = await resolveSettings({

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

355 settingSources: ["user", "project", "local"],

356});

357 

358console.log(`Cleanup period: ${effective.cleanupPeriodDays} days`);

359console.log(`Set by: ${provenance.cleanupPeriodDays?.source}`);

360```

361 

311## Типы362## Типы

312 363 

313### `Options`364### `Options`


864 | SDKFilesPersistedEvent915 | SDKFilesPersistedEvent

865 | SDKToolUseSummaryMessage916 | SDKToolUseSummaryMessage

866 | SDKRateLimitEvent917 | SDKRateLimitEvent

918 | SDKPermissionDeniedMessage

867 | SDKPromptSuggestionMessage;919 | SDKPromptSuggestionMessage;

868```920```

869 921 


1052};1104};

1053```1105```

1054 1106 

1107### `SDKPermissionDeniedMessage`

1108 

1109Событие потока, выданное, когда система разрешений автоматически отклоняет вызов инструмента без интерактивного запроса. Используйте его для отображения отклонения в вашем пользовательском интерфейсе по мере его возникновения, а не только наблюдая результат инструмента `is_error`, который следует за ним. Интерактивный путь запроса достигает вашего приложения отдельно через callback [`canUseTool`](#canusetool). Отклонения, выданные hook `PreToolUse`, не сообщаются через это событие.

1110 

1111Это событие требует Claude Code v2.1.136 или позже.

1112 

1113```typescript theme={null}

1114type SDKPermissionDeniedMessage = {

1115 type: "system";

1116 subtype: "permission_denied";

1117 tool_name: string;

1118 tool_use_id: string;

1119 agent_id?: string;

1120 decision_reason_type?: string;

1121 decision_reason?: string;

1122 message: string;

1123 uuid: UUID;

1124 session_id: string;

1125};

1126```

1127 

1128| Поле | Тип | Описание |

1129| ---------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------ |

1130| `tool_name` | `string` | Имя инструмента, который был отклонён |

1131| `tool_use_id` | `string` | ID блока `tool_use`, на который отвечает это отклонение |

1132| `agent_id` | `string` | ID подагента, когда отклонённый вызов возник внутри подагента. Зеркалирует поле на `can_use_tool` для маршрутизации на стороне хоста |

1133| `decision_reason_type` | `string` | Дискриминатор для компонента, который принял решение, такой как `"rule"`, `"mode"`, `"classifier"` или `"asyncAgent"` |

1134| `decision_reason` | `string` | Понятная человеку причина от компонента, принявшего решение, если доступна |

1135| `message` | `string` | Сообщение об отказе, возвращённое модели в `tool_result` |

1136 

1055### `SDKPermissionDenial`1137### `SDKPermissionDenial`

1056 1138 

1057Информация об отклонённом использовании tool.1139Информация об отклонённом использовании tool.

agent-sdk/user-input.md +810 −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> Выводите запросы на одобрение Claude и уточняющие вопросы пользователям, а затем возвращайте их решения в SDK.

8 

9Во время работы над задачей Claude иногда нужно проверить информацию у пользователей. Ему может потребоваться разрешение перед удалением файлов или нужно спросить, какую базу данных использовать для нового проекта. Ваше приложение должно выводить эти запросы пользователям, чтобы Claude мог продолжить работу с их вводом.

10 

11Claude запрашивает пользовательский ввод в двух ситуациях: когда ему нужно **разрешение на использование инструмента** (например, удаление файлов или запуск команд) и когда у него есть **уточняющие вопросы** (через инструмент `AskUserQuestion`). Оба случая запускают ваш callback `canUseTool`, который приостанавливает выполнение до получения ответа. Это отличается от обычных диалоговых ходов, где Claude завершает работу и ждёт вашего следующего сообщения.

12 

13Для уточняющих вопросов Claude генерирует вопросы и варианты ответов. Ваша роль — представить их пользователям и вернуть их выборы. Вы не можете добавлять свои собственные вопросы в этот процесс; если вам нужно что-то спросить у пользователей, сделайте это отдельно в логике вашего приложения.

14 

15Callback может оставаться в ожидании неопределённо долго. Выполнение остаётся приостановленным до возврата вашего callback, и SDK отменяет ожидание только при отмене самого запроса. Если пользователь может ответить дольше, чем ваш процесс может разумно оставаться запущенным, TypeScript SDK поддерживает [hook `defer`](/ru/hooks#defer-a-tool-call-for-later), который позволяет процессу выйти и возобновиться позже из сохранённой сессии; эта опция недоступна в Python SDK.

16 

17Это руководство показывает, как обнаружить каждый тип запроса и ответить надлежащим образом.

18 

19## Обнаружение, когда Claude нуждается в вводе

20 

21Передайте callback `canUseTool` в параметры вашего запроса. Callback срабатывает всякий раз, когда Claude нуждается в пользовательском вводе, получая имя инструмента и ввод в качестве аргументов:

22 

23<CodeGroup>

24 ```python Python theme={null}

25 async def handle_tool_request(tool_name, input_data, context):

26 # Запросить у пользователя и вернуть разрешение или отказ

27 ...

28 

29 

30 options = ClaudeAgentOptions(can_use_tool=handle_tool_request)

31 ```

32 

33 ```typescript TypeScript theme={null}

34 async function handleToolRequest(toolName, input, options) {

35 // options включает { signal: AbortSignal, suggestions?: PermissionUpdate[] }

36 // Запросить у пользователя и вернуть разрешение или отказ

37 }

38 

39 const options = { canUseTool: handleToolRequest };

40 ```

41</CodeGroup>

42 

43Callback срабатывает в двух случаях:

44 

451. **Инструмент требует одобрения**: Claude хочет использовать инструмент, который не одобрен автоматически [правилами разрешений](/ru/agent-sdk/permissions) или режимами. Проверьте `tool_name` на имя инструмента (например, `"Bash"`, `"Write"`).

462. **Claude задаёт вопрос**: Claude вызывает инструмент `AskUserQuestion`. Проверьте, равен ли `tool_name == "AskUserQuestion"`, чтобы обработать его иначе. Если вы указываете массив `tools`, включите `AskUserQuestion` для работы этого функционала. Подробнее см. [Обработка уточняющих вопросов](#handle-clarifying-questions).

47 

48<Note>

49 Чтобы автоматически разрешить или отклонить инструменты без запроса пользователей, используйте [hooks](/ru/agent-sdk/hooks). Hooks выполняются перед `canUseTool` и могут разрешить, отклонить или изменить запросы на основе вашей собственной логики. Вы также можете использовать [hook `PermissionRequest`](/ru/agent-sdk/hooks#available-hooks) для отправки внешних уведомлений (Slack, email, push) когда Claude ждёт одобрения.

50</Note>

51 

52## Обработка запросов на одобрение инструмента

53 

54После передачи callback `canUseTool` в параметры вашего запроса он срабатывает, когда Claude хочет использовать инструмент, который не одобрен автоматически. Ваш callback получает три аргумента:

55 

56| Аргумент | Описание |

57| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

58| `toolName` | Имя инструмента, который Claude хочет использовать (например, `"Bash"`, `"Write"`, `"Edit"`) |

59| `input` | Параметры, которые Claude передаёт инструменту. Содержимое варьируется в зависимости от инструмента. |

60| `options` (TS) / `context` (Python) | Дополнительный контекст, включая опциональные `suggestions` (предложенные записи `PermissionUpdate` для избежания повторного запроса) и сигнал отмены. В TypeScript `signal` — это `AbortSignal`; в Python поле signal зарезервировано для будущего использования. Подробнее см. [`ToolPermissionContext`](/ru/agent-sdk/python#toolpermissioncontext) для Python. |

61 

62Объект `input` содержит параметры, специфичные для инструмента. Распространённые примеры:

63 

64| Инструмент | Поля ввода |

65| ---------- | --------------------------------------- |

66| `Bash` | `command`, `description`, `timeout` |

67| `Write` | `file_path`, `content` |

68| `Edit` | `file_path`, `old_string`, `new_string` |

69| `Read` | `file_path`, `offset`, `limit` |

70 

71Полные схемы ввода см. в справочнике SDK: [Python](/ru/agent-sdk/python#tool-input%2Foutput-types) | [TypeScript](/ru/agent-sdk/typescript#tool-input-types).

72 

73Вы можете отобразить эту информацию пользователю, чтобы он мог решить, разрешить или отклонить действие, а затем вернуть соответствующий ответ.

74 

75Следующий пример просит Claude создать и удалить тестовый файл. Когда Claude пытается выполнить каждую операцию, callback выводит запрос инструмента в терминал и запрашивает одобрение y/n.

76 

77<CodeGroup>

78 ```python Python theme={null}

79 import asyncio

80 

81 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

82 from claude_agent_sdk.types import (

83 HookMatcher,

84 PermissionResultAllow,

85 PermissionResultDeny,

86 ToolPermissionContext,

87 )

88 

89 

90 async def can_use_tool(

91 tool_name: str, input_data: dict, context: ToolPermissionContext

92 ) -> PermissionResultAllow | PermissionResultDeny:

93 # Отобразить запрос инструмента

94 print(f"\nTool: {tool_name}")

95 if tool_name == "Bash":

96 print(f"Command: {input_data.get('command')}")

97 if input_data.get("description"):

98 print(f"Description: {input_data.get('description')}")

99 else:

100 print(f"Input: {input_data}")

101 

102 # Получить одобрение пользователя

103 response = input("Allow this action? (y/n): ")

104 

105 # Вернуть разрешение или отказ на основе ответа пользователя

106 if response.lower() == "y":

107 # Разрешить: инструмент выполняется с исходным (или изменённым) вводом

108 return PermissionResultAllow(updated_input=input_data)

109 else:

110 # Отклонить: инструмент не выполняется, Claude видит сообщение

111 return PermissionResultDeny(message="User denied this action")

112 

113 

114 # Требуемый обходной путь: фиктивный hook держит поток открытым для can_use_tool

115 async def dummy_hook(input_data, tool_use_id, context):

116 return {"continue_": True}

117 

118 

119 async def prompt_stream():

120 yield {

121 "type": "user",

122 "message": {

123 "role": "user",

124 "content": "Create a test file in /tmp and then delete it",

125 },

126 }

127 

128 

129 async def main():

130 async for message in query(

131 prompt=prompt_stream(),

132 options=ClaudeAgentOptions(

133 can_use_tool=can_use_tool,

134 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

135 ),

136 ):

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

138 print(message.result)

139 

140 

141 asyncio.run(main())

142 ```

143 

144 ```typescript TypeScript theme={null}

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

146 import * as readline from "readline";

147 

148 // Вспомогательная функция для запроса ввода пользователя в терминале

149 function prompt(question: string): Promise<string> {

150 const rl = readline.createInterface({

151 input: process.stdin,

152 output: process.stdout

153 });

154 return new Promise((resolve) =>

155 rl.question(question, (answer) => {

156 rl.close();

157 resolve(answer);

158 })

159 );

160 }

161 

162 for await (const message of query({

163 prompt: "Create a test file in /tmp and then delete it",

164 options: {

165 canUseTool: async (toolName, input) => {

166 // Отобразить запрос инструмента

167 console.log(`\nTool: ${toolName}`);

168 if (toolName === "Bash") {

169 console.log(`Command: ${input.command}`);

170 if (input.description) console.log(`Description: ${input.description}`);

171 } else {

172 console.log(`Input: ${JSON.stringify(input, null, 2)}`);

173 }

174 

175 // Получить одобрение пользователя

176 const response = await prompt("Allow this action? (y/n): ");

177 

178 // Вернуть разрешение или отказ на основе ответа пользователя

179 if (response.toLowerCase() === "y") {

180 // Разрешить: инструмент выполняется с исходным (или изменённым) вводом

181 return { behavior: "allow", updatedInput: input };

182 } else {

183 // Отклонить: инструмент не выполняется, Claude видит сообщение

184 return { behavior: "deny", message: "User denied this action" };

185 }

186 }

187 }

188 })) {

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

190 }

191 ```

192</CodeGroup>

193 

194<Note>

195 В Python `can_use_tool` требует [режима потоковой передачи](/ru/agent-sdk/streaming-vs-single-mode) и hook `PreToolUse`, который возвращает `{"continue_": True}` для сохранения потока открытым. Без этого hook поток закроется до того, как callback разрешения сможет быть вызван.

196</Note>

197 

198Этот пример использует поток y/n, где любой ввод, отличный от `y`, рассматривается как отказ. На практике вы можете создать более богатый пользовательский интерфейс, который позволяет пользователям изменять запрос, предоставлять обратную связь или полностью перенаправлять Claude. Подробнее см. [Ответ на запросы инструментов](#respond-to-tool-requests).

199 

200### Ответ на запросы инструментов

201 

202Ваш callback возвращает один из двух типов ответов:

203 

204| Ответ | Python | TypeScript |

205| ------------- | ------------------------------------------ | ------------------------------------- |

206| **Разрешить** | `PermissionResultAllow(updated_input=...)` | `{ behavior: "allow", updatedInput }` |

207| **Отклонить** | `PermissionResultDeny(message=...)` | `{ behavior: "deny", message }` |

208 

209При разрешении передайте ввод инструмента (исходный или изменённый). При отклонении предоставьте сообщение, объясняющее причину. Claude видит это сообщение и может скорректировать свой подход.

210 

211<CodeGroup>

212 ```python Python theme={null}

213 from claude_agent_sdk.types import PermissionResultAllow, PermissionResultDeny

214 

215 # Разрешить выполнение инструмента

216 return PermissionResultAllow(updated_input=input_data)

217 

218 # Заблокировать инструмент

219 return PermissionResultDeny(message="User rejected this action")

220 ```

221 

222 ```typescript TypeScript theme={null}

223 // Разрешить выполнение инструмента

224 return { behavior: "allow", updatedInput: input };

225 

226 // Заблокировать инструмент

227 return { behavior: "deny", message: "User rejected this action" };

228 ```

229</CodeGroup>

230 

231Помимо разрешения или отклонения, вы можете изменить ввод инструмента или предоставить контекст, который помогает Claude скорректировать свой подход:

232 

233* **Одобрить**: позволить инструменту выполниться так, как запросил Claude

234* **Одобрить с изменениями**: изменить ввод перед выполнением (например, санитизировать пути, добавить ограничения)

235* **Отклонить**: заблокировать инструмент и объяснить Claude причину

236* **Предложить альтернативу**: заблокировать, но направить Claude к тому, что хочет пользователь

237* **Полностью перенаправить**: использовать [потоковый ввод](/ru/agent-sdk/streaming-vs-single-mode) для отправки Claude совершенно новой инструкции

238 

239<Tabs>

240 <Tab title="Одобрить">

241 Пользователь одобряет действие как есть. Пропустите `input` из вашего callback без изменений и инструмент выполнится ровно так, как запросил Claude.

242 

243 <CodeGroup>

244 ```python Python theme={null}

245 async def can_use_tool(tool_name, input_data, context):

246 print(f"Claude wants to use {tool_name}")

247 approved = await ask_user("Allow this action?")

248 

249 if approved:

250 return PermissionResultAllow(updated_input=input_data)

251 return PermissionResultDeny(message="User declined")

252 ```

253 

254 ```typescript TypeScript theme={null}

255 canUseTool: async (toolName, input) => {

256 console.log(`Claude wants to use ${toolName}`);

257 const approved = await askUser("Allow this action?");

258 

259 if (approved) {

260 return { behavior: "allow", updatedInput: input };

261 }

262 return { behavior: "deny", message: "User declined" };

263 };

264 ```

265 </CodeGroup>

266 </Tab>

267 

268 <Tab title="Одобрить с изменениями">

269 Пользователь одобряет, но хочет сначала изменить запрос. Вы можете изменить ввод перед выполнением инструмента. Claude видит результат, но не сообщается, что вы что-то изменили. Полезно для санитизации параметров, добавления ограничений или ограничения доступа.

270 

271 <CodeGroup>

272 ```python Python theme={null}

273 async def can_use_tool(tool_name, input_data, context):

274 if tool_name == "Bash":

275 # Пользователь одобрил, но ограничить все команды песочницей

276 sandboxed_input = {**input_data}

277 sandboxed_input["command"] = input_data["command"].replace(

278 "/tmp", "/tmp/sandbox"

279 )

280 return PermissionResultAllow(updated_input=sandboxed_input)

281 return PermissionResultAllow(updated_input=input_data)

282 ```

283 

284 ```typescript TypeScript theme={null}

285 canUseTool: async (toolName, input) => {

286 if (toolName === "Bash") {

287 // Пользователь одобрил, но ограничить все команды песочницей

288 const sandboxedInput = {

289 ...input,

290 command: input.command.replace("/tmp", "/tmp/sandbox")

291 };

292 return { behavior: "allow", updatedInput: sandboxedInput };

293 }

294 return { behavior: "allow", updatedInput: input };

295 };

296 ```

297 </CodeGroup>

298 </Tab>

299 

300 <Tab title="Отклонить">

301 Пользователь не хочет, чтобы это действие произошло. Заблокируйте инструмент и предоставьте сообщение, объясняющее причину. Claude видит это сообщение и может попробовать другой подход.

302 

303 <CodeGroup>

304 ```python Python theme={null}

305 async def can_use_tool(tool_name, input_data, context):

306 approved = await ask_user(f"Allow {tool_name}?")

307 

308 if not approved:

309 return PermissionResultDeny(message="User rejected this action")

310 return PermissionResultAllow(updated_input=input_data)

311 ```

312 

313 ```typescript TypeScript theme={null}

314 canUseTool: async (toolName, input) => {

315 const approved = await askUser(`Allow ${toolName}?`);

316 

317 if (!approved) {

318 return {

319 behavior: "deny",

320 message: "User rejected this action"

321 };

322 }

323 return { behavior: "allow", updatedInput: input };

324 };

325 ```

326 </CodeGroup>

327 </Tab>

328 

329 <Tab title="Предложить альтернативу">

330 Пользователь не хочет это конкретное действие, но имеет другую идею. Заблокируйте инструмент и включите рекомендацию в ваше сообщение. Claude прочитает это и решит, как действовать на основе вашей обратной связи.

331 

332 <CodeGroup>

333 ```python Python theme={null}

334 async def can_use_tool(tool_name, input_data, context):

335 if tool_name == "Bash" and "rm" in input_data.get("command", ""):

336 # Пользователь не хочет удалять, предложить архивирование вместо этого

337 return PermissionResultDeny(

338 message="User doesn't want to delete files. They asked if you could compress them into an archive instead."

339 )

340 return PermissionResultAllow(updated_input=input_data)

341 ```

342 

343 ```typescript TypeScript theme={null}

344 canUseTool: async (toolName, input) => {

345 if (toolName === "Bash" && input.command.includes("rm")) {

346 // Пользователь не хочет удалять, предложить архивирование вместо этого

347 return {

348 behavior: "deny",

349 message:

350 "User doesn't want to delete files. They asked if you could compress them into an archive instead."

351 };

352 }

353 return { behavior: "allow", updatedInput: input };

354 };

355 ```

356 </CodeGroup>

357 </Tab>

358 

359 <Tab title="Полностью перенаправить">

360 Для полного изменения направления (не просто подсказка), используйте [потоковый ввод](/ru/agent-sdk/streaming-vs-single-mode) для отправки Claude новой инструкции напрямую. Это обходит текущий запрос инструмента и даёт Claude совершенно новые инструкции для следования.

361 </Tab>

362</Tabs>

363 

364## Обработка уточняющих вопросов

365 

366Когда Claude нуждается в дополнительном направлении для задачи с несколькими допустимыми подходами, он вызывает инструмент `AskUserQuestion`. Это запускает ваш callback `canUseTool` с `toolName`, установленным на `AskUserQuestion`. Ввод содержит вопросы Claude в виде вариантов с множественным выбором, которые вы выводите пользователю и возвращаете их выборы.

367 

368<Tip>

369 Уточняющие вопросы особенно распространены в [режиме `plan`](/ru/agent-sdk/permissions#plan-mode-plan), где Claude исследует кодовую базу и задаёт вопросы перед предложением плана. Это делает режим plan идеальным для интерактивных рабочих процессов, где вы хотите, чтобы Claude собрал требования перед внесением изменений.

370</Tip>

371 

372Следующие шаги показывают, как обработать уточняющие вопросы:

373 

374<Steps>

375 <Step title="Передайте callback canUseTool">

376 Передайте callback `canUseTool` в параметры вашего запроса. По умолчанию `AskUserQuestion` доступен. Если вы указываете массив `tools` для ограничения возможностей Claude (например, агент только для чтения с только `Read`, `Glob` и `Grep`), включите `AskUserQuestion` в этот массив. В противном случае Claude не сможет задавать уточняющие вопросы:

377 

378 <CodeGroup>

379 ```python Python theme={null}

380 async for message in query(

381 prompt="Analyze this codebase",

382 options=ClaudeAgentOptions(

383 # Включите AskUserQuestion в ваш список инструментов

384 tools=["Read", "Glob", "Grep", "AskUserQuestion"],

385 can_use_tool=can_use_tool,

386 ),

387 ):

388 print(message)

389 ```

390 

391 ```typescript TypeScript theme={null}

392 for await (const message of query({

393 prompt: "Analyze this codebase",

394 options: {

395 // Включите AskUserQuestion в ваш список инструментов

396 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

397 canUseTool: async (toolName, input) => {

398 // Обработайте уточняющие вопросы здесь

399 }

400 }

401 })) {

402 console.log(message);

403 }

404 ```

405 </CodeGroup>

406 </Step>

407 

408 <Step title="Обнаружьте AskUserQuestion">

409 В вашем callback проверьте, равен ли `toolName` `AskUserQuestion`, чтобы обработать его иначе, чем другие инструменты:

410 

411 <CodeGroup>

412 ```python Python theme={null}

413 async def can_use_tool(tool_name: str, input_data: dict, context):

414 if tool_name == "AskUserQuestion":

415 # Ваша реализация для сбора ответов от пользователя

416 return await handle_clarifying_questions(input_data)

417 # Обработайте другие инструменты нормально

418 return await prompt_for_approval(tool_name, input_data)

419 ```

420 

421 ```typescript TypeScript theme={null}

422 canUseTool: async (toolName, input) => {

423 if (toolName === "AskUserQuestion") {

424 // Ваша реализация для сбора ответов от пользователя

425 return handleClarifyingQuestions(input);

426 }

427 // Обработайте другие инструменты нормально

428 return promptForApproval(toolName, input);

429 };

430 ```

431 </CodeGroup>

432 </Step>

433 

434 <Step title="Разберите ввод вопроса">

435 Ввод содержит вопросы Claude в массиве `questions`. Каждый вопрос имеет `question` (текст для отображения), `options` (варианты выбора) и `multiSelect` (разрешены ли множественные выборы):

436 

437 ```json theme={null}

438 {

439 "questions": [

440 {

441 "question": "How should I format the output?",

442 "header": "Format",

443 "options": [

444 { "label": "Summary", "description": "Brief overview" },

445 { "label": "Detailed", "description": "Full explanation" }

446 ],

447 "multiSelect": false

448 },

449 {

450 "question": "Which sections should I include?",

451 "header": "Sections",

452 "options": [

453 { "label": "Introduction", "description": "Opening context" },

454 { "label": "Conclusion", "description": "Final summary" }

455 ],

456 "multiSelect": true

457 }

458 ]

459 }

460 ```

461 

462 Полное описание полей см. в [Формат вопроса](#question-format).

463 </Step>

464 

465 <Step title="Соберите ответы от пользователя">

466 Представьте вопросы пользователю и соберите их выборы. Как вы это сделаете, зависит от вашего приложения: терминальный запрос, веб-форма, мобильный диалог и т. д.

467 </Step>

468 

469 <Step title="Верните ответы Claude">

470 Создайте объект `answers` как запись, где каждый ключ — это текст `question`, а каждое значение — это `label` выбранного варианта:

471 

472 | Из объекта вопроса | Используйте как |

473 | --------------------------------------------------------------- | --------------- |

474 | Поле `question` (например, `"How should I format the output?"`) | Ключ |

475 | Поле `label` выбранного варианта (например, `"Summary"`) | Значение |

476 

477 Для вопросов с множественным выбором передайте массив меток или объедините их с `", "`. Если вы [поддерживаете свободный ввод текста](#support-free-text-input), используйте пользовательский текст пользователя как значение.

478 

479 <CodeGroup>

480 ```python Python theme={null}

481 return PermissionResultAllow(

482 updated_input={

483 "questions": input_data.get("questions", []),

484 "answers": {

485 "How should I format the output?": "Summary",

486 "Which sections should I include?": ["Introduction", "Conclusion"],

487 },

488 }

489 )

490 ```

491 

492 ```typescript TypeScript theme={null}

493 return {

494 behavior: "allow",

495 updatedInput: {

496 questions: input.questions,

497 answers: {

498 "How should I format the output?": "Summary",

499 "Which sections should I include?": "Introduction, Conclusion"

500 }

501 }

502 };

503 ```

504 </CodeGroup>

505 </Step>

506</Steps>

507 

508### Формат вопроса

509 

510Ввод содержит сгенерированные Claude вопросы в массиве `questions`. Каждый вопрос имеет эти поля:

511 

512| Поле | Описание |

513| ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |

514| `question` | Полный текст вопроса для отображения |

515| `header` | Короткая метка для вопроса (максимум 12 символов) |

516| `options` | Массив из 2-4 вариантов выбора, каждый с `label` и `description`. TypeScript: опционально `preview` (см. [ниже](#option-previews-type-script)) |

517| `multiSelect` | Если `true`, пользователи могут выбрать несколько вариантов |

518 

519Структура, которую получает ваш callback:

520 

521```json theme={null}

522{

523 "questions": [

524 {

525 "question": "How should I format the output?",

526 "header": "Format",

527 "options": [

528 { "label": "Summary", "description": "Brief overview of key points" },

529 { "label": "Detailed", "description": "Full explanation with examples" }

530 ],

531 "multiSelect": false

532 }

533 ]

534}

535```

536 

537#### Предпросмотры вариантов (TypeScript)

538 

539`toolConfig.askUserQuestion.previewFormat` добавляет поле `preview` к каждому варианту, чтобы ваше приложение могло показать визуальный макет рядом с меткой. Без этого параметра Claude не генерирует предпросмотры и поле отсутствует.

540 

541| `previewFormat` | `preview` содержит |

542| :---------------------------- | :----------------------------------------------------------------------------------------------------------------- |

543| не установлено (по умолчанию) | Поле отсутствует. Claude не генерирует предпросмотры. |

544| `"markdown"` | ASCII-арт и блоки кода в ограде |

545| `"html"` | Стилизованный фрагмент `<div>` (SDK отклоняет `<script>`, `<style>` и `<!DOCTYPE>` перед запуском вашего callback) |

546 

547Формат применяется ко всем вопросам в сессии. Claude включает `preview` на варианты, где визуальное сравнение помогает (выбор макета, цветовые схемы) и опускает его, где оно не помогает (да/нет подтверждения, только текстовые варианты). Проверьте `undefined` перед рендерингом.

548 

549```typescript theme={null}

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

551 

552for await (const message of query({

553 prompt: "Help me choose a card layout",

554 options: {

555 toolConfig: {

556 askUserQuestion: { previewFormat: "html" }

557 },

558 canUseTool: async (toolName, input) => {

559 // input.questions[].options[].preview — это HTML-строка или undefined

560 return { behavior: "allow", updatedInput: input };

561 }

562 }

563})) {

564 // ...

565}

566```

567 

568Вариант с HTML-предпросмотром:

569 

570```json theme={null}

571{

572 "label": "Compact",

573 "description": "Title and metric value only",

574 "preview": "<div style=\"padding:12px;border:1px solid #ddd;border-radius:8px\"><div style=\"font-size:12px;color:#666\">Active users</div><div style=\"font-size:28px;font-weight:600\">1,284</div></div>"

575}

576```

577 

578### Формат ответа

579 

580Верните объект `answers`, сопоставляющий поле `question` каждого вопроса с `label` выбранного варианта:

581 

582| Поле | Описание |

583| ----------- | ------------------------------------------------------------------------- |

584| `questions` | Пропустите исходный массив вопросов (требуется для обработки инструмента) |

585| `answers` | Объект, где ключи — это текст вопроса, а значения — это выбранные метки |

586 

587Для вопросов с множественным выбором передайте массив меток или объедините их с `", "`. Для свободного ввода текста используйте пользовательский текст пользователя напрямую.

588 

589```json theme={null}

590{

591 "questions": [

592 // ...

593 ],

594 "answers": {

595 "How should I format the output?": "Summary",

596 "Which sections should I include?": ["Introduction", "Conclusion"]

597 }

598}

599```

600 

601#### Поддержка свободного ввода текста

602 

603Предопределённые варианты Claude не всегда охватывают то, что хотят пользователи. Чтобы позволить пользователям вводить свой собственный ответ:

604 

605* Отобразите дополнительный выбор "Other" после вариантов Claude, который принимает текстовый ввод

606* Используйте пользовательский текст пользователя как значение ответа (не слово "Other")

607 

608Полную реализацию см. в [полном примере](#complete-example) ниже.

609 

610### Полный пример

611 

612Claude задаёт уточняющие вопросы, когда ему нужен пользовательский ввод для продолжения. Например, когда его просят помочь решить, какой технологический стек использовать для мобильного приложения, Claude может спросить о кроссплатформенности vs нативности, предпочтениях бэкенда или целевых платформах. Эти вопросы помогают Claude принимать решения, которые соответствуют предпочтениям пользователя, а не угадывать.

613 

614Этот пример обрабатывает эти вопросы в терминальном приложении. Вот что происходит на каждом шаге:

615 

6161. **Маршрутизация запроса**: callback `canUseTool` проверяет, равно ли имя инструмента `"AskUserQuestion"` и маршрутизирует к выделенному обработчику

6172. **Отображение вопросов**: обработчик проходит по массиву `questions` и выводит каждый вопрос с пронумерованными вариантами

6183. **Сбор ввода**: пользователь может ввести номер для выбора варианта или ввести свободный текст напрямую (например, "jquery", "i don't know")

6194. **Сопоставление ответов**: код проверяет, является ли ввод числовым (использует метку варианта) или свободным текстом (использует текст напрямую)

6205. **Возврат Claude**: ответ включает как исходный массив `questions`, так и сопоставление `answers`

621 

622<CodeGroup>

623 ```python Python theme={null}

624 import asyncio

625 

626 from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

627 from claude_agent_sdk.types import HookMatcher, PermissionResultAllow

628 

629 

630 def parse_response(response: str, options: list) -> str:

631 """Разберите пользовательский ввод как номер(а) варианта или свободный текст."""

632 try:

633 indices = [int(s.strip()) - 1 for s in response.split(",")]

634 labels = [options[i]["label"] for i in indices if 0 <= i < len(options)]

635 return ", ".join(labels) if labels else response

636 except ValueError:

637 return response

638 

639 

640 async def handle_ask_user_question(input_data: dict) -> PermissionResultAllow:

641 """Отобразите вопросы Claude и соберите ответы пользователя."""

642 answers = {}

643 

644 for q in input_data.get("questions", []):

645 print(f"\n{q['header']}: {q['question']}")

646 

647 options = q["options"]

648 for i, opt in enumerate(options):

649 print(f" {i + 1}. {opt['label']} - {opt['description']}")

650 if q.get("multiSelect"):

651 print(" (Enter numbers separated by commas, or type your own answer)")

652 else:

653 print(" (Enter a number, or type your own answer)")

654 

655 response = input("Your choice: ").strip()

656 answers[q["question"]] = parse_response(response, options)

657 

658 return PermissionResultAllow(

659 updated_input={

660 "questions": input_data.get("questions", []),

661 "answers": answers,

662 }

663 )

664 

665 

666 async def can_use_tool(

667 tool_name: str, input_data: dict, context

668 ) -> PermissionResultAllow:

669 # Маршрутизируйте AskUserQuestion к нашему обработчику вопросов

670 if tool_name == "AskUserQuestion":

671 return await handle_ask_user_question(input_data)

672 # Автоматически одобрите другие инструменты для этого примера

673 return PermissionResultAllow(updated_input=input_data)

674 

675 

676 async def prompt_stream():

677 yield {

678 "type": "user",

679 "message": {

680 "role": "user",

681 "content": "Help me decide on the tech stack for a new mobile app",

682 },

683 }

684 

685 

686 # Требуемый обходной путь: фиктивный hook держит поток открытым для can_use_tool

687 async def dummy_hook(input_data, tool_use_id, context):

688 return {"continue_": True}

689 

690 

691 async def main():

692 async for message in query(

693 prompt=prompt_stream(),

694 options=ClaudeAgentOptions(

695 can_use_tool=can_use_tool,

696 hooks={"PreToolUse": [HookMatcher(matcher=None, hooks=[dummy_hook])]},

697 ),

698 ):

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

700 print(message.result)

701 

702 

703 asyncio.run(main())

704 ```

705 

706 ```typescript TypeScript theme={null}

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

708 import * as readline from "readline/promises";

709 

710 // Вспомогательная функция для запроса ввода пользователя в терминале

711 async function prompt(question: string): Promise<string> {

712 const rl = readline.createInterface({ input: process.stdin, output: process.stdout });

713 const answer = await rl.question(question);

714 rl.close();

715 return answer;

716 }

717 

718 // Разберите пользовательский ввод как номер(а) варианта или свободный текст

719 function parseResponse(response: string, options: any[]): string {

720 const indices = response.split(",").map((s) => parseInt(s.trim()) - 1);

721 const labels = indices

722 .filter((i) => !isNaN(i) && i >= 0 && i < options.length)

723 .map((i) => options[i].label);

724 return labels.length > 0 ? labels.join(", ") : response;

725 }

726 

727 // Отобразите вопросы Claude и соберите ответы пользователя

728 async function handleAskUserQuestion(input: any) {

729 const answers: Record<string, string> = {};

730 

731 for (const q of input.questions) {

732 console.log(`\n${q.header}: ${q.question}`);

733 

734 const options = q.options;

735 options.forEach((opt: any, i: number) => {

736 console.log(` ${i + 1}. ${opt.label} - ${opt.description}`);

737 });

738 if (q.multiSelect) {

739 console.log(" (Enter numbers separated by commas, or type your own answer)");

740 } else {

741 console.log(" (Enter a number, or type your own answer)");

742 }

743 

744 const response = (await prompt("Your choice: ")).trim();

745 answers[q.question] = parseResponse(response, options);

746 }

747 

748 // Верните ответы Claude (должны включать исходные вопросы)

749 return {

750 behavior: "allow",

751 updatedInput: { questions: input.questions, answers }

752 };

753 }

754 

755 async function main() {

756 for await (const message of query({

757 prompt: "Help me decide on the tech stack for a new mobile app",

758 options: {

759 canUseTool: async (toolName, input) => {

760 // Маршрутизируйте AskUserQuestion к нашему обработчику вопросов

761 if (toolName === "AskUserQuestion") {

762 return handleAskUserQuestion(input);

763 }

764 // Автоматически одобрите другие инструменты для этого примера

765 return { behavior: "allow", updatedInput: input };

766 }

767 }

768 })) {

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

770 }

771 }

772 

773 main();

774 ```

775</CodeGroup>

776 

777## Ограничения

778 

779* **Подагенты**: `AskUserQuestion` в настоящее время недоступен в подагентах, порождённых через инструмент Agent

780* **Ограничения вопросов**: каждый вызов `AskUserQuestion` поддерживает 1-4 вопроса с 2-4 вариантами каждый

781 

782## Другие способы получить пользовательский ввод

783 

784Callback `canUseTool` и инструмент `AskUserQuestion` охватывают большинство сценариев одобрения и уточнения, но SDK предлагает другие способы получить ввод от пользователей:

785 

786### Потоковый ввод

787 

788Используйте [потоковый ввод](/ru/agent-sdk/streaming-vs-single-mode) когда вам нужно:

789 

790* **Прервать агента в середине задачи**: отправить сигнал отмены или изменить направление, пока Claude работает

791* **Предоставить дополнительный контекст**: добавить информацию, которая нужна Claude, без ожидания, пока он спросит

792* **Создать интерфейсы чата**: позволить пользователям отправлять последующие сообщения во время долгоживущих операций

793 

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

795 

796### Пользовательские инструменты

797 

798Используйте [пользовательские инструменты](/ru/agent-sdk/custom-tools) когда вам нужно:

799 

800* **Собрать структурированный ввод**: создать формы, мастера или многошаговые рабочие процессы, которые выходят за рамки формата множественного выбора `AskUserQuestion`

801* **Интегрировать внешние системы одобрения**: подключиться к существующим системам тикетов, рабочих процессов или одобрения

802* **Реализовать взаимодействия, специфичные для домена**: создать инструменты, адаптированные к потребностям вашего приложения, такие как интерфейсы проверки кода или контрольные списки развёртывания

803 

804Пользовательские инструменты дают вам полный контроль над взаимодействием, но требуют больше работы по реализации, чем использование встроенного callback `canUseTool`.

805 

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

807 

808* [Настройка разрешений](/ru/agent-sdk/permissions): установите режимы и правила разрешений

809* [Управление выполнением с помощью hooks](/ru/agent-sdk/hooks): запустите пользовательский код в ключевых точках жизненного цикла агента

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

Details

39 39 

40Классификатор не читает `autoMode` из общих настроек проекта в `.claude/settings.json`, поэтому проверенный репо не может внедрить свои собственные правила разрешения.40Классификатор не читает `autoMode` из общих настроек проекта в `.claude/settings.json`, поэтому проверенный репо не может внедрить свои собственные правила разрешения.

41 41 

42Записи из каждой области объединяются. Разработчик может расширить `environment`, `allow` и `soft_deny` личными записями, но не может удалить записи, которые предоставляют управляемые настройки. Поскольку правила разрешения действуют как исключения из правил блокировки внутри классификатора, запись `allow`, добавленная разработчиком, может переопределить запись организационного `soft_deny`: комбинация является аддитивной, а не жесткой границей политики.42Записи из каждой области объединяются. Разработчик может расширить `environment`, `allow`, `soft_deny` и `hard_deny` личными записями, но не может удалить записи, которые предоставляют управляемые настройки. Поскольку правила разрешения действуют как исключения из правил блокировки внутри классификатора, запись `allow`, добавленная разработчиком, может переопределить запись организационного `soft_deny`: комбинация является аддитивной, а не жесткой границей политики.

43 43 

44<Note>44<Note>

45 Классификатор — это второй шлюз, который работает после [системы разрешений](/ru/permissions). Для действий, которые никогда не должны выполняться независимо от намерения пользователя или конфигурации классификатора, используйте `permissions.deny` в управляемых настройках, который блокирует действие до того, как классификатор будет проверен, и не может быть переопределен.45 Классификатор — это второй шлюз, который работает после [системы разрешений](/ru/permissions). Для действий, которые никогда не должны выполняться независимо от намерения пользователя или конфигурации классификатора, используйте `permissions.deny` в управляемых настройках, который блокирует действие до того, как классификатор будет проверен, и не может быть переопределен.


99 99 

100## Переопределение правил блокировки и разрешения100## Переопределение правил блокировки и разрешения

101 101 

102Два дополнительных поля позволяют вам заменить встроенные списки правил классификатора: `autoMode.soft_deny` управляет тем, что блокируется, а `autoMode.allow` управляет тем, какие исключения применяются. Каждое из них — это массив описаний на прозе, читаемых как правила на естественном языке. Нет поля `autoMode.deny`; чтобы жестко заблокировать действие независимо от намерения, используйте [`permissions.deny`](/ru/permissions), который работает перед классификатором.102Три дополнительных поля позволяют вам заменить встроенные списки правил классификатора: `autoMode.hard_deny` для безусловных границ безопасности, `autoMode.soft_deny` для деструктивных действий, которые намерение пользователя может отменить, и `autoMode.allow` для исключений. Каждое из них — это массив описаний на прозе, читаемых как правила на естественном языке. Для инструментов на основе паттернов с жесткими блокировками, которые работают перед классификатором, используйте [`permissions.deny`](/ru/permissions).

103 103 

104Внутри классификатора приоритет работает в три уровня:104Внутри классификатора приоритет работает в четыре уровня:

105 105 

106* Правила `soft_deny` блокируют первыми106* Правила `hard_deny` блокируют безусловно. Намерение пользователя и исключения `allow` не применяются.

107* Правила `allow` затем переопределяют совпадающие блокировки как исключения107* Правила `soft_deny` блокируют далее. Намерение пользователя и исключения `allow` могут переопределить эти правила.

108* Явное намерение пользователя переопределяет оба: если сообщение пользователя прямо и конкретно описывает точное действие, которое Claude собирается выполнить, классификатор разрешает его даже когда совпадает правило `soft_deny`108* Правила `allow` затем переопределяют совпадающие правила `soft_deny` как исключения.

109* Явное намерение пользователя переопределяет оставшиеся мягкие блокировки: если сообщение пользователя прямо и конкретно описывает точное действие, которое Claude собирается выполнить, классификатор разрешает его даже когда совпадает правило `soft_deny`.

109 110 

110Общие запросы не считаются явным намерением. Просьба Claude "очистить репо" не авторизует force-push, но просьба Claude "force-push эту ветку" авторизует.111Общие запросы не считаются явным намерением. Просьба Claude "очистить репо" не авторизует force-push, но просьба Claude "force-push эту ветку" авторизует.

111 112 

112Чтобы ослабить, добавьте в `allow`, когда классификатор повторно помечает обычный паттерн, который исключения по умолчанию не охватывают. Чтобы усилить, добавьте в `soft_deny` для рисков, специфичных для вашего окружения, которые пропускают значения по умолчанию. Чтобы сохранить встроенные правила при добавлении своих собственных, включите буквальную строку `"$defaults"` в массив. Правила по умолчанию вставляются в эту позицию, поэтому ваши пользовательские правила могут идти до или после них, и вы продолжаете наследовать обновления по мере изменения встроенного списка в разных версиях.113Чтобы ослабить, добавьте в `allow`, когда классификатор повторно помечает обычный паттерн, который исключения по умолчанию не охватывают. Чтобы усилить, добавьте в `soft_deny` для деструктивных рисков, специфичных для вашего окружения, которые пропускают значения по умолчанию, или в `hard_deny` для границ безопасности, которые никогда не должны быть пересечены. Чтобы сохранить встроенные правила при добавлении своих собственных, включите буквальную строку `"$defaults"` в массив. Правила по умолчанию вставляются в эту позицию, поэтому ваши пользовательские правила могут идти до или после них, и вы продолжаете наследовать обновления по мере изменения встроенного списка в разных версиях.

113 114 

114```json theme={null}115```json theme={null}

115{116{


127 "$defaults",128 "$defaults",

128 "Never run database migrations outside the migrations CLI, even against dev databases",129 "Never run database migrations outside the migrations CLI, even against dev databases",

129 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"130 "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow"

131 ],

132 "hard_deny": [

133 "$defaults",

134 "Never send repository contents to third-party code-review APIs"

130 ]135 ]

131 }136 }

132}137}

133```138```

134 139 

135<Danger>140<Danger>

136 Установка любого из `environment`, `allow` или `soft_deny` без `"$defaults"` заменяет весь список по умолчанию для этого раздела. Если вы установите `soft_deny` с одной записью и опустите `"$defaults"`, каждое встроенное правило блокировки отбрасывается: force push, утечка данных, `curl | bash`, развертывание в production и все остальные правила блокировки по умолчанию становятся разрешены. Опускайте `"$defaults"` только когда вы намерены взять полную ответственность за список. В этом случае запустите `claude auto-mode defaults`, чтобы вывести встроенные правила, скопируйте их в файл настроек, затем просмотрите каждое правило в соответствии с вашим конвейером и допустимостью риска.141 Установка любого из `environment`, `allow`, `soft_deny` или `hard_deny` без `"$defaults"` заменяет весь список по умолчанию для этого раздела. Массив `soft_deny` без `"$defaults"` отбрасывает каждое встроенное правило мягкой блокировки, включая force push, `curl | bash` и развертывание в production. Массив `hard_deny` без `"$defaults"` отбрасывает встроенные правила утечки данных и обхода проверок безопасности.

137</Danger>142</Danger>

138 143 

139Каждый раздел оценивается независимо, поэтому установка только `environment` оставляет списки `allow` и `soft_deny` по умолчанию нетронутыми.144Каждый раздел оценивается независимо, поэтому установка только `environment` оставляет списки `allow`, `soft_deny` и `hard_deny` по умолчанию нетронутыми. Опускайте `"$defaults"` только когда вы намерены взять полную ответственность за список. Чтобы сделать это безопасно, запустите `claude auto-mode defaults`, чтобы вывести встроенные правила, скопируйте их в файл настроек, затем просмотрите каждое правило в соответствии с вашим конвейером и допустимостью риска.

140 145 

141## Проверьте значения по умолчанию и вашу эффективную конфигурацию146## Проверьте значения по умолчанию и вашу эффективную конфигурацию

142 147 

143Три подкоманды CLI помогают вам проверить и подтвердить вашу конфигурацию.148Три подкоманды CLI помогают вам проверить и подтвердить вашу конфигурацию.

144 149 

145Выведите встроенные правила `environment`, `allow` и `soft_deny` как JSON:150Выведите встроенные правила `environment`, `allow`, `soft_deny` и `hard_deny` как JSON:

146 151 

147```bash theme={null}152```bash theme={null}

148claude auto-mode defaults153claude auto-mode defaults


154claude auto-mode config159claude auto-mode config

155```160```

156 161 

157Получите отзыв AI о ваших пользовательских правилах `allow` и `soft_deny`:162Получите отзыв AI о ваших пользовательских правилах `allow`, `soft_deny` и `hard_deny`:

158 163 

159```bash theme={null}164```bash theme={null}

160claude auto-mode critique165claude auto-mode critique

commands.md +3 −2

Details

46| `/btw <question>` | Задать быстрый [побочный вопрос](/ru/interactive-mode#side-questions-with-%2Fbtw) без добавления в беседу |46| `/btw <question>` | Задать быстрый [побочный вопрос](/ru/interactive-mode#side-questions-with-%2Fbtw) без добавления в беседу |

47| `/chrome` | Настроить параметры [Claude в Chrome](/ru/chrome) |47| `/chrome` | Настроить параметры [Claude в Chrome](/ru/chrome) |

48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/ru/skills#bundled-skills).** Загрузить справочный материал Claude API для языка вашего проекта (Python, TypeScript, Java, Go, Ruby, C#, PHP или cURL) и справочник Managed Agents. Охватывает использование инструментов, потоковую передачу, пакеты, структурированные выходы и распространенные ошибки. Также активируется автоматически, когда ваш код импортирует `anthropic` или `@anthropic-ai/sdk`. Запустите `/claude-api migrate` для обновления существующего кода Claude API на более новую модель: Claude спрашивает, какие файлы сканировать и какую модель выбрать, затем обновляет ID моделей, конфигурацию thinking и другие параметры, которые изменились между версиями. Запустите `/claude-api managed-agents-onboard` для интерактивного пошагового руководства, которое создает новый Managed Agent с нуля |48| `/claude-api [migrate\|managed-agents-onboard]` | **[Skill](/ru/skills#bundled-skills).** Загрузить справочный материал Claude API для языка вашего проекта (Python, TypeScript, Java, Go, Ruby, C#, PHP или cURL) и справочник Managed Agents. Охватывает использование инструментов, потоковую передачу, пакеты, структурированные выходы и распространенные ошибки. Также активируется автоматически, когда ваш код импортирует `anthropic` или `@anthropic-ai/sdk`. Запустите `/claude-api migrate` для обновления существующего кода Claude API на более новую модель: Claude спрашивает, какие файлы сканировать и какую модель выбрать, затем обновляет ID моделей, конфигурацию thinking и другие параметры, которые изменились между версиями. Запустите `/claude-api managed-agents-onboard` для интерактивного пошагового руководства, которое создает новый Managed Agent с нуля |

49| `/clear` | Начать новую беседу с пустым контекстом. Предыдущая беседа остается доступной в `/resume`. Чтобы освободить контекст при продолжении той же беседы, используйте `/compact`. Псевдонимы: `/reset`, `/new` |49| `/clear [name]` | Начать новую беседу с пустым контекстом. Предыдущая беседа остается доступной в `/resume`. Передайте имя для обозначения предыдущей беседы в выборщике `/resume`. Чтобы освободить контекст при продолжении той же беседы, используйте `/compact`. Псевдонимы: `/reset`, `/new` |

50| `/color [color\|default]` | Установить цвет строки приглашения для текущего сеанса. Доступные цвета: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Используйте `default` для сброса, или запустите без аргумента для выбора случайного цвета. Когда подключен [Remote Control](/ru/remote-control), цвет синхронизируется с claude.ai/code |50| `/color [color\|default]` | Установить цвет строки приглашения для текущего сеанса. Доступные цвета: `red`, `blue`, `green`, `yellow`, `purple`, `orange`, `pink`, `cyan`. Используйте `default` для сброса, или запустите без аргумента для выбора случайного цвета. Когда подключен [Remote Control](/ru/remote-control), цвет синхронизируется с claude.ai/code |

51| `/compact [instructions]` | Освободить контекст путем суммирования беседы до сих пор. Опционально передайте инструкции фокуса для сводки. См. [как сжатие обрабатывает правила, skills и файлы памяти](/ru/context-window#what-survives-compaction) |51| `/compact [instructions]` | Освободить контекст путем суммирования беседы до сих пор. Опционально передайте инструкции фокуса для сводки. См. [как сжатие обрабатывает правила, skills и файлы памяти](/ru/context-window#what-survives-compaction) |

52| `/config` | Открыть интерфейс [Параметры](/ru/settings) для настройки темы, модели, [стиля вывода](/ru/output-styles) и других предпочтений. Псевдоним: `/settings` |52| `/config` | Открыть интерфейс [Параметры](/ru/settings) для настройки темы, модели, [стиля вывода](/ru/output-styles) и других предпочтений. Псевдоним: `/settings` |

53| `/context` | Визуализировать текущее использование контекста в виде цветной сетки. Показывает предложения по оптимизации для инструментов, требующих много контекста, утечек памяти и предупреждений о емкости |53| `/context [all]` | Визуализировать текущее использование контекста в виде цветной сетки. Показывает предложения по оптимизации для инструментов, требующих много контекста, утечек памяти и предупреждений о емкости. В [полноэкранном режиме](/ru/fullscreen) разбивка по элементам свернута, чтобы сетка оставалась видимой. Передайте `all` для развертывания |

54| `/copy [N]` | Скопировать последний ответ ассистента в буфер обмена. Передайте число `N` для копирования N-го последнего ответа: `/copy 2` копирует второй с конца. Когда присутствуют блоки кода, показывает интерактивный выбор для выбора отдельных блоков или полного ответа. Нажмите `w` в выборщике для записи выделения в файл вместо буфера обмена, что полезно при работе через SSH |54| `/copy [N]` | Скопировать последний ответ ассистента в буфер обмена. Передайте число `N` для копирования N-го последнего ответа: `/copy 2` копирует второй с конца. Когда присутствуют блоки кода, показывает интерактивный выбор для выбора отдельных блоков или полного ответа. Нажмите `w` в выборщике для записи выделения в файл вместо буфера обмена, что полезно при работе через SSH |

55| `/cost` | Псевдоним для `/usage` |55| `/cost` | Псевдоним для `/usage` |

56| `/debug [description]` | **[Skill](/ru/skills#bundled-skills).** Включить отладочное логирование для текущего сеанса и устранить проблемы путем чтения журнала отладки сеанса. Отладочное логирование отключено по умолчанию, если вы не запустили с `claude --debug`, поэтому запуск `/debug` в середине сеанса начинает захватывать логи с этого момента. Опционально опишите проблему, чтобы сосредоточить анализ |56| `/debug [description]` | **[Skill](/ru/skills#bundled-skills).** Включить отладочное логирование для текущего сеанса и устранить проблемы путем чтения журнала отладки сеанса. Отладочное логирование отключено по умолчанию, если вы не запустили с `claude --debug`, поэтому запуск `/debug` в середине сеанса начинает захватывать логи с этого момента. Опционально опишите проблему, чтобы сосредоточить анализ |


88| `/powerup` | Открыть для себя функции Claude Code через быстрые интерактивные уроки с анимированными демонстрациями |88| `/powerup` | Открыть для себя функции Claude Code через быстрые интерактивные уроки с анимированными демонстрациями |

89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Удалено в v2.1.91. Попросите Claude напрямую просмотреть комментарии pull request. В более ранних версиях получает и отображает комментарии из запроса на слияние GitHub; автоматически обнаруживает PR для текущей ветви или передайте URL или номер PR. Требует CLI `gh` |89| `/pr-comments [PR]` | {/* max-version: 2.1.90 */}Удалено в v2.1.91. Попросите Claude напрямую просмотреть комментарии pull request. В более ранних версиях получает и отображает комментарии из запроса на слияние GitHub; автоматически обнаруживает PR для текущей ветви или передайте URL или номер PR. Требует CLI `gh` |

90| `/privacy-settings` | Просмотреть и обновить параметры конфиденциальности. Доступно только для подписчиков планов Pro и Max |90| `/privacy-settings` | Просмотреть и обновить параметры конфиденциальности. Доступно только для подписчиков планов Pro и Max |

91| `/radio` | Открыть Claude FM lo-fi радио в вашем браузере. Выводит URL потока, когда браузер недоступен. Недоступно на Bedrock, Vertex или Foundry |

91| `/recap` | Создать однострочную сводку текущего сеанса по требованию. См. [Сводка сеанса](/ru/interactive-mode#session-recap) для автоматической сводки, которая появляется после вашего отсутствия |92| `/recap` | Создать однострочную сводку текущего сеанса по требованию. См. [Сводка сеанса](/ru/interactive-mode#session-recap) для автоматической сводки, которая появляется после вашего отсутствия |

92| `/release-notes` | Просмотреть журнал изменений в интерактивном выборщике версий. Выберите конкретную версию для просмотра ее примечаний к выпуску или выберите отображение всех версий |93| `/release-notes` | Просмотреть журнал изменений в интерактивном выборщике версий. Выберите конкретную версию для просмотра ее примечаний к выпуску или выберите отображение всех версий |

93| `/reload-plugins` | Перезагрузить все активные [plugins](/ru/plugins) для применения ожидающих изменений без перезагрузки. Сообщает количество для каждого перезагруженного компонента и отмечает любые ошибки загрузки |94| `/reload-plugins` | Перезагрузить все активные [plugins](/ru/plugins) для применения ожидающих изменений без перезагрузки. Сообщает количество для каждого перезагруженного компонента и отмечает любые ошибки загрузки |

env-vars.md +2 −0

Details

116| `CLAUDE_CODE_MAX_RETRIES` | Переопределить количество попыток повтора неудачных запросов API (по умолчанию: 10) |116| `CLAUDE_CODE_MAX_RETRIES` | Переопределить количество попыток повтора неудачных запросов API (по умолчанию: 10) |

117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Максимальное количество инструментов только для чтения и subagents, которые могут выполняться параллельно (по умолчанию: 10). Более высокие значения увеличивают параллелизм, но потребляют больше ресурсов |117| `CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY` | Максимальное количество инструментов только для чтения и subagents, которые могут выполняться параллельно (по умолчанию: 10). Более высокие значения увеличивают параллелизм, но потребляют больше ресурсов |

118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Установите на `1`, чтобы порождать stdio MCP servers с только безопасной базовой средой плюс настроенная `env` сервера, вместо наследования вашей среды оболочки |118| `CLAUDE_CODE_MCP_ALLOWLIST_ENV` | Установите на `1`, чтобы порождать stdio MCP servers с только безопасной базовой средой плюс настроенная `env` сервера, вместо наследования вашей среды оболочки |

119| `CLAUDE_CODE_NATIVE_CURSOR` | Установите на `1`, чтобы показать собственный курсор терминала в позиции ввода вместо нарисованного блока. Курсор соблюдает параметры мигания, формы и фокуса терминала |

119| `CLAUDE_CODE_NEW_INIT` | Установите на `1`, чтобы `/init` запустил интерактивный поток настройки. Поток спрашивает, какие файлы генерировать, включая CLAUDE.md, skills и hooks, перед исследованием кодовой базы и их написанием. Без этой переменной `/init` автоматически генерирует CLAUDE.md без запроса. |120| `CLAUDE_CODE_NEW_INIT` | Установите на `1`, чтобы `/init` запустил интерактивный поток настройки. Поток спрашивает, какие файлы генерировать, включая CLAUDE.md, skills и hooks, перед исследованием кодовой базы и их написанием. Без этой переменной `/init` автоматически генерирует CLAUDE.md без запроса. |

120| `CLAUDE_CODE_NO_FLICKER` | Установите на `1`, чтобы включить [полноэкранный режим](/ru/fullscreen), исследовательский предпросмотр, который уменьшает мерцание и сохраняет память плоской в длинных разговорах. Эквивалент параметра [`tui`](/ru/settings#available-settings); вы также можете переключаться с помощью `/tui fullscreen` |121| `CLAUDE_CODE_NO_FLICKER` | Установите на `1`, чтобы включить [полноэкранный режим](/ru/fullscreen), исследовательский предпросмотр, который уменьшает мерцание и сохраняет память плоской в длинных разговорах. Эквивалент параметра [`tui`](/ru/settings#available-settings); вы также можете переключаться с помощью `/tui fullscreen` |

121| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | OAuth токен обновления для аутентификации Claude.ai. При установке `claude auth login` обменивает этот токен напрямую вместо открытия браузера. Требует `CLAUDE_CODE_OAUTH_SCOPES`. Полезно для предоставления аутентификации в автоматизированных сред |122| `CLAUDE_CODE_OAUTH_REFRESH_TOKEN` | OAuth токен обновления для аутентификации Claude.ai. При установке `claude auth login` обменивает этот токен напрямую вместо открытия браузера. Требует `CLAUDE_CODE_OAUTH_SCOPES`. Полезно для предоставления аутентификации в автоматизированных сред |


191| `DISABLE_TELEMETRY` | Установите на `1`, чтобы отказаться от телеметрии. События телеметрии не включают данные пользователя, такие как код, пути к файлам или команды bash |192| `DISABLE_TELEMETRY` | Установите на `1`, чтобы отказаться от телеметрии. События телеметрии не включают данные пользователя, такие как код, пути к файлам или команды bash |

192| `DISABLE_UPDATES` | Установите на `1`, чтобы заблокировать все обновления, включая ручную команду `claude update` и `claude install`. Более строгий, чем `DISABLE_AUTOUPDATER`. Используйте при распространении Claude Code через ваши собственные каналы и пользователи не должны самостоятельно обновляться |193| `DISABLE_UPDATES` | Установите на `1`, чтобы заблокировать все обновления, включая ручную команду `claude update` и `claude install`. Более строгий, чем `DISABLE_AUTOUPDATER`. Используйте при распространении Claude Code через ваши собственные каналы и пользователи не должны самостоятельно обновляться |

193| `DISABLE_UPGRADE_COMMAND` | Установите на `1`, чтобы скрыть команду `/upgrade` |194| `DISABLE_UPGRADE_COMMAND` | Установите на `1`, чтобы скрыть команду `/upgrade` |

195| `DO_NOT_TRACK` | Установите на `1`, чтобы отказаться от телеметрии. Эквивалент установки `DISABLE_TELEMETRY`. Признаётся как [стандартное кроссплатформенное соглашение](https://consoledonottrack.com/) |

194| `ENABLE_CLAUDEAI_MCP_SERVERS` | Установите на `false`, чтобы отключить [MCP servers claude.ai](/ru/mcp#use-mcp-servers-from-claude-ai) в Claude Code. Включено по умолчанию для вошедших в систему пользователей |196| `ENABLE_CLAUDEAI_MCP_SERVERS` | Установите на `false`, чтобы отключить [MCP servers claude.ai](/ru/mcp#use-mcp-servers-from-claude-ai) в Claude Code. Включено по умолчанию для вошедших в систему пользователей |

195| `ENABLE_PROMPT_CACHING_1H` | Установите на `1`, чтобы запросить TTL кэша приглашений в 1 час вместо стандартных 5 минут. Предназначено для пользователей ключа API, [Bedrock](/ru/amazon-bedrock), [Vertex](/ru/google-vertex-ai) и [Foundry](/ru/microsoft-foundry). Пользователи подписки получают TTL в 1 час автоматически. Записи кэша в 1 час выставляются по более высокой ставке |197| `ENABLE_PROMPT_CACHING_1H` | Установите на `1`, чтобы запросить TTL кэша приглашений в 1 час вместо стандартных 5 минут. Предназначено для пользователей ключа API, [Bedrock](/ru/amazon-bedrock), [Vertex](/ru/google-vertex-ai) и [Foundry](/ru/microsoft-foundry). Пользователи подписки получают TTL в 1 час автоматически. Записи кэша в 1 час выставляются по более высокой ставке |

196| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Устарело. Используйте `ENABLE_PROMPT_CACHING_1H` вместо этого |198| `ENABLE_PROMPT_CACHING_1H_BEDROCK` | Устарело. Используйте `ENABLE_PROMPT_CACHING_1H` вместо этого |

errors.md +16 −0

Details

31| `Not logged in · Please run /login` | [Authentication](#not-logged-in) |31| `Not logged in · Please run /login` | [Authentication](#not-logged-in) |

32| `Invalid API key` | [Authentication](#invalid-api-key) |32| `Invalid API key` | [Authentication](#invalid-api-key) |

33| `This organization has been disabled` | [Authentication](#this-organization-has-been-disabled) |33| `This organization has been disabled` | [Authentication](#this-organization-has-been-disabled) |

34| `Routines are disabled by your organization's policy` | [Authentication](#routines-are-disabled-by-your-organizations-policy) |

34| `OAuth token revoked` / `OAuth token has expired` | [Authentication](#oauth-token-revoked-or-expired) |35| `OAuth token revoked` / `OAuth token has expired` | [Authentication](#oauth-token-revoked-or-expired) |

35| `does not meet scope requirement user:profile` | [Authentication](#oauth-scope-requirement) |36| `does not meet scope requirement user:profile` | [Authentication](#oauth-scope-requirement) |

36| `Unable to connect to API` | [Network](#unable-to-connect-to-api) |37| `Unable to connect to API` | [Network](#unable-to-connect-to-api) |


252* Запустите `/status` после этого, чтобы подтвердить, что активные учетные данные — это ваша подписка253* Запустите `/status` после этого, чтобы подтвердить, что активные учетные данные — это ваша подписка

253* Если переменная окружения не установлена и ошибка сохраняется, отключенная организация — это та, которая привязана к вашему `/login`. Свяжитесь с поддержкой или войдите с другой учетной записью.254* Если переменная окружения не установлена и ошибка сохраняется, отключенная организация — это та, которая привязана к вашему `/login`. Свяжитесь с поддержкой или войдите с другой учетной записью.

254 255 

256### Routines are disabled by your organization's policy

257 

258Ваш администратор Team или Enterprise отключил routines на уровне организации. Ошибка появляется при попытке создать или запустить routine, включая из `/schedule` и пользовательского интерфейса [Routines](/ru/routines) на claude.ai/code.

259 

260```text theme={null}

261Routines are disabled by your organization's policy.

262```

263 

264Это параметр на стороне сервера, поэтому его нельзя переопределить из локальных параметров, переменных окружения или флагов CLI.

265 

266**Что делать:**

267 

268* Попросите вашего администратора включить переключатель **Routines** на [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code)

269* Для одноразовой запланированной работы, которая не требует routines на уровне организации, см. [scheduled tasks](/ru/scheduled-tasks)

270 

255### OAuth token revoked or expired271### OAuth token revoked or expired

256 272 

257Ваш сохраненный вход больше не действителен. Отозванный токен означает, что вы вышли везде или администратор удалил доступ; истекший токен означает, что автоматическое обновление не удалось в середине сеанса.273Ваш сохраненный вход больше не действителен. Отозванный токен означает, что вы вышли везде или администратор удалил доступ; истекший токен означает, что автоматическое обновление не удалось в середине сеанса.

Details

289 289 

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

291 291 

292* Нажмите **Tab** или **Right arrow** для принятия предложения, или нажмите **Enter** для принятия и отправки292* Нажмите **Tab** или **Right arrow** для размещения предложения в поле ввода запроса, затем **Enter** для отправки

293* Начните печатать для отклонения293* Начните печатать для отклонения

294 294 

295Предложение запускается как фоновый запрос, который повторно использует кэш запроса родительского разговора, поэтому дополнительная стоимость минимальна. Claude Code пропускает генерацию предложений, когда кэш холодный, чтобы избежать ненужных затрат.295Предложение запускается как фоновый запрос, который повторно использует кэш запроса родительского разговора, поэтому дополнительная стоимость минимальна. Claude Code пропускает генерацию предложений, когда кэш холодный, чтобы избежать ненужных затрат.

mcp.md +2 −0

Details

265 --header "Authorization: Bearer your-token"265 --header "Authorization: Bearer your-token"

266```266```

267 267 

268При настройке MCP servers через JSON в `.mcp.json`, `~/.claude.json` или `claude mcp add-json`, поле `type` принимает `streamable-http` как псевдоним для `http`. Спецификация MCP использует имя `streamable-http` для этого транспорта, поэтому конфигурации, скопированные из документации server, работают без изменений.

269 

268### Вариант 2: Добавьте удаленный SSE server270### Вариант 2: Добавьте удаленный SSE server

269 271 

270<Warning>272<Warning>

permissions.md +7 −0

Details

210* `Edit(//tmp/scratch.txt)`: редактирование абсолютного пути `/tmp/scratch.txt`210* `Edit(//tmp/scratch.txt)`: редактирование абсолютного пути `/tmp/scratch.txt`

211* `Read(src/**)`: чтение из `<current-directory>/src/`211* `Read(src/**)`: чтение из `<current-directory>/src/`

212 212 

213Правило совпадает только с файлами под его якорем, поэтому якорь определяет, насколько далеко распространяется правило deny. Голые имена файлов следуют семантике gitignore и совпадают на любой глубине, поэтому `Read(.env)` и `Read(**/.env)` эквивалентны:

214 

215| Правило deny | Блокирует | Не блокирует |

216| -------------------------------- | ------------------------------------------- | -------------------------------------------------- |

217| `Read(.env)` или `Read(**/.env)` | любой `.env` в текущем каталоге или под ним | `.env` в родительском каталоге или другом проекте |

218| `Read(//**/.env)` | любой `.env` в любом месте файловой системы | ничего; правило привязано к корню файловой системы |

219 

213<Note>220<Note>

214 В шаблонах gitignore `*` совпадает с файлами в одном каталоге, а `**` совпадает рекурсивно по каталогам. Чтобы разрешить весь доступ к файлам, используйте только имя инструмента без скобок: `Read`, `Edit` или `Write`.221 В шаблонах gitignore `*` совпадает с файлами в одном каталоге, а `**` совпадает рекурсивно по каталогам. Чтобы разрешить весь доступ к файлам, используйте только имя инструмента без скобок: `Read`, `Edit` или `Write`.

215</Note>222</Note>

Details

423 423 

424| Поле | Тип | Описание | Пример |424| Поле | Тип | Описание | Пример |

425| :---------------------- | :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |425| :---------------------- | :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- |

426| `skills` | string\|array | Пользовательские каталоги skills, содержащие `<name>/SKILL.md` (заменяет по умолчанию `skills/`) | `"./custom/skills/"` |426| `skills` | string\|array | Пользовательские каталоги skills, содержащие `<name>/SKILL.md` (в дополнение к по умолчанию `skills/`) | `"./custom/skills/"` |

427| `commands` | string\|array | Пользовательские плоские файлы `.md` skill или каталоги (заменяет по умолчанию `commands/`) | `"./custom/cmd.md"` или `["./cmd1.md"]` |427| `commands` | string\|array | Пользовательские плоские файлы `.md` skill или каталоги (заменяет по умолчанию `commands/`) | `"./custom/cmd.md"` или `["./cmd1.md"]` |

428| `agents` | string\|array | Пользовательские файлы агентов (заменяет по умолчанию `agents/`) | `"./custom/agents/reviewer.md"` |428| `agents` | string\|array | Пользовательские файлы агентов (заменяет по умолчанию `agents/`) | `"./custom/agents/reviewer.md"` |

429| `hooks` | string\|array\|object | Пути конфигурации hooks или встроенная конфигурация | `"./my-extra-hooks.json"` |429| `hooks` | string\|array\|object | Пути конфигурации hooks или встроенная конфигурация | `"./my-extra-hooks.json"` |


510 510 

511### Правила поведения пути511### Правила поведения пути

512 512 

513Для `skills`, `commands`, `agents`, `outputStyles`, `experimental.themes` и `experimental.monitors` пользовательский путь заменяет путь по умолчанию. Если манифест указывает `skills`, каталог по умолчанию `skills/` не сканируется; если он указывает `experimental.monitors`, по умолчанию `monitors/monitors.json` не загружается. [Hooks](#hooks), [MCP servers](#mcp-servers) и [LSP servers](#lsp-servers) имеют другую семантику для обработки нескольких источников.513Замена ли пользовательский путь или расширяет каталог по умолчанию плагина, зависит от поля:

514 

515* **Заменяет по умолчанию**: `commands`, `agents`, `outputStyles`, `experimental.themes`, `experimental.monitors`. Например, когда манифест указывает `commands`, каталог по умолчанию `commands/` не сканируется. Чтобы сохранить по умолчанию и добавить больше, перечислите его явно: `"commands": ["./commands/", "./extras/"]`

516* **Добавляет к по умолчанию**: `skills`. Каталог по умолчанию `skills/` всегда сканируется, и каталоги, перечисленные в `skills`, загружаются вместе с ним

517* **Собственные правила слияния**: [hooks](#hooks), [MCP servers](#mcp-servers) и [LSP servers](#lsp-servers). Смотрите каждый раздел для того, как несколько источников объединяются

518 

519Для всех полей пути:

514 520 

515* Все пути должны быть относительны к корню плагина и начинаться с `./`521* Все пути должны быть относительны к корню плагина и начинаться с `./`

516* Компоненты из пользовательских путей используют те же правила именования и пространства имён522* Компоненты из пользовательских путей используют те же правила именования и пространства имён

517* Несколько путей можно указать как массивы523* Несколько путей можно указать как массивы

518* Чтобы сохранить каталог по умолчанию и добавить дополнительные пути для skills, commands, agents или output styles, включите значение по умолчанию в ваш массив: `"skills": ["./skills/", "./extras/"]`

519* Когда путь skill указывает на каталог, который содержит `SKILL.md` напрямую, например `"skills": ["./"]`, указывающий на корень плагина, поле frontmatter `name` в `SKILL.md` определяет имя вызова skill. Это обеспечивает стабильное имя независимо от каталога установки. Если `name` не установлен в frontmatter, в качестве резервного варианта используется имя каталога.524* Когда путь skill указывает на каталог, который содержит `SKILL.md` напрямую, например `"skills": ["./"]`, указывающий на корень плагина, поле frontmatter `name` в `SKILL.md` определяет имя вызова skill. Это обеспечивает стабильное имя независимо от каталога установки. Если `name` не установлен в frontmatter, в качестве резервного варианта используется имя каталога.

520 525 

521**Примеры путей**:526**Примеры путей**:

routines.md +8 −0

Details

22 22 

23Рутины доступны в планах Pro, Max, Team и Enterprise с включенным [Claude Code в веб-версии](/ru/claude-code-on-the-web). Создавайте и управляйте ими на [claude.ai/code/routines](https://claude.ai/code/routines) или из CLI с помощью `/schedule`.23Рутины доступны в планах Pro, Max, Team и Enterprise с включенным [Claude Code в веб-версии](/ru/claude-code-on-the-web). Создавайте и управляйте ими на [claude.ai/code/routines](https://claude.ai/code/routines) или из CLI с помощью `/schedule`.

24 24 

25Администраторы Team и Enterprise могут отключить рутины для всех членов с помощью переключателя Routines на [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code). При отключении существующие рутины перестают работать, и члены не могут создавать новые.

26 

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

26 28 

27## Примеры использования29## Примеры использования


360 362 

361Разовые запуски не учитываются в дневном лимите рутин. Они снижают ваше обычное использование подписки как любой другой сеанс, но они освобождены от допуска на дневные запуски рутин на аккаунт.363Разовые запуски не учитываются в дневном лимите рутин. Они снижают ваше обычное использование подписки как любой другой сеанс, но они освобождены от допуска на дневные запуски рутин на аккаунт.

362 364 

365## Troubleshooting

366 

367### "Routines are disabled by your organization's policy"

368 

369Ваш администратор Team или Enterprise, вероятно, отключил переключатель **Routines** на [claude.ai/admin-settings/claude-code](https://claude.ai/admin-settings/claude-code). Это параметр организации на стороне сервера, поэтому его нельзя переопределить из вашей локальной конфигурации. Свяжитесь с вашим администратором, чтобы запросить включение рутин для вашей организации.

370 

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

364 372 

365* [`/loop` and in-session scheduling](/ru/scheduled-tasks): запланируйте локальные задачи в открытом сеансе CLI373* [`/loop` and in-session scheduling](/ru/scheduled-tasks): запланируйте локальные задачи в открытом сеансе CLI

security.md +1 −1

Details

59* **Одобрение сетевых запросов**: Инструменты, которые делают сетевые запросы, требуют одобрения пользователя по умолчанию59* **Одобрение сетевых запросов**: Инструменты, которые делают сетевые запросы, требуют одобрения пользователя по умолчанию

60* **Изолированные контекстные окна**: Web fetch использует отдельное контекстное окно, чтобы избежать инъекции потенциально вредоносных подсказок60* **Изолированные контекстные окна**: Web fetch использует отдельное контекстное окно, чтобы избежать инъекции потенциально вредоносных подсказок

61* **Проверка доверия**: Первые запуски кодовой базы и новые MCP servers требуют проверки доверия61* **Проверка доверия**: Первые запуски кодовой базы и новые MCP servers требуют проверки доверия

62 * Примечание: Проверка доверия отключена при неинтерактивном запуске с флагом `-p`62 * Примечание: Проверка доверия отключена при неинтерактивном запуске с флагом `-p`. Исключением является [`--worktree`](/ru/worktrees), который по-прежнему требует, чтобы доверие было принято для каталога

63* **Обнаружение инъекций команд**: Подозрительные bash команды требуют ручного одобрения даже если они были ранее добавлены в список разрешений63* **Обнаружение инъекций команд**: Подозрительные bash команды требуют ручного одобрения даже если они были ранее добавлены в список разрешений

64* **Сопоставление с отказом по умолчанию**: Несопоставленные команды по умолчанию требуют ручного одобрения64* **Сопоставление с отказом по умолчанию**: Несопоставленные команды по умолчанию требуют ручного одобрения

65* **Описания на естественном языке**: Сложные bash команды включают объяснения для понимания пользователем65* **Описания на естественном языке**: Сложные bash команды включают объяснения для понимания пользователем

Details

41 </Step>41 </Step>

42 42 

43 <Step title="Определите ваши параметры">43 <Step title="Определите ваши параметры">

44 Добавьте вашу конфигурацию как JSON. Все [параметры, доступные в `settings.json`](/ru/settings#available-settings), поддерживаются, включая [hooks](/ru/hooks), [переменные окружения](/ru/env-vars) и [параметры только для управления](/ru/permissions#managed-only-settings), такие как `allowManagedPermissionRulesOnly`.44 Добавьте вашу конфигурацию как JSON. Все [параметры, доступные в `settings.json`](/ru/settings#available-settings), поддерживаются, за исключением тех, которые ограничены доставкой политики на уровне ОС; см. [Текущие ограничения](#current-limitations) для этого краткого списка. Это включает [hooks](/ru/hooks), [переменные окружения](/ru/env-vars) и [параметры только для управления](/ru/permissions#managed-only-settings), такие как `allowManagedPermissionRulesOnly`.

45 45 

46 Этот пример применяет список отказа в разрешениях, предотвращает обход разрешений пользователями и ограничивает правила разрешений только теми, которые определены в управляемых параметрах:46 Этот пример применяет список отказа в разрешениях, предотвращает обход разрешений пользователями и ограничивает правила разрешений только теми, которые определены в управляемых параметрах:

47 47 


93 }93 }

94 ```94 ```

95 95 

96 Поскольку hooks выполняют команды оболочки, пользователи видят [диалог одобрения безопасности](#security-approval-dialogs) перед их применением. Смотрите [Настройка режима автоматизации](/ru/auto-mode-config) для информации о том, как записи `autoMode` влияют на то, что блокирует классификатор, и важные предупреждения о полях `allow` и `soft_deny`.96 Поскольку hooks выполняют команды оболочки, пользователи видят [диалог одобрения безопасности](#security-approval-dialogs) перед их применением. Смотрите [Настройка режима автоматизации](/ru/auto-mode-config) для информации о том, как записи `autoMode` влияют на то, что блокирует классификатор, и важные предупреждения о полях `environment`, `allow`, `soft_deny` и `hard_deny`.

97 </Step>97 </Step>

98 98 

99 <Step title="Сохраните и разверните">99 <Step title="Сохраните и разверните">


124 124 

125* Параметры применяются одинаково ко всем пользователям в организации. Конфигурации для отдельных групп еще не поддерживаются.125* Параметры применяются одинаково ко всем пользователям в организации. Конфигурации для отдельных групп еще не поддерживаются.

126* [Конфигурации MCP server](/ru/mcp#managed-mcp-configuration) не могут распространяться через параметры, управляемые сервером.126* [Конфигурации MCP server](/ru/mcp#managed-mcp-configuration) не могут распространяться через параметры, управляемые сервером.

127* Параметры, ограниченные источниками политики на уровне ОС, такие как `policyHelper` и `wslInheritsWindowsSettings`, не учитываются. Разверните их через MDM или системный файл `managed-settings.json` вместо этого.

127 128 

128## Доставка параметров129## Доставка параметров

129 130 

settings.md +28 −1

Details

169| `attribution` | Настройте атрибуцию для коммитов git и pull requests. См. [Параметры атрибуции](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |169| `attribution` | Настройте атрибуцию для коммитов git и pull requests. См. [Параметры атрибуции](#attribution-settings) | `{"commit": "🤖 Generated with Claude Code", "pr": ""}` |

170| `autoMemoryDirectory` | Пользовательский каталог для хранения [автоматической памяти](/ru/memory#storage-location). Принимает абсолютный путь или путь с префиксом `~/`. Принимается из политики и параметров пользователя, а также из флага `--settings`. Не принимается из параметров проекта или локальных параметров, так как клонированный репозиторий может предоставить любой файл для перенаправления записей памяти в чувствительные местоположения | `"~/my-memory-dir"` |170| `autoMemoryDirectory` | Пользовательский каталог для хранения [автоматической памяти](/ru/memory#storage-location). Принимает абсолютный путь или путь с префиксом `~/`. Принимается из политики и параметров пользователя, а также из флага `--settings`. Не принимается из параметров проекта или локальных параметров, так как клонированный репозиторий может предоставить любой файл для перенаправления записей памяти в чувствительные местоположения | `"~/my-memory-dir"` |

171| `autoMemoryEnabled` | Включить [автоматическую память](/ru/memory#enable-or-disable-auto-memory). Когда `false`, Claude не читает и не записывает в каталог автоматической памяти. По умолчанию: `true`. Вы также можете переключить это с помощью `/memory` во время сеанса. Чтобы отключить через переменную окружения, установите [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/ru/env-vars) в `env` | `false` |171| `autoMemoryEnabled` | Включить [автоматическую память](/ru/memory#enable-or-disable-auto-memory). Когда `false`, Claude не читает и не записывает в каталог автоматической памяти. По умолчанию: `true`. Вы также можете переключить это с помощью `/memory` во время сеанса. Чтобы отключить через переменную окружения, установите [`CLAUDE_CODE_DISABLE_AUTO_MEMORY`](/ru/env-vars) в `env` | `false` |

172| `autoMode` | Настройте, что классификатор [автоматического режима](/ru/permission-modes#eliminate-prompts-with-auto-mode) блокирует и разрешает. Содержит массивы `environment`, `allow` и `soft_deny` правил в виде текста. Включите буквальную строку `"$defaults"` в массив для наследования встроенных правил в этой позиции. См. [Настройте автоматический режим](/ru/auto-mode-config). Не читается из общих параметров проекта | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |172| `autoMode` | Настройте, что классификатор [автоматического режима](/ru/permission-modes#eliminate-prompts-with-auto-mode) блокирует и разрешает. Содержит массивы `environment`, `allow`, `soft_deny` и `hard_deny` правил в виде текста. Включите буквальную строку `"$defaults"` в массив для наследования встроенных правил в этой позиции. См. [Настройте автоматический режим](/ru/auto-mode-config). Не читается из общих параметров проекта | `{"soft_deny": ["$defaults", "Never run terraform apply"]}` |

173| `autoScrollEnabled` | В [fullscreen rendering](/ru/fullscreen), следить за новым выводом в конец разговора. По умолчанию: `true`. Появляется в `/config` как **Auto-scroll**. Запросы разрешений по-прежнему прокручиваются в поле зрения, когда это отключено | `false` |173| `autoScrollEnabled` | В [fullscreen rendering](/ru/fullscreen), следить за новым выводом в конец разговора. По умолчанию: `true`. Появляется в `/config` как **Auto-scroll**. Запросы разрешений по-прежнему прокручиваются в поле зрения, когда это отключено | `false` |

174| `autoUpdatesChannel` | Канал выпуска для отслеживания обновлений. Используйте `"stable"` для версии, которая обычно примерно на неделю старше и пропускает версии с серьезными регрессиями, или `"latest"` (по умолчанию) для самого последнего выпуска. Чтобы полностью отключить автоматические обновления, установите [`DISABLE_AUTOUPDATER`](/ru/setup#disable-auto-updates) в `env` | `"stable"` |174| `autoUpdatesChannel` | Канал выпуска для отслеживания обновлений. Используйте `"stable"` для версии, которая обычно примерно на неделю старше и пропускает версии с серьезными регрессиями, или `"latest"` (по умолчанию) для самого последнего выпуска. Чтобы полностью отключить автоматические обновления, установите [`DISABLE_AUTOUPDATER`](/ru/setup#disable-auto-updates) в `env` | `"stable"` |

175| `availableModels` | Ограничить, какие модели пользователи могут выбрать через `/model`, `--model` или `ANTHROPIC_MODEL`. Не влияет на опцию Default. См. [Ограничить выбор модели](/ru/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |175| `availableModels` | Ограничить, какие модели пользователи могут выбрать через `/model`, `--model` или `ANTHROPIC_MODEL`. Не влияет на опцию Default. См. [Ограничить выбор модели](/ru/model-config#restrict-model-selection) | `["sonnet", "haiku"]` |


215| `permissions` | См. таблицу ниже для структуры разрешений. | |215| `permissions` | См. таблицу ниже для структуры разрешений. | |

216| `plansDirectory` | Настройте, где хранятся файлы плана. Путь относительно корня проекта. По умолчанию: `~/.claude/plans` | `"./plans"` |216| `plansDirectory` | Настройте, где хранятся файлы плана. Путь относительно корня проекта. По умолчанию: `~/.claude/plans` | `"./plans"` |

217| `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"` |

218| `policyHelper` | {/* min-version: 2.1.136 */}Развернутый администратором исполняемый файл, который вычисляет управляемые параметры динамически при запуске. Учитывается только из MDM или системного файла `managed-settings.json`. См. [Вычислить управляемые параметры с помощью помощника политики](#compute-managed-settings-with-a-policy-helper). Требует Claude Code v2.1.136 или позже | `{"path": "/usr/local/bin/claude-policy"}` |

218| `preferredNotifChannel` | Метод для уведомлений о завершении задачи и запросов разрешения: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"` или `"notifications_disabled"`. По умолчанию: `"auto"`, который отправляет уведомление рабочего стола в iTerm2, Ghostty и Kitty и ничего не делает в других терминалах. Установите `"terminal_bell"` для звонка в любом терминале. Появляется в `/config` как **Notifications**. См. [Получить звонок терминала или уведомление](/ru/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |219| `preferredNotifChannel` | Метод для уведомлений о завершении задачи и запросов разрешения: `"auto"`, `"terminal_bell"`, `"iterm2"`, `"iterm2_with_bell"`, `"kitty"`, `"ghostty"` или `"notifications_disabled"`. По умолчанию: `"auto"`, который отправляет уведомление рабочего стола в iTerm2, Ghostty и Kitty и ничего не делает в других терминалах. Установите `"terminal_bell"` для звонка в любом терминале. Появляется в `/config` как **Notifications**. См. [Получить звонок терминала или уведомление](/ru/terminal-config#get-a-terminal-bell-or-notification) | `"terminal_bell"` |

219| `prefersReducedMotion` | Уменьшить или отключить анимацию пользовательского интерфейса (спиннеры, shimmer, эффекты вспышки) для доступности | `true` |220| `prefersReducedMotion` | Уменьшить или отключить анимацию пользовательского интерфейса (спиннеры, shimmer, эффекты вспышки) для доступности | `true` |

220| `prUrlTemplate` | Шаблон URL для значка PR, показываемого в нижнем колонтитуле и в сводках результатов инструмента. Заменяет `{host}`, `{owner}`, `{repo}`, `{number}` и `{url}` из URL PR, сообщаемого `gh`. Используйте для указания ссылок PR на внутренний инструмент проверки кода вместо `github.com`. Не влияет на автоссылки `#123` в прозе Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |221| `prUrlTemplate` | Шаблон URL для значка PR, показываемого в нижнем колонтитуле и в сводках результатов инструмента. Заменяет `{host}`, `{owner}`, `{repo}`, `{number}` и `{url}` из URL PR, сообщаемого `gh`. Используйте для указания ссылок PR на внутренний инструмент проверки кода вместо `github.com`. Не влияет на автоссылки `#123` в прозе Claude | `"https://reviews.example.com/{owner}/{repo}/pull/{number}"` |


470}471}

471```472```

472 473 

474### Вычислить управляемые параметры с помощью помощника политики

475 

476Параметр `policyHelper` указывает на исполняемый файл, который вычисляет управляемые параметры при запуске, поэтому администраторы могут получить политику из состояния устройства, идентификации или удаленного сервиса вместо статического файла. Настройте его из MDM или системного файла `managed-settings.json`. Claude Code игнорирует `policyHelper`, когда он появляется в любой другой области, включая параметры пользователя, параметры проекта, куст реестра HKCU и [параметры, управляемые сервером](/ru/server-managed-settings).

477 

478Параметр принимает эти ключи:

479 

480| Ключ | Тип | Описание |

481| ------------------- | ------ | -------------------------------------------------------------------------------------------------------------------- |

482| `path` | string | Абсолютный путь к исполняемому файлу помощника |

483| `timeoutMs` | number | Как долго ждать помощника перед обработкой запуска как неудачного |

484| `refreshIntervalMs` | number | Как часто повторно запускать помощника в фоне. Установите на `0`, чтобы отключить обновление, или на минимум `60000` |

485 

486Помощник записывает конверт JSON в stdout. Поместите параметры под ключ `managedSettings` вместо верхнего уровня, так как объект параметров верхнего уровня анализируется с `managedSettings` неопределенным и не применяет ничего:

487 

488```json theme={null}

489{

490 "managedSettings": {

491 "permissions": { "deny": ["Read(//etc/secrets/**)"] }

492 },

493 "claudeMd": "# Organization context\n...",

494 "appendSystemPrompt": "Always cite the internal style guide."

495}

496```

497 

498Когда помощник выдает `managedSettings`, этот объект заменяет параметры, управляемые на основе файлов, для запуска. Когда помощник выходит с ненулевым кодом при запуске, Claude Code выводит ошибку и отказывается запуститься, поэтому помощник, которому нужна устойчивость к сбоям, должен обслуживать из собственного кэша и выходить с `0`.

499 

473### Приоритет параметров500### Приоритет параметров

474 501 

475Параметры применяются в порядке приоритета. От наивысшего к наименьшему:502Параметры применяются в порядке приоритета. От наивысшего к наименьшему:

whats-new.md +17 −1

Details

8 8 

9Еженедельный дайджест для разработчиков выделяет функции, которые с наибольшей вероятностью изменят способ вашей работы. Каждая запись включает исполняемый код, краткую демонстрацию и ссылку на полную документацию. Для каждого исправления ошибок и незначительного улучшения см. [журнал изменений](/ru/changelog).9Еженедельный дайджест для разработчиков выделяет функции, которые с наибольшей вероятностью изменят способ вашей работы. Каждая запись включает исполняемый код, краткую демонстрацию и ссылку на полную документацию. Для каждого исправления ошибок и незначительного улучшения см. [журнал изменений](/ru/changelog).

10 10 

11<Update label="Week 19" description="May 4–8, 2026" tags={["v2.1.128–v2.1.136"]}>

12 **Плагины загружаются из архивов `.zip` и URL-адресов**: `--plugin-dir` теперь принимает файлы `.zip`, а `--plugin-url` загружает архив плагина для текущего сеанса.

13 

14 Также на этой неделе: **`worktree.baseRef`** выбирает, будут ли новые worktrees ветвиться от удаленного значения по умолчанию или локального `HEAD`; **правила жесткого отрицания в режиме auto** блокируют действия безусловно независимо от исключений разрешения; и **hooks видят активный уровень усилий** через `effort.level` и `$CLAUDE_EFFORT`.

15 

16 [Прочитайте дайджест Week 19 →](/ru/whats-new/2026-w19)

17</Update>

18 

19<Update label="Week 18" description="April 27 – May 1, 2026" tags={["v2.1.120–v2.1.126"]}>

20 **Windows без Git Bash**: Git для Windows больше не требуется, и Claude Code использует PowerShell в качестве инструмента shell при отсутствии Bash.

21 

22 Также на этой неделе: **`claude ultrareview`** приносит облачный обзор кода в CI и скрипты; **`claude project purge`** очищает локальное состояние для проекта; и вставка **URL-адреса PR в `/resume`** находит сеанс, который его создал.

23 

24 [Прочитайте дайджест Week 18 →](/ru/whats-new/2026-w18)

25</Update>

26 

11<Update label="Week 17" description="April 20–24, 2026" tags={["v2.1.114–v2.1.119"]}>27<Update label="Week 17" description="April 20–24, 2026" tags={["v2.1.114–v2.1.119"]}>

12 **`/ultrareview`** открывается как общедоступный исследовательский предпросмотр: флот агентов по поиску ошибок работает в облаке, и результаты автоматически поступают обратно в ваш CLI или Desktop.28 **`/ultrareview`** открывается как общедоступный исследовательский предпросмотр: флот агентов по поиску ошибок работает в облаке, и результаты автоматически поступают обратно в ваш CLI или Desktop.

13 29 


19<Update label="Week 16" description="April 13–17, 2026" tags={["v2.1.105–v2.1.113"]}>35<Update label="Week 16" description="April 13–17, 2026" tags={["v2.1.105–v2.1.113"]}>

20 **Claude Opus 4.7** становится новым значением по умолчанию на Max и Team Premium с новым уровнем усилий `xhigh`, который является рекомендуемой настройкой для большинства работ по кодированию, и интерактивным ползунком `/effort` для его настройки.36 **Claude Opus 4.7** становится новым значением по умолчанию на Max и Team Premium с новым уровнем усилий `xhigh`, который является рекомендуемой настройкой для большинства работ по кодированию, и интерактивным ползунком `/effort` для его настройки.

21 37 

22 Также на этой неделе: **Routines** в Claude Code в веб-версии запускают шаблонные облачные агенты по расписанию, событию GitHub или вызову API; `/ultrareview` запускает параллельный многоагентный обзор кода в облаке; `/usage` показывает, что влияет на ваши лимиты; и CLI переходит на собственные двоичные файлы.38 Также на этой неделе: **Routines** в Claude Code в веб-версии запускают шаблонные облачные агенты по расписанию, событию GitHub или вызову API; **мобильные push-уведомления** отправляют уведомления на ваш телефон, когда длительная задача завершается или Claude нуждается в вас; `/usage` показывает, что влияет на ваши лимиты; и CLI переходит на собственные двоичные файлы.

23 39 

24 [Прочитайте дайджест Week 16 →](/ru/whats-new/2026-w16)40 [Прочитайте дайджест Week 16 →](/ru/whats-new/2026-w16)

25</Update>41</Update>

Details

4 4 

5# Неделя 16 · 13–17 апреля 20265# Неделя 16 · 13–17 апреля 2026

6 6 

7> Claude Opus 4.7 с новым уровнем усилий xhigh, Routines на Claude Code в веб-версии, /ultrareview для облачного анализа кода, /usage с разбивкой, показывающей, что ограничивает вас, и нативные бинарные файлы вместо упакованного JavaScript.7> Claude Opus 4.7 с новым уровнем усилий xhigh, Routines на Claude Code в веб-версии, мобильные push-уведомления, которые уведомляют ваш телефон, когда Claude нуждается в вас, /usage с разбивкой, показывающей, что ограничивает вас, и нативные бинарные файлы вместо упакованного JavaScript.

8 8 

9<div className="digest-meta">9<div className="digest-meta">

10 <span>Releases <a href="/ru/docs/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>10 <span>Releases <a href="/ru/docs/changelog#2-1-105">v2.1.105 → v2.1.113</a></span>


73 73 

74<div className="digest-feature">74<div className="digest-feature">

75 <div className="digest-feature-header">75 <div className="digest-feature-header">

76 <span className="digest-feature-title">/ultrareview</span>76 <span className="digest-feature-title">Мобильные push-уведомления</span>

77 <span className="digest-feature-pill">v2.1.111</span>77 <span className="digest-feature-pill">mobile</span>

78 </div>78 </div>

79 79 

80 <p className="digest-feature-lede">Комплексный анализ кода в облаке. Ultrareview разворачивает вашу ветку по параллельным рецензентам на Claude Code в веб-версии, запускает проход критики противника над каждой находкой и возвращает проверенный отчет о находках, пока ваш терминал остается свободным. Вызовите его без аргументов для анализа вашей текущей ветки или передайте номер PR для получения и анализа этого PR. Диалог запуска теперь показывает diffstat, чтобы вы знали, что идет вверх перед подтверждением.</p>80 <p className="digest-feature-lede">С подключенным <a href="/ru/docs/remote-control">Remote Control</a>, Claude может отправить push-уведомление на ваш телефон, когда длительная задача завершится или ему нужно решение для продолжения. Включите это с помощью "Push when Claude decides" в <code>/config</code>, или попросите его в вашей подсказке. Полезно, когда вы запускаете длительный запуск агента и хотите отойти от терминала.</p>

81 81 

82 <p className="digest-feature-try">Проверьте ветку, на которой вы находитесь:</p>82 <Frame>

83 83 <video autoPlay muted loop playsInline className="w-full" src="https://mintcdn.com/claude-code/uII1TETOZxBUZ3lB/images/whats-new/push-notifications.mp4?fit=max&auto=format&n=uII1TETOZxBUZ3lB&q=85&s=c91a967139596500cbdb581a53822ac1" data-path="images/whats-new/push-notifications.mp4" />

84 ```text Claude Code theme={null}84 </Frame>

85 > /ultrareview

86 ```

87 85 

88 <p className="digest-feature-try">Или укажите на PR:</p>86 <p className="digest-feature-try">Попросите Claude уведомить вас, когда он закончит:</p>

89 87 

90 ```text Claude Code theme={null}88 ```text Claude Code theme={null}

91 > /ultrareview 123489 > notify me when the tests pass

92 ```90 ```

93 91 

94 <a className="digest-feature-link" href="/ru/docs/ultrareview">Руководство Ultrareview</a>92 <a className="digest-feature-link" href="/ru/docs/remote-control#mobile-push-notifications">Remote Control: мобильные push-уведомления</a>

95</div>93</div>

96 94 

97<div className="digest-feature">95<div className="digest-feature">


116 <p className="digest-wins-title">Другие улучшения</p>114 <p className="digest-wins-title">Другие улучшения</p>

117 115 

118 <div className="digest-wins-grid">116 <div className="digest-wins-grid">

117 <div>Новая <a href="/ru/docs/ultrareview"><code>/ultrareview</code></a>: комплексный анализ кода в облаке с использованием параллельного многоагентного анализа и прохода критики противника. Запустите его без аргументов для анализа вашей текущей ветки, или <code>/ultrareview \<PR#></code> для конкретного PR</div>

119 <div><a href="/ru/docs/permission-modes#eliminate-prompts-with-auto-mode">Auto mode</a> теперь доступен для подписчиков Max на Opus 4.7, и флаг <code>--enable-auto-mode</code> больше не требуется</div>118 <div><a href="/ru/docs/permission-modes#eliminate-prompts-with-auto-mode">Auto mode</a> теперь доступен для подписчиков Max на Opus 4.7, и флаг <code>--enable-auto-mode</code> больше не требуется</div>

120 <div><a href="/ru/docs/interactive-mode#session-recap">Session recap</a> показывает однострочное резюме того, что произошло, пока вас не было; запустите <code>/recap</code> по требованию или отключите его из <code>/config</code></div>119 <div><a href="/ru/docs/interactive-mode#session-recap">Session recap</a> показывает однострочное резюме того, что произошло, пока вас не было; запустите <code>/recap</code> по требованию или отключите его из <code>/config</code></div>

121 <div>Новая команда <code>/tui</code> и параметр <code>tui</code> переключаются между классическим и безмерцающим рендерингом во время разговора; представление фокуса перемещено с <code>Ctrl+O</code> на его собственную команду <code>/focus</code></div>120 <div>Новая команда <code>/tui</code> и параметр <code>tui</code> переключаются между классическим и безмерцающим рендерингом во время разговора; представление фокуса перемещено с <code>Ctrl+O</code> на его собственную команду <code>/focus</code></div>

122 <div>Инструмент push-уведомлений: с подключенным <a href="/ru/docs/remote-control">Remote Control</a> и включенным "Push when Claude decides", Claude может отправить уведомление на ваш телефон, когда вам нужны вы</div>

123 <div>Плагины могут поставлять фоновые наблюдатели через ключ манифеста верхнего уровня <code>monitors</code>, который автоматически активируется при запуске сессии или при вызове skill</div>121 <div>Плагины могут поставлять фоновые наблюдатели через ключ манифеста верхнего уровня <code>monitors</code>, который автоматически активируется при запуске сессии или при вызове skill</div>

124 <div>Опция "Auto (match terminal)" в <code>/theme</code> следует темному/светлому режиму вашего терминала</div>122 <div>Опция "Auto (match terminal)" в <code>/theme</code> следует темному/светлому режиму вашего терминала</div>

125 <div><code>/fewer-permission-prompts</code> сканирует ваши стенограммы на предмет распространенных вызовов Bash и MCP только для чтения и предлагает список разрешений для <code>.claude/settings.json</code></div>123 <div><code>/fewer-permission-prompts</code> сканирует ваши стенограммы на предмет распространенных вызовов Bash и MCP только для чтения и предлагает список разрешений для <code>.claude/settings.json</code></div>

whats-new/2026-w18.md +113 −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# Неделя 18 · 27 апреля – 1 мая 2026

6 

7> Claude Code на Windows работает без Git Bash, claude auth login принимает вставленный код OAuth, когда обратный вызов браузера не может достичь localhost, claude project purge очищает локальное состояние для каждого проекта, и вставка URL PR в /resume находит сеанс, который его создал.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/ru/docs/changelog#2-1-120">v2.1.120 → v2.1.126</a></span>

11 <span>4 функции · 27 апреля – 1 мая</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Вход без обратного вызова браузера</span>

17 <span className="digest-feature-pill">v2.1.126</span>

18 </div>

19 

20 <p className="digest-feature-lede"><code>claude auth login</code> теперь принимает код OAuth, вставленный непосредственно в терминал, когда обратный вызов браузера не может достичь localhost. Это охватывает WSL2, SSH-сеансы и контейнеры, где перенаправление на локальный порт не работает. Этот же выпуск также исправляет тайм-ауты входа на медленных или проксированных соединениях и в IPv6-only devcontainers.</p>

21 

22 <p className="digest-feature-try">Войдите, затем вставьте код из браузера:</p>

23 

24 ```bash theme={null}

25 claude auth login

26 ```

27 

28 <a className="digest-feature-link" href="/ru/docs/cli-reference#cli-commands">Справочник CLI</a>

29</div>

30 

31<div className="digest-feature">

32 <div className="digest-feature-header">

33 <span className="digest-feature-title">claude project purge</span>

34 <span className="digest-feature-pill">v2.1.126</span>

35 </div>

36 

37 <p className="digest-feature-lede">Удалите все состояние Claude Code для проекта: транскрипты, задачи, историю файлов и запись конфигурации проекта. Поддерживает `--dry-run` для предпросмотра, `-y`/`--yes` для пропуска подтверждения, `-i`/`--interactive` для выбора и `--all` для очистки каждого проекта.</p>

38 

39 <p className="digest-feature-try">Предпросмотр того, что будет удалено:</p>

40 

41 ```bash theme={null}

42 claude project purge --dry-run

43 ```

44 

45 <p className="digest-feature-try">Затем запустите его по-настоящему:</p>

46 

47 ```bash theme={null}

48 claude project purge

49 ```

50 

51 <a className="digest-feature-link" href="/ru/docs/cli-reference">Справочник CLI</a>

52</div>

53 

54<div className="digest-feature">

55 <div className="digest-feature-header">

56 <span className="digest-feature-title">Возобновление по URL PR</span>

57 <span className="digest-feature-pill">v2.1.122</span>

58 </div>

59 

60 <p className="digest-feature-lede">Когда вы создаёте pull request с помощью <code>gh pr create</code>, Claude Code связывает его с сеансом, который его создал. Теперь вы можете вернуться к этому сеансу только по URL PR, без необходимости помнить его имя.</p>

61 

62 <p className="digest-feature-try">Откройте средство выбора сеанса:</p>

63 

64 ```text Claude Code theme={null}

65 > /resume

66 ```

67 

68 <p className="digest-feature-try">Вставьте URL PR в средство выбора. Первый символ вставки переводит вас в режим поиска, и список фильтруется до сеанса, который создал этот PR. Нажмите Enter для возобновления. URL-адреса pull и merge request GitHub, GitHub Enterprise, GitLab и Bitbucket работают.</p>

69 

70 ```text Claude Code theme={null}

71 https://github.com/your-org/your-repo/pull/1234

72 ```

73 

74 <p className="digest-feature-try">Чтобы пропустить средство выбора, передайте номер PR в командной строке:</p>

75 

76 ```bash theme={null}

77 claude --from-pr 1234

78 ```

79 

80 <a className="digest-feature-link" href="/ru/docs/sessions#use-the-session-picker">Сеансы: использование средства выбора сеанса</a>

81</div>

82 

83<div className="digest-feature">

84 <div className="digest-feature-header">

85 <span className="digest-feature-title">Windows без Git Bash</span>

86 <span className="digest-feature-pill">Windows</span>

87 </div>

88 

89 <p className="digest-feature-lede">Git для Windows больше не требуется. Когда Bash отсутствует, Claude Code использует PowerShell в качестве инструмента оболочки, и когда инструмент PowerShell включен, он рассматривается как основная оболочка. PowerShell 7, установленный через Microsoft Store, MSI без PATH или как глобальный инструмент `.NET`, теперь автоматически обнаруживается.</p>

90 

91 <a className="digest-feature-link" href="/ru/docs/setup">Руководство по настройке</a>

92</div>

93 

94<div className="digest-wins">

95 <p className="digest-wins-title">Другие улучшения</p>

96 

97 <div className="digest-wins-grid">

98 <div>MCP-серверы могут отказаться от отсрочки поиска инструментов с помощью `alwaysLoad: true` в их конфигурации, чтобы все инструменты этого сервера всегда были доступны</div>

99 <div>Новая команда `claude plugin prune` удаляет потерянные автоматически установленные зависимости плагинов, и `plugin uninstall --prune` каскадирует</div>

100 <div>`/skills` теперь имеет поле поиска с фильтром по типу, чтобы вы могли найти навык в длинном списке без прокрутки</div>

101 <div>Hooks `PostToolUse` могут заменять выходные данные инструмента для любого инструмента через `hookSpecificOutput.updatedToolOutput`, не только для MCP-инструментов</div>

102 <div>Новая подкоманда <a href="/ru/docs/ultrareview"><code>claude ultrareview</code></a> запускает `/ultrareview` неинтерактивно из CI или скриптов: выводит результаты в stdout (`--json` для необработанного вывода) и выходит с кодом 0 при завершении или 1 при ошибке</div>

103 <div>`--dangerously-skip-permissions` теперь обходит подсказки для записи в `.claude/`, `.git/`, `.vscode/`, файлы конфигурации оболочки и другие ранее защищённые пути, в то время как команды катастрофического удаления по-прежнему выводят подсказки в качестве сетки безопасности</div>

104 <div>Средство выбора `/model` может выводить модели из конечной точки `/v1/models` вашего шлюза, когда `ANTHROPIC_BASE_URL` указывает на совместимый с Anthropic шлюз; включите с помощью `CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1` начиная с v2.1.129</div>

105 <div>MCP-серверы, которые столкнулись с временной ошибкой при запуске, теперь автоматически повторяют попытку до 3 раз вместо того, чтобы оставаться отключёнными</div>

106 <div>`ANTHROPIC_BEDROCK_SERVICE_TIER` выбирает уровень обслуживания Bedrock: `default`, `flex` или `priority`</div>

107 <div>`/terminal-setup` включает параметр доступа к буферу обмена iTerm2, чтобы `/copy` работал, включая из tmux</div>

108 <div>Vertex AI теперь поддерживает федерацию рабочей идентификации на основе сертификата X.509 (mTLS ADC)</div>

109 <div>Значительные исправления утечек памяти: сеансы с большим количеством изображений, `/usage` в больших историях транскриптов и долгоживущие инструменты без событий прогресса</div>

110 </div>

111</div>

112 

113[Полный журнал изменений для v2.1.120–v2.1.126 →](/ru/changelog#2-1-120)

whats-new/2026-w19.md +60 −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# Неделя 19 · 4–8 мая 2026

6 

7> Загружайте плагины из архивов .zip и URL-адресов, ищите историю команд во всех проектах с помощью Ctrl+R, создавайте новые worktrees из локального HEAD или удаленной ветки по умолчанию и блокируйте действия безусловно с помощью правил hard deny в режиме auto.

8 

9<div className="digest-meta">

10 <span>Releases <a href="/ru/changelog#2-1-128">v2.1.128 → v2.1.136</a></span>

11 <span>2 функции · 4–8 мая</span>

12</div>

13 

14<div className="digest-feature">

15 <div className="digest-feature-header">

16 <span className="digest-feature-title">Плагины из архивов .zip и URL-адресов</span>

17 </div>

18 

19 <p className="digest-feature-lede"><code>--plugin-dir</code> теперь принимает архив плагина <code>.zip</code> в дополнение к директории, а новый флаг <code>--plugin-url</code> загружает архив плагина с URL-адреса для текущей сессии. Полезно для тестирования плагина перед добавлением его на маркетплейс или для распространения внутренних плагинов из хранилища артефактов.</p>

20 

21 <p className="digest-feature-try">Загрузите плагин прямо с URL-адреса:</p>

22 

23 ```bash terminal theme={null}

24 claude --plugin-url https://example.com/my-plugin.zip

25 ```

26 

27 <a className="digest-feature-link" href="/ru/plugins">Руководство по плагинам</a>

28</div>

29 

30<div className="digest-feature">

31 <div className="digest-feature-header">

32 <span className="digest-feature-title">Поиск по истории во всех ваших проектах</span>

33 <span className="digest-feature-pill">v2.1.129</span>

34 </div>

35 

36 <p className="digest-feature-lede">Обратный поиск <code>Ctrl+R</code> теперь по умолчанию ищет во всех подсказках во всех проектах, восстанавливая поведение до версии v2.1.124. Нажмите <code>Ctrl+S</code> во время поиска, чтобы сузить результаты до текущего проекта или сессии. Удобно, когда вы помните команду, которую запускали в другом репозитории на прошлой неделе, и не хотите её искать.</p>

37 

38 <a className="digest-feature-link" href="/ru/interactive-mode#command-history">Интерактивный режим: история команд</a>

39</div>

40 

41<div className="digest-wins">

42 <p className="digest-wins-title">Другие улучшения</p>

43 

44 <div className="digest-wins-grid">

45 <div>Новый параметр <code>worktree.baseRef</code> (<code>fresh</code> | <code>head</code>) контролирует, ветвятся ли <code>--worktree</code>, инструмент <code>EnterWorktree</code> и worktrees с изоляцией агента от удаленной ветки по умолчанию или локального <code>HEAD</code>; значение по умолчанию <code>fresh</code> исключает неотправленные коммиты из новых worktrees</div>

46 <div>Новые правила <code>settings.autoMode.hard\_deny</code> безусловно блокируют соответствующие действия в режиме auto, независимо от исключений разрешения, для действий, которые никогда не должны выполняться автоматически, даже если применяются более широкие правила разрешения</div>

47 <div>Hooks теперь получают активный уровень усилий через поле JSON входа `effort.level` и переменную окружения `$CLAUDE_EFFORT`, а команды инструмента Bash могут читать <code>\$CLAUDE\_EFFORT</code></div>

48 <div><code>CLAUDE\_CODE\_DISABLE\_ALTERNATE\_SCREEN=1</code> отключает полноэкранный рендерер alternate-screen и сохраняет беседу в собственной истории прокрутки терминала</div>

49 <div><code>CLAUDE\_CODE\_PACKAGE\_MANAGER\_AUTO\_UPDATE</code> позволяет установкам Homebrew или WinGet запускать обновление в фоновом режиме и предлагать перезагрузку</div>

50 <div><code>CLAUDE\_CODE\_SESSION\_ID</code> теперь находится в окружении подпроцесса инструмента Bash, соответствуя <code>session\_id</code>, переданному в hooks</div>

51 <div><code>/mcp</code> теперь показывает количество инструментов для подключенных серверов и отмечает серверы, подключившиеся с 0 инструментами</div>

52 <div><code>--channels</code> теперь работает с аутентификацией консоли (API ключ)</div>

53 <div>Подпроцессы, такие как Bash, hooks, MCP и LSP, больше не наследуют переменные окружения <code>OTEL\_\*</code>, поэтому приложения с инструментарием OTEL, запущенные через инструмент Bash, больше не подхватывают собственную конечную точку OTLP CLI</div>

54 <div>Сводки прогресса подагентов теперь попадают в кэш подсказок, снижая стоимость токена <code>cache\_creation</code> примерно в 3 раза</div>

55 <div>Несколько исправлений надежности OAuth и учетных данных: параллельные сессии больше не заканчиваются на 401 после гонки refresh-token, токены обновления MCP OAuth больше не теряются, когда несколько серверов обновляются одновременно, и исправлена редкая петля входа из одновременной записи учетных данных</div>

56 <div>Новый ключ администратора <code>parentSettingsBehavior</code> позволяет администраторам включить SDK <code>managedSettings</code> в слияние политики</div>

57 </div>

58</div>

59 

60[Полный журнал изменений для v2.1.128–v2.1.136 →](/ru/changelog#2-1-128)