SpyBara
Go Premium

Documentation 2026-10-08 22:58 UTC to 2026-10-09 21:01 UTC

50 files changed +692 −224. View all changes and history on the product overview
2026
Fri 9 22:01 Thu 8 22:58 Wed 7 23:59 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

216| Опция | Что она контролирует | По умолчанию |216| Опция | Что она контролирует | По умолчанию |

217| :- | :- | :- |217| :- | :- | :- |

218| Максимум ходов (`max_turns` / `maxTurns`) | Максимум раундов использования инструментов | Без ограничений |218| Максимум ходов (`max_turns` / `maxTurns`) | Максимум раундов использования инструментов | Без ограничений |

219| Максимум бюджета (`max_budget_usd` / `maxBudgetUsd`) | Максимальная стоимость перед остановкой | Без ограничений |219| Максимум бюджета (`max_budget_usd` / `maxBudgetUsd`) | Оценочные расходы, при достижении которых цикл останавливается | Без ограничений |

220 220 

221Когда достигается любой лимит, SDK возвращает `ResultMessage` с соответствующим подтипом ошибки (`error_max_turns` или `error_max_budget_usd`). См. [Обработать результат](#handle-the-result) для того, как проверить эти подтипы, и [`ClaudeAgentOptions`](/docs/ru/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/ru/agent-sdk/typescript#options) для синтаксиса.221Когда достигается любой лимит, SDK возвращает `ResultMessage` с соответствующим подтипом ошибки (`error_max_turns` или `error_max_budget_usd`). См. [Обработать результат](#handle-the-result) для того, как проверить эти подтипы, и [`ClaudeAgentOptions`](/docs/ru/agent-sdk/python#claudeagentoptions) / [`Options`](/docs/ru/agent-sdk/typescript#options) для синтаксиса.

222 222 


224 224 

225При [потоковом вводе](/docs/ru/agent-sdk/streaming-vs-single-mode) сообщение, которое все еще находится в очереди, когда ход заканчивается на пределе максимальных ходов, остается в очереди. Claude Code не добавляет его в последний вызов модели этого хода. Он начинает новый ход для сообщения, и счетчик максимальных ходов начинается заново для этого хода. Общий бюджет продолжает накапливаться между сообщениями, и как только расходы достигают `maxBudgetUsd`, более поздние сообщения в той же беседе заканчиваются результатом `error_max_budget_usd`. [`/clear`](/docs/ru/agent-sdk/cost-tracking) начинает бюджет заново.225При [потоковом вводе](/docs/ru/agent-sdk/streaming-vs-single-mode) сообщение, которое все еще находится в очереди, когда ход заканчивается на пределе максимальных ходов, остается в очереди. Claude Code не добавляет его в последний вызов модели этого хода. Он начинает новый ход для сообщения, и счетчик максимальных ходов начинается заново для этого хода. Общий бюджет продолжает накапливаться между сообщениями, и как только расходы достигают `maxBudgetUsd`, более поздние сообщения в той же беседе заканчиваются результатом `error_max_budget_usd`. [`/clear`](/docs/ru/agent-sdk/cost-tracking) начинает бюджет заново.

226 226 

227<h4 id="budget-headroom">

228 Запас бюджета

229</h4>

230 

231Claude Code сравнивает расходы с лимитом `max_budget_usd` / `maxBudgetUsd` после получения ответов модели, поскольку стоимость каждого ответа определяется использованием токенов, которое API возвращает вместе с ним. Ответ, достигший лимита, все равно завершается и учитывается в [`total_cost_usd`](/docs/ru/agent-sdk/cost-tracking#get-the-total-cost-of-a-query). Поэтому расходы могут превысить лимит не более чем на стоимость этого одного ответа плюс все, что потратят субагенты, еще работающие в этот момент, до своей остановки. Оставляйте запас на это при установке лимита.

232 

227<h3 id="effort-level">233<h3 id="effort-level">

228 Уровень усилий234 Уровень усилий

229</h3>235</h3>

Details

146| `auto` | Одобрения, классифицированные моделью | Классификатор модели проверяет действия, такие как команды оболочки и сетевые запросы, разрешая или блокируя каждое из них. См. [Режим Auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) для получения информации о доступности и порядке принятия решений |146| `auto` | Одобрения, классифицированные моделью | Классификатор модели проверяет действия, такие как команды оболочки и сетевые запросы, разрешая или блокируя каждое из них. См. [Режим Auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) для получения информации о доступности и порядке принятия решений |

147 147 

148<Warning>148<Warning>

149 **Наследование подагентом:** Подагент выполняется в режиме разрешений родительского сеанса, если вы не установите `permissionMode` на его [`AgentDefinition`](/docs/ru/agent-sdk/typescript#agentdefinition) и родительский сеанс находится в режиме `default`, `dontAsk` или `plan`. Даже в этом случае Claude Code никогда не применяет значение `"bypassPermissions"`. Подагент выполняется в режиме `bypassPermissions` только когда сам родительский сеанс находится в этом режиме. Исключение `bypassPermissions` требует Claude Code v2.1.267 или более поздней версии.149 **Наследование субагентом:** Субагент выполняется в режиме разрешений родительской сессии, если вы не установите `permissionMode` на его [`AgentDefinition`](/docs/ru/agent-sdk/typescript#agentdefinition) и родительская сессия находится в режиме `default`, `dontAsk` или `plan`. Даже в этом случае Claude Code никогда не применяет значение `"bypassPermissions"`, а значение `"auto"` применяет только тогда, когда [авторежим доступен](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) этому субагенту. Субагент выполняется в режиме `bypassPermissions` только когда сама родительская сессия находится в этом режиме. Исключение `bypassPermissions` требует Claude Code v2.1.267 или более поздней версии.

150 150 

151 Подагенты могут иметь различные системные подсказки и менее ограниченное поведение, чем ваш основной агент, поэтому наследование `bypassPermissions` предоставляет им полный автономный доступ к системе. [Действия, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves), по-прежнему применяются.151 Подагенты могут иметь различные системные подсказки и менее ограниченное поведение, чем ваш основной агент, поэтому наследование `bypassPermissions` предоставляет им полный автономный доступ к системе. [Действия, которые ни один режим не одобряет автоматически](/docs/ru/permission-modes#actions-no-mode-auto-approves), по-прежнему применяются.

152</Warning>152</Warning>

Details

928| `resume` | `str \| None` | `None` | ID сессии для возобновления |928| `resume` | `str \| None` | `None` | ID сессии для возобновления |

929| `session_id` | `str \| None` | `None` | Использовать определённый ID сессии вместо автоматически сгенерированного. Должен быть действительным UUID. Нельзя сочетать с `continue_conversation` или `resume`, если не задан также `fork_session` |929| `session_id` | `str \| None` | `None` | Использовать определённый ID сессии вместо автоматически сгенерированного. Должен быть действительным UUID. Нельзя сочетать с `continue_conversation` или `resume`, если не задан также `fork_session` |

930| `max_turns` | `int \| None` | `None` | Максимальное количество агентских ходов (циклов использования инструментов) |930| `max_turns` | `int \| None` | `None` | Максимальное количество агентских ходов (циклов использования инструментов) |

931| `max_budget_usd` | `float \| None` | `None` | Остановить запрос, когда оценка стоимости на стороне клиента достигнет этого значения в USD. Учитывает только расходы самого вызова; итоги, восстановленные из возобновлённой сессии, не учитываются. Об оговорках по точности и поведении сброса см. [Отслеживание стоимости и использования](/docs/ru/agent-sdk/cost-tracking) |931| `max_budget_usd` | `float \| None` | `None` | Остановить запрос, когда оценка стоимости на стороне клиента достигнет этого значения в USD. Оценка может превысить это значение, поэтому [оставьте запас](/docs/ru/agent-sdk/agent-loop#budget-headroom). Учитывает только расходы самого вызова; итоги, восстановленные из возобновлённой сессии, не учитываются. Об оговорках по точности и поведении сброса см. [Отслеживание стоимости и использования](/docs/ru/agent-sdk/cost-tracking) |

932| `disallowed_tools` | `list[str]` | `[]` | Инструменты для запрета. Простое имя, такое как `"Bash"`, удаляет инструмент из контекста Claude. Правило с уточнением, такое как `"Bash(rm *)"`, оставляет инструмент доступным и запрещает соответствующие вызовы в каждом режиме разрешений, включая `bypassPermissions`, для команды [в том виде, как она написана](/docs/ru/permissions#bash-rule-limits). См. [Разрешения](/docs/ru/agent-sdk/permissions#allow-and-deny-rules) |932| `disallowed_tools` | `list[str]` | `[]` | Инструменты для запрета. Простое имя, такое как `"Bash"`, удаляет инструмент из контекста Claude. Правило с уточнением, такое как `"Bash(rm *)"`, оставляет инструмент доступным и запрещает соответствующие вызовы в каждом режиме разрешений, включая `bypassPermissions`, для команды [в том виде, как она написана](/docs/ru/permissions#bash-rule-limits). См. [Разрешения](/docs/ru/agent-sdk/permissions#allow-and-deny-rules) |

933| `enable_file_checkpointing` | `bool` | `False` | Включить отслеживание изменений файлов для перемотки. См. [Чекпоинты файлов](/docs/ru/agent-sdk/file-checkpointing) |933| `enable_file_checkpointing` | `bool` | `False` | Включить отслеживание изменений файлов для перемотки. См. [Чекпоинты файлов](/docs/ru/agent-sdk/file-checkpointing) |

934| `model` | `str \| None` | `None` | Псевдоним модели Claude или полное имя модели. См. [допустимые значения и ID, специфичные для поставщика](/docs/ru/model-config#available-models) |934| `model` | `str \| None` | `None` | Псевдоним модели Claude или полное имя модели. См. [допустимые значения и ID, специфичные для поставщика](/docs/ru/model-config#available-models) |


987```987```

988 988 

989* `API_TIMEOUT_MS`: таймаут на каждый запрос в клиенте Anthropic, в миллисекундах. По умолчанию `600000`. Применяется к основному циклу и всем субагентам.989* `API_TIMEOUT_MS`: таймаут на каждый запрос в клиенте Anthropic, в миллисекундах. По умолчанию `600000`. Применяется к основному циклу и всем субагентам.

990* `CLAUDE_CODE_MAX_RETRIES`: максимальное количество повторных попыток API. По умолчанию `10`, ограничено значением `15`. Каждая повторная попытка получает собственное окно `API_TIMEOUT_MS`, поэтому общее время в худшем случае составляет примерно `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` плюс задержки между попытками. Для автоматических запусков, которым нужно пережидать более длительные сбои, установите [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ru/errors#tune-retry-behavior): эта настройка бесконечно повторяет попытки при временных ошибках нехватки ёмкости и, в Claude Code v2.1.199 или новее, повышает значение по умолчанию для других временных ошибок до `300` и снимает ограничение с этой переменной.990* `CLAUDE_CODE_MAX_RETRIES`: максимальное количество повторных попыток API. По умолчанию `10`, ограничено значением `15`. Каждая повторная попытка получает собственное окно `API_TIMEOUT_MS`.

991 

992 Для автоматических запусков, которым нужно пережидать более длительные сбои, установите [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ru/errors#tune-retry-behavior): эта настройка бесконечно повторяет попытки при временных ошибках нехватки ёмкости и, в Claude Code v2.1.199 или новее, повышает значение по умолчанию для других временных ошибок до `300` и снимает ограничение с этой переменной.

991* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: сторож зависаний для субагентов. Пока включён сторож потока, значение по умолчанию равно `CLAUDE_STREAM_IDLE_TIMEOUT_MS` плюс 5 минут, что составляет `600000`, если вы не увеличите эту переменную. Когда сторож потока отключён, значение по умолчанию — `600000`. До v2.1.257 значение по умолчанию всегда было `600000`.993* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: сторож зависаний для субагентов. Пока включён сторож потока, значение по умолчанию равно `CLAUDE_STREAM_IDLE_TIMEOUT_MS` плюс 5 минут, что составляет `600000`, если вы не увеличите эту переменную. Когда сторож потока отключён, значение по умолчанию — `600000`. До v2.1.257 значение по умолчанию всегда было `600000`.

992 994 

993 Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает субагента и сообщает о зависании родителю. Для фонового субагента он также помечает задачу как неудавшуюся и прикрепляет любой частичный результат.995 Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает субагента и сообщает о зависании родителю. Для фонового субагента он также помечает задачу как неудавшуюся и прикрепляет любой частичный результат.


2856 "description": str, # Описание задачи2858 "description": str, # Описание задачи

2857 "resolvedModel": str | None, # Модель, используемая при переходе в фоновый режим2859 "resolvedModel": str | None, # Модель, используемая при переходе в фоновый режим

2858 "modelsUsed": list[str] | None, # Модели, использованные перед фоновым режимом, по порядку, с коллапсированными последовательными повторениями2860 "modelsUsed": list[str] | None, # Модели, использованные перед фоновым режимом, по порядку, с коллапсированными последовательными повторениями

2859 "prompt": str, # Подсказка, которую запускает агент2861 "prompt": str, # Промпт, который запускает агент

2860 "outputFile": str, # Путь файла, где записывается вывод агента2862 "outputFile": str, # Путь файла, где записывается вывод агента

2861 "canReadOutputFile": bool | None, # Может ли выходной файл быть прочитан напрямую2863 "canReadOutputFile": bool | None, # Может ли выходной файл быть прочитан напрямую

2862}2864}


2868{2870{

2869 "status": "remote_launched",2871 "status": "remote_launched",

2870 "taskId": str, # ID отправленной задачи2872 "taskId": str, # ID отправленной задачи

2871 "sessionUrl": str, # Ссылка на облачный сеанс2873 "sessionUrl": str, # Ссылка на облачную сессию

2872 "description": str, # Описание задачи2874 "description": str, # Описание задачи

2873 "prompt": str, # Подсказка, которую запускает агент2875 "prompt": str, # Промпт, который запускает агент

2874 "outputFile": str, # Путь файла, где записывается вывод агента2876 "outputFile": str, # Путь файла, где записывается вывод агента

2875}2877}

2876```2878```

2877 2879 

2878Возвращает результат от подагента. Вывод различается по полю `status`: `"completed"` для завершенных задач, `"async_launched"` для фоновых задач и `"remote_launched"` для задач, которые Claude Code отправил в облачный сеанс, где `sessionUrl` ссылается на этот сеанс и `taskId` его идентифицирует. Если Claude Code [сохранил изолированный worktree подагента](/docs/ru/worktrees#isolate-subagents-with-worktrees), `worktreePath` в варианте `completed` — это место, где его найти, и `worktreeBranch` — это его ветка, когда Claude Code создал worktree с git.2880Возвращает результат от субагента. Вывод различается по полю `status`: `"completed"` для завершенных задач, `"async_launched"` для фоновых задач и `"remote_launched"` для задач, которые Claude Code отправил в облачную сессию, где `sessionUrl` ссылается на эту сессию и `taskId` ее идентифицирует. Если Claude Code [сохранил изолированный worktree субагента](/docs/ru/worktrees#isolate-subagents-with-worktrees), `worktreePath` в варианте `completed` — это место, где его найти, и `worktreeBranch` — это его ветка, когда Claude Code создал worktree с git.

2879 2881 

2880В варианте `completed`, `resolvedModel` называет модель, на которой запустился подагент, которая может отличаться от запрошенного входа `model`, когда применяется [`availableModels`](/docs/ru/model-config#restrict-model-selection) или другое переопределение. Это поле требует Claude Code v2.1.174 или позже. В варианте `async_launched`, `resolvedModel` называет модель, используемую, когда агент перешел в фоновый режим, поэтому обмен, произошедший перед фоновым режимом, отражается там. Поле `modelsUsed` в обоих вариантах перечисляет использованные модели по порядку, с коллапсированными последовательными повторениями; оно устанавливается только при обмене модели во время выполнения. `modelsUsed` и поведение `resolvedModel` во время фонового режима требуют Claude Code v2.1.212 или позже.2882В варианте `completed`, `resolvedModel` называет модель, на которой запустился субагент, которая может отличаться от запрошенного входа `model`, когда применяется [`availableModels`](/docs/ru/model-config#restrict-model-selection) или другое переопределение. Это поле требует Claude Code v2.1.174 или позже. В варианте `async_launched`, `resolvedModel` называет модель, используемую, когда агент перешел в фоновый режим, поэтому обмен, произошедший перед фоновым режимом, отражается там. Поле `modelsUsed` в обоих вариантах перечисляет использованные модели по порядку, с коллапсированными последовательными повторениями; оно устанавливается только при обмене модели во время выполнения. `modelsUsed` и поведение `resolvedModel` во время фонового режима требуют Claude Code v2.1.212 или позже.

2881 2883 

2882Claude Code заполняет `usage` и `totalTokens` из финального запроса API субагента, не из всего запуска. Когда присутствует, `thinking_tokens` под `output_tokens_details` в `usage` — это количество выходных токенов этого запроса, которые были токенами мышления. Ключ `output_tokens_details` требует Python SDK v0.2.136 или позже, который поставляется с Claude Code v2.1.228. Ключ `fallback_credit` требует Python SDK v0.2.162 или позже, который поставляется с Claude Code v2.1.285.2884Claude Code заполняет `usage` и `totalTokens` из финального запроса API субагента, не из всего запуска. Когда присутствует, `thinking_tokens` под `output_tokens_details` в `usage` — это количество выходных токенов этого запроса, которые были токенами мышления. Ключ `output_tokens_details` требует Python SDK v0.2.136 или позже, который поставляется с Claude Code v2.1.228. Ключ `fallback_credit` требует Python SDK v0.2.162 или позже, который поставляется с Claude Code v2.1.285.

2883 2885 


2887 2889 

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

2889 2891 

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

2891 2893 

2892**Ввод:**2894**Ввод:**

2893 2895 


2947 2949 

2948**Имя инструмента:** `Bash`2950**Имя инструмента:** `Bash`

2949 2951 

2950Для информации о том, что устанавливает потолок переднего плана, см. [Тайм-ауты и ограничения вывода](/docs/ru/tools-reference#timeout-and-output-limits). Для ограничения времени фонового режима см. [Ограничение времени для фоновых команд](/docs/ru/tools-reference#time-limit-for-background-commands).2952Для информации о том, что устанавливает потолок переднего плана, см. [Таймаут и ограничения вывода](/docs/ru/tools-reference#timeout-and-output-limits). Для ограничения времени фонового режима см. [Ограничение времени для фоновых команд](/docs/ru/tools-reference#time-limit-for-background-commands).

2951 2953 

2952**Ввод:**2954**Ввод:**

2953 2955 


2980 2982 

2981Запускает фоновый источник и доставляет каждое событие в Claude, чтобы он мог реагировать без опроса: `command` запускает скрипт и выдает одно событие на строку stdout, а `ws` открывает WebSocket и выдает одно событие на текстовый фрейм. Укажите ровно один из `command` или `ws`.2983Запускает фоновый источник и доставляет каждое событие в Claude, чтобы он мог реагировать без опроса: `command` запускает скрипт и выдает одно событие на строку stdout, а `ws` открывает WebSocket и выдает одно событие на текстовый фрейм. Укажите ровно один из `command` или `ws`.

2982 2984 

2983Когда Monitor запускает команду, он следует тем же правилам разрешений, что и Bash; наблюдение за WebSocket запрашивает одобрение отдельно. Источник `ws` требует Claude Code v2.1.195 или позже. См. [Справочник инструмента Monitor](/docs/ru/tools-reference#monitor-tool) для поведения и доступности поставщика.2985Когда Monitor запускает команду, он следует тем же правилам разрешений, что и Bash; наблюдение за WebSocket запрашивает подтверждение отдельно. Источник `ws` требует Claude Code v2.1.195 или позже. См. [Справочник инструмента Monitor](/docs/ru/tools-reference#monitor-tool) для поведения и доступности поставщика.

2984 2986 

2985**Ввод:**2987**Ввод:**

2986 2988 


2989 "command": str | None, # Скрипт оболочки; каждая строка stdout является событием, выход завершает наблюдение2991 "command": str | None, # Скрипт оболочки; каждая строка stdout является событием, выход завершает наблюдение

2990 "ws": dict | None, # Источник WebSocket: {"url": str, "protocols": list[str] | None}; каждый текстовый фрейм является событием2992 "ws": dict | None, # Источник WebSocket: {"url": str, "protocols": list[str] | None}; каждый текстовый фрейм является событием

2991 "description": str, # Краткое описание, показываемое в уведомлениях2993 "description": str, # Краткое описание, показываемое в уведомлениях

2992 "timeout_ms": int | None, # Завершить после этого срока (по умолчанию 300000, макс 3600000; эффективный срок составляет максимум 1800000)2994 "timeout_ms": int | None, # Срок в миллисекундах (по умолчанию 300000, макс 3600000; эффективный срок составляет максимум 1800000)

2993}2995}

2994```2996```

2995 2997 


2998```python theme={null}3000```python theme={null}

2999{3001{

3000 "taskId": str, # ID фоновой задачи мониторинга3002 "taskId": str, # ID фоновой задачи мониторинга

3001 "timeoutMs": int, # Эффективный срок тайм-аута в миллисекундах3003 "timeoutMs": int, # Эффективный срок наблюдения в миллисекундах

3002 "persistent": bool | None, # False: каждое наблюдение имеет срок3004 "persistent": bool | None, # False: каждое наблюдение имеет срок

3003}3005}

3004```3006```


3148 3150 

3149```python theme={null}3151```python theme={null}

3150{3152{

3151 "type": "file_unchanged", # Файл не изменился с момента последнего чтения Claude в этом сеансе, поэтому содержимое не повторяется3153 "type": "file_unchanged", # Файл не изменился с момента последнего чтения Claude в этой сессии, поэтому содержимое не повторяется

3152 "file": {3154 "file": {

3153 "filePath": str,3155 "filePath": str,

3154 },3156 },


3326```python theme={null}3328```python theme={null}

3327{3329{

3328 "url": str, # URL для получения содержимого3330 "url": str, # URL для получения содержимого

3329 "prompt": str, # Подсказка для запуска на полученном содержимом3331 "prompt": str, # Промпт для запуска на полученном содержимом

3332 "offset": int | None, # Количество символов, пропускаемых от начала страницы. Требует Python Agent SDK 0.2.164 или позже

3330}3333}

3331```3334```

3332 3335 


3337 "bytes": int, # Размер полученного содержимого в байтах3340 "bytes": int, # Размер полученного содержимого в байтах

3338 "code": int, # Код ответа HTTP3341 "code": int, # Код ответа HTTP

3339 "codeText": str, # Текст кода ответа HTTP3342 "codeText": str, # Текст кода ответа HTTP

3340 "result": str, # Обработанный результат от применения подсказки к содержимому3343 "result": str, # Обработанный результат от применения промпта к содержимому

3341 "durationMs": int, # Время получения и обработки содержимого в миллисекундах3344 "durationMs": int, # Время получения и обработки содержимого в миллисекундах

3342 "url": str, # URL, который был получен3345 "url": str, # URL, который был получен

3343}3346}


3595```python theme={null}3598```python theme={null}

3596{3599{

3597 "plan": str | None, # План, который был представлен пользователю3600 "plan": str | None, # План, который был представлен пользователю

3598 "isAgent": bool, # True, когда подагент вызвал инструмент3601 "isAgent": bool, # True, когда субагент вызвал инструмент

3599 "filePath": str | None, # Присутствует, когда план был сохранен в файл3602 "filePath": str | None, # Присутствует, когда план был сохранен в файл

3600 "hasTaskTool": bool | None, # Необязательно; доступен ли инструмент Agent в текущем контексте3603 "hasTaskTool": bool | None, # Необязательно; доступен ли инструмент Agent в текущем контексте

3601 "planWasEdited": bool | None, # Присутствует и True, когда пользователь отредактировал план перед одобрением3604 "planWasEdited": bool | None, # Присутствует и True, когда пользователь отредактировал план перед одобрением

Details

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

324</h2>324</h2>

325 325 

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

327 

328Сообщения из контекста субагента включают поле `parent_tool_use_id`. В TypeScript каждое сообщение assistant и user, создаваемое субагентом, также содержит [`agent_id`](/docs/ru/agent-sdk/typescript#sdkassistantmessage): `task_id` [событий задачи](/docs/ru/agent-sdk/typescript#sdktaskstartedmessage) этого субагента. Для `agent_id` требуется TypeScript Agent SDK v0.3.292 или более поздней версии.

327 329 

328<Note>330<Note>

329 Инструмент отображается как `"Agent"` в блоках `tool_use`, но как `"Task"` в списке инструментов `system:init`. До Claude Code v2.1.63 блоки `tool_use` также называли его `"Task"`. Чтобы обнаружение работало во всех версиях SDK, сопоставьте оба значения в `block.name`.331 Инструмент отображается как `"Agent"` в блоках `tool_use`, но как `"Task"` в списке инструментов `system:init`. До Claude Code v2.1.63 блоки `tool_use` также называли его `"Task"`. Чтобы обнаружение работало во всех версиях SDK, сопоставьте оба значения в `block.name`.


331 333 

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

333 335 

334Этот пример проходит по потоковым сообщениям, логируя, когда подагент вызывается и когда последующие сообщения поступают из контекста выполнения этого подагента.336Этот пример проходит по потоковым сообщениям, логируя, когда субагент вызывается и когда последующие сообщения поступают из контекста выполнения этого субагента. Версия на TypeScript также логирует `agent_id` каждого сообщения субагента, которое его содержит.

335 337 

336<CodeGroup>338<CodeGroup>

337 ```python Python theme={null}339 ```python Python theme={null}


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

404 if (msg.parent_tool_use_id) {406 if (msg.parent_tool_use_id) {

405 console.log(" (running inside subagent)");407 console.log(" (running inside subagent)");

408 // On assistant and user messages, agent_id matches the task_id

409 // on that subagent's task_started and other task events

410 if (msg.agent_id) {

411 console.log(` agent_id: ${msg.agent_id}`);

412 }

406 }413 }

407 414 

408 if ("result" in message) {415 if ("result" in message) {

Details

569| `includePartialMessages` | `boolean` | `false` | Включать события частичных сообщений |569| `includePartialMessages` | `boolean` | `false` | Включать события частичных сообщений |

570| `loadTimeoutMs` | `number` | `60000` | *Альфа.* Таймаут в миллисекундах для каждого вызова `sessionStore.load()` и `sessionStore.listSubkeys()` при материализации во время возобновления. Если адаптер не завершит операцию в течение этого времени, запрос завершается с ошибкой, а не зависает. Игнорируется, если `sessionStore` не задан |570| `loadTimeoutMs` | `number` | `60000` | *Альфа.* Таймаут в миллисекундах для каждого вызова `sessionStore.load()` и `sessionStore.listSubkeys()` при материализации во время возобновления. Если адаптер не завершит операцию в течение этого времени, запрос завершается с ошибкой, а не зависает. Игнорируется, если `sessionStore` не задан |

571| `managedSettings` | `Settings` | `undefined` | Настройки уровня политики, которые ваш хост-процесс передаёт в запускаемую сессию. На машинах с управляемыми настройками, развёрнутыми администратором, Claude Code игнорирует их, если только управляемый источник администратора с наивысшим приоритетом не задаёт `parentSettingsBehavior: 'merge'`, и никогда не объединяет их, пока [`policyHelper`](/docs/ru/settings-reference#policyhelper) предоставляет управляемые настройки. Объединённые значения проходят через фильтр, пропускающий только ограничения; о том, что пропускает фильтр, и о блокировках `allowManaged*Only` см. [Ограничение родительских настроек](/docs/ru/claude-apps-gateway#restrict-parent-settings). Хост, задающий [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/ru/env-vars), вместо этого получает три ключа непосредственно из этих данных: свою [конфигурацию модели](/docs/ru/model-config#restrict-model-selection) в Claude Code v2.1.222 или новее, [`modelPricing`](/docs/ru/settings-reference#modelpricing), если ни один управляемый источник его не задаёт, в v2.1.246 или новее, и запись `ENABLE_TOOL_SEARCH` в env в v2.1.247 или новее |571| `managedSettings` | `Settings` | `undefined` | Настройки уровня политики, которые ваш хост-процесс передаёт в запускаемую сессию. На машинах с управляемыми настройками, развёрнутыми администратором, Claude Code игнорирует их, если только управляемый источник администратора с наивысшим приоритетом не задаёт `parentSettingsBehavior: 'merge'`, и никогда не объединяет их, пока [`policyHelper`](/docs/ru/settings-reference#policyhelper) предоставляет управляемые настройки. Объединённые значения проходят через фильтр, пропускающий только ограничения; о том, что пропускает фильтр, и о блокировках `allowManaged*Only` см. [Ограничение родительских настроек](/docs/ru/claude-apps-gateway#restrict-parent-settings). Хост, задающий [`CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST`](/docs/ru/env-vars), вместо этого получает три ключа непосредственно из этих данных: свою [конфигурацию модели](/docs/ru/model-config#restrict-model-selection) в Claude Code v2.1.222 или новее, [`modelPricing`](/docs/ru/settings-reference#modelpricing), если ни один управляемый источник его не задаёт, в v2.1.246 или новее, и запись `ENABLE_TOOL_SEARCH` в env в v2.1.247 или новее |

572| `maxBudgetUsd` | `number` | `undefined` | Останавливает запрос, когда клиентская оценка стоимости достигает этого значения в долларах США. Учитываются только собственные расходы вызова; итоговые суммы, восстановленные из возобновлённой сессии, не учитываются. Об оговорках по точности и поведении при сбросе см. [Отслеживание стоимости и использования](/docs/ru/agent-sdk/cost-tracking) |572| `maxBudgetUsd` | `number` | `undefined` | Остановить запрос, когда оценка стоимости на стороне клиента достигнет этого значения в USD. Оценка может превысить это значение, поэтому [оставляйте запас](/docs/ru/agent-sdk/agent-loop#budget-headroom). Учитываются только собственные расходы вызова; итоги, восстановленные из возобновлённой сессии, не учитываются. Оговорки о точности и поведении при сбросе см. в разделе [Отслеживание стоимости и использования](/docs/ru/agent-sdk/cost-tracking) |

573| `maxThinkingTokens` | `number` | `undefined` | *Устарело:* используйте `thinking`. Максимальное число токенов для процесса мышления |573| `maxThinkingTokens` | `number` | `undefined` | *Устарело:* используйте `thinking`. Максимальное число токенов для процесса мышления |

574| `maxTurns` | `number` | `undefined` | Максимальное число ходов агента (циклов вызова инструментов) |574| `maxTurns` | `number` | `undefined` | Максимальное число ходов агента (циклов вызова инструментов) |

575| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | Конфигурации MCP-серверов |575| `mcpServers` | `Record<string, [`McpServerConfig`](#mcpserverconfig)>` | `{}` | Конфигурации MCP-серверов |


631```631```

632 632 

633* `API_TIMEOUT_MS`: таймаут каждого запроса клиента Anthropic в миллисекундах. По умолчанию `600000`. Применяется к основному циклу и ко всем субагентам.633* `API_TIMEOUT_MS`: таймаут каждого запроса клиента Anthropic в миллисекундах. По умолчанию `600000`. Применяется к основному циклу и ко всем субагентам.

634* `CLAUDE_CODE_MAX_RETRIES`: максимальное число повторных попыток API. По умолчанию `10`, максимум `15`. Каждая повторная попытка получает собственное окно `API_TIMEOUT_MS`, поэтому в худшем случае общее время составляет примерно `API_TIMEOUT_MS × (CLAUDE_CODE_MAX_RETRIES + 1)` плюс задержки между попытками. Для автономных запусков, которым нужно переждать более длительные сбои, задайте [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ru/errors#tune-retry-behavior): эта переменная бесконечно повторяет попытки при временных ошибках нехватки мощностей и, в Claude Code v2.1.199 или новее, повышает значение по умолчанию для других временных ошибок до `300` и снимает ограничение на эту переменную.634* `CLAUDE_CODE_MAX_RETRIES`: максимальное количество повторных попыток API. По умолчанию `10`, не более `15`. Каждая повторная попытка получает собственное окно `API_TIMEOUT_MS`.

635 

636 Для автоматических запусков, которым нужно пережидать более длительные сбои, задайте [`CLAUDE_CODE_RETRY_WATCHDOG=1`](/docs/ru/errors#tune-retry-behavior): эта переменная бесконечно повторяет попытки при временных ошибках нехватки мощностей и, в Claude Code v2.1.199 или новее, повышает значение по умолчанию для других временных ошибок до `300` и снимает ограничение на эту переменную.

635* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: сторожевой таймер зависаний для субагентов. Пока включён сторожевой таймер потока, значение по умолчанию равно `CLAUDE_STREAM_IDLE_TIMEOUT_MS` плюс 5 минут, что составляет `600000`, если вы не увеличили эту переменную. При выключенном сторожевом таймере потока значение по умолчанию — `600000`. До v2.1.257 значение по умолчанию всегда было `600000`.637* `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`: сторожевой таймер зависаний для субагентов. Пока включён сторожевой таймер потока, значение по умолчанию равно `CLAUDE_STREAM_IDLE_TIMEOUT_MS` плюс 5 минут, что составляет `600000`, если вы не увеличили эту переменную. При выключенном сторожевом таймере потока значение по умолчанию — `600000`. До v2.1.257 значение по умолчанию всегда было `600000`.

636 638 

637 Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает субагента и сообщает о зависании родителю. Для фонового субагента он также помечает задачу как неудавшуюся и прикладывает частичный результат, если он есть.639 Таймер сбрасывается при каждом событии потока. При зависании Claude Code прерывает субагента и сообщает о зависании родителю. Для фонового субагента он также помечает задачу как неудавшуюся и прикладывает частичный результат, если он есть.


1561 parent_tool_use_id: string | null;1563 parent_tool_use_id: string | null;

1562 error?: SDKAssistantMessageError;1564 error?: SDKAssistantMessageError;

1563 aborted?: true;1565 aborted?: true;

1566 agent_id?: string;

1564 timestamp?: string;1567 timestamp?: string;

1565 context_usage?: SDKContextUsage;1568 context_usage?: SDKContextUsage;

1566 user_message_uuid?: string;1569 user_message_uuid?: string;


1580 1583 

1581`aborted` имеет значение `true`, когда прерывание или отмена усекли сообщение ассистента до завершения потока: сообщение не имеет `stop_reason`, и содержимое может заканчиваться посередине слова. Это поле отсутствует в нормально завершённых сообщениях. Требует Agent SDK v0.3.214 или позже.1584`aborted` имеет значение `true`, когда прерывание или отмена усекли сообщение ассистента до завершения потока: сообщение не имеет `stop_reason`, и содержимое может заканчиваться посередине слова. Это поле отсутствует в нормально завершённых сообщениях. Требует Agent SDK v0.3.214 или позже.

1582 1585 

1586`agent_id` определяет субагента, создавшего сообщение, и отсутствует у сообщений основного потока. Значение совпадает с `task_id` в событии [`task_started`](#sdktaskstartedmessage) и других событиях задачи этого субагента и не меняется, когда субагент [возобновляется](/docs/ru/agent-sdk/subagents#resume-subagents). Поле требует Agent SDK v0.3.292 или новее.

1587 

1588Сопоставляйте сообщения субагента с событиями его задачи по `agent_id`, а не по паре `parent_tool_use_id` сообщения и `tool_use_id` события задачи. Когда вызов инструмента возобновляет субагента, события задачи несут `tool_use_id` этого вызова, а сообщения сохраняют `parent_tool_use_id` вызова инструмента, который впервые запустил субагента, поэтому эти значения перестают совпадать.

1589 

1583Claude Code устанавливает `user_message_uuid` и `user_message_uuids` в первом сообщении ассистента в ходе при условиях, описанных в [`user_message_uuid`](#user_message_uuid). Когда Claude Code повторно запускает ход, прерванный перезапуском, сообщения ассистента повторного запуска, которые содержат эти поля, также содержат [`resume_reason`](#resume_reason).1590Claude Code устанавливает `user_message_uuid` и `user_message_uuids` в первом сообщении ассистента в ходе при условиях, описанных в [`user_message_uuid`](#user_message_uuid). Когда Claude Code повторно запускает ход, прерванный перезапуском, сообщения ассистента повторного запуска, которые содержат эти поля, также содержат [`resume_reason`](#resume_reason).

1584 1591 

1585`timestamp` — это время в формате ISO 8601, когда содержимое сообщения закончило генерироваться в процессе, который его создал. Значение берётся с часов этой машины, поэтому используйте его только для отображения и не упорядочивайте сообщения по нему. Один ход API может создать несколько сообщений ассистента с одинаковым `message.id`, каждое со своим `timestamp`. Когда это поле отсутствует, используйте время получения сообщения.1592`timestamp` — это время в формате ISO 8601, когда содержимое сообщения закончило генерироваться в процессе, который его создал. Значение берётся с часов этой машины, поэтому используйте его только для отображения и не упорядочивайте сообщения по нему. Один ход API может создать несколько сообщений ассистента с одинаковым `message.id`, каждое со своим `timestamp`. Когда это поле отсутствует, используйте время получения сообщения.


1597 type: "user";1604 type: "user";

1598 uuid?: UUID;1605 uuid?: UUID;

1599 session_id?: string;1606 session_id?: string;

1607 agent_id?: string;

1600 message: MessageParam; // From Anthropic SDK1608 message: MessageParam; // From Anthropic SDK

1601 pasted_content?: MessageParam["content"][];1609 pasted_content?: MessageParam["content"][];

1602 parent_tool_use_id: string | null;1610 parent_tool_use_id: string | null;


1636};1644};

1637```1645```

1638 1646 

1647Пользовательское сообщение, созданное субагентом, например `tool_result` для одного из его собственных вызовов инструментов, содержит `agent_id`. См. [`SDKAssistantMessage`](#sdkassistantmessage), где определены это поле и требования к версии.

1648 

1639В сообщении, содержащем блок `tool_result`, `tool_use_result` — это структурированный объект вывода инструмента, а не текст, отправленный модели. Его форма зависит от инструмента, указанного в соответствующем блоке `tool_use`, поэтому поле имеет тип `unknown`; встроенные формы перечислены в разделе [Типы вывода инструментов](#tool-output-types). Следующие результаты требуют обработки помимо их указанной формы:1649В сообщении, содержащем блок `tool_result`, `tool_use_result` — это структурированный объект вывода инструмента, а не текст, отправленный модели. Его форма зависит от инструмента, указанного в соответствующем блоке `tool_use`, поэтому поле имеет тип `unknown`; встроенные формы перечислены в разделе [Типы вывода инструментов](#tool-output-types). Следующие результаты требуют обработки помимо их указанной формы:

1640 1650 

1641* Инструмент `Agent`: `tool_use_result` имеет тип [`AgentOutput`](#agent-2). Отображайте результат на его основе, а не разбирая текст `tool_result`. Поле `content` результата `completed` содержит отчёт субагента или — для субагента, чей отчёт передаётся через вызов инструмента `SubagentHandback`, — короткую заметку об этой передаче вместо отчёта. В [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) в Claude Code v2.1.271 или новее каждый субагент, выдающий результат `completed`, отчитывается таким образом, если только он не является [форком](/docs/ru/sub-agents#fork-the-current-conversation), и Claude получает отчёт отдельным сообщением от субагента.1651* Инструмент `Agent`: `tool_use_result` имеет тип [`AgentOutput`](#agent-2). Отображайте результат на его основе, а не разбирая текст `tool_result`. Поле `content` результата `completed` содержит отчёт субагента или — для субагента, чей отчёт передаётся через вызов инструмента `SubagentHandback`, — короткую заметку об этой передаче вместо отчёта. В [авторежиме](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) в Claude Code v2.1.271 или новее каждый субагент, выдающий результат `completed`, отчитывается таким образом, если только он не является [форком](/docs/ru/sub-agents#fork-the-current-conversation), и Claude получает отчёт отдельным сообщением от субагента.


1992 `SDKPartialAssistantMessage`2002 `SDKPartialAssistantMessage`

1993</h3>2003</h3>

1994 2004 

1995Потоковое частичное сообщение (только когда `includePartialMessages` имеет значение true). Поле `parent_tool_use_id` всегда равно `null`: события потока выдаются только для основной сессии. Для атрибуции субагентов используйте полные сообщения, которые содержат `parent_tool_use_id`, или включите [`forwardSubagentText`](#options), чтобы получать текст и размышления субагентов как полные сообщения.2005Частичное сообщение при потоковой передаче (только когда `includePartialMessages` равно true).

2006 

2007Поле `parent_tool_use_id` всегда равно `null`: события потока выдаются только для основной сессии. Для определения принадлежности субагентам используйте полные сообщения, которые содержат [`agent_id`](#sdkassistantmessage) и `parent_tool_use_id`, или включите [`forwardSubagentText`](#options), чтобы получать текст и размышления субагентов в виде полных сообщений.

1996 2008 

1997```typescript theme={null}2009```typescript theme={null}

1998type SDKPartialAssistantMessage = {2010type SDKPartialAssistantMessage = {


3416type WebFetchInput = {3428type WebFetchInput = {

3417 url: string;3429 url: string;

3418 prompt: string;3430 prompt: string;

3431 offset?: number;

3419};3432};

3420```3433```

3421 3434 

3422Получает содержимое по URL и обрабатывает его с помощью модели AI.3435Получает содержимое по URL и обрабатывает его с помощью модели AI.

3423 3436 

3437`offset` — это число символов, которые нужно пропустить от начала страницы. Claude устанавливает его, чтобы продолжить чтение длинной страницы. Это поле требует Agent SDK v0.3.290 или позже.

3438 

3424<h3 id="websearch">3439<h3 id="websearch">

3425 WebSearch3440 WebSearch

3426</h3>3441</h3>


5775 task_type?: string;5790 task_type?: string;

5776 is_backgrounded?: boolean;5791 is_backgrounded?: boolean;

5777 spawn_depth?: number;5792 spawn_depth?: number;

5793 parent_task_id?: string;

5778 ambient?: boolean;5794 ambient?: boolean;

5779 uuid: UUID;5795 uuid: UUID;

5780 session_id: string;5796 session_id: string;


5792 5808 

5793[Возобновлённый субагент](/docs/ru/agent-sdk/subagents#resume-subagents) всегда сообщает `is_backgrounded: true`, потому что Claude Code запускает каждого возобновлённого субагента в фоне. Когда задача на переднем плане позже переходит в фоновый режим, Claude Code сообщает новое значение `is_backgrounded` в сообщении [`task_updated`](#sdktaskupdatedmessage), а не отправляет второй `task_started`.5809[Возобновлённый субагент](/docs/ru/agent-sdk/subagents#resume-subagents) всегда сообщает `is_backgrounded: true`, потому что Claude Code запускает каждого возобновлённого субагента в фоне. Когда задача на переднем плане позже переходит в фоновый режим, Claude Code сообщает новое значение `is_backgrounded` в сообщении [`task_updated`](#sdktaskupdatedmessage), а не отправляет второй `task_started`.

5794 5810 

5811`parent_task_id` содержит `task_id` субагента, который запустил эту задачу. Используйте его, чтобы группировать каждую задачу под запустившим её субагентом. Claude Code устанавливает его для задач субагентов, Bash и [Monitor](#monitor). Поле требует Agent SDK v0.3.292 или более поздней версии. Оно отсутствует, когда:

5812 

5813* Задачу запустил основной поток

5814* Claude Code больше не отслеживает родительскую задачу

5815* Задачу запустил [участник команды](/docs/ru/agent-teams) или агент внутри рабочего процесса

5816 

5817Родителем может быть задача на переднем плане или задача, которая уже завершилась, поэтому рассматривайте незнакомый идентификатор как отсутствие родителя.

5818 

5795<h3 id="sdktaskprogressmessage">5819<h3 id="sdktaskprogressmessage">

5796 `SDKTaskProgressMessage`5820 `SDKTaskProgressMessage`

5797</h3>5821</h3>


5848 `SDKBackgroundTasksChangedMessage`5872 `SDKBackgroundTasksChangedMessage`

5849</h3>5873</h3>

5850 5874 

5851Выдаётся всякий раз, когда меняется набор активных фоновых задач: задача запускается, завершается, принудительно останавливается, агент на переднем плане переводится в фоновый режим или меняется поле `description` или `ambient` задачи.5875Выдаётся всякий раз, когда меняется набор активных фоновых задач: задача запускается, завершается или принудительно останавливается; агент на переднем плане переводится в фоновый режим; или меняется поле `description`, `ambient` или `parent_task_id` задачи. Описание поля `parent_task_id` в каждой записи и требование к версии для него см. в [`SDKTaskStartedMessage`](#sdktaskstartedmessage).

5852 5876 

5853Массив `tasks` — это полный активный набор. Заменяйте любой кэшированный набор данными каждого сообщения, а не сопоставляйте события `task_started` и `task_notification`, чтобы следующее изменение состава исправляло любое пропущенное событие.5877Массив `tasks` — это полный активный набор. Заменяйте любой кэшированный набор данными каждого сообщения, а не сопоставляйте события `task_started` и `task_notification`, чтобы следующее изменение состава исправляло любое пропущенное событие.

5854 5878 

5855Порядок относительно этих событий отдельных задач не определён, поэтому не сопоставляйте эти два потока.5879Когда задача завершается, её [`task_updated`](#sdktaskupdatedmessage) и [`task_notification`](#sdktasknotificationmessage) приходят раньше, чем `background_tasks_changed`, который удаляет её из списка. В остальном порядок относительно событий отдельных задач не определён.

5856 5880 

5857При запуске ничего не выдаётся. Сбрасывайте набор до пустого всякий раз, когда процесс CLI сессии запускается или перезапускается, и позвольте следующему изменению состава заново его заполнить.5881При запуске ничего не выдаётся. Сбрасывайте набор до пустого всякий раз, когда процесс CLI сессии запускается или перезапускается, и позвольте следующему изменению состава заново его заполнить.

5858 5882 


5869 task_type: string;5893 task_type: string;

5870 subagent_type?: string;5894 subagent_type?: string;

5871 description: string;5895 description: string;

5896 parent_task_id?: string;

5872 ambient?: boolean;5897 ambient?: boolean;

5873 }[];5898 }[];

5874 uuid: UUID;5899 uuid: UUID;

Details

36 ```36 ```

37 37 

38 ```typescript TypeScript theme={null}38 ```typescript TypeScript theme={null}

39 async function handleToolRequest(toolName, input, options) {39 import type { CanUseTool } from "@anthropic-ai/claude-agent-sdk";

40 

41 const handleToolRequest: CanUseTool = async (toolName, input, options) => {

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

41 // Запросить у пользователя и вернуть разрешение или отказ43 // Запросите решение у пользователя здесь, затем верните разрешение или отказ

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

45 };

43 46 

44 const options = { canUseTool: handleToolRequest };47 const options = { canUseTool: handleToolRequest };

45 ```48 ```


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

441 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],444 tools: ["Read", "Glob", "Grep", "AskUserQuestion"],

442 canUseTool: async (toolName, input) => {445 canUseTool: async (toolName, input) => {

443 // Обработайте уточняющие вопросы здесь446 // Заглушка, которая одобряет каждый вызов. Шаг «Обнаружьте AskUserQuestion» заменяет её.

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

444 }448 }

445 }449 }

446 })) {450 })) {


763 767 

764 ```typescript TypeScript theme={null}768 ```typescript TypeScript theme={null}

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

770 import type { PermissionResult } from "@anthropic-ai/claude-agent-sdk";

766 import * as readline from "readline/promises";771 import * as readline from "readline/promises";

767 772 

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


783 }788 }

784 789 

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

786 async function handleAskUserQuestion(input: any) {791 async function handleAskUserQuestion(input: any): Promise<PermissionResult> {

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

788 793 

789 for (const q of input.questions) {794 for (const q of input.questions) {

agent-view.md +9 −6

Details

603 603 

604Вне Git-репозитория сессии пишут непосредственно в рабочий каталог и не изолированы друг от друга, поэтому не отправляйте параллельные сессии, редактирующие одни и те же файлы. Если вы используете другую систему контроля версий, настройте [хук `WorktreeCreate`](/docs/ru/worktrees#non-git-version-control), и Claude будет изолировать правки так же, как для Git.604Вне Git-репозитория сессии пишут непосредственно в рабочий каталог и не изолированы друг от друга, поэтому не отправляйте параллельные сессии, редактирующие одни и те же файлы. Если вы используете другую систему контроля версий, настройте [хук `WorktreeCreate`](/docs/ru/worktrees#non-git-version-control), и Claude будет изолировать правки так же, как для Git.

605 605 

606Если хук завершается с ошибкой в каталоге, который не является Git-репозиторием, Claude пропускает изоляцию для этого каталога и редактирует рабочий каталог на месте. Внутри Git-репозитория сессия, которую Claude переносит в worktree перед редактированием, не может редактировать файлы в общей рабочей копии, пока этот перенос не произойдёт.606Если хук завершается с ошибкой в каталоге, который не является Git-репозиторием, Claude пропускает изоляцию для этого каталога и редактирует рабочий каталог на месте. Внутри Git-репозитория сессия, которую Claude переносит в worktree перед редактированием, не может использовать инструменты `Edit`, `Write` или `NotebookEdit` в общей рабочей копии, пока этот перенос не произойдёт.

607 607 

608Чтобы узнать путь к worktree сессии, подключитесь к ней и проверьте её рабочий каталог.608Чтобы узнать путь к worktree сессии, подключитесь к ней и проверьте её рабочий каталог.

609 609 


825| `claude daemon logs` | Следить за файлом лога supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), выводя новые строки по мере их появления, пока вы не нажмете `Ctrl+C` |825| `claude daemon logs` | Следить за файлом лога supervisor, [`~/.claude/daemon.log`](#where-state-is-stored), выводя новые строки по мере их появления, пока вы не нажмете `Ctrl+C` |

826| `claude daemon stop --any` | Остановить процесс supervisor и фоновые сессии, которые он размещает. Передайте `--keep-workers`, чтобы оставить фоновые сессии работающими, чтобы следующий supervisor переподключился к ним. Следующий `claude agents` или `claude --bg` запускает новый supervisor |826| `claude daemon stop --any` | Остановить процесс supervisor и фоновые сессии, которые он размещает. Передайте `--keep-workers`, чтобы оставить фоновые сессии работающими, чтобы следующий supervisor переподключился к ним. Следующий `claude agents` или `claude --bg` запускает новый supervisor |

827 827 

828`claude attach` и `claude logs` могут принимать часть имени работающей сессии вместо ID, например `claude logs "auth refactor"`. Для передачи имени требуется Claude Code v2.1.290 или позже.828`claude attach` и `claude logs` могут принимать часть имени сессии вместо ID, например `claude logs "auth refactor"`. Для передачи имени требуется Claude Code v2.1.290 или позже.

829 829 

830<h3 id="list-sessions-as-json">830<h3 id="list-sessions-as-json">

831 Вывод сессий в виде JSON831 Вывод сессий в виде JSON


979 При открытии сессии сообщается, что у неё нет сохранённого транскрипта979 При открытии сессии сообщается, что у неё нет сохранённого транскрипта

980</h3>980</h3>

981 981 

982У остановленной сессии, которая была [переведена в фоновый режим из другого диалога](#from-inside-a-session) и остановлена до завершения её первого ответа, нечего возобновлять: пока этот первый ответ не завершён, диалог существует только в той сессии, из которой она была переведена в фоновый режим. `claude attach` отказывается открывать её с сообщением `This session has no saved transcript`.982Когда вы открываете сессию, которую [перевели в фоновый режим из другого диалога](#from-inside-a-session) и которая остановилась до того, как выполнила собственный ход, Claude Code возобновляет тот диалог. Если Claude Code не может найти диалог, он отказывается открывать сессию:

983 983 

984В представлении агентов при открытии этой строки под списком отображается `Press enter again to restart this session fresh`. Нажмите `Enter` на той же строке ещё раз, чтобы перезапустить сессию с пустым диалогом, или запустите `claude respawn <id>` из оболочки.984* `claude attach` выводит `This session has no saved transcript`.

985* Представление агентов показывает `Press enter again to restart this session fresh` под списком.

985 986 

986Исходный диалог остаётся нетронутым; возобновите его с помощью `claude --resume` или продолжайте работать в нём. Подробности см. в [справочнике по ошибкам](/docs/ru/errors#this-session-has-no-saved-transcript).987Нажмите `Enter` на той же строке ещё раз, чтобы перезапустить сессию с пустым диалогом, или запустите `claude respawn <id>` из оболочки.

988 

989Подробности см. в [справочнике по ошибкам](/docs/ru/errors#this-session-has-no-saved-transcript).

987 990 

988<h3 id="the-terminal-host-died-or-the-session-stopped-responding">991<h3 id="the-terminal-host-died-or-the-session-stopped-responding">

989 Хост-процесс терминала завершился аварийно или сессия перестала отвечать992 Хост-процесс терминала завершился аварийно или сессия перестала отвечать


1095 1098 

1096| Версия | Изменение |1099| Версия | Изменение |

1097| - | - |1100| - | - |

1098| v2.1.290 | [`claude attach` и `claude logs`](#manage-sessions-from-the-shell) могут принимать часть имени работающей сессии вместо ID. |1101| v2.1.290 | [`claude attach` и `claude logs`](#manage-sessions-from-the-shell) могут принимать часть имени сессии вместо ID. |

1099| v2.1.290 | `/model`, `/effort`, `/rename` и `/usage`, отправленные как [ответ из панели просмотра](#peek-and-reply) работающей сессии, выполняются сразу. |1102| v2.1.290 | `/model`, `/effort`, `/rename` и `/usage`, отправленные как [ответ из панели просмотра](#peek-and-reply) работающей сессии, выполняются сразу. |

1100| v2.1.290 | [Ответ из панели просмотра](#peek-and-reply), который не удаётся доставить, больше не сохраняется до следующего перезапуска, если он начинается с `/` или если он отвечает на вопрос с предопределёнными вариантами, пока процесс сессии работает. |1103| v2.1.290 | [Ответ из панели просмотра](#peek-and-reply), который не удаётся доставить, больше не сохраняется до следующего перезапуска, если он начинается с `/` или если он отвечает на вопрос с предопределёнными вариантами, пока процесс сессии работает. |

1101| v2.1.288 | `Ctrl+F` находит сессии по имени, а `Alt+↑` / `Alt+↓` переходят между заголовками групп. Эти сочетания клавиш, а также `Ctrl+R`, можно [переназначить](/docs/ru/keybindings#agents-actions). |1104| v2.1.288 | `Ctrl+F` находит сессии по имени, а `Alt+↑` / `Alt+↓` переходят между заголовками групп. Эти сочетания клавиш, а также `Ctrl+R`, можно [переназначить](/docs/ru/keybindings#agents-actions). |

Details

1237 1237 

1238CLI отправляет метрики, логи и, когда включено, трассировки на шлюз, который передаёт их дословно каждому настроенному назначению. Экспорты используют OpenTelemetry Protocol (OTLP) по HTTP. Чтобы пропустить реле и заставить сессии экспортировать прямо на ваш сборщик, [назовите сборщик в политике](#export-directly-to-your-collector). Смотрите [Monitoring usage](/docs/ru/monitoring-usage) для метрик и событий, которые CLI излучает.1238CLI отправляет метрики, логи и, когда включено, трассировки на шлюз, который передаёт их дословно каждому настроенному назначению. Экспорты используют OpenTelemetry Protocol (OTLP) по HTTP. Чтобы пропустить реле и заставить сессии экспортировать прямо на ваш сборщик, [назовите сборщик в политике](#export-directly-to-your-collector). Смотрите [Monitoring usage](/docs/ru/monitoring-usage) для метрик и событий, которые CLI излучает.

1239 1239 

1240В сессиях, в которые выполнен вход через `/login`, CLI штампует каждый экспорт идентификацией аутентифицированного пользователя, прочитанной из выданного шлюзом JWT: атрибуты `user.id`, `user.email` и `user.groups`. Атрибуция затрат и использования на разработчика поэтому работает без конфигурации на стороне разработчика.1240В сессиях, в которые выполнен вход через `/login`, CLI штампует каждый экспорт идентификацией аутентифицированного пользователя, прочитанной из выданного шлюзом JWT: атрибуты `user.id`, `user.email` и `user.groups`. Атрибуция затрат и использования на разработчика поэтому работает без конфигурации на стороне разработчика. События, которые Claude Code записывает в лог до входа разработчика, [не несут этой идентификации](/docs/ru/monitoring-usage#standard-attributes).

1241 1241 

1242[Claude Desktop](#claude-desktop-overlay) и сессии Cowork, в которые выполнен вход через шлюз, штампуют свою телеметрию с `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом на `user.email` или `user.groups`. `user.groups` — это список групп IdP, разделённый запятыми.1242[Claude Desktop](#claude-desktop-overlay) и сессии Cowork, в которые выполнен вход через шлюз, штампуют свою телеметрию с `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом на `user.email` или `user.groups`. `user.groups` — это список групп IdP, разделённый запятыми.

1243 1243 

Details

516 Телеметрия516 Телеметрия

517</h2>517</h2>

518 518 

519Шлюз предоставляет вам метрики использования для каждого разработчика без какой-либо конфигурации OTEL для каждой машины. Claude Code выдает метрики OpenTelemetry (OTLP), логи и трассировки с согласия пользователя; [Мониторинг использования](/docs/ru/monitoring-usage) охватывает всё, что сообщает CLI. В сеансах, вошедших через `/login`, CLI помечает каждый экспорт аутентифицированными атрибутами идентификации IdP `user.id`, `user.email` и `user.groups`, поэтому использование суммируется для каждого разработчика.519Шлюз предоставляет вам метрики использования для каждого разработчика без какой-либо конфигурации OTEL для каждой машины. Claude Code выдает метрики OpenTelemetry (OTLP), логи и трассировки с согласия пользователя; [Мониторинг использования](/docs/ru/monitoring-usage) охватывает всё, что сообщает CLI. В сессиях, вошедших через `/login`, CLI [помечает каждый экспорт](/docs/ru/monitoring-usage#standard-attributes) аутентифицированными атрибутами идентификации IdP `user.id`, `user.email` и `user.groups`, поэтому использование суммируется для каждого разработчика.

520 520 

521Сам шлюз является аутентифицированным реле OTLP. Установите [`telemetry.forward_to`](/docs/ru/claude-apps-gateway-config#telemetry) вместе с `listen.public_url`, и он отправляет параметры экспортера OTEL каждому подключённому клиенту и пересылает их трафик OTLP дословно каждому указанному вами месту назначения. Каждое место назначения независимо выбирает метрики, логи и трассировки, а по умолчанию используются только метрики; см. [справочник `telemetry`](/docs/ru/claude-apps-gateway-config#telemetry) для полей для каждого сигнала и их компромиссов по чувствительности. Шлюз не буферизирует, не агрегирует и не хранит телеметрию, поэтому место, где приземляются данные, полностью зависит от конфигурации экспортера сборщика.521Сам шлюз является аутентифицированным реле OTLP. Установите [`telemetry.forward_to`](/docs/ru/claude-apps-gateway-config#telemetry) вместе с `listen.public_url`, и он отправляет параметры экспортера OTEL каждому подключённому клиенту и пересылает их трафик OTLP дословно каждому указанному вами месту назначения. Каждое место назначения независимо выбирает метрики, логи и трассировки, а по умолчанию используются только метрики; см. [справочник `telemetry`](/docs/ru/claude-apps-gateway-config#telemetry) для полей для каждого сигнала и их компромиссов по чувствительности. Шлюз не буферизирует, не агрегирует и не хранит телеметрию, поэтому место, где приземляются данные, полностью зависит от конфигурации экспортера сборщика.

522 522 

Details

483Переоткройте сессию из [claude.ai/code](https://claude.ai/code), чтобы подготовить новую виртуальную машину:483Переоткройте сессию из [claude.ai/code](https://claude.ai/code), чтобы подготовить новую виртуальную машину:

484 484 

485* **Восстанавливается**: история вашего диалога485* **Восстанавливается**: история вашего диалога

486* **Не восстанавливается**: фоновая работа, которая всё ещё выполнялась, когда виртуальная машина была отозвана, например субагенты и shell-команды486* **Не восстанавливается**: фоновая работа, которая всё ещё выполнялась, когда виртуальная машина была отозвана, например субагенты и shell-команды, а также ожидающее пробуждение [самостоятельно регулируемого `/loop`](/docs/ru/scheduled-tasks#let-claude-choose-the-interval). Чтобы перезапустить цикл, снова выполните `/loop`.

487 487 

488<h2 id="limitations">488<h2 id="limitations">

489 Ограничения489 Ограничения

Details

489* **Routines**: когда вы просите запланированную работу в проекте, Claude создает [routine](/docs/ru/routines), которая работает как потоки в этом проекте и отображается на его вкладке **Routines**. Routines, которые вы создаете вне проекта, продолжают работать самостоятельно.489* **Routines**: когда вы просите запланированную работу в проекте, Claude создает [routine](/docs/ru/routines), которая работает как потоки в этом проекте и отображается на его вкладке **Routines**. Routines, которые вы создаете вне проекта, продолжают работать самостоятельно.

490* **Remote Control**: [Remote Control](/docs/ru/remote-control) соединяет claude.ai с сеансом Claude Code, работающим на вашей машине. Когда вы просите Claude в проекте запустить поток на вашем компьютере, проект [использует Remote Control для этого](#run-a-thread-on-your-own-computer).490* **Remote Control**: [Remote Control](/docs/ru/remote-control) соединяет claude.ai с сеансом Claude Code, работающим на вашей машине. Когда вы просите Claude в проекте запустить поток на вашем компьютере, проект [использует Remote Control для этого](#run-a-thread-on-your-own-computer).

491* **Local sessions и agent view**: сеанс, который вы запускаете самостоятельно в вашем терминале, IDE или локальной среде настольного приложения, не может быть добавлен в проект. [Agent view](/docs/ru/agent-view) — это экран для отслеживания нескольких локальных сеансов рядом, и вы по-прежнему запускаете каждый и даете ему его задачу самостоятельно.491* **Local sessions и agent view**: сеанс, который вы запускаете самостоятельно в вашем терминале, IDE или локальной среде настольного приложения, не может быть добавлен в проект. [Agent view](/docs/ru/agent-view) — это экран для отслеживания нескольких локальных сеансов рядом, и вы по-прежнему запускаете каждый и даете ему его задачу самостоятельно.

492* **Worktrees**: [worktree](/docs/ru/worktrees) дает каждому локальному сеансу свою рабочую копию репозитория, поэтому параллельные сеансы на вашей машине не перезаписывают друг друга. Облачным потокам они не нужны: каждый клонирует свои репозитории в свою облачную песочницу и работает на своей ветке.492* **Worktrees**: [worktree](/docs/ru/worktrees) дает каждой локальной сессии собственную рабочую копию репозитория. Облачным потокам они не нужны: каждый клонирует свои репозитории в собственную облачную песочницу и работает в собственной ветке.

493* **Agent teams**: [agent team](/docs/ru/agent-teams) — это один сеанс, который запускает сеансы товарищей для одной задачи, на вашей машине или внутри облачного сеанса, и заканчивается этой задачей.493* **Agent teams**: [agent team](/docs/ru/agent-teams) — это один сеанс, который запускает сеансы товарищей для одной задачи, на вашей машине или внутри облачного сеанса, и заканчивается этой задачей.

494* **Subagents**: [subagent](/docs/ru/sub-agents) работает внутри одного сеанса, выполняет побочную задачу в своем собственном контекстном окне и возвращает резюме в этот сеанс. Потоки проекта — это целые сеансы, которые Claude запускает и которые отчитываются перед разговором проекта, и поток все еще может использовать subagents для своих собственных побочных задач.494* **Subagents**: [subagent](/docs/ru/sub-agents) работает внутри одного сеанса, выполняет побочную задачу в своем собственном контекстном окне и возвращает резюме в этот сеанс. Потоки проекта — это целые сеансы, которые Claude запускает и которые отчитываются перед разговором проекта, и поток все еще может использовать subagents для своих собственных побочных задач.

495* **Projects в claude.ai chat и Cowork**: [более ранний опыт Projects](https://support.claude.com/en/articles/9517075-what-are-projects), который группирует разговоры и справочные файлы без потоков или координатора. Эти проекты продолжают работать так, как они работают сегодня, пока переработанный опыт не достигнет их.495* **Projects в claude.ai chat и Cowork**: [более ранний опыт Projects](https://support.claude.com/en/articles/9517075-what-are-projects), который группирует разговоры и справочные файлы без потоков или координатора. Эти проекты продолжают работать так, как они работают сегодня, пока переработанный опыт не достигнет их.

Details

28| `claude auth logout` | Выйти из своей учётной записи Anthropic | `claude auth logout` |28| `claude auth logout` | Выйти из своей учётной записи Anthropic | `claude auth logout` |

29| `claude auth status` | Показать статус аутентификации в формате JSON. Используйте `--text` для удобочитаемого вывода. Завершается с кодом 0, если вы вошли, и 1, если нет. JSON включает поле `configDirectory` с указанием [каталога конфигурации](/docs/ru/claude-directory), который использует CLI. Это поле требует Claude Code v2.1.268 или новее. Поле `authMethod` в JSON принимает одно из значений: `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` или `third_party` | `claude auth status` |29| `claude auth status` | Показать статус аутентификации в формате JSON. Используйте `--text` для удобочитаемого вывода. Завершается с кодом 0, если вы вошли, и 1, если нет. JSON включает поле `configDirectory` с указанием [каталога конфигурации](/docs/ru/claude-directory), который использует CLI. Это поле требует Claude Code v2.1.268 или новее. Поле `authMethod` в JSON принимает одно из значений: `none`, `claude.ai`, `oauth_token`, `api_key`, `api_key_helper` или `third_party` | `claude auth status` |

30| `claude agents` | Открыть [представление агентов](/docs/ru/agent-view) для мониторинга и отправки параллельных фоновых сессий. Используйте `--cwd <path>` для отображения только сессий, запущенных в этом каталоге, или `--json` для вывода активных сессий в виде массива JSON для скриптов (`--json --all` также включает завершённые фоновые сессии). Передайте `--permission-mode`, `--model`, `--effort` или `--agent` для установки [значений по умолчанию для отправленных сессий](/docs/ru/agent-view#permission-mode-model-and-effort). Принимает `--settings`, `--add-dir`, `--plugin-dir` и `--mcp-config`, как и команда верхнего уровня `claude`. Открытие представления агентов требует интерактивного терминала | `claude agents --json` |30| `claude agents` | Открыть [представление агентов](/docs/ru/agent-view) для мониторинга и отправки параллельных фоновых сессий. Используйте `--cwd <path>` для отображения только сессий, запущенных в этом каталоге, или `--json` для вывода активных сессий в виде массива JSON для скриптов (`--json --all` также включает завершённые фоновые сессии). Передайте `--permission-mode`, `--model`, `--effort` или `--agent` для установки [значений по умолчанию для отправленных сессий](/docs/ru/agent-view#permission-mode-model-and-effort). Принимает `--settings`, `--add-dir`, `--plugin-dir` и `--mcp-config`, как и команда верхнего уровня `claude`. Открытие представления агентов требует интерактивного терминала | `claude agents --json` |

31| `claude attach <id\|name>` | Подключиться к [фоновой сессии](/docs/ru/agent-view#manage-sessions-from-the-shell) в этом терминале. Передача части имени работающей сессии вместо ID требует Claude Code v2.1.290 или новее | `claude attach 7c5dcf5d` |31| `claude attach <id\|name>` | Подключиться к [фоновой сессии](/docs/ru/agent-view#manage-sessions-from-the-shell) в этом терминале. Передача части имени сессии вместо ID требует Claude Code v2.1.290 или новее | `claude attach 7c5dcf5d` |

32| `claude auto-mode defaults` | Вывести встроенные правила классификатора [авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) в формате JSON. Используйте `claude auto-mode config`, чтобы увидеть вашу действующую конфигурацию с применёнными настройками. `--label <prefix>` выводит только правила, метка которых начинается с этого префикса, без учёта регистра. Требует Claude Code v2.1.208 или новее | `claude auto-mode defaults --label 'Git Destructive'` |32| `claude auto-mode defaults` | Вывести встроенные правила классификатора [авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) в формате JSON. Используйте `claude auto-mode config`, чтобы увидеть вашу действующую конфигурацию с применёнными настройками. `--label <prefix>` выводит только правила, метка которых начинается с этого префикса, без учёта регистра. Требует Claude Code v2.1.208 или новее | `claude auto-mode defaults --label 'Git Destructive'` |

33| `claude auto-mode reset` | Восстановить конфигурацию [авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) по умолчанию, удалив раздел `autoMode` из файла пользовательских настроек. Запрашивает подтверждение перед записью; передайте `-y`/`--yes`, чтобы пропустить запрос. Правила из [управляемых настроек](/docs/ru/server-managed-settings) или флага `--settings` по-прежнему применяются. Требует Claude Code v2.1.212 или новее. См. [Проверить значения по умолчанию и вашу действующую конфигурацию](/docs/ru/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |33| `claude auto-mode reset` | Восстановить конфигурацию [авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) по умолчанию, удалив раздел `autoMode` из файла пользовательских настроек. Запрашивает подтверждение перед записью; передайте `-y`/`--yes`, чтобы пропустить запрос. Правила из [управляемых настроек](/docs/ru/server-managed-settings) или флага `--settings` по-прежнему применяются. Требует Claude Code v2.1.212 или новее. См. [Проверить значения по умолчанию и вашу действующую конфигурацию](/docs/ru/auto-mode-config#inspect-the-defaults-and-your-effective-config) | `claude auto-mode reset --yes` |

34| `claude daemon logs` | Отслеживать файл лога [супервизора](/docs/ru/agent-view#the-supervisor-process) фоновых сессий, `~/.claude/daemon.log`, выводя новые строки по мере их появления, пока вы не нажмёте `Ctrl+C` | `claude daemon logs` |34| `claude daemon logs` | Отслеживать файл лога [супервизора](/docs/ru/agent-view#the-supervisor-process) фоновых сессий, `~/.claude/daemon.log`, выводя новые строки по мере их появления, пока вы не нажмёте `Ctrl+C` | `claude daemon logs` |


37| `claude daemon stop --any` | Остановить [супервизор](/docs/ru/agent-view#the-supervisor-process) фоновых сессий и размещённые им сессии. Передайте `--keep-workers`, чтобы оставить фоновые сессии работающими, и следующий супервизор переподключится к ним. `--any` подтверждает остановку супервизора по требованию, который используется по умолчанию. Используйте это для восстановления после [неотвечающего супервизора](/docs/ru/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |37| `claude daemon stop --any` | Остановить [супервизор](/docs/ru/agent-view#the-supervisor-process) фоновых сессий и размещённые им сессии. Передайте `--keep-workers`, чтобы оставить фоновые сессии работающими, и следующий супервизор переподключится к ним. `--any` подтверждает остановку супервизора по требованию, который используется по умолчанию. Используйте это для восстановления после [неотвечающего супервизора](/docs/ru/agent-view#agent-view-says-the-background-service-did-not-respond) | `claude daemon stop --any --keep-workers` |

38| `claude doctor` | Вывести диагностику установки и настроек (только для чтения) из терминала без запуска сессии, включая состояние установки, ошибки валидации файлов настроек и доступность Remote Control. Для проверки настройки внутри сессии, которая также может применять исправления, запустите [`/doctor`](/docs/ru/commands#all-commands) | `claude doctor` |38| `claude doctor` | Вывести диагностику установки и настроек (только для чтения) из терминала без запуска сессии, включая состояние установки, ошибки валидации файлов настроек и доступность Remote Control. Для проверки настройки внутри сессии, которая также может применять исправления, запустите [`/doctor`](/docs/ru/commands#all-commands) | `claude doctor` |

39| `claude import [source]` | Запустить интерактивную сессию, которая выполняет [`/import`](/docs/ru/commands#all-commands) для переноса конфигурации из других агентов для программирования в Claude Code. Принимает те же опции `--dry-run` и `--yes`, что и команда. Недоступно на Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry или Claude Platform on AWS. Также недоступно, если вы отключили [получение флагов функций](/docs/ru/env-vars#features-that-need-feature-flag-fetching). Требует Claude Code v2.1.213 или новее | `claude import codex --dry-run` |39| `claude import [source]` | Запустить интерактивную сессию, которая выполняет [`/import`](/docs/ru/commands#all-commands) для переноса конфигурации из других агентов для программирования в Claude Code. Принимает те же опции `--dry-run` и `--yes`, что и команда. Недоступно на Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry или Claude Platform on AWS. Также недоступно, если вы отключили [получение флагов функций](/docs/ru/env-vars#features-that-need-feature-flag-fetching). Требует Claude Code v2.1.213 или новее | `claude import codex --dry-run` |

40| `claude logs <id\|name>` | Вывести недавний вывод [фоновой сессии](/docs/ru/agent-view#manage-sessions-from-the-shell). Передача части имени работающей сессии вместо ID требует Claude Code v2.1.290 или новее | `claude logs 7c5dcf5d` |40| `claude logs <id\|name>` | Вывести недавний вывод [фоновой сессии](/docs/ru/agent-view#manage-sessions-from-the-shell). Передача части имени сессии вместо ID требует Claude Code v2.1.290 или новее | `claude logs 7c5dcf5d` |

41| `claude mcp` | Настроить серверы Model Context Protocol (MCP) | См. [документацию Claude Code по MCP](/docs/ru/mcp). |41| `claude mcp` | Настроить серверы Model Context Protocol (MCP) | См. [документацию Claude Code по MCP](/docs/ru/mcp). |

42| `claude mcp login <name>` | Запустить процесс OAuth настроенного MCP-сервера без открытия интерактивной панели `/mcp`. Работает для HTTP, SSE и серверов коннекторов claude.ai. Добавьте `--no-browser` при работе через SSH, чтобы вывести URL авторизации вместо открытия браузера, а затем вставьте URL перенаправления обратно в поле ввода. См. [Аутентификация из командной строки](/docs/ru/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |42| `claude mcp login <name>` | Запустить процесс OAuth настроенного MCP-сервера без открытия интерактивной панели `/mcp`. Работает для HTTP, SSE и серверов коннекторов claude.ai. Добавьте `--no-browser` при работе через SSH, чтобы вывести URL авторизации вместо открытия браузера, а затем вставьте URL перенаправления обратно в поле ввода. См. [Аутентификация из командной строки](/docs/ru/mcp#authenticate-from-the-command-line) | `claude mcp login sentry` |

43| `claude mcp logout <name>` | Очистить сохранённые учётные данные OAuth для MCP-сервера | `claude mcp logout sentry` |43| `claude mcp logout <name>` | Очистить сохранённые учётные данные OAuth для MCP-сервера | `claude mcp logout sentry` |


106| `--input-format` | Указать формат входных данных для режима печати (опции: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |106| `--input-format` | Указать формат входных данных для режима печати (опции: `text`, `stream-json`) | `claude -p --output-format json --input-format stream-json` |

107| `--json-schema` | Получить проверенный вывод JSON, соответствующий JSON Schema после завершения рабочего процесса агента (только режим печати). См. [структурированные выходы](/docs/ru/agent-sdk/structured-outputs). Claude Code выходит с ошибкой при недействительной схеме и принимает ключевое слово `format` как аннотацию без проверки на стороне клиента | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |107| `--json-schema` | Получить проверенный вывод JSON, соответствующий JSON Schema после завершения рабочего процесса агента (только режим печати). См. [структурированные выходы](/docs/ru/agent-sdk/structured-outputs). Claude Code выходит с ошибкой при недействительной схеме и принимает ключевое слово `format` как аннотацию без проверки на стороне клиента | `claude -p --json-schema '{"type":"object","properties":{...}}' "query"` |

108| `--maintenance` | Запустить [Setup hooks](/docs/ru/hooks#setup) с matcher `maintenance` перед сеансом (только режим печати) | `claude -p --maintenance "query"` |108| `--maintenance` | Запустить [Setup hooks](/docs/ru/hooks#setup) с matcher `maintenance` перед сеансом (только режим печати) | `claude -p --maintenance "query"` |

109| `--max-budget-usd` | Максимальная сумма в долларах, которую можно потратить на вызовы API до остановки (только в режиме печати). Claude Code сверяет лимит со своей [клиентской оценкой стоимости](/docs/ru/agent-sdk/cost-tracking#estimates-not-billing), которая может отличаться от вашего счёта. Расходы [субагентов](/docs/ru/sub-agents) учитываются в лимите. Когда вы возвращаетесь к диалогу с `--continue` или `--resume`, итоги, [восстановленные из предыдущих запусков](/docs/ru/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls), в нём не учитываются. Когда расходы достигают лимита, запуск ещё одного субагента завершается ошибкой `Budget limit reached`, а Claude Code останавливает всё ещё работающих фоновых субагентов; для этого поведения ограничения требуется Claude Code v2.1.217 или новее | `claude -p --max-budget-usd 5.00 "query"` |109| `--max-budget-usd` | Остановить запуск, как только оценочные расходы на вызовы API достигнут этой суммы (только режим печати). Claude Code сверяет лимит со своей [клиентской оценкой стоимости](/docs/ru/agent-sdk/cost-tracking#estimates-not-billing), которая может отличаться от вашего счёта. Расходы [субагентов](/docs/ru/sub-agents) учитываются в лимите. Расходы могут превысить лимит, поэтому [оставляйте запас](/docs/ru/agent-sdk/agent-loop#budget-headroom). Когда вы возвращаетесь к диалогу с `--continue` или `--resume`, итоги, [восстановленные из предыдущих запусков](/docs/ru/agent-sdk/cost-tracking#accumulate-costs-across-multiple-calls), в нём не учитываются. Когда расходы достигают лимита, запуск ещё одного субагента завершается ошибкой `Budget limit reached`, а Claude Code останавливает всё ещё работающих фоновых субагентов; для этого поведения ограничения требуется Claude Code v2.1.217 или новее | `claude -p --max-budget-usd 5.00 "query"` |

110| `--max-turns` | Ограничить количество агентских ходов (только режим печати). Выходит с ошибкой при достижении лимита. По умолчанию нет лимита. С `--input-format stream-json` сообщение, всё ещё находящееся в очереди, когда лимит заканчивает ход, остаётся в очереди и начинает новый ход с собственным лимитом | `claude -p --max-turns 3 "query"` |110| `--max-turns` | Ограничить количество агентских ходов (только режим печати). Выходит с ошибкой при достижении лимита. По умолчанию нет лимита. С `--input-format stream-json` сообщение, всё ещё находящееся в очереди, когда лимит заканчивает ход, остаётся в очереди и начинает новый ход с собственным лимитом | `claude -p --max-turns 3 "query"` |

111| `--mcp-config` | Загрузить MCP серверы из JSON файлов или строк (разделённые пробелом). Когда вы передаёте этот флаг с `-p`, Claude Code ждёт, пока всё ещё ожидающие серверы подключатся перед запуском первого хода, до стартового таймаута [`MCP_TIMEOUT`](/docs/ru/env-vars), 30 секунд по умолчанию; сервер с [кэшированным списком инструментов](/docs/ru/mcp#managing-your-servers) пропускает ожидание и подключается при первом использовании. Ожидание требует Claude Code v2.1.221 или позже | `claude --mcp-config ./mcp.json` |111| `--mcp-config` | Загрузить MCP серверы из JSON файлов или строк (разделённые пробелом). Когда вы передаёте этот флаг с `-p`, Claude Code ждёт, пока всё ещё ожидающие серверы подключатся перед запуском первого хода, до стартового таймаута [`MCP_TIMEOUT`](/docs/ru/env-vars), 30 секунд по умолчанию; сервер с [кэшированным списком инструментов](/docs/ru/mcp#managing-your-servers) пропускает ожидание и подключается при первом использовании. Ожидание требует Claude Code v2.1.221 или позже | `claude --mcp-config ./mcp.json` |

112| `--model` | Устанавливает модель для текущего сеанса с [псевдонимом модели](/docs/ru/model-config#model-aliases), таким как `sonnet`, `opus`, `haiku` или `fable`, или полным именем модели. Переопределяет параметр [`model`](/docs/ru/settings-reference#model) и [`ANTHROPIC_MODEL`](/docs/ru/model-config#environment-variables) | `claude --model claude-sonnet-5` |112| `--model` | Устанавливает модель для текущего сеанса с [псевдонимом модели](/docs/ru/model-config#model-aliases), таким как `sonnet`, `opus`, `haiku` или `fable`, или полным именем модели. Переопределяет параметр [`model`](/docs/ru/settings-reference#model) и [`ANTHROPIC_MODEL`](/docs/ru/model-config#environment-variables) | `claude --model claude-sonnet-5` |

Details

307| | Доступно в облачных сессиях | Почему |307| | Доступно в облачных сессиях | Почему |

308| :- | :- | :- |308| :- | :- | :- |

309| `CLAUDE.md` вашего репозитория | Да | Часть клона |309| `CLAUDE.md` вашего репозитория | Да | Часть клона |

310| Хуки и правила разрешений в `.claude/settings.json` вашего репозитория | Да, в сессии с одним репозиторием | Часть клона. Сессия с несколькими репозиториями, включая поток [проекта](/docs/ru/claude-projects#what-threads-pick-up-from-your-repositories), начинается уровнем выше клонов и не читает их |310| Хуки и правила разрешений в `.claude/settings.json` вашего репозитория | Да, в сессии с одним репозиторием | Часть клона. Для сессии с несколькими репозиториями смотрите, [какие настройки она читает](/docs/ru/settings#settings-in-cloud-sessions) |

311| MCP-серверы в `.mcp.json` вашего репозитория | Да, в сессии с одним репозиторием | Часть клона, находится из рабочего каталога сессии |311| MCP-серверы в `.mcp.json` вашего репозитория | Да, в сессии с одним репозиторием | Часть клона, находится из рабочего каталога сессии. Для самостоятельно размещённой среды смотрите, [настройки какого репозитория применяются](/docs/ru/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories) |

312| `.claude/rules/` вашего репозитория | Да | Часть клона |312| `.claude/rules/` вашего репозитория | Да | Часть клона |

313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` вашего репозитория | Да | Часть клона |313| `.claude/skills/`, `.claude/agents/`, `.claude/commands/` вашего репозитория | Да | Часть клона |

314| Плагины и маркетплейсы, объявленные в `.claude/settings.json` вашего репозитория | Нет | Облачная сессия не устанавливает плагины, которые репозиторий включает в [`enabledPlugins`](/docs/ru/settings-reference#enabledplugins), включая плагины из маркетплейсов, которые он перечисляет в [`extraKnownMarketplaces`](/docs/ru/settings-reference#extraknownmarketplaces) |314| Плагины и маркетплейсы, объявленные в `.claude/settings.json` вашего репозитория | Нет | Облачная сессия не устанавливает плагины, которые репозиторий включает в [`enabledPlugins`](/docs/ru/settings-reference#enabledplugins), включая плагины из маркетплейсов, которые он перечисляет в [`extraKnownMarketplaces`](/docs/ru/settings-reference#extraknownmarketplaces) |


575 575 

576Hooks SessionStart ведут себя одинаково в облаке и локально, с этими оговорками:576Hooks SessionStart ведут себя одинаково в облаке и локально, с этими оговорками:

577 577 

578* **Один репозиторий на сеанс**: сеанс с несколькими репозиториями не загружает hooks из `.claude/settings.json` любого репозитория, поэтому hook SessionStart, который вы определяете там, не запускается. Установите зависимости для этих сеансов с помощью [скрипта установки](#setup-scripts) вместо этого.578* **Один репозиторий на сессию**: в среде, размещённой Anthropic, сессия с несколькими репозиториями не загружает хуки из `.claude/settings.json` ни одного репозитория, поэтому определённый там хук SessionStart не запускается. Вместо этого устанавливайте зависимости для таких сессий с помощью [скрипта установки](#setup-scripts). Для самостоятельно размещённой среды смотрите, [настройки какого репозитория применяются](/docs/ru/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

579* **Нет облачного ограничения**: hooks запускаются в локальных и облачных сеансах. Чтобы пропустить локальное выполнение, выйдите рано, если переменная окружения `CLAUDE_CODE_REMOTE` не `true`, как показано в [скрипте установки зависимостей](#install-dependencies-with-a-sessionstart-hook).579* **Нет облачного ограничения**: hooks запускаются в локальных и облачных сеансах. Чтобы пропустить локальное выполнение, выйдите рано, если переменная окружения `CLAUDE_CODE_REMOTE` не `true`, как показано в [скрипте установки зависимостей](#install-dependencies-with-a-sessionstart-hook).

580* **Требует сетевого доступа**: команды установки должны достичь реестров пакетов. Если ваша среда использует **None** сетевой доступ, эти hooks не удаются. [Список разрешений по умолчанию](#default-allowed-domains) под **Trusted** охватывает npm, PyPI, RubyGems и crates.io.580* **Требует сетевого доступа**: команды установки должны достичь реестров пакетов. Если ваша среда использует **None** сетевой доступ, эти hooks не удаются. [Список разрешений по умолчанию](#default-allowed-domains) под **Trusted** охватывает npm, PyPI, RubyGems и crates.io.

581* **Совместимость с прокси**: в среде, размещённой Anthropic, весь исходящий трафик проходит через [прокси безопасности](#security-proxy), и некоторые менеджеры пакетов не работают правильно с этим прокси; Bun — известный пример. В [самостоятельно размещённой среде](/docs/ru/self-hosted-environments-deploy#default-deny-egress) исходящий трафик проходит через вашу собственную границу сети вместо этого.581* **Совместимость с прокси**: в среде, размещённой Anthropic, весь исходящий трафик проходит через [прокси безопасности](#security-proxy), и некоторые менеджеры пакетов не работают правильно с этим прокси; Bun — известный пример. В [самостоятельно размещённой среде](/docs/ru/self-hosted-environments-deploy#default-deny-egress) исходящий трафик проходит через вашу собственную границу сети вместо этого.

desktop.md +1 −1

Details

396 Параллельная работа с сессиями396 Параллельная работа с сессиями

397</h3>397</h3>

398 398 

399Нажмите **+ New session** в боковой панели или нажмите **Cmd+N** на macOS или **Ctrl+N** на Windows, чтобы работать над несколькими задачами параллельно. Нажимайте **Ctrl+Tab** и **Ctrl+Shift+Tab**, чтобы циклически переключаться между сессиями в боковой панели. Для Git-репозиториев выберите опцию **worktree** рядом с названием ветки, чтобы дать сессии собственную изолированную копию вашего проекта с помощью [Git worktrees](/docs/ru/worktrees), поэтому изменения в одной сессии не влияют на другие сессии, пока вы не сделаете коммит.399Нажмите **+ New session** в боковой панели или нажмите **Cmd+N** на macOS или **Ctrl+N** на Windows, чтобы работать над несколькими задачами параллельно. Нажимайте **Ctrl+Tab** и **Ctrl+Shift+Tab**, чтобы циклически переключаться между сессиями в боковой панели. Для Git-репозиториев выберите опцию **worktree** рядом с названием ветки, чтобы дать сессии собственную изолированную копию вашего проекта с помощью [Git worktrees](/docs/ru/worktrees).

400 400 

401Чтобы просматривать две сессии одновременно, удерживайте **Cmd** на macOS или **Ctrl** на Windows и нажмите на сессию в боковой панели. Сессия откроется во второй панели рядом с той, которая у вас уже открыта. Пока разделение активно, нажатие на другую сессию в боковой панели заменяет ту панель, которая находится в фокусе. Нажмите **Cmd+\\** на macOS или **Ctrl+\\** на Windows, чтобы закрыть панель в фокусе и вернуться к одной сессии.401Чтобы просматривать две сессии одновременно, удерживайте **Cmd** на macOS или **Ctrl** на Windows и нажмите на сессию в боковой панели. Сессия откроется во второй панели рядом с той, которая у вас уже открыта. Пока разделение активно, нажатие на другую сессию в боковой панели заменяет ту панель, которая находится в фокусе. Нажмите **Cmd+\\** на macOS или **Ctrl+\\** на Windows, чтобы закрыть панель в фокусе и вернуться к одной сессии.

402 402 

env-vars.md +2 −2

Details

204| `CLAUDE_AFK_TIMEOUT_MS` | Через сколько миллисекунд бездействия неотвеченное диалоговое окно [`AskUserQuestion`](/docs/ru/tools-reference) автоматически продолжает работу без вас. Автопродолжение по умолчанию отключено; включите его с помощью настройки [`askUserQuestionTimeout`](/docs/ru/settings-reference#askuserquestiontimeout). Эта переменная — переопределение для демонстраций и автоматических тестов: если она задана, она имеет приоритет над этой настройкой и включает автопродолжение, даже если настройка не задана или равна `never`. Значение `0` не отключает таймаут, а сразу закрывает диалоговое окно. Игнорируется в [настройках проекта и локальных настройках](/docs/ru/settings-reference#variables-claude-code-ignores-in-env). До v2.1.200 автопродолжение было включено по умолчанию с таймаутом `60000` (60 секунд). Требуется Claude Code v2.1.198 или новее |204| `CLAUDE_AFK_TIMEOUT_MS` | Через сколько миллисекунд бездействия неотвеченное диалоговое окно [`AskUserQuestion`](/docs/ru/tools-reference) автоматически продолжает работу без вас. Автопродолжение по умолчанию отключено; включите его с помощью настройки [`askUserQuestionTimeout`](/docs/ru/settings-reference#askuserquestiontimeout). Эта переменная — переопределение для демонстраций и автоматических тестов: если она задана, она имеет приоритет над этой настройкой и включает автопродолжение, даже если настройка не задана или равна `never`. Значение `0` не отключает таймаут, а сразу закрывает диалоговое окно. Игнорируется в [настройках проекта и локальных настройках](/docs/ru/settings-reference#variables-claude-code-ignores-in-env). До v2.1.200 автопродолжение было включено по умолчанию с таймаутом `60000` (60 секунд). Требуется Claude Code v2.1.198 или новее |

205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Установите `1`, чтобы отключить все встроенные типы [субагентов](/docs/ru/sub-agents), такие как Explore и Plan. Применяется только в неинтерактивном режиме (флаг `-p`). Полезно для пользователей SDK, которым нужен чистый лист. Это также удаляет `general-purpose` — субагента, которого Claude Code запускает, когда в вызове инструмента Agent не указан `subagent_type`. Такой вызов в этом случае завершается ошибкой [`subagent_type is required`](/docs/ru/errors#subagent-type-is-required) |205| `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` | Установите `1`, чтобы отключить все встроенные типы [субагентов](/docs/ru/sub-agents), такие как Explore и Plan. Применяется только в неинтерактивном режиме (флаг `-p`). Полезно для пользователей SDK, которым нужен чистый лист. Это также удаляет `general-purpose` — субагента, которого Claude Code запускает, когда в вызове инструмента Agent не указан `subagent_type`. Такой вызов в этом случае завершается ошибкой [`subagent_type is required`](/docs/ru/errors#subagent-type-is-required) |

206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Установите `1`, чтобы не добавлять префикс `mcp__<server>__` к именам инструментов MCP-серверов, созданных через SDK. Инструменты используют свои исходные имена. Только для использования SDK |206| `CLAUDE_AGENT_SDK_MCP_NO_PREFIX` | Установите `1`, чтобы не добавлять префикс `mcp__<server>__` к именам инструментов MCP-серверов, созданных через SDK. Инструменты используют свои исходные имена. Только для использования SDK |

207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Таймаут зависания субагентов в миллисекундах. По умолчанию `600000` (10 минут); если вы увеличите `CLAUDE_STREAM_IDLE_TIMEOUT_MS` при включённом сторожевом таймере потока, значение по умолчанию увеличится вместе с ним, как описано в разделе [Обработка медленных или зависших ответов API](/docs/ru/agent-sdk/typescript#handle-slow-or-stalled-api-responses). Таймер сбрасывается при каждом событии прогресса потоковой передачи; если в течение этого окна прогресс не поступает, Claude Code прерывает субагента и сообщает о зависании родительскому агенту |207| `CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS` | Таймаут зависания для субагентов в миллисекундах. В Claude Code v2.1.286 или новее также распространяется на [агентов workflow](/docs/ru/workflows#when-an-agent-stalls-and-restarts). По умолчанию `600000` (10 минут); если при включённом сторожевом таймере потока увеличить `CLAUDE_STREAM_IDLE_TIMEOUT_MS`, значение по умолчанию увеличивается вместе с ним, как описано в разделе [Обработка медленных или зависших ответов API](/docs/ru/agent-sdk/typescript#handle-slow-or-stalled-api-responses) |

208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Задаёт процент (1-100) окна автосжатия, при котором срабатывает автосжатие. Используйте меньшие значения, например `50`, чтобы сжимать контекст раньше; переменная не может повысить порог, поэтому значения выше процента по умолчанию игнорируются. Применяется только в сессиях, которые [сжимаются до достижения предела контекста модели](/docs/ru/model-config#context-window-and-auto-compaction). Применяется как к основным диалогам, так и к субагентам |208| `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` | Задаёт процент (1-100) окна автосжатия, при котором срабатывает автосжатие. Используйте меньшие значения, например `50`, чтобы сжимать контекст раньше; переменная не может повысить порог, поэтому значения выше процента по умолчанию игнорируются. Применяется только в сессиях, которые [сжимаются до достижения предела контекста модели](/docs/ru/model-config#context-window-and-auto-compaction). Применяется как к основным диалогам, так и к субагентам |

209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Установите `1`, чтобы принудительно включить автоматический перевод долго выполняющихся задач агентов в фоновый режим. Когда это включено, субагенты переводятся в фон примерно через две минуты работы. Также включает [автоматический перевод долгих вызовов инструментов MCP в фон](/docs/ru/mcp#automatic-backgrounding-of-long-tool-calls) в неинтерактивном режиме в Claude Code v2.1.212 или новее |209| `CLAUDE_AUTO_BACKGROUND_TASKS` | Установите `1`, чтобы принудительно включить автоматический перевод долго выполняющихся задач агентов в фоновый режим. Когда это включено, субагенты переводятся в фон примерно через две минуты работы. Также включает [автоматический перевод долгих вызовов инструментов MCP в фон](/docs/ru/mcp#automatic-backgrounding-of-long-tool-calls) в неинтерактивном режиме в Claude Code v2.1.212 или новее |

210| `CLAUDE_AX_PREPARK_MS` | В [режиме программы чтения с экрана](/docs/ru/accessibility) — сколько миллисекунд Claude Code ждёт, прежде чем вывести новую или изменённую строку. По умолчанию `0`, поэтому Claude Code не ждёт. До v2.1.287 значение по умолчанию было `50`. Claude Code ограничивает ожидание значением `5000`. Требуется Claude Code v2.1.233 или новее |210| `CLAUDE_AX_PREPARK_MS` | В [режиме программы чтения с экрана](/docs/ru/accessibility) — сколько миллисекунд Claude Code ждёт, прежде чем вывести новую или изменённую строку. По умолчанию `0`, поэтому Claude Code не ждёт. До v2.1.287 значение по умолчанию было `50`. Claude Code ограничивает ожидание значением `5000`. Требуется Claude Code v2.1.233 или новее |


378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Максимальный возраст в миллисекундах последнего сообщения транскрипта, при котором сессия, завершившаяся посреди хода, автоматически продолжается при возобновлении. Когда последнее сообщение старше этого предела, Claude Code пропускает автоматическое возобновление `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` и его сообщение продолжения `CLAUDE_CODE_RESUME_PROMPT`, а сессия запускается в состоянии ожидания, чтобы вы продолжили явно. Если переменная не задана или равна `0`, предела нет, за исключением того, что ход, последний запрос которого завершился ошибкой API, возобновляется, только пока с момента этой ошибки прошло меньше шести часов. Положительное значение ограничивает каждый ход, включая такие; отрицательное или нечисловое значение применяет предел в один час. Скрипты запуска долго работающих агентов могут задавать её, чтобы перезапуск со старым транскриптом не выполнял повторно устаревший промпт. Claude Code сам задаёт предел в один час, когда перезапускает аварийно завершившуюся сессию [agent view](/docs/ru/agent-view), унаследовавшую диалог от интерактивной сессии. Требуется Claude Code v2.1.211 или новее |378| `CLAUDE_CODE_RESUME_INTERRUPTED_TURN_MAX_AGE_MS` | Максимальный возраст в миллисекундах последнего сообщения транскрипта, при котором сессия, завершившаяся посреди хода, автоматически продолжается при возобновлении. Когда последнее сообщение старше этого предела, Claude Code пропускает автоматическое возобновление `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` и его сообщение продолжения `CLAUDE_CODE_RESUME_PROMPT`, а сессия запускается в состоянии ожидания, чтобы вы продолжили явно. Если переменная не задана или равна `0`, предела нет, за исключением того, что ход, последний запрос которого завершился ошибкой API, возобновляется, только пока с момента этой ошибки прошло меньше шести часов. Положительное значение ограничивает каждый ход, включая такие; отрицательное или нечисловое значение применяет предел в один час. Скрипты запуска долго работающих агентов могут задавать её, чтобы перезапуск со старым транскриптом не выполнял повторно устаревший промпт. Claude Code сам задаёт предел в один час, когда перезапускает аварийно завершившуюся сессию [agent view](/docs/ru/agent-view), унаследовавшую диалог от интерактивной сессии. Требуется Claude Code v2.1.211 или новее |

379| `CLAUDE_CODE_RESUME_PROMPT` | Переопределяет сообщение продолжения, которое Claude Code отправляет Claude, когда `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` продолжает прерванный ход вместо повторной отправки его промпта, или когда вы возобновляете [отложенный вызов инструмента](/docs/ru/hooks#defer-a-tool-call-for-later) с `-p`. По умолчанию `Continue from where you left off.`. Пустая строка означает значение по умолчанию |379| `CLAUDE_CODE_RESUME_PROMPT` | Переопределяет сообщение продолжения, которое Claude Code отправляет Claude, когда `CLAUDE_CODE_RESUME_INTERRUPTED_TURN` продолжает прерванный ход вместо повторной отправки его промпта, или когда вы возобновляете [отложенный вызов инструмента](/docs/ru/hooks#defer-a-tool-call-for-later) с `-p`. По умолчанию `Continue from where you left off.`. Пустая строка означает значение по умолчанию |

380| `CLAUDE_CODE_RETRY_WATCHDOG` | Установите `1` для автономных сессий, таких как обвязки для оценки, задания CI или удалённые воркеры. Бесконечно повторяет попытки при ошибках нехватки мощности `429` и `529` вместо завершения с ошибкой после `CLAUDE_CODE_MAX_RETRIES` попыток. Claude Code сразу завершается с ошибкой, когда запрос со стандартной скоростью получает `429`, сообщающий о лимите расходов или исчерпании кредитов использования, даже если это [лимит расходов шлюза](/docs/ru/errors#spend-limit-reached), который сбрасывается по расписанию. До v2.1.239 watchdog повторял такие попытки бесконечно. Для запросов в быстром режиме см. [Обработка ограничений частоты запросов](/docs/ru/fast-mode#handle-rate-limits). Watchdog увеличивает паузу между попытками до 5 минут или до момента сброса лимита, если ответ содержит время сброса ограничения частоты запросов, поэтому сессия, достигшая лимита использования, пережидает оставшееся окно. В v2.1.199 и новее он также повышает количество повторных попыток по умолчанию для других временных ошибок, таких как ошибки сервера, таймауты и разорванные соединения, до 300, что составляет примерно три часа отсрочки, и снимает ограничение в 15 для `CLAUDE_CODE_MAX_RETRIES`, если вы задали эту переменную явно. Требуется Claude Code v2.1.186 или новее |380| `CLAUDE_CODE_RETRY_WATCHDOG` | Установите `1` для автономных сессий, таких как обвязки для оценки, задания CI или удалённые воркеры. Бесконечно повторяет попытки при ошибках нехватки мощности `429` и `529` вместо завершения с ошибкой после `CLAUDE_CODE_MAX_RETRIES` попыток. Claude Code сразу завершается с ошибкой, когда запрос со стандартной скоростью получает `429`, сообщающий о лимите расходов или исчерпании кредитов использования, даже если это [лимит расходов шлюза](/docs/ru/errors#spend-limit-reached), который сбрасывается по расписанию. До v2.1.239 watchdog повторял такие попытки бесконечно. Для запросов в быстром режиме см. [Обработка ограничений частоты запросов](/docs/ru/fast-mode#handle-rate-limits). Watchdog увеличивает паузу между попытками до 5 минут или до момента сброса лимита, если ответ содержит время сброса ограничения частоты запросов, поэтому сессия, достигшая лимита использования, пережидает оставшееся окно. В v2.1.199 и новее он также повышает количество повторных попыток по умолчанию для других временных ошибок, таких как ошибки сервера, таймауты и разорванные соединения, до 300, что составляет примерно три часа отсрочки, и снимает ограничение в 15 для `CLAUDE_CODE_MAX_RETRIES`, если вы задали эту переменную явно. Требуется Claude Code v2.1.186 или новее |

381| `CLAUDE_CODE_RETRY_WATCHDOG_MAX_WAIT_MS` | Максимальное время в миллисекундах, которое каждый запрос к API тратит на пережидание ошибок `429` и `529`, когда задана `CLAUDE_CODE_RETRY_WATCHDOG`. Когда это время истекает, следующая такая ошибка завершает запрос. Укажите положительное целое число только цифрами, например `1800000` для 30 минут. Если не задано, ожидание не ограничено. Требуется Claude Code v2.1.295 или новее |

381| `CLAUDE_CODE_SAFE_MODE` | Установите `1`, чтобы запуститься в безопасном режиме: CLAUDE.md, скиллы, плагины, хуки, MCP-серверы, пользовательские команды и агенты, стили вывода, рабочие процессы, пользовательские темы, пользовательские сочетания клавиш, команды строки состояния и предложения файлов, LSP-серверы и автоматическая память не загружаются — это нужно для устранения неполадок в сломанной конфигурации. Политика управляемых настроек по-прежнему применяется, включая настроенные политикой хуки, строку состояния и команды предложения файлов; управляемые плагины, управляемые скиллы, управляемый CLAUDE.md и настроенные политикой MCP-серверы — нет. Эквивалентно передаче [`--safe-mode`](/docs/ru/cli-reference#cli-flags). Непосредственно запущенные дочерние процессы наследуют эту переменную |382| `CLAUDE_CODE_SAFE_MODE` | Установите `1`, чтобы запуститься в безопасном режиме: CLAUDE.md, скиллы, плагины, хуки, MCP-серверы, пользовательские команды и агенты, стили вывода, рабочие процессы, пользовательские темы, пользовательские сочетания клавиш, команды строки состояния и предложения файлов, LSP-серверы и автоматическая память не загружаются — это нужно для устранения неполадок в сломанной конфигурации. Политика управляемых настроек по-прежнему применяется, включая настроенные политикой хуки, строку состояния и команды предложения файлов; управляемые плагины, управляемые скиллы, управляемый CLAUDE.md и настроенные политикой MCP-серверы — нет. Эквивалентно передаче [`--safe-mode`](/docs/ru/cli-reference#cli-flags). Непосредственно запущенные дочерние процессы наследуют эту переменную |

382| `CLAUDE_CODE_SCRIPT_CAPS` | JSON-объект, ограничивающий, сколько раз определённые скрипты могут вызываться за сессию, когда задана `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`. Ключи — подстроки, сопоставляемые с текстом команды; значения — целочисленные лимиты вызовов. Например, `{"deploy.sh": 2}` позволяет вызвать `deploy.sh` не более двух раз. Сопоставление выполняется по подстроке, поэтому уловки с раскрытием в оболочке вроде `./scripts/deploy.sh $(evil)` по-прежнему учитываются в лимите. Разветвление во время выполнения через `xargs` или `find -exec` не обнаруживается; это мера эшелонированной защиты |383| `CLAUDE_CODE_SCRIPT_CAPS` | JSON-объект, ограничивающий, сколько раз определённые скрипты могут вызываться за сессию, когда задана `CLAUDE_CODE_SUBPROCESS_ENV_SCRUB`. Ключи — подстроки, сопоставляемые с текстом команды; значения — целочисленные лимиты вызовов. Например, `{"deploy.sh": 2}` позволяет вызвать `deploy.sh` не более двух раз. Сопоставление выполняется по подстроке, поэтому уловки с раскрытием в оболочке вроде `./scripts/deploy.sh $(evil)` по-прежнему учитываются в лимите. Разветвление во время выполнения через `xargs` или `find -exec` не обнаруживается; это мера эшелонированной защиты |

383| `CLAUDE_CODE_SCROLL_SPEED` | Задаёт множитель прокрутки колесом мыши в [полноэкранном рендеринге](/docs/ru/fullscreen#mouse-wheel-scrolling). Принимает любое положительное значение до 20, включая дробные значения меньше 1, например `0.5`, чтобы замедлить ускоренную прокрутку тачпадом и колесом в терминалах, которые уже усиливают события колеса. Установите `3`, чтобы соответствовать `vim`, если ваш терминал отправляет одно событие колеса на щелчок без усиления. Игнорируется в терминале JetBrains IDE, где Claude Code использует собственную обработку прокрутки |384| `CLAUDE_CODE_SCROLL_SPEED` | Задаёт множитель прокрутки колесом мыши в [полноэкранном рендеринге](/docs/ru/fullscreen#mouse-wheel-scrolling). Принимает любое положительное значение до 20, включая дробные значения меньше 1, например `0.5`, чтобы замедлить ускоренную прокрутку тачпадом и колесом в терминалах, которые уже усиливают события колеса. Установите `3`, чтобы соответствовать `vim`, если ваш терминал отправляет одно событие колеса на щелчок без усиления. Игнорируется в терминале JetBrains IDE, где Claude Code использует собственную обработку прокрутки |


590* Использовать [инструмент-советник](/docs/ru/advisor#requirements)591* Использовать [инструмент-советник](/docs/ru/advisor#requirements)

591* Читать [комментарии к артефакту](/docs/ru/artifacts#collect-comments-on-an-artifact) или отвечать на них592* Читать [комментарии к артефакту](/docs/ru/artifacts#collect-comments-on-an-artifact) или отвечать на них

592* Поручать Claude читать [публичный артефакт другой организации](/docs/ru/artifacts#read-an-artifact-shared-with-you)593* Поручать Claude читать [публичный артефакт другой организации](/docs/ru/artifacts#read-an-artifact-shared-with-you)

593* Поручать Claude Code проверять серверы коннекторов claude.ai на поддержку [ревизии протокола MCP 2026-07-28](/docs/ru/mcp#mcp-client-runtimes), если только вы не задали `MCP_PROTOCOL_NEGOTIATION=auto`

594* Получать [инструмент PowerShell](/docs/ru/tools-reference#powershell-tool) по умолчанию для учётных записей claude.ai и Console в Windows с установленным Git Bash; Claude Code направляет shell-команды через Git Bash, если вы не задали `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. В Windows без Git Bash инструмент остаётся включённым594* Получать [инструмент PowerShell](/docs/ru/tools-reference#powershell-tool) по умолчанию для учётных записей claude.ai и Console в Windows с установленным Git Bash; Claude Code направляет shell-команды через Git Bash, если вы не задали `CLAUDE_CODE_USE_POWERSHELL_TOOL=1`. В Windows без Git Bash инструмент остаётся включённым

595* Получать [отзывы, составленные Claude](/docs/ru/tools-reference#sendfeedback-tool-behavior), которые Claude Code включает через загружаемый флаг595* Получать [отзывы, составленные Claude](/docs/ru/tools-reference#sendfeedback-tool-behavior), которые Claude Code включает через загружаемый флаг

596* Добиться того, чтобы Claude [воспринимал большие вставки как вставленный, а не набранный текст](/docs/ru/terminal-config#how-claude-treats-pasted-text); содержимое за заполнителем `[Pasted text #N]` поступает к Claude без пометки596* Добиться того, чтобы Claude [воспринимал большие вставки как вставленный, а не набранный текст](/docs/ru/terminal-config#how-claude-treats-pasted-text); содержимое за заполнителем `[Pasted text #N]` поступает к Claude без пометки

errors.md +8 −6

Details

4 4 

5# Справочник по ошибкам5# Справочник по ошибкам

6 6 

7> Найдите сообщения об ошибках Claude Code с объяснением их значения и способов исправления.7> Найдите сообщения об ошибках времени выполнения Claude Code с объяснением их значения и способов исправления.

8 8 

9На этой странице перечислены ошибки времени выполнения, которые отображает Claude Code, и способы восстановления после каждой из них, а также что проверить, когда ответы кажутся неправильными без ошибки. Для ошибок установки, таких как `command not found` или сбои TLS во время установки, см. [Устранение неполадок при установке и входе](/docs/ru/troubleshoot-install).9На этой странице перечислены ошибки времени выполнения, которые отображает Claude Code, и способы восстановления после каждой из них, а также что проверить, когда ответы кажутся неправильными без ошибки. Для ошибок установки, таких как `command not found` или сбои TLS во время установки, см. [Устранение неполадок при установке и входе](/docs/ru/troubleshoot-install).

10 10 


261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |261| `Marketplace name impersonates an official Anthropic/Claude marketplace` | [Plugin errors](#claude-code-refuses-the-marketplace-name) |

262| `Marketplace "<name>" is already added from a different source` | [Plugin errors](#marketplace-is-already-added-from-a-different-source) |262| `Marketplace "<name>" is already added from a different source` | [Plugin errors](#marketplace-is-already-added-from-a-different-source) |

263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin errors](#marketplace-name-is-another-spelling-of-a-reserved-name) |263| `"<name>" is another spelling of "<reserved>", a reserved marketplace name` | [Plugin errors](#marketplace-name-is-another-spelling-of-a-reserved-name) |

264| `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name) |

264| `Marketplace "<name>" is added but ignored` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#marketplace-is-added-but-ignored) |265| `Marketplace "<name>" is added but ignored` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#marketplace-is-added-but-ignored) |

265| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#marketplace-is-added-but-ignored) |266| `Marketplace "<name>" is registered but was refused (see the debug log)` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#marketplace-is-added-but-ignored) |

266| `references ${user_config.*} in a shell-form command` | [Plugin errors](#plugin-command-references-user-config) |267| `references ${user_config.*} in a shell-form command` | [Plugin errors](#plugin-command-references-user-config) |


269| `Plugin archive integrity check failed` | [Plugin errors](#plugin-archive-integrity-check-failed) |270| `Plugin archive integrity check failed` | [Plugin errors](#plugin-archive-integrity-check-failed) |

270| `An npm plugin source must name a registry package` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |271| `An npm plugin source must name a registry package` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#an-npm-plugin-source-must-name-a-registry-package) |

271| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |272| `The packages it lists are not installed` / `The packages it lists were not installed, because` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#the-packages-it-lists-are-not-installed) |

273| `does not load (...), so Claude Code ignores the whole file` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#does-not-load-so-claude-code-ignores-the-whole-file) |

272| `path escapes plugin directory` | [Plugin errors](#path-escapes-plugin-directory) |274| `path escapes plugin directory` | [Plugin errors](#path-escapes-plugin-directory) |

273| `path could not be checked` | [Plugin errors](#path-could-not-be-checked) |275| `path could not be checked` | [Plugin errors](#path-could-not-be-checked) |

274| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin errors](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |276| `its marketplace entry path does not stay inside the marketplace directory` | [Plugin errors](#marketplace-entry-path-does-not-stay-inside-the-marketplace-directory) |


279| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin errors](#plugin-was-not-uninstalled) |281| `"<plugin>" was not uninstalled: it is still switched on in <file>` | [Plugin errors](#plugin-was-not-uninstalled) |

280| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin errors](#plugin-was-not-uninstalled) |282| `"<plugin>" was not uninstalled: <file> is there and could not be read` | [Plugin errors](#plugin-was-not-uninstalled) |

281| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |283| `Plugin "<plugin>" was not uninstalled: installed_plugins.json` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#installed-plugins-json-holds-a-record-this-version-cannot-read) |

284| `Plugin directory does not exist: <path>` | [Plugin troubleshooting](/docs/ru/plugins/troubleshooting#plugin-directory-does-not-exist) |

282| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |285| `Error: No such tool available: <tool name>` | [Tool errors](#no-such-tool-available) |

283| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |286| `would be spawned with zero tools — refusing` | [Tool errors](#agent-would-be-spawned-with-zero-tools) |

284| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |287| `File is covered by a Read deny rule in your permission settings` | [Tool errors](#file-is-covered-by-a-read-deny-rule) |


386* Ошибка сервера или ответ о перегрузке, который приходит после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента. В этот момент Claude Code повторяет попытку при ошибке сервера до двух раз. До v2.1.284 Claude Code в этот момент завершал ход с ошибкой.389* Ошибка сервера или ответ о перегрузке, который приходит после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента. В этот момент Claude Code повторяет попытку при ошибке сервера до двух раз. До v2.1.284 Claude Code в этот момент завершал ход с ошибкой.

387* Разорванные соединения. Когда соединение разрывается в середине запроса до того, как Claude завершит какую-либо часть своего ответа, включая его размышления, Claude Code повторно отправляет запрос с той же задержкой и ход продолжается, даже если некоторый текст уже начал передаваться потоком. Когда оно разрывается после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента, Claude Code вместо этого повторно отправляет запрос до двух раз в быстрой последовательности и завершает ход с `Connection lost before a response was produced`, если соединение продолжает разрываться в этот момент.390* Разорванные соединения. Когда соединение разрывается в середине запроса до того, как Claude завершит какую-либо часть своего ответа, включая его размышления, Claude Code повторно отправляет запрос с той же задержкой и ход продолжается, даже если некоторый текст уже начал передаваться потоком. Когда оно разрывается после того, как Claude завершил размышления, но до того, как он начал какой-либо текст или вызов инструмента, Claude Code вместо этого повторно отправляет запрос до двух раз в быстрой последовательности и завершает ход с `Connection lost before a response was produced`, если соединение продолжает разрываться в этот момент.

388* Соединение, которое, как обнаружил Claude Code, было разорвано тем, что ваш компьютер перешёл в режим сна в середине запроса. Claude Code считает это разорванным соединением в соответствии с приведёнными выше правилами; как только метка повторной попытки назовёт конкретную причину, она будет читаться как `Connection lost while your computer was asleep`, и если ход завершается после того, как Claude завершил размышления, но до любого текста или вызова инструмента, сообщение читается как `Your computer went to sleep before a response was produced`.391* Соединение, которое, как обнаружил Claude Code, было разорвано тем, что ваш компьютер перешёл в режим сна в середине запроса. Claude Code считает это разорванным соединением в соответствии с приведёнными выше правилами; как только метка повторной попытки назовёт конкретную причину, она будет читаться как `Connection lost while your computer was asleep`, и если ход завершается после того, как Claude завершил размышления, но до любого текста или вызова инструмента, сообщение читается как `Your computer went to sleep before a response was produced`.

389* Застопорившийся поток ответа, когда заголовки ответа прибыли, но ни одна часть ответа Claude не прибыла, или когда Claude завершил размышления, но не начал какой-либо текст или вызов инструмента: Claude Code прерывает застопорившееся соединение и повторно отправляет запрос максимум один раз, вне бюджета из 10 попыток выше. Если ответ застопорится во второй раз после того, как Claude завершил размышления, но до любого текста или вызова инструмента, Claude Code завершает ход с `The response stalled before a response was produced`.392* Застопорившийся поток ответа, когда заголовки ответа прибыли, но ни одна часть ответа Claude не прибыла, или когда Claude завершил размышления, но не начал какой-либо текст или вызов инструмента: Claude Code прерывает застопорившееся соединение и повторно отправляет запрос в потоковом режиме максимум один раз. Если ответ застопорится во второй раз после того, как Claude завершил размышления, но до любого текста или вызова инструмента, Claude Code завершает ход с `The response stalled before a response was produced`.

390* Потоковый запрос, на который API никогда не отвечает заголовками ответа, на соединении, где [действует дедлайн первого байта](/docs/ru/network-config#streaming-idle-watchdogs): Claude Code прерывает его по истечении дедлайна и повторно отправляет его максимум один раз за запрос модели, в пределах бюджета повторных попыток, затем завершает ход с [No response from API](#no-response-from-api), если эта попытка также остаётся без ответа. На других соединениях запрос ждёт `API_TIMEOUT_MS`. Когда вы устанавливаете `CLAUDE_CODE_RETRY_WATCHDOG`, ограничение на одну повторную попытку не применяется.393* Потоковый запрос, на который API никогда не отвечает заголовками ответа, на соединении, где [действует дедлайн первого байта](/docs/ru/network-config#streaming-idle-watchdogs): Claude Code прерывает его по истечении дедлайна и повторно отправляет его максимум один раз за запрос модели, в пределах бюджета повторных попыток, затем завершает ход с [No response from API](#no-response-from-api), если эта попытка также остаётся без ответа. На других соединениях запрос ждёт `API_TIMEOUT_MS`. Когда вы устанавливаете `CLAUDE_CODE_RETRY_WATCHDOG`, ограничение на одну повторную попытку не применяется.

391* Потоковый ответ, который выходной фильтр содержимого API останавливает до того, как Claude либо завершил размышления, либо начал какой-либо текст или вызов инструмента. Claude Code повторно отправляет запрос один раз, в пределах бюджета повторных попыток, и показывает [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy), если фильтр останавливает и второй ответ.394* Потоковый ответ, который выходной фильтр содержимого API останавливает до того, как Claude либо завершил размышления, либо начал какой-либо текст или вызов инструмента. Claude Code повторно отправляет запрос один раз, в пределах бюджета повторных попыток, и показывает [Output blocked by content filtering policy](#output-blocked-by-content-filtering-policy), если фильтр останавливает и второй ответ.

392* Временные дроссели 429, но не `429` лимита расходов шлюза, который не является дросселем; см. [Spend limit reached](#spend-limit-reached).395* Временные дроссели 429, но не `429` лимита расходов шлюза, который не является дросселем; см. [Spend limit reached](#spend-limit-reached).


4064 Marketplace is already added from a different source4067 Marketplace is already added from a different source

4065</h3>4068</h3>

4066 4069 

4067Вы подтвердили добавление маркетплейса через [`/plugin install <plugin> --marketplace <source>`](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command), и каталог, который Claude Code получил из этого источника, называет себя так же, как маркетплейс, который вы уже добавили из другого источника. Claude Code сохраняет существующий маркетплейс вместо его замены, и плагин не устанавливается.4070Вы указали новый источник маркетплейса с помощью [`--marketplace <source>` в команде установки](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command) — в сессии или из вашей оболочки. Каталог, который Claude Code получил из этого источника, имеет то же имя, что и маркетплейс, который вы уже добавили из другого источника. Claude Code сохраняет существующий маркетплейс вместо его замены, и плагин не устанавливается.

4068 4071 

4069```text theme={null}4072```text theme={null}

4070Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.4073Marketplace "acme-tools" is already added from a different source (github:acme/plugins). To use this source instead, remove that marketplace first with /plugin marketplace remove acme-tools.


4817 У этой сессии нет сохранённого транскрипта4820 У этой сессии нет сохранённого транскрипта

4818</h3>4821</h3>

4819 4822 

4820Вы подключились к остановленной [фоновой сессии](/docs/ru/agent-view), которая была переведена в фон из другого диалога с помощью `←` или `/background` и остановлена до завершения первого ответа. Пока первый ответ не завершён, диалог существует только в сессии, из которой он был переведён в фон, поэтому `claude attach` отказывается запускать остановленную сессию, а не начинает пустой диалог под тем же ID сессии. Сообщение заканчивается командой `claude respawn` для этой сессии:4823Вы подключились к сессии, которую [перевели в фон](/docs/ru/agent-view#from-inside-a-session) с помощью `←` или `/background` и которая остановилась до того, как выполнила собственный ход. Claude Code не смог найти диалог, из которого вы её перевели, поэтому сессии нечего возобновлять. Сообщение заканчивается командой `claude respawn` для этой сессии:

4821 4824 

4822```text theme={null}4825```text theme={null}

4823This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.4826This session has no saved transcript — it was stopped before its first response finished. If it was backgrounded from another conversation, that one is still intact; `claude respawn <id>` starts this one fresh.


4827 4830 

4828**Что делать:**4831**Что делать:**

4829 4832 

4830* Диалог, из которого вы перевели сессию в фон, не пострадал: возобновите его с помощью [`claude --resume`](/docs/ru/sessions) или продолжайте работать в нём4833* Чтобы запустить остановленную сессию заново, выполните `claude respawn <id>` с ID из сообщения или дважды нажмите `Enter` на её строке в представлении агента

4831* Чтобы всё же запустить остановленную сессию заново, выполните `claude respawn <id>` с ID из сообщения или дважды нажмите `Enter` на её строке в представлении агента

4832* Если сессия завершила ответ, а вы всё равно видите этот отказ в версии до 2.1.214, нечитаемая папка в `~/.claude/projects` могла привести к тому, что при сканировании транскриптов сохранённый диалог был пропущен; обновитесь до версии 2.1.214 или новее, которая допускает нечитаемые папки при сканировании4834* Если сессия завершила ответ, а вы всё равно видите этот отказ в версии до 2.1.214, нечитаемая папка в `~/.claude/projects` могла привести к тому, что при сканировании транскриптов сохранённый диалог был пропущен; обновитесь до версии 2.1.214 или новее, которая допускает нечитаемые папки при сканировании

4833 4835 

4834<h3 id="this-session-is-running-in-another-terminal">4836<h3 id="this-session-is-running-in-another-terminal">

glossary.md +1 −1

Details

511 Worktree isolation511 Worktree isolation

512</h3>512</h3>

513 513 

514Режим изоляции, который запускает Claude в отдельном git worktree в `.claude/worktrees/`, включаемый флагом `-w` или `isolation: worktree` в конфигурации subagent. Изменения остаются на отдельной ветке в отдельном каталоге, поэтому параллельные агенты не перезаписывают файлы друг друга.514Режим изоляции, который запускает Claude в отдельном git worktree в `.claude/worktrees/`, включаемый флагом `-w` или `isolation: worktree` в конфигурации субагента. Изменения остаются на отдельной ветке в отдельном каталоге, поэтому каждый из параллельных агентов редактирует собственную копию файлов.

515 515 

516Подробнее: [Запуск параллельных сеансов с git worktrees](/docs/ru/worktrees)516Подробнее: [Запуск параллельных сеансов с git worktrees](/docs/ru/worktrees)

517 517 

goal.md +1 −1

Details

127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"127claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

128```128```

129 129 

130При выводе текста по умолчанию ничего не выводится до завершения выполнения, поэтому цель, которая работает много ходов, может выглядеть зависшей. Добавьте `--output-format stream-json --verbose`, чтобы выводить каждое сообщение по мере выполнения цикла.130При текстовом выводе по умолчанию финальный ответ Claude выводится только по завершении цикла, поэтому цель, которая работает много ходов, может выглядеть зависшей. Добавьте `--output-format stream-json --verbose`, чтобы выводить каждое сообщение по мере выполнения цикла.

131 131 

132Прервите процесс с помощью Ctrl+C, чтобы остановить неинтерактивную цель до выполнения условия.132Прервите процесс с помощью Ctrl+C, чтобы остановить неинтерактивную цель до выполнения условия.

133 133 

headless.md +15 −13

Details

22 22 

23Добавьте флаг `-p` (или `--print`) к любой команде `claude` для запуска её в неинтерактивном режиме. Не все [параметры CLI](/docs/ru/cli-reference) работают с `-p`. Claude Code отклоняет `--bg` и отклоняет `--cloud` с описанием задачи с ошибкой, указывающей на конфликт; `--cloud` с ID сессии и `-p` вместо этого [ставит сообщение в очередь в эту облачную сессию](/docs/ru/claude-code-on-the-web#send-follow-ups-from-the-cli) и выходит. Параметры, которые вы часто будете использовать с `-p`, включают:23Добавьте флаг `-p` (или `--print`) к любой команде `claude` для запуска её в неинтерактивном режиме. Не все [параметры CLI](/docs/ru/cli-reference) работают с `-p`. Claude Code отклоняет `--bg` и отклоняет `--cloud` с описанием задачи с ошибкой, указывающей на конфликт; `--cloud` с ID сессии и `-p` вместо этого [ставит сообщение в очередь в эту облачную сессию](/docs/ru/claude-code-on-the-web#send-follow-ups-from-the-cli) и выходит. Параметры, которые вы часто будете использовать с `-p`, включают:

24 24 

25* `--continue` для [продолжения разговоров](#continue-conversations)25* `--continue` для [продолжения диалогов](#continue-conversations)

26* `--allowedTools` для [автоматического одобрения инструментов](#auto-approve-tools)26* `--allowedTools` для [автоматического подтверждения инструментов](#auto-approve-tools)

27* `--output-format` для [структурированного вывода](#get-structured-output)27* `--output-format` для [структурированного вывода](#get-structured-output)

28 28 

29Этот пример задаёт Claude вопрос о вашей кодовой базе и выводит ответ:29Этот пример задаёт Claude вопрос о вашей кодовой базе и выводит ответ:


38 Начните быстрее с режима bare38 Начните быстрее с режима bare

39</h3>39</h3>

40 40 

41Добавьте `--bare` для сокращения времени запуска путём пропуска автоматического обнаружения hooks, skills, пользовательских команд, [подагентов](/docs/ru/sub-agents), установленных plugins, MCP серверов, автоматической памяти и CLAUDE.md. Без этого `claude -p` загружает тот же [контекст](/docs/ru/how-claude-code-works#the-context-window), что и интерактивная сессия, включая всё, что настроено в рабочем каталоге или `~/.claude`.41Добавьте `--bare` для сокращения времени запуска путём пропуска автоматического обнаружения хуков, скиллов, пользовательских команд, [субагентов](/docs/ru/sub-agents), установленных плагинов, MCP-серверов, автоматической памяти и CLAUDE.md. Без этого `claude -p` загружает тот же [контекст](/docs/ru/how-claude-code-works#the-context-window), что и интерактивная сессия, включая всё, что настроено в рабочем каталоге или `~/.claude`.

42 42 

43Режим bare полезен для CI и скриптов, где вам нужен одинаковый результат на каждой машине. Hook в `~/.claude` коллеги или MCP сервер в `.mcp.json` проекта не будут запущены, потому что режим bare никогда их не читает. Каталог, который вы указываете с помощью `--add-dir`, является частичным исключением: режим bare загружает skills из его папки `.claude/skills/`, но всё ещё пропускает его папки `.claude/commands/` и `.claude/agents/`. [Skills из дополнительных каталогов](/docs/ru/skills#skills-from-additional-directories) охватывает то, что загружается и что не загружается.43Режим bare полезен для CI и скриптов, где вам нужен одинаковый результат на каждой машине. Хук в `~/.claude` коллеги или MCP-сервер в `.mcp.json` проекта не будут запущены, потому что режим bare никогда их не читает. Каталог, который вы указываете с помощью `--add-dir`, является частичным исключением: режим bare загружает скиллы из его папки `.claude/skills/`, но всё ещё пропускает его папки `.claude/commands/` и `.claude/agents/`. [Скиллы из дополнительных каталогов](/docs/ru/skills#skills-from-additional-directories) охватывает то, что загружается и что не загружается.

44 44 

45Без `--bare` сессия `-p` запускает hooks в `.claude/settings.json` проекта и подключает серверы в его `.mcp.json`, даже в папке, которой вы никогда не доверяли. Сессия `-p` не показывает диалог доверия рабочей области и не показывает запрос одобрения для каждого сервера. [Что запускается перед тем, как вы доверите папку](/docs/ru/permissions#what-runs-before-you-trust-a-folder) охватывает каждый вид содержимого репозитория под `-p` и как его избежать.45Без `--bare` сессия `-p` запускает хуки в `.claude/settings.json` проекта и подключает серверы в его `.mcp.json`, даже в папке, которой вы никогда не доверяли. Сессия `-p` не показывает диалоговое окно доверия рабочему пространству и не показывает запрос подтверждения для каждого сервера. [Что запускается перед тем, как вы доверите папку](/docs/ru/permissions#what-runs-before-you-trust-a-folder) охватывает каждый вид содержимого репозитория под `-p` и как его избежать.

46 46 

47Этот пример запускает одноразовую задачу суммирования в режиме bare и предварительно одобряет инструмент Read, чтобы вызов завершился без запроса разрешения. Установите `ANTHROPIC_API_KEY` перед запуском, потому что режим bare не использует вашу подписку:47Этот пример запускает одноразовую задачу суммирования в режиме bare и предварительно одобряет инструмент Read, чтобы вызов завершился без запроса разрешения. Установите `ANTHROPIC_API_KEY` перед запуском, потому что режим bare не использует вашу подписку:

48 48 


56 56 

57| Для загрузки | Используйте |57| Для загрузки | Используйте |

58| - | - |58| - | - |

59| Дополнения системного запроса | `--append-system-prompt`, `--append-system-prompt-file` |59| Дополнения системного промпта | `--append-system-prompt`, `--append-system-prompt-file` |

60| Параметры | `--settings <file-or-json>` |60| Настройки | `--settings <file-or-json>` |

61| MCP серверы | `--mcp-config <file-or-json>` |61| MCP-серверы | `--mcp-config <file-or-json>` |

62| [Пользовательские агенты](/docs/ru/sub-agents#choose-the-subagent-scope) | `--agents <file-or-json>` |62| [Пользовательские агенты](/docs/ru/sub-agents#choose-the-subagent-scope) | `--agents <file-or-json>` |

63| Плагин | `--plugin-dir <path>`, `--plugin-url <url>` |63| Плагин | `--plugin-dir <path>`, `--plugin-url <url>` |

64 64 


84 84 

85Запуск ожидает фоновую работу, такую как фоновые команды, субагенты и рабочие процессы, наблюдения Monitor и ожидающие пробуждения `/loop`:85Запуск ожидает фоновую работу, такую как фоновые команды, субагенты и рабочие процессы, наблюдения Monitor и ожидающие пробуждения `/loop`:

86 86 

87* **[Фоновые команды](/docs/ru/tools-reference#background-commands)**: для команды, запущенной основным диалогом, например сервера разработки или сборки с отслеживанием, запуск ждёт, пока команда не завершится или не достигнет своего [ограничения по времени](/docs/ru/tools-reference#time-limit-for-background-commands). Затем Claude делает ещё один ход с полученным результатом, и результат этого хода становится последним результатом запуска — именно его выводят форматы `text` и `json`. Пока команда выполняется, 10-минутный лимит не завершает ожидание.87* **[Фоновые команды](/docs/ru/tools-reference#background-commands)**: для команды, запущенной основным диалогом, например сервера разработки или сборки с отслеживанием, запуск ждёт, пока команда не завершится или не достигнет своего [ограничения по времени](/docs/ru/tools-reference#time-limit-for-background-commands). Затем Claude делает ещё один ход с полученным результатом. Пока команда выполняется, 10-минутный лимит не завершает ожидание.

88* **Фоновые [субагенты](/docs/ru/sub-agents) и рабочие процессы**: запуск остаётся открытым до завершения этой работы, потому что её результат является частью окончательного вывода.88* **Фоновые [субагенты](/docs/ru/sub-agents) и рабочие процессы**: запуск остаётся открытым до завершения этой работы, потому что её результат является частью окончательного вывода.

89* **Наблюдения [Monitor](/docs/ru/tools-reference#monitor-tool)**: запуск ждёт, пока не истечёт время наблюдения или пока 10-минутный лимит не завершит ожидание, в зависимости от того, что произойдёт раньше. Пока запуск ждёт, Claude продолжает отвечать на то, что сообщает наблюдение. По умолчанию наблюдение истекает через пять минут после того, как Claude его запустит.89* **Наблюдения [Monitor](/docs/ru/tools-reference#monitor-tool)**: запуск ждёт, пока не истечёт время наблюдения или пока 10-минутный лимит не завершит ожидание, в зависимости от того, что произойдёт раньше. Пока запуск ждёт, Claude продолжает отвечать на то, что сообщает наблюдение. По умолчанию наблюдение истекает через пять минут после того, как Claude его запустит.

90* **Ожидающие пробуждения**: в запуске, промпт которого вы передали как текст, а не с помощью `--input-format stream-json`, если Claude запланировал [пробуждение `/loop` в собственном темпе](/docs/ru/scheduled-tasks#let-claude-choose-the-interval), запуск ждёт срабатывания каждого пробуждения и выполняет его итерацию, пока [цикл не завершится](/docs/ru/scheduled-tasks#stop-a-loop), даже после 10-минутного лимита.90* **Ожидающие пробуждения**: в запуске, промпт которого вы передали как текст, а не с помощью `--input-format stream-json`, если Claude запланировал [пробуждение `/loop` в собственном темпе](/docs/ru/scheduled-tasks#let-claude-choose-the-interval), запуск ждёт срабатывания каждого пробуждения и выполняет его итерацию, пока [цикл не завершится](/docs/ru/scheduled-tasks#stop-a-loop), даже после 10-минутного лимита.

91 91 

92Если запуск достигает своего лимита [`--max-budget-usd`](/docs/ru/cli-reference#cli-flags), Claude Code останавливает оставшуюся фоновую работу вместо того, чтобы ждать.92Если запуск достигает своего лимита [`--max-budget-usd`](/docs/ru/cli-reference#cli-flags), Claude Code останавливает оставшуюся фоновую работу вместо того, чтобы ждать.

93 93 

94Когда фоновая работа запускает ещё один ход, запуск выводит результат каждого хода при выводе по умолчанию `text` и результат последнего хода при выводе `json`. До v2.1.295 запуск и при выводе `text` выводил только результат последнего хода.

95 

94<h3 id="stop-a-run-with-sigterm">96<h3 id="stop-a-run-with-sigterm">

95 Остановите запуск с помощью SIGTERM97 Остановите запуск с помощью SIGTERM

96</h3>98</h3>

97 99 

98Если вы остановите запуск `claude -p` с помощью SIGTERM, например с помощью `kill` или от супервизора процесса, Claude Code выходит с кодом 143. Claude Code оставляет ход, который был в процессе, незавершённым и не записывает для него результат. Чтобы вместо этого завершить ход, отправьте SIGINT или вызовите `interrupt()` Agent SDK перед остановкой процесса.100Если вы остановите запуск `claude -p` с помощью SIGTERM, например с помощью `kill` или от супервизора процесса, Claude Code выходит с кодом 143. Claude Code оставляет ход, который был в процессе, незавершённым и не записывает для него результат. Чтобы вместо этого завершить ход, отправьте SIGINT или вызовите `interrupt()` Agent SDK перед остановкой процесса.

99 101 

100При SIGTERM Claude Code завершает дерево процессов любой команды Bash, которая всё ещё выполняется. Claude Code затем запускает [`SessionEnd` hooks](/docs/ru/hooks#sessionend) и выходит. При выходе Claude Code не запускает новый вызов инструмента, не отправляет новый запрос модели и не запускает никакой hook, кроме `SessionEnd`. Если запуск был в середине команды или ожидал ответа на запрос разрешения, когда пришёл сигнал, Claude Code обрабатывает этот шаг следующим образом:102При SIGTERM Claude Code завершает дерево процессов любой команды Bash, которая всё ещё выполняется. Claude Code затем запускает [хуки `SessionEnd`](/docs/ru/hooks#sessionend) и выходит. При выходе Claude Code не запускает новый вызов инструмента, не отправляет новый запрос модели и не запускает никакой хук, кроме `SessionEnd`. Если запуск был в середине команды или ожидал ответа на запрос разрешения, когда пришёл сигнал, Claude Code обрабатывает этот шаг следующим образом:

101 103 

102* **Выполнение команды**: Claude Code записывает команду как убитую в сессии.104* **Выполнение команды**: Claude Code записывает команду как убитую в сессии.

103* **Ожидание ответа на запрос разрешения**: если вы отправите SIGTERM процессу, Claude Code оставляет запрос без ответа. Если ваша программа закрывает сессию через Agent SDK, SDK завершает ввод Claude Code перед отправкой любого сигнала, и Claude Code отменяет запрос, как только ввод завершается.105* **Ожидание ответа на запрос разрешения**: если вы отправите SIGTERM процессу, Claude Code оставляет запрос без ответа. Если ваша программа закрывает сессию через Agent SDK, SDK завершает ввод Claude Code перед отправкой любого сигнала, и Claude Code отменяет запрос, как только ввод завершается.

104 106 

105Когда вы [возобновляете сессию](#continue-conversations), Claude Code оставляет прерванный ход как есть, и ваш следующий запрос ведёт разговор. Чтобы Claude Code продолжил прерванный ход при возобновлении вместо этого, установите [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/ru/env-vars).107Когда вы [возобновляете сессию](#continue-conversations), Claude Code оставляет прерванный ход как есть, и ваш следующий промпт ведёт диалог. Чтобы Claude Code продолжил прерванный ход при возобновлении вместо этого, установите [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN=1`](/docs/ru/env-vars).

106 108 

107<h3 id="if-the-working-directory-is-deleted">109<h3 id="if-the-working-directory-is-deleted">

108 Если рабочий каталог удалён110 Если рабочий каталог удалён


262| `type` | `"system"` | тип сообщения |264| `type` | `"system"` | тип сообщения |

263| `subtype` | `"api_retry"` | идентифицирует это как событие повторной попытки |265| `subtype` | `"api_retry"` | идентифицирует это как событие повторной попытки |

264| `attempt` | целое число | номер текущей попытки, начиная с 1 |266| `attempt` | целое число | номер текущей попытки, начиная с 1 |

265| `max_retries` | целое число | всего повторных попыток, разрешённых для причины этого сбоя, что может быть меньше, чем бюджет на уровне сеанса |267| `max_retries` | целое число | общее число повторных попыток, разрешённых для причины этого сбоя |

266| `retry_delay_ms` | целое число | миллисекунды до следующей попытки |268| `retry_delay_ms` | целое число | миллисекунды до следующей попытки |

267| `error_status` | целое число или null | код состояния HTTP неудачной попытки, или `null`, когда попытка не получила HTTP ответ от API |269| `error_status` | целое число или null | код состояния HTTP неудачной попытки, или `null`, когда попытка не получила HTTP ответ от API |

268| `no_response` | объект, опционально | присутствует только когда неудачная попытка получила [отсутствие заголовков ответа вовремя](/docs/ru/errors#no-response-from-api). `waited_ms` — это время ожидания этой попытки, а `retry_wait_ms` — это время ожидания повторной попытки. В этих событиях `max_retries` отражает одну повторную попытку, которую обычно получает эта причина, а не бюджет на уровне сеанса. Требует Claude Code версии 2.1.261 или позже |270| `no_response` | объект, опционально | присутствует только когда неудачная попытка [не получила заголовки ответа вовремя](/docs/ru/errors#no-response-from-api). `waited_ms` — это время ожидания этой попытки, а `retry_wait_ms` — время ожидания повторной попытки. Требует Claude Code версии 2.1.261 или позже |

269| `error` | строка | категория ошибки: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` или `unknown` |271| `error` | строка | категория ошибки: `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `rate_limit`, `overloaded`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error` или `unknown` |

270| `uuid` | строка | уникальный идентификатор события |272| `uuid` | строка | уникальный идентификатор события |

271| `session_id` | строка | сеанс, к которому принадлежит событие |273| `session_id` | строка | сеанс, к которому принадлежит событие |

hooks.md +124 −35

Details

476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |476| `async` | нет | Если `true`, запускается в фоне без блокировки. См. [Run hooks in the background](#run-hooks-in-the-background) |

477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |477| `asyncRewake` | нет | Если `true`, запускается в фоне и пробуждает Claude при коде выхода 2. Hook stderr или stdout, если stderr пусто, показывается Claude как [системное напоминание](/docs/ru/glossary#system-reminder) чтобы он мог реагировать на долгоживущий фоновый сбой |

478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |478| `shell` | нет | Оболочка для использования для этого hook. Принимает `"bash"` или `"powershell"`. По умолчанию `"bash"`, или `"powershell"` на Windows когда Git Bash не установлен. Установка `"powershell"` запускает команду через PowerShell на Windows. Не требует `CLAUDE_CODE_USE_POWERSHELL_TOOL`, так как hooks порождают PowerShell напрямую. Игнорируется когда установлен `args` |

479| `onFailure` | нет | Что происходит с действием при сбое хука: `"continue"` (по умолчанию) или `"block"`. См. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |

479 480 

480<a id="exec-form-and-shell-form" />481<a id="exec-form-and-shell-form" />

481 482 


533| `url` | да | URL для отправки POST запроса |534| `url` | да | URL для отправки POST запроса |

534| `headers` | нет | Дополнительные HTTP заголовки как пары ключ-значение. Значения поддерживают интерполяцию переменных окружения с использованием синтаксиса `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в `allowedEnvVars` |535| `headers` | нет | Дополнительные HTTP заголовки как пары ключ-значение. Значения поддерживают интерполяцию переменных окружения с использованием синтаксиса `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в `allowedEnvVars` |

535| `allowedEnvVars` | нет | Список имён переменных окружения, которые могут быть интерполированы в значения заголовков. Ссылки на неуказанные переменные заменяются пустыми строками. Требуется для любой интерполяции переменных окружения |536| `allowedEnvVars` | нет | Список имён переменных окружения, которые могут быть интерполированы в значения заголовков. Ссылки на неуказанные переменные заменяются пустыми строками. Требуется для любой интерполяции переменных окружения |

537| `onFailure` | нет | Что происходит с действием при сбое хука: `"continue"` (по умолчанию) или `"block"`. См. [Блокировка действия при сбое хука](#block-the-action-when-a-hook-fails). Требует Claude Code v2.1.295 или новее |

536 538 

537Claude Code отправляет [JSON входные данные](#hook-input-and-output) hook как тело POST запроса с `Content-Type: application/json`. Тело ответа использует тот же [JSON формат выхода](#json-output), что и command hooks.539Claude Code отправляет [JSON входные данные](#hook-input-and-output) hook как тело POST запроса с `Content-Type: application/json`. Тело ответа использует тот же [JSON формат выхода](#json-output), что и command hooks.

538 540 


821 Вывод через код выхода823 Вывод через код выхода

822</h3>824</h3>

823 825 

824Код выхода вашей команды хука сообщает Claude Code, следует ли продолжить действие, заблокировать его или проигнорировать. Код выхода не действует сам по себе. Claude Code читает [поля вывода JSON](#json-output) из stdout при любом коде выхода, а не только при 0, и для событий, использующих стандартную модель решений, разобранный объект, прошедший проверку схемы, вступает в силу наряду с кодом. Блокировка при выходе с кодом 2 — единственный результат, который JSON не может переопределить.826Код выхода вашего хука сообщает Claude Code, следует ли продолжить действие, вызвавшее хук, например вызов инструмента или промпт. Завершившийся запуск имеет один из трёх результатов:

825 827 

826Исключения для отдельных событий описаны в двух таблицах: [Поведение кода выхода 2 для каждого события](#exit-code-2-behavior-per-event) показывает, что делают коды выхода для каждого события, а [Управление решениями](#decision-control) — какие поля решений учитывает каждое событие. Универсальные поля, такие как `systemMessage`, работают для большинства событий и перечислены в таблице [Вывод JSON](#json-output).828* **Успех**: ваш хук завершается с кодом 0. Claude Code применяет все поля [вывода JSON](#json-output), которые вывел ваш хук, и действие выполняется, если эти поля не блокируют и не отклоняют его.

829* **Блокирующая ошибка**: ваш хук завершается с кодом 2. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие.

830* **Неблокирующая ошибка**: ваш хук завершается с любым другим кодом или завершается сбоем иным образом, например не запускается или выводит некорректный JSON. Действие выполняется, а для таких событий, как `PreToolUse`, в транскрипте отображается уведомление `<hook name> hook error`. Если вы хотите, чтобы хук, завершившийся сбоем, блокировал действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

831 

832То, что ваш хук выводит в stdout, может изменить результат. Например, если хук `PreToolUse` завершается с кодом 1, но выводит JSON, прошедший проверку, запуск считается успешным, и происходящее определяют поля JSON. Чтобы узнать результат вашего хука для такого события, как `PreToolUse`, найдите в первом столбце то, что он вывел в stdout, а в верхней строке — его код выхода:

833 

834| Stdout | Выход с кодом 0 | Выход с кодом 2 | Любой другой код выхода |

835| :- | :- | :- | :- |

836| Объект JSON, прошедший [проверку схемы](#json-output) | Успех. Поля применяются | Блокирующая ошибка. Claude Code всё равно читает поля, но они не могут переопределить блокировку | Успех. Claude Code игнорирует код выхода, и результат определяют только поля. При [`onFailure: "block"`](#block-the-action-when-a-hook-fails) это считается сбоем |

837| JSON, который [не удаётся разобрать](#exit-code-0) или который не прошёл проверку схемы | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит сообщение о разборе или проверке |

838| [Обычный текст](#exit-code-0) или ничего | Успех | Блокирующая ошибка. Причиной служит ваш stderr | Неблокирующая ошибка. Уведомление содержит первую строку вашего stderr |

839 

840У некоторых событий собственные правила:

841 

842* **`WorktreeCreate`**: любой ненулевой код выхода приводит к ошибке создания worktree, что бы ни содержал ваш JSON.

843* **`WorktreeRemove`**: любой ненулевой код выхода приводит к ошибке удаления worktree, если каталог после этого всё ещё существует.

844* **`Stop`, `SubagentStop`, `TaskCompleted` и хук `UserPromptSubmit` плагина**: если ваш хук завершается с кодом 2, ничего не выводит в stdout, а его stderr сообщает об отсутствии файла, например `No such file or directory`, Claude Code обрабатывает запуск как неблокирующую ошибку.

845* **`Elicitation` и `ElicitationResult`**: Claude Code применяет ваш `hookSpecificOutput`, когда хук завершается с кодом 0, и игнорирует его при любом другом коде выхода.

846* **События, отбрасывающие вывод хука, такие как `StopFailure`**: Claude Code игнорирует ваш JSON при любом коде выхода, за исключением полей с побочными эффектами, таких как `terminalSequence`, которые всё равно срабатывают.

847 

848Чтобы узнать, что делает код выхода 2 для вашего события, смотрите [Поведение кода выхода 2 для каждого события](#exit-code-2-behavior-per-event). Чтобы узнать, какие поля решений оно учитывает, смотрите [Управление решениями](#decision-control).

827 849 

828<h4 id="exit-code-0">850<h4 id="exit-code-0">

829 Код выхода 0851 Код выхода 0


835 857 

836Читает ли Claude Code ваш stdout как [вывод JSON](#json-output) или как обычный текст, зависит от того, с чего он начинается и чем заканчивается, без учёта окружающих пробельных символов:858Читает ли Claude Code ваш stdout как [вывод JSON](#json-output) или как обычный текст, зависит от того, с чего он начинается и чем заканчивается, без учёта окружающих пробельных символов:

837 859 

838* **Начинается с `{` и заканчивается `}`**: Claude Code разбирает его как JSON. Если вывод состоит из двух или более строк, каждая из которых по отдельности разбирается как JSON, и ни одна строка не является объектом [вывода JSON](#json-output), задающим какое-либо поле, Claude Code обрабатывает весь вывод как обычный текст. Если одна из этих строк задаёт поле, весь вывод считается ошибкой разбора, описанной ниже.860* **Начинается с `{` и заканчивается `}`**: Claude Code разбирает его как JSON. Если вывод состоит из двух или более строк, каждая из которых по отдельности разбирается как JSON, и ни одна строка не является объектом [вывода JSON](#json-output), задающим какое-либо поле, Claude Code обрабатывает весь вывод как обычный текст. Если одна из этих строк задаёт поле, весь вывод считается ошибкой разбора.

839* **Начинается с `{`, но не заканчивается `}`**: Claude Code обрабатывает его как обычный текст.861* **Начинается с `{`, но не заканчивается `}`**: Claude Code обрабатывает его как обычный текст.

840* **Начинается с чего-либо другого**: Claude Code обрабатывает его как обычный текст, включая массив JSON или строку JSON в кавычках.862* **Начинается с чего-либо другого**: Claude Code обрабатывает его как обычный текст, включая массив JSON или строку JSON в кавычках.

841 863 

842Для событий, использующих стандартную модель решений, выход с кодом 0 с разобранным объектом, не прошедшим проверку схемы, является неблокирующей ошибкой: действие продолжается, а в транскрипте отображается уведомление `<hook name> hook error` с сообщением о проверке. То же самое происходит при любом коде выхода, кроме 2, тогда как [выход с кодом 2 по-прежнему блокирует](#exit-code-2).864Если Claude Code пытается разобрать ваш stdout как JSON и не может или разобранный объект не проходит [проверку схемы](#json-output), запуск считается [неблокирующей ошибкой](#exit-code-output). Уведомление `<hook name> hook error` содержит сообщение о разборе или проверке. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет stdout, который ему не удалось разобрать.

843 

844Для событий, использующих стандартную модель решений, если Claude Code пытается разобрать ваш stdout как JSON и не может, он сообщает о неблокирующей ошибке при любом коде выхода, кроме 2. В транскрипте отображается уведомление `<hook name> hook error` с сообщением о разборе. Для событий, которые добавляют обычный текст из stdout как контекст, Claude Code не добавляет этот текст. До версии v2.1.248 Claude Code обрабатывал такой stdout как обычный текст.

845 865 

846Stderr хука, завершившегося с кодом 0, попадает только в отладочный лог, никогда не в транскрипт, и Claude его никогда не видит. Чтобы прочитать его самостоятельно, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.866Claude никогда не видит stderr хука, завершившегося с кодом 0. Чтобы прочитать его самостоятельно для таких событий, как `PreToolUse`, включите [отладочное логирование](#debug-hooks). Чтобы передать предупреждение Claude из хука `PostToolUse` или `PostToolUseFailure`, вместо этого выйдите с кодом 2, чтобы [Claude увидел stderr](#exit-code-2-behavior-per-event), хотя инструмент уже выполнился.

847 867 

848<h4 id="exit-code-2">868<h4 id="exit-code-2">

849 Код выхода 2869 Код выхода 2

850</h4>870</h4>

851 871 

852Выход с кодом 2 означает блокирующую ошибку. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), выход с кодом 2 блокирует независимо от того, выводите ли вы JSON: даже `permissionDecision` со значением `"allow"` в JSON не может его переопределить. Claude Code по-прежнему читает любой корректный [вывод JSON](#json-output) из stdout. Для `Elicitation` и `ElicitationResult` поле `hookSpecificOutput` хука, завершившегося с кодом 2, игнорируется.872Завершитесь с кодом 2, чтобы заблокировать действие. Для [событий, которые могут блокировать](#exit-code-2-behavior-per-event), Claude Code останавливает действие: например, хук `PreToolUse` блокирует вызов инструмента, а хук `UserPromptSubmit` отклоняет промпт.

853 873 

854Сообщением о блокировке служит причина из блокирующего решения в вашем JSON, если оно есть, а в противном случае — текст вашего stderr. Действие блокировки зависит от события: `PreToolUse` блокирует вызов инструмента, `UserPromptSubmit` отклоняет промпт и так далее. В разделе [Поведение кода выхода 2 для каждого события](#exit-code-2-behavior-per-event) перечислен эффект для каждого события, а раздел каждого события указывает, куда попадает сообщение.874Сообщением, сопровождающим блокировку, служит stderr вашего хука. Если ваш хук также вывел JSON с блокирующим решением, Claude Code вместо этого использует причину из этого решения.

855 875 

856Хук, который завершается с кодом 2 и при этом выводит JSON, не прошедший проверку схемы [вывода JSON](#json-output), всё равно блокирует: Claude Code использует stderr как причину блокировки и записывает ошибку проверки в отладочный лог. До версии v2.1.214 Claude Code обрабатывал такое сочетание как неблокирующую ошибку, и действие продолжалось.876Выход с кодом 2 блокирует, даже если ваш хук выводит JSON:

877 

878* **JSON, прошедший проверку схемы**: Claude Code по-прежнему читает поля [вывода JSON](#json-output), но они не могут переопределить блокировку. Даже `permissionDecision` со значением `"allow"` не пропускает действие. Для `Elicitation` и `ElicitationResult` поле `hookSpecificOutput` хука, завершившегося с кодом 2, игнорируется.

879* **JSON, не прошедший проверку схемы**: хук всё равно блокирует. Claude Code использует ваш stderr как причину блокировки и записывает ошибку проверки в отладочный лог.

857 880 

858Этот скрипт блокирует команды `rm`, завершаясь с кодом 2, и оставляет все остальные команды обычному процессу разрешений:881Этот скрипт блокирует команды `rm`, завершаясь с кодом 2, и оставляет все остальные команды обычному процессу разрешений:

859 882 


871exit 0 # No decision: the normal permission flow applies894exit 0 # No decision: the normal permission flow applies

872```895```

873 896 

897Если этот скрипт зарегистрирован как хук `PreToolUse` для `Bash`, команда, начинающаяся с `rm`, блокируется, а Claude получает stderr хука как ошибку инструмента с префиксом из имени события, имени инструмента и команды хука:

898 

899```text theme={null}

900PreToolUse:Bash hook error: [${CLAUDE_PROJECT_DIR}/.claude/hooks/no-rm.sh]: Blocked: rm commands are not allowed

901```

902 

874<h4 id="other-exit-codes">903<h4 id="other-exit-codes">

875 Другие коды выхода904 Другие коды выхода

876</h4>905</h4>

877 906 

878Любой другой код выхода сам по себе не блокирует для большинства событий хуков. Что произойдёт, зависит от вашего stdout:907Если ваш хук завершается с кодом, отличным от 0 или 2, и выводит в stdout обычный текст или ничего, запуск считается [неблокирующей ошибкой](#exit-code-output). В транскрипте отображается уведомление `<hook name> hook error` с `Failed with non-blocking status code:` и первой строкой stderr вашего хука. Например, если хук `PreToolUse` для `Bash` выводит `something broke` в stderr и завершается с кодом 1, уведомление `PreToolUse:Bash hook error` содержит такую строку:

879 908 

880* При разобранном объекте, прошедшем проверку схемы, для событий, использующих стандартную модель решений, Claude Code игнорирует код выхода, и результат определяет только JSON:909```text theme={null}

881 * Учитывается каждое поле, которое поддерживает событие, включая `permissionDecision`, `additionalContext`, `updatedInput` и `systemMessage`, и хук не считается ошибкой.910Failed with non-blocking status code: something broke

882 * В разделе [Управление решениями](#decision-control) перечислены поля решений для каждого события; универсальные поля, такие как `systemMessage`, описаны в таблице [Вывод JSON](#json-output).911```

883* При разобранном объекте, не прошедшем проверку схемы, для событий, использующих стандартную модель решений, это та же неблокирующая ошибка, что и [при выходе с кодом 0](#exit-code-0): действие продолжается, а уведомление `<hook name> hook error` содержит сообщение о проверке.

884* При stdout, который Claude Code [пытается разобрать как JSON](#exit-code-0) и не может, Claude Code сообщает о той же неблокирующей ошибке, что и при выходе с кодом 0, для событий, использующих стандартную модель решений. Действие продолжается, а уведомление содержит сообщение о разборе.

885* При stdout, который Claude Code [обрабатывает как обычный текст](#exit-code-0), или при пустом stdout это неблокирующая ошибка для большинства событий хуков: действие продолжается, а в транскрипте отображается уведомление `<hook name> hook error`, за которым следует первая строка stderr с префиксом `Failed with non-blocking status code:`. Чтобы получить полный stderr, включите [отладочное логирование](#debug-hooks).

886 912 

887События вне стандартной модели решений сохраняют собственные строки в [таблице по событиям](#exit-code-2-behavior-per-event): `WorktreeCreate` прерывает создание при любом ненулевом коде выхода независимо от того, что содержит ваш JSON, а события, полностью отбрасывающие вывод хука, такие как `StopFailure`, игнорируют ваш JSON при любом коде выхода, за исключением полей с побочными эффектами, таких как `terminalSequence`, которые всё равно срабатывают.913Чтобы получить полный stderr, а не только его первую строку, включите [отладочное логирование](#debug-hooks).

888 914 

889Хук, который не удаётся запустить, попадает в ту же категорию неблокирующих ошибок. Если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и вы видите то же уведомление с сообщением интерпретатора, например `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Для большинства событий хуков действие продолжается. Настраивая хук для политики, следите за этим уведомлением при его первом запуске: опечатка в пути в `settings.json` незаметно отключает проверку.915Хук, который не удаётся запустить, тоже считается неблокирующей ошибкой. В форме оболочки, если путь к скрипту не существует или файл не является исполняемым, оболочка завершается с кодом вроде 127, и уведомление содержит сообщение интерпретатора, например `Failed with non-blocking status code: /bin/sh: /path/to/hook.sh: No such file or directory`. Настраивая хук для политики, следите за этим уведомлением при его первом запуске, потому что опечатка в пути в `settings.json` означает, что хук никогда не выполнится. Чтобы вместо этого блокировать действие, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

890 916 

891<Warning>917<Warning>

892 Для большинства событий хуков код выхода 2 — единственный код выхода, который блокирует сам по себе. Без корректного JSON в stdout Claude Code обрабатывает код выхода 1 как неблокирующую ошибку и продолжает действие, хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`. События worktree отличаются: любой ненулевой код выхода из `WorktreeCreate` прерывает создание worktree, а любой ненулевой код выхода из `WorktreeRemove` приводит к ошибке удаления worktree, если каталог после этого всё ещё существует.918 Без корректного JSON в stdout Claude Code обрабатывает код выхода 1 как неблокирующую ошибку, хотя 1 — общепринятый код ошибки в Unix. Если ваш хук предназначен для соблюдения политики, используйте `exit 2`.

893</Warning>919</Warning>

894 920 

895<h4 id="timeouts">921<h4 id="timeouts">


900 926 

901Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:927Для [`PreModelSwitch`](#premodelswitch) хук, отменённый по таймауту, блокирует переключение модели. Для `PreToolUse` два семейства хуков ведут себя по-разному:

902 928 

903* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента. Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер.929* Хук `command`, `http` или `mcp_tool`, превысивший таймаут, не блокирует вызов инструмента. Вызов продолжается через обычный [процесс разрешений](/docs/ru/permissions), поэтому не рассчитывайте, что зависший хук сработает как защитный барьер. Чтобы блокировать вызов при превышении таймаута хуком `command` или `http`, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

904* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).930* [Callback-хук Agent SDK](/docs/ru/agent-sdk/hooks), превысивший свой таймаут, [блокирует вызов инструмента](#pretooluse).

905 931 

932<h4 id="block-the-action-when-a-hook-fails">

933 Блокировка действия при сбое хука

934</h4>

935 

936Для большинства событий, когда хук завершается сбоем или превышает таймаут, Claude Code всё равно выполняет действие, поэтому хук политики с неверным путём или падающим скриптом пропускает всё. Чтобы вместо этого блокировать действие, установите `"onFailure": "block"` для хука `command` или `http`. Значение по умолчанию — `"continue"`. Требуется Claude Code v2.1.295 или новее.

937 

938Этот хук `PreToolUse` в `.claude/settings.json` запускает скрипт проекта перед каждой командой Bash и блокирует команду, если скрипт завершается сбоем:

939 

940```json theme={null}

941{

942 "hooks": {

943 "PreToolUse": [

944 {

945 "matcher": "Bash",

946 "hooks": [

947 {

948 "type": "command",

949 "command": "node",

950 "args": ["${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js"],

951 "onFailure": "block"

952 }

953 ]

954 }

955 ]

956 }

957}

958```

959 

960Чтобы проверить его, не создавайте `check-command.js` и попросите Claude выполнить команду Bash, например `ls`. Claude Code блокирует вызов, и ошибка содержит `failed; blocking because onFailure is "block"`, за которым следует собственный вывод ошибки node, сокращённый здесь до одной строки:

961 

962```text theme={null}

963PreToolUse:Bash hook error: [node ${CLAUDE_PROJECT_DIR}/.claude/hooks/check-command.js]: failed; blocking because onFailure is "block"

964Error: Cannot find module '/path/to/project/.claude/hooks/check-command.js'

965```

966 

967После таймаута сообщение содержит `timed out` вместо `failed`. Без заданного `onFailure` тот же отсутствующий скрипт является неблокирующей ошибкой, и `ls` выполняется.

968 

969Каждый из следующих случаев считается сбоем:

970 

971* **Не удаётся запустить**: командный хук не запускается, например потому что скрипт или исполняемый файл не существует

972* **Код выхода, отличный от 0 или 2**: учитывается для командного хука, даже если он вывел JSON, разрешающий действие, например `permissionDecision: "allow"`. Чтобы вернуть решение в JSON, завершитесь с кодом 0

973* **Ошибка HTTP**: соединение HTTP-хука не удаётся установить, или статус ответа не 2xx

974* **Таймаут**: хук достигает своего [`timeout`](#common-fields)

975* **Некорректный вывод**: вывод JSON [не удаётся разобрать](#exit-code-0) или он не проходит [проверку схемы](#json-output). Для HTTP-хука сбоем также считается тело ответа 2xx, которое не является ни пустым, ни объектом JSON. Обычный текст в stdout командного хука сбоем не считается

976 

977При установленном `"block"` сбой действует так же, как [код выхода 2 для этого события](#exit-code-2-behavior-per-event), за исключением `PermissionRequest`, где он отклоняет запрос. Например, сбой `PreToolUse` блокирует вызов инструмента, а сбой `UserPromptSubmit` блокирует промпт.

978 

979Поле не действует для следующих хуков:

980 

981* **Хуки `Stop`, `SubagentStop`, `TaskCompleted` и `TeammateIdle`**: код выхода 2 для этих событий отправляет Claude продолжать работу, а Claude не может исправить хук, который не запускается

982* **Фоновые командные хуки**: командные хуки, в которых задано [`async` или `asyncRewake`](#run-hooks-in-the-background)

983 

906<h4 id="exit-code-2-behavior-per-event">984<h4 id="exit-code-2-behavior-per-event">

907 Поведение кода выхода 2 для каждого события985 Поведение кода выхода 2 для каждого события

908</h4>986</h4>


960* **Сбой соединения**: неблокирующая ошибка, выполнение продолжается1038* **Сбой соединения**: неблокирующая ошибка, выполнение продолжается

961* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)1039* **Таймаут**: хук отменяется, как описано в разделе [Таймауты](#timeouts)

962 1040 

963В отличие от командных хуков, HTTP-хуки не могут сигнализировать о блокирующей ошибке только через коды состояния. Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие поля решения.1041HTTP-хуки не могут сигнализировать о блокирующей ошибке только через код состояния: статус не 2xx или сбой соединения является [неблокирующей ошибкой](#exit-code-output). Чтобы заблокировать вызов инструмента или отклонить разрешение, верните ответ 2xx с телом JSON, содержащим соответствующие поля решения. Чтобы блокировать действие, когда запрос завершается сбоем или возвращает статус не 2xx, установите [`onFailure: "block"`](#block-the-action-when-a-hook-fails).

964 1042 

965<h3 id="json-output">1043<h3 id="json-output">

966 Вывод JSON1044 Вывод JSON


1237 Управление решениями SessionStart1315 Управление решениями SessionStart

1238</h4>1316</h4>

1239 1317 

1240Claude Code добавляет в контекст Claude stdout, который он [обрабатывает как обычный текст](#exit-code-0). Помимо [полей вывода JSON](#json-output), доступных всем хукам, вы можете возвращать следующие поля, специфичные для события:1318Хук SessionStart может добавлять контекст для Claude, задавать первое сообщение пользователя, устанавливать название сессии, отслеживать файлы и перезагружать скиллы. Для каждого из этих действий верните соответствующее поле в дополнение к [полям вывода JSON](#json-output), доступным всем хукам:

1241 1319 

1242| Поле | Описание |1320| Поле | Описание |

1243| :- | :- |1321| :- | :- |

1244| `additionalContext` | Строка, добавляемая в контекст Claude в начале диалога, до первого промпта. О том, как доставляется текст и что в него помещать, см. [Добавление контекста для Claude](#add-context-for-claude) |1322| `additionalContext` | Строка, добавляемая в контекст Claude в начале диалога, до первого промпта. О том, как доставляется текст и что в него помещать, см. [Добавление контекста для Claude](#add-context-for-claude) |

1245| `initialUserMessage` | Строка, используемая как первое пользовательское сообщение сессии. Применяется в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`, где она становится первым ходом, даже если промпт не передан. Если промпт передан, он следует за ней как следующий ход. В отличие от `additionalContext`, который прикрепляется к существующему ходу, это поле создаёт ход |1323| `initialUserMessage` | Строка, используемая как первое сообщение пользователя в сессии в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`. Она становится первым ходом, даже если вы не передаёте промпт. Переданный вами промпт следует за ней как следующий ход |

1246| `sessionTitle` | Задаёт название сессии, с тем же эффектом, что и `/rename`. Используйте, чтобы автоматически именовать сессии по папке запуска, ветке git или имени worktree. Применяется, когда `source` равен `"startup"`, `"resume"` или `"fork"`; игнорируется для `"clear"` и `"compact"` |1324| `sessionTitle` | Устанавливает название сессии с тем же эффектом, что и `/rename`. Применяется, когда `source` равно `"startup"`, `"resume"` или `"fork"` |

1247| `watchPaths` | Массив абсолютных путей для отслеживания событий [FileChanged](#filechanged) во время этой сессии |1325| `watchPaths` | Массив абсолютных путей для отслеживания событий [FileChanged](#filechanged) во время этой сессии |

1248| `reloadSkills` | Логическое значение. При `true` Claude Code повторно сканирует каталоги [скиллов](/docs/ru/skills) и команд после завершения хуков SessionStart, чтобы скиллы, установленные хуком, были доступны в той же сессии, начиная с первого промпта |1326| `reloadSkills` | Логическое значение. Если `true`, Claude Code повторно сканирует каталоги [скиллов](/docs/ru/skills) и команд после завершения хуков SessionStart. См. [Перезагрузка скиллов, устанавливаемых хуком](#reload-skills-that-a-hook-installs) |

1327 

1328Этот вывод добавляет контекст и даёт сессии название:

1249 1329 

1250```json theme={null}1330```json theme={null}

1251{1331{


1257}1337}

1258```1338```

1259 1339 

1260Поскольку для этого события обычный stdout и так доходит до Claude, хук, который только загружает контекст, может выводить его прямо в stdout, не формируя JSON. Используйте форму JSON, когда нужно совместить контекст с другими полями, например `sessionTitle`.1340Хук, который только добавляет контекст, может просто вывести его без формирования JSON, поскольку Claude Code добавляет [обычный текстовый stdout](#exit-code-0) хука SessionStart в контекст Claude.

1341 

1342Если хук SessionStart вашего плагина предоставляет `initialUserMessage` или `sessionTitle`, установите плагин до начала сессии. Claude Code игнорирует оба поля от плагина, установка которого завершается после того, как хуки SessionStart уже отработали.

1343 

1344<h4 id="reload-skills-that-a-hook-installs">

1345 Перезагрузка скиллов, устанавливаемых хуком

1346</h4>

1347 

1348Чтобы скиллы, устанавливаемые хуком SessionStart, стали доступны в той же сессии, верните `reloadSkills`. Обнаружение скиллов обычно выполняется до завершения хуков SessionStart, поэтому без этого поля файлы, которые хук записывает в `~/.claude/skills/` или `.claude/skills/`, могут отсутствовать при выполнении первого промпта.

1261 1349 

1262Используйте `reloadSkills`, когда хук SessionStart устанавливает или обновляет скиллы. Обнаружение скиллов обычно выполняется до завершения хуков SessionStart, поэтому файлы, которые хук записывает в `~/.claude/skills/` или `.claude/skills/`, иначе появились бы только в следующей сессии. Этот пример синхронизирует общий репозиторий скиллов и запрашивает повторное сканирование:1350В этом примере синхронизируется общий репозиторий скиллов и запрашивается повторное сканирование:

1263 1351 

1264```bash theme={null}1352```bash theme={null}

1265#!/bin/bash1353#!/bin/bash


1270echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'1358echo '{"hookSpecificOutput": {"hookEventName": "SessionStart", "reloadSkills": true}}'

1271```1359```

1272 1360 

1273URL репозитория здесь — заглушка; замените его на собственный репозиторий скиллов. С заглушкой клонирование завершается ошибкой и выводит сообщение `fatal:` в stderr. Stderr хука SessionStart, завершившегося с кодом 0, носит лишь информационный характер, поэтому запрос `reloadSkills` всё равно применяется.1361URL репозитория — это заглушка. Замените его адресом вашего собственного репозитория скиллов.

1274 1362 

1275<h4 id="persist-environment-variables">1363<h4 id="persist-environment-variables">

1276 Сохранение переменных окружения1364 Сохранение переменных окружения


1419 1507 

1420Хуки `UserPromptSubmit` имеют таймаут по умолчанию 30 секунд для типов `command`, `http` и `mcp_tool` — меньше, чем стандартные 600 секунд для этих типов в большинстве других событий. Поскольку этот хук выполняется перед каждым промптом и блокирует обработку моделью до своего завершения, зависший хук останавливает сессию. Если вашему хуку нужно больше времени, задайте поле `timeout` в записи хука.1508Хуки `UserPromptSubmit` имеют таймаут по умолчанию 30 секунд для типов `command`, `http` и `mcp_tool` — меньше, чем стандартные 600 секунд для этих типов в большинстве других событий. Поскольку этот хук выполняется перед каждым промптом и блокирует обработку моделью до своего завершения, зависший хук останавливает сессию. Если вашему хуку нужно больше времени, задайте поле `timeout` в записи хука.

1421 1509 

1422За исключением командного хука, который вы запускаете с [`async: true`](#run-hooks-in-the-background), хук `UserPromptSubmit` типа command, HTTP или MCP tool, достигший таймаута, отменяется, а его вывод, включая `additionalContext`, отбрасывается. Промпт всё равно доходит до Claude, но без этого контекста. В транскрипте отображается уведомление с именем хука, сработавшим таймаутом и сообщением о том, что вывод был отброшен.1510За исключением command-хука, запущенного с [`async: true`](#run-hooks-in-the-background), command-, HTTP- или MCP tool-хук `UserPromptSubmit`, достигший таймаута, отменяется, а его вывод, включая любой `additionalContext`, отбрасывается. Промпт всё равно доходит до Claude, но без этого контекста. Чтобы вместо этого заблокировать промпт, задайте [`onFailure: "block"`](#block-the-action-when-a-hook-fails) для command- или HTTP-хука. В транскрипте отображается уведомление с именем хука, сработавшим таймаутом и сообщением о том, что вывод был отброшен.

1423 1511 

1424[Хук обратного вызова Agent SDK](/docs/ru/agent-sdk/hooks) для `UserPromptSubmit`, достигший таймаута, блокирует промпт с сообщением, в котором названы хук и таймаут, поскольку обратный вызов в этом месте может выступать в роли шлюза политики, который не должен при сбое пропускать всё подряд. Сессия продолжается. До версии v2.1.208 таймаут обратного вызова для этого события завершал ход с ошибкой выполнения.1512[Хук обратного вызова Agent SDK](/docs/ru/agent-sdk/hooks) для `UserPromptSubmit`, достигший таймаута, блокирует промпт с сообщением, в котором названы хук и таймаут, поскольку обратный вызов в этом месте может выступать в роли шлюза политики, который не должен при сбое пропускать всё подряд. Сессия продолжается. До версии v2.1.208 таймаут обратного вызова для этого события завершал ход с ошибкой выполнения.

1425 1513 


1860| :- | :- | :- | :- |1948| :- | :- | :- | :- |

1861| `url` | string | `"https://example.com/api"` | URL, с которого загружается содержимое |1949| `url` | string | `"https://example.com/api"` | URL, с которого загружается содержимое |

1862| `prompt` | string | `"Extract the API endpoints"` | Промпт, применяемый к загруженному содержимому |1950| `prompt` | string | `"Extract the API endpoints"` | Промпт, применяемый к загруженному содержимому |

1951| `offset` | number | `100000` | Необязательное количество символов, пропускаемых от начала страницы. Claude задаёт его, чтобы продолжить чтение длинной страницы. Требуется Claude Code v2.1.290 или новее |

1863 1952 

1864<h5 id="websearch">1953<h5 id="websearch">

1865 WebSearch1954 WebSearch


2112| `message` | Только для `"deny"`: сообщает Claude, почему в разрешении отказано |2201| `message` | Только для `"deny"`: сообщает Claude, почему в разрешении отказано |

2113| `interrupt` | Только для `"deny"`: если `true`, останавливает Claude |2202| `interrupt` | Только для `"deny"`: если `true`, останавливает Claude |

2114 2203 

2115Хук, который завершается с кодом 2 без объекта `decision`, оставляет процесс проверки разрешений без изменений, а его stderr отбрасывается. Предоставить или отклонить запрос может только объект `decision`.2204Хук, завершающийся с кодом 2 без объекта `decision`, оставляет процесс разрешений без изменений, а его stderr отбрасывается. Чтобы предоставить или отклонить запрос, верните объект `decision`.

2116 2205 

2117```json theme={null}2206```json theme={null}

2118{2207{


2678 Управление решениями TaskCreated2767 Управление решениями TaskCreated

2679</h4>2768</h4>

2680 2769 

2681Хук TaskCreated может заблокировать создание двумя способами. В любом случае Claude Code удаляет задачу и возвращает ваше сообщение Claude в качестве ошибки инструмента. Claude Code игнорирует `continue: false` от этого события, и Claude продолжает работу.2770Хук TaskCreated может заблокировать создание с помощью кода выхода 2 или решения в JSON. В обоих случаях Claude Code удаляет задачу и возвращает ваше сообщение Claude как ошибку инструмента. Claude Code игнорирует `continue: false` от этого события, и Claude продолжает работу.

2682 2771 

2683* **Код выхода 2**: Claude Code возвращает текст из stderr в качестве сообщения.2772* **Код выхода 2**: Claude Code возвращает текст из stderr в качестве сообщения.

2684* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code возвращает `reason` в качестве сообщения.2773* **JSON `{"decision": "block", "reason": "..."}`**: Claude Code возвращает `reason` в качестве сообщения.


3561 3650 

3562Claude Code показывает пользователю любое `systemMessage`, возвращённое вашим хуком, независимо от решения, поэтому хук, сообщающий о стоимости, может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.3651Claude Code показывает пользователю любое `systemMessage`, возвращённое вашим хуком, независимо от решения, поэтому хук, сообщающий о стоимости, может вернуть `{"systemMessage": "..."}` и завершиться с кодом 0.

3563 3652 

3564Хук PreModelSwitch, который не ответил до истечения таймаута, блокирует смену. Для [PreToolUse](#timeouts), напротив, командный хук с истёкшим таймаутом позволяет вызову инструмента продолжиться. Таймаут по умолчанию для этого события — 30 секунд. `PreModelSwitch` запускает только хуки `command`, `http` и `mcp_tool`, поэтому значения по умолчанию для `prompt` и `agent` не применяются.3653Хук PreModelSwitch, который не ответил до истечения таймаута, блокирует переключение. О том, что делает таймаут для других событий, см. [Таймауты](#timeouts). Таймаут по умолчанию для этого события — 30 секунд. `PreModelSwitch` запускает только хуки `command`, `http` и `mcp_tool`, поэтому значения по умолчанию для `prompt` и `agent` не применяются.

3565 3654 

3566Хук, который завершается с кодом, отличным от 0 или 2, и не выводит JSON-решение, не блокирует смену: Claude Code показывает его stderr и применяет смену, как описано в разделе [Другие коды выхода](#other-exit-codes).3655Хук, который завершается с кодом, отличным от 0 или 2, и не выводит JSON-решение, считается неблокирующей ошибкой, как описано в разделе [Другие коды выхода](#other-exit-codes).

3567 3656 

3568<h3 id="postmodelswitch">3657<h3 id="postmodelswitch">

3569 PostModelSwitch3658 PostModelSwitch


4279Асинхронные hooks имеют дополнительные ограничения по сравнению с синхронными hooks:4368Асинхронные hooks имеют дополнительные ограничения по сравнению с синхронными hooks:

4280 4369 

4281* Выход hook доставляется на следующий ход разговора. Если сеанс неактивен, ответ ждёт до следующего взаимодействия пользователя. Исключение: hook `asyncRewake`, который выходит с кодом 2, пробуждает Claude немедленно даже когда сеанс неактивен.4370* Выход hook доставляется на следующий ход разговора. Если сеанс неактивен, ответ ждёт до следующего взаимодействия пользователя. Исключение: hook `asyncRewake`, который выходит с кодом 2, пробуждает Claude немедленно даже когда сеанс неактивен.

4282* Каждое выполнение создаёт отдельный фоновый процесс. Нет дедупликации между несколькими срабатываниями одного и того же асинхронного hook.4371* Каждое выполнение создаёт отдельный фоновый процесс.

4283 4372 

4284<h2 id="security-considerations">4373<h2 id="security-considerations">

4285 Соображения безопасности4374 Соображения безопасности

hooks-guide.md +14 −11

Details

242 242 

243Чтобы протестировать hook, попросите Claude добавить строку с одинарными кавычками в файл JavaScript, затем откройте файл: с параметрами Prettier по умолчанию hook переписывает их на двойные кавычки.243Чтобы протестировать hook, попросите Claude добавить строку с одинарными кавычками в файл JavaScript, затем откройте файл: с параметрами Prettier по умолчанию hook переписывает их на двойные кавычки.

244 244 

245Когда hook успешен, Claude Code ничего не показывает в разговоре. Чтобы подтвердить, что hook запустился, проверьте, что отредактированный файл переформатирован, или см. [Методы отладки](#debug-techniques).245Когда хук выполняется успешно, Claude Code ничего не показывает в диалоге. Чтобы убедиться, что хук запустился, проверьте, что отредактированный файл переформатирован, или см. раздел [Проверка того, что сделал хук](#check-what-a-hook-did).

246 246 

247Чтобы переформатировать определённый файл при любом его изменении, включая когда команда `Bash` переписывает его, используйте hook [FileChanged](/docs/ru/hooks#filechanged) вместо этого.247Чтобы переформатировать определённый файл при любом его изменении, включая когда команда `Bash` переписывает его, используйте hook [FileChanged](/docs/ru/hooks#filechanged) вместо этого.

248 248 


979}979}

980```980```

981 981 

982Конечная точка должна вернуть тело ответа JSON, используя тот же [формат вывода](/docs/ru/hooks#json-output), что и hooks команд. Для блокировки вызова инструмента верните ответ 2xx с соответствующими полями `hookSpecificOutput`. Коды состояния HTTP сами по себе не могут блокировать действия.982Ваш эндпоинт отвечает телом JSON в том же [формате вывода](/docs/ru/hooks#json-output), что и командные хуки, а Claude Code также проверяет код состояния ответа:

983 

984* **Код состояния 2xx**: чтобы заблокировать вызов инструмента, верните в теле ответа соответствующие поля `hookSpecificOutput`.

985* **Любой другой код состояния или сбой запроса**: Claude Code сообщает о [неблокирующей ошибке](/docs/ru/hooks#exit-code-output) и позволяет действию продолжиться. Чтобы сбой эндпоинта блокировал действие, задайте для хука [`onFailure: "block"`](/docs/ru/hooks#block-the-action-when-a-hook-fails).

983 986 

984Значения заголовков поддерживают интерполяцию переменных окружения, используя синтаксис `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в массиве `allowedEnvVars`; все остальные ссылки `$VAR` остаются пустыми.987Значения заголовков поддерживают интерполяцию переменных окружения, используя синтаксис `$VAR_NAME` или `${VAR_NAME}`. Разрешены только переменные, указанные в массиве `allowedEnvVars`; все остальные ссылки `$VAR` остаются пустыми.

985 988 


1103 1106 

1104Когда ваш hook возвращает `permissionDecision` или `additionalContext` на верхнем уровне вместо внутри `hookSpecificOutput`, JSON всё ещё анализируется, и Claude Code игнорирует неправильно размещённые поля без сообщения об ошибке. Чтобы увидеть, какие поля он игнорировал, запустите Claude Code с `claude --debug` и найдите в [журнале отладки](/docs/ru/hooks#debug-hooks) `Hook JSON output had unrecognized keys`.1107Когда ваш hook возвращает `permissionDecision` или `additionalContext` на верхнем уровне вместо внутри `hookSpecificOutput`, JSON всё ещё анализируется, и Claude Code игнорирует неправильно размещённые поля без сообщения об ошибке. Чтобы увидеть, какие поля он игнорировал, запустите Claude Code с `claude --debug` и найдите в [журнале отладки](/docs/ru/hooks#debug-hooks) `Hook JSON output had unrecognized keys`.

1105 1108 

1106<h3 id="debug-techniques">1109<h3 id="check-what-a-hook-did">

1107 Методы отладки1110 Проверка того, что сделал хук

1108</h3>1111</h3>

1109 1112 

1110Нажмите `Ctrl+O` для открытия представления стенограммы, чтобы проверить результат запуска hook:1113Нажмите `Ctrl+O`, чтобы открыть представление транскрипта, и найдите результат работы хука:

1111 1114 

1112* **Успешный запуск**: вы ничего не видите, если только JSON hook не выводит что-то, например `systemMessage` или обратную связь Stop hook.1115* **Успех**: вы ничего не видите, если только JSON хука не выводит что-либо, например `systemMessage` или обратную связь Stop-хука.

1113 * Чтобы подтвердить, что hook запустился, проверьте его эффект, например переформатированный файл, или включите логирование отладки, как описано ниже, и снова запустите hook1116 * Чтобы убедиться, что хук запустился, проверьте его эффект, например переформатированный файл

1114* **Блокирующая ошибка**: в большинстве событий вы видите обратную связь hook. Когда JSON hook принял блокирующее решение, обратная связь — это причина из этого решения; в противном случае это stderr hook. На нескольких событиях, таких как `ConfigChange` и `Elicitation`, блокировка не выводит сообщение.1117* **Блокирующая ошибка**: для большинства событий вы видите сообщение, сопровождавшее блокировку, например `Blocked: rm commands are not allowed`. Для нескольких событий, таких как `ConfigChange` и `Elicitation`, сообщение не отображается. Откуда берётся сообщение, описано в разделе [Exit code 2](/docs/ru/hooks#exit-code-2).

1115* **Неблокирующая ошибка**: действие продолжилось, и вы видите уведомление `<hook name> hook error` с кратким объяснением, например первая строка stderr с префиксом `Failed with non-blocking status code:`, или сообщение о валидации JSON или анализе.1118* **Неблокирующая ошибка**: вы видите уведомление `<hook name> hook error` с кратким объяснением, например первой строкой stderr после `Failed with non-blocking status code:`, или сообщением о валидации либо разборе JSON. Действие было выполнено.

1116 1119 

1117Какие комбинации кодов выхода и JSON производят каждый результат, включая исключения для каждого события, определены в разделе [Exit code output](/docs/ru/hooks#exit-code-output) справочника.1120Чтобы узнать результат для конкретного кода выхода и stdout, включая исключения для отдельных событий, см. раздел [Exit code output](/docs/ru/hooks#exit-code-output) справочника.

1118 1121 

1119Для полных деталей выполнения, включая какие hooks совпали, их коды выхода, stdout и stderr, прочитайте журнал отладки. Запустите Claude Code с `claude --debug-file /tmp/claude.log` для записи в известный путь, затем `tail -f /tmp/claude.log` в другом терминале. Если вы запустили без этого флага, запустите `/debug` во время сеанса для включения логирования и поиска пути журнала.1122Для получения полных сведений о выполнении, включая коды выхода хуков, stdout и stderr, прочитайте лог отладки. Запустите Claude Code с `claude --debug-file /tmp/claude.log`, чтобы записывать лог по известному пути, затем выполните `tail -f /tmp/claude.log` в другом терминале. Если вы запустили Claude Code без этого флага, выполните `/debug` во время сессии, чтобы включить логирование и узнать путь к логу.

1120 1123 

1121<h2 id="learn-more">1124<h2 id="learn-more">

1122 Узнайте больше1125 Узнайте больше

Details

216| `^` | Первый непустой символ |216| `^` | Первый непустой символ |

217| `gg` | Начало ввода |217| `gg` | Начало ввода |

218| `G` | Начало последней строки |218| `G` | Начало последней строки |

219| `f{char}` | Перейти к следующему вхождению символа |219| `f{char}` | Перейти к следующему вхождению символа в текущей строке |

220| `F{char}` | Перейти к предыдущему вхождению символа |220| `F{char}` | Перейти к предыдущему вхождению символа в текущей строке |

221| `t{char}` | Перейти прямо перед следующим вхождением символа |221| `t{char}` | Перейти прямо перед следующим вхождением символа в текущей строке |

222| `T{char}` | Перейти прямо после предыдущего вхождения символа |222| `T{char}` | Перейти прямо после предыдущего вхождения символа в текущей строке |

223| `;` | Повторить последнее движение f/F/t/T |223| `;` | Повторить последнее движение f/F/t/T |

224| `,` | Повторить последнее движение f/F/t/T в обратном порядке |224| `,` | Повторить последнее движение f/F/t/T в обратном порядке |

225| `/` | Открыть поиск в обратной истории, то же самое, что `Ctrl+R`. Пустое приглашение поиска показывает подсказку: нажмите `Esc`, затем `i`, затем `/`, чтобы открыть меню команд вместо этого |225| `/` | Открыть поиск в обратной истории, то же самое, что `Ctrl+R`. Пустое приглашение поиска показывает подсказку: нажмите `Esc`, затем `i`, затем `/`, чтобы открыть меню команд вместо этого |


239| `dd` | Удалить строку |239| `dd` | Удалить строку |

240| `D` | Удалить до конца строки |240| `D` | Удалить до конца строки |

241| `dw`/`de`/`db` | Удалить слово/до конца/назад |241| `dw`/`de`/`db` | Удалить слово/до конца/назад |

242| `df{char}`/`dt{char}` | Удалить до и включая, или до следующего вхождения символа |242| `df{char}`/`dt{char}` | Удалить до и включая, или до следующего вхождения символа в текущей строке |

243| `dj`/`dk` | Удалить текущую строку и строку ниже или выше |243| `dj`/`dk` | Удалить текущую строку и строку ниже или выше |

244| `dgg`/`dG` | Удалить с текущей строки до первой или последней строки |244| `dgg`/`dG` | Удалить с текущей строки до первой или последней строки |

245| `d0`/`c0`/`y0` | Удалить, изменить или скопировать от курсора к началу строки. Требует Claude Code v2.1.281 или более позднюю версию |245| `d0`/`c0`/`y0` | Удалить, изменить или скопировать от курсора к началу строки. Требует Claude Code v2.1.281 или более позднюю версию |


859* Простая `#123`859* Простая `#123`

860* Вложенный путь GitLab, такой как `group/subgroup/project#123`860* Вложенный путь GitLab, такой как `group/subgroup/project#123`

861* Любая ссылка внутри диапазона кода или блока кода861* Любая ссылка внутри диапазона кода или блока кода

862* Любая ссылка в ответе длиннее примерно 1 000 строк или 100 000 символов

862 863 

863Claude Code создаёт ссылку для хоста репозитория, который он определяет из вашего git remote, а не для репозитория, который называет ссылка:864Claude Code создаёт ссылку для хоста репозитория, который он определяет из вашего git remote, а не для репозитория, который называет ссылка:

864 865 

mcp.md +1 −1

Details

367 367 

368В v2 Claude Code также:368В v2 Claude Code также:

369 369 

370* Спрашивает HTTP- и stdio-серверы, поддерживают ли они более новую ревизию, и использует её с теми, которые поддерживают. В сессиях, где он получает флаги функций, он также спрашивает серверы коннекторов claude.ai. Ко всем остальным серверам он подключается так же, как v1.370* Спрашивает HTTP-, stdio-серверы и серверы коннекторов claude.ai, поддерживают ли они более новую ревизию, и использует её с теми, которые поддерживают. Ко всем остальным серверам он подключается так же, как v1.

371* Получает уведомления `list_changed` от серверов на более новой ревизии через [поток, который держит открытым](#notification-streams-on-the-v2-runtime).371* Получает уведомления `list_changed` от серверов на более новой ревизии через [поток, который держит открытым](#notification-streams-on-the-v2-runtime).

372* Не регистрирует сервер [канала](#push-messages-with-channels), который подключается на более новой ревизии, потому что эта ревизия не может передавать сообщения канала.372* Не регистрирует сервер [канала](#push-messages-with-channels), который подключается на более новой ревизии, потому что эта ревизия не может передавать сообщения канала.

373* Прерывает [вход через MCP OAuth](#authenticate-with-remote-mcp-servers), если ответ авторизации указывает неожиданного издателя.373* Прерывает [вход через MCP OAuth](#authenticate-with-remote-mcp-servers), если ответ авторизации указывает неожиданного издателя.

Details

599 599 

600В сеансах, подписанных на [шлюз приложений Claude](/docs/ru/claude-apps-gateway) через `/login`, CLI помечает экспорты аутентифицированной идентификацией: `user.id` — это субъект IdP, `user.email` — это адрес электронной почты входа, и `user.groups` содержит членство в группе IdP в виде строки, разделённой запятыми. Каждый экспорт также содержит `identity.source: gateway-oidc`. Идентификация шлюза применяется последней, поэтому ключи `user.*` и `identity.*`, установленные через `OTEL_RESOURCE_ATTRIBUTES`, игнорируются в сеансах шлюза.600В сеансах, подписанных на [шлюз приложений Claude](/docs/ru/claude-apps-gateway) через `/login`, CLI помечает экспорты аутентифицированной идентификацией: `user.id` — это субъект IdP, `user.email` — это адрес электронной почты входа, и `user.groups` содержит членство в группе IdP в виде строки, разделённой запятыми. Каждый экспорт также содержит `identity.source: gateway-oidc`. Идентификация шлюза применяется последней, поэтому ключи `user.*` и `identity.*`, установленные через `OTEL_RESOURCE_ATTRIBUTES`, игнорируются в сеансах шлюза.

601 601 

602<Note>

603 События, которые Claude Code записывает в лог до входа разработчика, не содержат идентичность шлюза. Когда Claude Code открывает сессию без входа в шлюз, например после того как [шлюз завершил сеанс входа](/docs/ru/errors#cloud-gateway-session-expired), события запуска, записанные до входа, содержат анонимный `user.id` и не содержат `identity.source`. К ним относятся [`managed_settings_resolved`](#managed-settings-resolved-event), [`plugin_loaded`](#plugin-loaded-event) и [`mcp_server_connection`](#mcp-server-connection-event).

604</Note>

605 

602Для атрибутов идентификации в сеансах Claude Desktop и Cowork, которые подключаются через шлюз, см. [справочник по телеметрии шлюза](/docs/ru/claude-apps-gateway-config#telemetry).606Для атрибутов идентификации в сеансах Claude Desktop и Cowork, которые подключаются через шлюз, см. [справочник по телеметрии шлюза](/docs/ru/claude-apps-gateway-config#telemetry).

603 607 

604События дополнительно включают следующие атрибуты. Они никогда не прикрепляются к метрикам, так как это вызовет неограниченную кардинальность:608События дополнительно включают следующие атрибуты. Они никогда не прикрепляются к метрикам, так как это вызовет неограниченную кардинальность:


917* `error`: Сообщение об ошибке921* `error`: Сообщение об ошибке

918* `status_code`: Код состояния HTTP как число. Отсутствует для ошибок, не связанных с HTTP, таких как сбои соединения.922* `status_code`: Код состояния HTTP как число. Отсутствует для ошибок, не связанных с HTTP, таких как сбои соединения.

919* `duration_ms`: Длительность запроса в миллисекундах923* `duration_ms`: Длительность запроса в миллисекундах

920* `attempt`: Общее количество попыток, включая исходный запрос (`1` означает, что повторных попыток не было)924* `attempt`: количество выполненных попыток, включая исходный запрос. Когда счёт начинается заново, описано в разделе [Обнаружение исчерпания повторных попыток](#detect-retry-exhaustion)

921* `request_id`: ID запроса API, например `"req_011..."`, описанный в [Атрибуты корреляции событий](#event-correlation-attributes).925* `request_id`: ID запроса API, например `"req_011..."`, описанный в [Атрибуты корреляции событий](#event-correlation-attributes).

922* `client_request_id`: Созданный клиентом UUID, отправленный как заголовок запроса `x-client-request-id`. Доступен даже при сбое, таком как тайм-аут или ошибка соединения, которые никогда не создали серверный `request_id`; см. таблицу [атрибутов корреляции событий](#event-correlation-attributes) для того, когда он присутствует. Требуется Claude Code v2.1.214 или позже926* `client_request_id`: Созданный клиентом UUID, отправленный как заголовок запроса `x-client-request-id`. Доступен даже при сбое, таком как тайм-аут или ошибка соединения, которые никогда не создали серверный `request_id`; см. таблицу [атрибутов корреляции событий](#event-correlation-attributes) для того, когда он присутствует. Требуется Claude Code v2.1.214 или позже

923* `speed`: `"fast"` или `"normal"`, указывающий, был ли активен быстрый режим927* `speed`: `"fast"` или `"normal"`, указывающий, был ли активен быстрый режим


1190 1194 

1191Регистрируется, когда Claude Code разрешает упоминание `@` в запросе. Не каждое упоминание выпускает событие: пути раннего выхода, такие как отказы в разрешении, файлы чрезмерного размера, вложения ссылок PDF и сбои перечисления каталогов, возвращаются без логирования.1195Регистрируется, когда Claude Code разрешает упоминание `@` в запросе. Не каждое упоминание выпускает событие: пути раннего выхода, такие как отказы в разрешении, файлы чрезмерного размера, вложения ссылок PDF и сбои перечисления каталогов, возвращаются без логирования.

1192 1196 

1197Каждый раз, когда Claude Code читает промпт, он записывает не более 100 событий с `mention_type`, равным `"agent"`, и 100 — с `"mcp_resource"`. Упоминания сверх любого из этих лимитов по-прежнему разрешаются, но не генерируют событий.

1198 

1193**Имя события**: `claude_code.at_mention`1199**Имя события**: `claude_code.at_mention`

1194 1200 

1195**Атрибуты**:1201**Атрибуты**:


1529 1535 

1530Claude Code повторяет неудачные запросы API внутри и выдает одно событие `claude_code.api_error` только после того, как сдается, поэтому само событие является терминальным сигналом для этого запроса. Промежуточные повторные попытки не логируются как отдельные события.1536Claude Code повторяет неудачные запросы API внутри и выдает одно событие `claude_code.api_error` только после того, как сдается, поэтому само событие является терминальным сигналом для этого запроса. Промежуточные повторные попытки не логируются как отдельные события.

1531 1537 

1532Атрибут `attempt` на событии записывает общее количество попыток. `CLAUDE_CODE_MAX_RETRIES` по умолчанию равен 10 и ограничен 15. Начиная с версии 2.1.199, вы можете установить `CLAUDE_CODE_RETRY_WATCHDOG` для повышения значения по умолчанию и снятия ограничения.1538Атрибут `attempt` на событии записывает количество попыток. `CLAUDE_CODE_MAX_RETRIES` по умолчанию равен 10 и ограничен 15. Начиная с версии 2.1.199, вы можете установить `CLAUDE_CODE_RETRY_WATCHDOG` для повышения значения по умолчанию и снятия ограничения.

1539 

1540Когда запрос исчерпывает все повторные попытки при переходной ошибке, `attempt` не более чем на один больше этого эффективного ограничения: 11 по умолчанию.

1533 1541 

1534Когда запрос исчерпывает все повторные попытки при переходной ошибке, `attempt` равен на один больше, чем это эффективное ограничение: 11 по умолчанию и никогда не более 16, если не установлен watchdog. Более низкое значение указывает на неповторяемую ошибку, такую как ответ `400`, или причину с собственным меньшим бюджетом повторных попыток. Например, Claude Code повторяет сбой при загрузке учетных данных AWS или Google Cloud не более двух раз.1542Более низкое значение тоже может означать, что повторные попытки исчерпаны: `attempt` снова начинается с `1` каждый раз, когда Claude Code повторно отправляет запрос после сбоя потоковой передачи.

1535 1543 

1536Чтобы различить сеанс, который восстановился, от того, который застопорился, сгруппируйте события по `session.id` и проверьте, существует ли более позднее событие `api_request` после ошибки.1544Чтобы различить сеанс, который восстановился, от того, который застопорился, сгруппируйте события по `session.id` и проверьте, существует ли более позднее событие `api_request` после ошибки.

1537 1545 

Details

91| `-y, --yes` | Примите отображаемую команду установки без запроса `Run this command now?`. Игнорируется, когда команда запускается внутри сессии Claude Code, например из инструмента Bash или хука. Требует Claude Code v2.1.229 или позже |91| `-y, --yes` | Примите отображаемую команду установки без запроса `Run this command now?`. Игнорируется, когда команда запускается внутри сессии Claude Code, например из инструмента Bash или хука. Требует Claude Code v2.1.229 или позже |

92| `--accept-command <sha256>` | Примите отображаемую команду установки, чей `sha256` предыдущий запуск [`--json`](#plugin-json-result) сообщил в `shownCommand`, вместо `-y`. Не может быть объединён с `-y`. См. [Принять отображаемую команду установки](#accept-a-displayed-install-command). Требует Claude Code v2.1.271 или позже |92| `--accept-command <sha256>` | Примите отображаемую команду установки, чей `sha256` предыдущий запуск [`--json`](#plugin-json-result) сообщил в `shownCommand`, вместо `-y`. Не может быть объединён с `-y`. См. [Принять отображаемую команду установки](#accept-a-displayed-install-command). Требует Claude Code v2.1.271 или позже |

93| `--json` | Выведите результат как один JSON объект на последней строке stdout вместо читаемого сообщения для использования в скриптах. См. [Формат результата JSON](#plugin-json-result). Требует Claude Code v2.1.268 или позже |93| `--json` | Выведите результат как один JSON объект на последней строке stdout вместо читаемого сообщения для использования в скриптах. См. [Формат результата JSON](#plugin-json-result). Требует Claude Code v2.1.268 или позже |

94| `--marketplace <source>` | Установите `<plugin>`, указанный по его простому имени, из маркетплейса по адресу `<source>`, предварительно добавив маркетплейс, если вы ещё не добавили его. См. [Добавление маркетплейса и установка одной командой](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command). Требует Claude Code v2.1.292 или позже |

94 95 

95Запустите `claude plugin install --help` в вашей оболочке, чтобы увидеть каждую опцию, которую поддерживает ваша версия.96Запустите `claude plugin install --help` в вашей оболочке, чтобы увидеть каждую опцию, которую поддерживает ваша версия.

96 97 

Details

413 How users accept a headersHelper command413 How users accept a headersHelper command

414</h3>414</h3>

415 415 

416Пользователь принимает команду записи плагина каждый раз, когда они устанавливают или обновляют этот один плагин сам по себе. Они делают это из собственного представления плагина в `/plugin`, или с `claude plugin install` или `claude plugin update`. Claude Code показывает команду и URL архива и запускает команду только после того как пользователь принимает.416Пользователь принимает команду записи плагина каждый раз, когда устанавливает или обновляет этот плагин отдельно. Claude Code показывает команду и URL архива и запускает команду только после того, как пользователь её примет.

417 

418Пользователи могут установить или обновить плагин в сессии Claude Code в терминале, в своей оболочке без запущенной сессии или в расширении VS Code:

419 

420* **Сессия в терминале**: из собственного представления плагина в `/plugin`.

421* **Оболочка**: с помощью `claude plugin install` или `claude plugin update`.

422* **Расширение VS Code**: из [диалога **Manage plugins**](/docs/ru/vs-code#manage-plugins) в версии расширения 2.1.290 или более поздней.

417 423 

418В неинтерактивной оболочке передайте [`--yes`](/docs/ru/plugins/cli-reference#plugin-install), чтобы принять команду. Чтобы принять только команду, которую предыдущий запуск `--json` отобразил, передайте [`--accept-command`](/docs/ru/plugins/cli-reference#plugin-install) с `sha256`, который запуск сообщил.424В неинтерактивной оболочке передайте [`--yes`](/docs/ru/plugins/cli-reference#plugin-install), чтобы принять команду. Чтобы принять только команду, которую предыдущий запуск `--json` отобразил, передайте [`--accept-command`](/docs/ru/plugins/cli-reference#plugin-install) с `sha256`, который запуск сообщил.

419 425 

420Claude Code запускает только команду, которую он показал, для URL архива, который он показал. Если команда записи или URL архива изменились между тем, Claude Code отказывает в установке или обновлении. Изменение в строке запроса одного не считается.426Claude Code запускает только ту команду, которую показал, и только для того URL архива, который показал. Если за это время команда записи или URL архива изменились, Claude Code отказывает в установке или обновлении. Изменение одной лишь строки запроса не учитывается, за исключением расширения VS Code или использования `--accept-command`.

421 427 

422<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">428<h3 id="installs-and-updates-that-refuse-the-command-instead-of-asking">

423 Installs and updates that refuse a command instead of asking429 Installs and updates that refuse a command instead of asking

Details

189 189 

190* **Область**: пользовательская область по умолчанию. Передайте `--scope project` или `--scope local`, чтобы изменить её.190* **Область**: пользовательская область по умолчанию. Передайте `--scope project` или `--scope local`, чтобы изменить её.

191* **Когда плагины загружаются**: плагины, которые он устанавливает, загружаются в следующий раз, когда вы запускаете Claude Code, или когда вы запускаете `/reload-plugins` в уже открытой сессии.191* **Когда плагины загружаются**: плагины, которые он устанавливает, загружаются в следующий раз, когда вы запускаете Claude Code, или когда вы запускаете `/reload-plugins` в уже открытой сессии.

192* **Маркетплейс должен быть добавлен первым**: на машине, где никто ещё не открывал интерактивную сессию Claude Code, официальный маркетплейс не зарегистрирован, поэтому скрипт, который устанавливает из него, запускает `claude plugin marketplace add anthropics/claude-plugins-official` перед установкой.192* **Маркетплейс на новой машине**: на машине, где никто ещё не открывал интерактивную сессию Claude Code, официальный маркетплейс не зарегистрирован, поэтому скрипт, который устанавливает из него, запускает `claude plugin marketplace add anthropics/claude-plugins-official` перед установкой. См. [Add and install from your shell](#add-and-install-from-your-shell).

193 193 

194```bash theme={null}194```bash theme={null}

195claude plugin install formatter@your-org --scope project195claude plugin install formatter@your-org --scope project


232 Добавление маркетплейса и установка в одной команде232 Добавление маркетплейса и установка в одной команде

233</h3>233</h3>

234 234 

235Чтобы установить плагин из маркетплейса, который вы ещё не добавили, запустите `/plugin install` в сессии Claude Code и назовите источник маркетплейса с помощью `--marketplace`. Требуется Claude Code v2.1.275 или позже.235Чтобы установить плагин из маркетплейса, который вы ещё не добавили, назовите источник маркетплейса с помощью `--marketplace` в команде установки — в сессии или из вашей оболочки. Источник принимает [те же формы, что и `/plugin marketplace add`](#add-a-marketplace), такие как GitHub `owner/repo`, URL git или локальный путь. Дайте имя плагина само по себе, без суффикса `@marketplace`.

236 

237<h4 id="add-and-install-in-a-session">

238 Добавление и установка в сессии

239</h4>

240 

241Запустите `/plugin install` в сессии Claude Code с плагином и источником. Требуется Claude Code v2.1.275 или позже. В сессии источник не может содержать пробелы.

236 242 

237```text theme={null}243```text theme={null}

238/plugin install deploy-helper --marketplace your-org/plugins244/plugin install deploy-helper --marketplace your-org/plugins

239```245```

240 246 

241Источник принимает [те же формы, что и `/plugin marketplace add`](#add-a-marketplace), такие как GitHub `owner/repo`, URL git или локальный путь, за исключением того, что он не может содержать пробелы. Дайте имя плагина само по себе, без суффикса `@marketplace`.

242 

243Если вы ещё не добавили этот маркетплейс, Claude Code показывает разрешённый источник и просит вас подтвердить перед добавлением. После добавления маркетплейса детали плагина открываются и вы выбираете [область установки](#install-a-plugin). Если источник совпадает с маркетплейсом, который вы уже добавили, Claude Code пропускает подтверждение и открывает детали плагина в этом маркетплейсе.247Если вы ещё не добавили этот маркетплейс, Claude Code показывает разрешённый источник и просит вас подтвердить перед добавлением. После добавления маркетплейса детали плагина открываются и вы выбираете [область установки](#install-a-plugin). Если источник совпадает с маркетплейсом, который вы уже добавили, Claude Code пропускает подтверждение и открывает детали плагина в этом маркетплейсе.

244 248 

249<h4 id="add-and-install-from-your-shell">

250 Добавление и установка из оболочки

251</h4>

252 

253В вашей оболочке, не запуская сессию, запустите `claude plugin install` с плагином и источником. Требуется Claude Code v2.1.292 или позже.

254 

255```bash theme={null}

256claude plugin install deploy-helper --marketplace your-org/plugins

257```

258 

259Команда оболочки добавляет маркетплейс без шага подтверждения. Маркетплейс, который вы уже добавили из этого источника, используется повторно. Новый добавляется с теми же [проверками политики организации](/docs/ru/plugins/org#restrict-what-users-can-install), что и `claude plugin marketplace add`, и объявляется в ваших пользовательских настройках, даже если вы передаёте `--scope project`.

260 

261Если вы ещё не добавили этот маркетплейс, команда выводит `Successfully added marketplace: <name> (declared in user settings)`, а затем [устанавливает плагин](#install-from-your-shell).

262 

245<h3 id="add-a-private-marketplace">263<h3 id="add-a-private-marketplace">

246 Добавление приватного маркетплейса264 Добавление приватного маркетплейса

247</h3>265</h3>

Details

185| Ставит `official` рядом с `claude` или `anthropic`, например `official-claude-tools` | Ошибка |185| Ставит `official` рядом с `claude` или `anthropic`, например `official-claude-tools` | Ошибка |

186| Имеет `claude`, `anthropic` или `anthropics` как целое слово где-либо еще, например `mcp-for-claude` | Предупреждение |186| Имеет `claude`, `anthropic` или `anthropics` как целое слово где-либо еще, например `mcp-for-claude` | Предупреждение |

187 187 

188Ошибка читается как `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, а предупреждение читается как `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` и `claude plugin tag` отказывают в имени, которое вызывает ошибку. Только эти команды проверяют имя. Claude Code все еще устанавливает и загружает плагин, имя которого они отказывают.188Ошибка читается как `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, а предупреждение читается как `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` и `claude plugin tag` отказывают в имени, которое вызывает ошибку. Claude Code все еще устанавливает и загружает плагин, имя которого они отказывают.

189 189 

190<h3 id="displayname">190<h3 id="displayname">

191 `displayName`191 `displayName`

Details

64 64 

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

66| :- | :- | :- |66| :- | :- | :- |

67| `name` | string | Идентификатор маркетплейса: буквы, цифры, `.`, `_` и `-`, начинается с буквы или цифры, без `..`. `claude plugin validate` отклоняет любое другое имя, потому что Claude Code не может устанавливать плагины из маркетплейса с таким именем. Пользователи вводят это имя после `@` в [идентификаторе плагина](/docs/ru/plugins/loading#find-where-a-plugin-came-from), например `my-plugin@my-marketplace`, при установке плагина. См. [Зарезервированные имена](#reserved-names) |67| `name` | string | Идентификатор маркетплейса: буквы, цифры, `.`, `_` и `-`, начинается с буквы или цифры, без `..`. `claude plugin validate` отклоняет любое другое имя, потому что Claude Code [не может устанавливать плагины из маркетплейса с таким именем](/docs/ru/plugins/troubleshooting#cannot-install-plugins-from-a-marketplace-with-this-name). Пользователи вводят это имя после `@` в [идентификаторе плагина](/docs/ru/plugins/loading#find-where-a-plugin-came-from), например `my-plugin@my-marketplace`, при установке плагина. См. [Зарезервированные имена](#reserved-names) |

68| `owner` | object | Информация о разработчике. `name` обязателен; `email` и `url` опциональны |68| `owner` | object | Информация о разработчике. `name` обязателен; `email` и `url` опциональны |

69| `plugins` | array | [Записи плагинов](#plugin-entries). Каждая запись проверяется отдельно, поэтому одна неверная запись не приводит к отказу marketplace |69| `plugins` | array | [Записи плагинов](#plugin-entries). Каждая запись проверяется отдельно, поэтому одна неверная запись не приводит к отказу marketplace |

70| `$schema` | string | URL JSON Schema для автодополнения редактора. Игнорируется при загрузке |70| `$schema` | string | URL JSON Schema для автодополнения редактора. Игнорируется при загрузке |

Details

138| `$.mcp.call` | Вызывает инструмент на подключенном MCP сервере в соответствии с правилами разрешений сеанса |138| `$.mcp.call` | Вызывает инструмент на подключенном MCP сервере в соответствии с правилами разрешений сеанса |

139| `$.model.complete` | Использует план пользователя или ключ API для вызовов модели |139| `$.model.complete` | Использует план пользователя или ключ API для вызовов модели |

140| `$.prompt.submit` | Отправляет запрос и может отправить его как собственные слова пользователя |140| `$.prompt.submit` | Отправляет запрос и может отправить его как собственные слова пользователя |

141| `$.session.send` | Отправляет сообщение, которое читает Claude другого сеанса или подагента |141| `$.session.send` | Отправляет сообщение, которое читает Claude другой сессии, субагента или [участника команды](/docs/ru/agent-teams) |

142 142 

143В строке `hooks:`, [`tool.call`](/docs/ru/plugins/mods/reference#tools) и [`prompt.submit`](/docs/ru/plugins/mods/reference#prompts-and-what-claude-reads) означают, что мод видит каждый вызов инструмента и каждый запрос и может их изменять. [`session.append`](/docs/ru/plugins/mods/reference#session) означает, что мод может переписать каждую строку разговора перед ее сохранением. [`ui.render{component=AskUserQuestion}`](/docs/ru/plugins/mods/interface#change-what-claude-code-already-draws) означает, что мод может переделать диалог, который Claude использует для вопроса пользователю. `tool.check` означает, что мод может одобрить или отказать в вызове инструмента перед появлением запроса разрешения. [Узнать, что происходит по умолчанию](#know-what-happens-by-default) перечисляет, какие из ваших правил и hooks имеют приоритет над его ответом.143В строке `hooks:`, [`tool.call`](/docs/ru/plugins/mods/reference#tools) и [`prompt.submit`](/docs/ru/plugins/mods/reference#prompts-and-what-claude-reads) означают, что мод видит каждый вызов инструмента и каждый запрос и может их изменять. [`session.append`](/docs/ru/plugins/mods/reference#session) означает, что мод может переписать каждую строку разговора перед ее сохранением. [`ui.render{component=AskUserQuestion}`](/docs/ru/plugins/mods/interface#change-what-claude-code-already-draws) означает, что мод может переделать диалог, который Claude использует для вопроса пользователю. `tool.check` означает, что мод может одобрить или отказать в вызове инструмента перед появлением запроса разрешения. [Узнать, что происходит по умолчанию](#know-what-happens-by-default) перечисляет, какие из ваших правил и hooks имеют приоритет над его ответом.

144 144 

Details

4 4 

5# Использование mods API5# Использование mods API

6 6 

7> Вызывайте mods API из Claude Code mod для добавления команд и инструментов, вызова модели, запуска работы по таймеру, отправки сообщений другим сеансам и доступа к файлам и сети.7> Вызывайте mods API из мода Claude Code для добавления команд и инструментов, вызова модели, запуска работы по таймеру, отправки сообщений другим сессиям и доступа к файлам и сети.

8 8 

9mods API — это набор методов, которые mod вызывает для выполнения действий: добавления команд и инструментов, вызова модели, запуска работы между событиями и доступа к файловой системе, процессам и сети. Каждый hook получает её в качестве первого аргумента, `$`, с методами, сгруппированными в пространства имён, такие как `$.ui` и `$.fs`. [События](/docs/ru/plugins/mods/events) определяют, когда выполняется hook, а mods API — это то, что hook вызывает после этого.9mods API — это набор методов, которые mod вызывает для выполнения действий: добавления команд и инструментов, вызова модели, запуска работы между событиями и доступа к файловой системе, процессам и сети. Каждый hook получает её в качестве первого аргумента, `$`, с методами, сгруппированными в пространства имён, такие как `$.ui` и `$.fs`. [События](/docs/ru/plugins/mods/events) определяют, когда выполняется hook, а mods API — это то, что hook вызывает после этого.

10 10 


79 Вызов модели79 Вызов модели

80</h2>80</h2>

81 81 

82Mod может задать модели вопрос самостоятельно, вне разговора, для небольшой работы, такой как сортировка или суммирование текста. `$.model.complete` отправляет один запрос модели с учётными данными вашего сеанса и разрешается в ответ. У неё нет истории разговора.82Мод может отправлять модели собственные запросы для небольшой работы, такой как классификация или суммирование текста. `$.model.complete` отправляет ваш промпт отдельно, а `$.model.fork({ prompt })` отправляет текущий диалог с вашим промптом в конце.

83 

84В этой таблице сравнивается, что содержит каждый запрос:

85 

86| В запросе | `$.model.complete` | `$.model.fork` |

87| :- | :- | :- |

88| Модель | Переданная вами `model` | Модель сессии |

89| Системный промпт | Короткий [блок атрибуции](/docs/ru/llm-gateway-protocol#system-prompt-attribution-block), затем ваш `system`, если вы его передаёте | Системный промпт сессии |

90| Сообщения | Одно сообщение пользователя — ваш `prompt` | Диалог на текущий момент, затем ваш `prompt` как сообщение пользователя |

91| CLAUDE.md и другой контекст проекта | Не включаются | Включаются, как в последнем запросе диалога |

92| Инструменты | Нет | Инструменты Claude, которые модель не может вызывать |

93 

94Fork повторяет последний запрос диалога, поэтому Claude API обслуживает большую его часть из [кэша промптов](/docs/ru/prompt-caching), пока диалог ещё находится в кэше.

95 

96Оба вызова используют учётные данные сессии, поэтому оплачиваются через план пользователя, API-ключ или облачного провайдера. [Типы для вашей сборки](/docs/ru/plugins/mods/create#get-the-types-for-your-build) документируют каждый метод `$.model`.

97 

98<h3 id="send-one-prompt">

99 Отправка одного промпта

100</h3>

101 

102Передайте `model` и `prompt` в `$.model.complete`. `prompt` становится сообщением пользователя. Чтобы дать модели инструкции, например роль или формат вывода, передайте также `system`, который становится системным промптом.

83 103 

84Этот hook отвечает на команду `/triage`, [зарегистрированную как команда](#add-a-command), попросив небольшую модель пометить текст, введённый после неё:104Этот hook отвечает на команду `/triage`, [зарегистрированную как команда](#add-a-command), попросив небольшую модель пометить текст, введённый после неё:

85 105 


100})120})

101```121```

102 122 

103Когда вы запускаете `/triage the export button does nothing`, mod отправляет этот текст модели и печатает её ответ, например `Label: bug`. Разговор Claude не является частью запроса. Когда модель не отвечает, метка — `unknown`.123Когда вы запускаете `/triage the export button does nothing`, мод отправляет этот текст модели и печатает её ответ, например `Label: bug`. Когда модель не отвечает, метка — `unknown`.

124 

125Сбой Claude API не отклоняет вызов, поэтому проверьте `r.isAnswered` и прочитайте `r.reason`, когда это `false`. Вызов отклоняется для запроса, который Claude Code не отправит, например для модели, которую блокирует ваша организация.

126 

127[Типы для вашей сборки](/docs/ru/plugins/mods/create#get-the-types-for-your-build) перечисляют другие параметры, такие как `effort`, а в разделе [ограничения](/docs/ru/plugins/mods/reference#limits) указано значение `maxTokens` по умолчанию.

128 

129<h3 id="use-prompt-caching">

130 Использование кэширования промптов

131</h3>

132 

133`$.model.complete` поддерживает [кэширование промптов](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) Claude API. API кэширует начало запроса, называемое префиксом, до заданной вами [точки останова кэша](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#explicit-cache-breakpoints). Когда каждый вызов начинается с одного и того же длинного статического содержимого, например инструкций или справочных материалов, установите точку останова в конце этого содержимого. Последующие вызовы будут читать его из кэша, а не оплачивать по полной цене входных данных.

134 

135Чтобы установить точку останова, передайте `prompt` как массив блоков `{ text }` вместо строки и добавьте `cache: true` к последнему блоку статического содержимого. Claude Code отправляет этот блок с полем API `cache_control`. `system` принимает ту же форму массива. О том, как выбрать между ними, см. [Выбор между `prompt` и `system`](#choose-between-prompt-and-system).

136 

137<Note>

138 Массивы блоков требуют Claude Code v2.1.292 или новее. Более ранние версии отклоняют массив в `prompt` с ошибкой, которая заканчивается на `takes { model, prompt } (host check)`, а массив в `system` не включают в запрос.

139</Note>

140 

141Эта версия [хука `/triage`](#send-one-prompt) отправляет длинный набор правил разметки перед текстом для разметки, с точкой останова после правил. `RULES` — это ваша собственная строка:

142 

143```javascript theme={null}

144on('command.run', { command: 'triage' }, async ($, e) => {

145 const r = await $.model.complete({

146 model: 'haiku',

147 prompt: [

148 // Identical on every call, so it forms the cached prefix

149 { text: RULES, cache: true },

150 // Changes on every call, so it goes after the breakpoint

151 { text: e.args },

152 ],

153 })

154 return { text: 'Label: ' + (r.isAnswered ? r.text.trim() : 'unknown') }

155})

156```

157 

158Для TTL и количества точек останова действуют следующие ограничения:

159 

160* **TTL**: запись кэша существует пять минут после последнего использования. TTL берётся из настроек Claude Code пользователя, а не из вызова. Для одного часа установите [`subagentPromptCacheTtl`](/docs/ru/prompt-caching#choose-the-ttl-yourself) в `1h`.

161* **Точки останова на запрос**: API принимает [до четырёх](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#when-to-use-multiple-breakpoints), а ещё одна возвращается как `api-error` в `r.reason`

162 

163<h4 id="choose-between-prompt-and-system">

164 Выбор между `prompt` и `system`

165</h4>

166 

167Помещайте статическое содержимое, общее для ваших вызовов, в начало `prompt`, если только вы не знаете, что ваши запросы идут напрямую в Claude API:

168 

169* **Напрямую в Claude API, с API-ключом или подпиской Claude**: подходит любое поле

170* **Через [Amazon Bedrock](/docs/ru/amazon-bedrock), [Claude Platform on AWS](/docs/ru/claude-platform-on-aws), [Google Cloud's Agent Platform](/docs/ru/google-vertex-ai), [Microsoft Foundry](/docs/ru/microsoft-foundry) или [LLM-шлюз](/docs/ru/llm-gateway)**: используйте `prompt`. Claude Code начинает системный промпт с [блока атрибуции](/docs/ru/llm-gateway-protocol#system-prompt-attribution-block), отпечаток которого вычисляется из начала сообщения пользователя. Эндпоинт `api.anthropic.com` удаляет этот блок перед кэшированием. Другие эндпоинты получают его как часть промпта, поэтому точка останова в `system` может не дать попадания в кэш, если `prompt` начинается по-другому.

171* **В моде, который запускают другие люди**: используйте `prompt`, потому что вы не выбираете их провайдера

172 

173`system` идёт перед `prompt` в префиксе, поэтому точка останова в `prompt` охватывает и `system`, а вызов с другим `system` не попадает в кэш.

104 174 

105Сбой Claude API не отклоняет вызов, поэтому проверьте `r.isAnswered` и прочитайте `r.reason`, когда это `false`. Вызов отклоняется для запроса, который Claude Code не отправит, например для модели, которую блокирует ваша организация. [Типы для вашей сборки](/docs/ru/plugins/mods/create#get-the-types-for-your-build) перечисляют другие параметры, такие как `effort`, а [ограничения](/docs/ru/plugins/mods/reference#limits) дают значение по умолчанию `maxTokens`.175<h4 id="check-for-cache-hits">

176 Проверка попаданий в кэш

177</h4>

106 178 

107`$.model.fork({ prompt })` вместо этого задаёт один вопрос по текущему разговору с той же моделью и системным запросом, поэтому Claude API обслуживает большую часть из кэша запросов.179Результат `$.model.complete` содержит объект `usage` с [полями кэша](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#tracking-cache-performance) API. `usage.cache_creation_input_tokens` подсчитывает токены, которые вызов записал в кэш, а `usage.cache_read_input_tokens` — токены, которые он прочитал из кэша. Ожидайте запись при первом вызове и чтение при последующих вызовах в пределах TTL.

108 180 

109Эти вызовы используют план пользователя или ключ API.181Если каждый вызов записывает и ни один не читает, префикс различается между вызовами или вызовы разделены промежутком больше TTL. Если префикс различается, см. [Выбор между `prompt` и `system`](#choose-between-prompt-and-system).

182 

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

184 

185* **Префикс слишком короткий**: API не кэширует префикс короче [минимальной длины](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#cache-limitations) для модели и не возвращает ошибку

186* **Кэширование промптов отключено**: когда к модели применяется [переменная `DISABLE_PROMPT_CACHING`](/docs/ru/prompt-caching#disable-prompt-caching), Claude Code удаляет точки останова и отправляет текст без кэширования

187* **Ваш шлюз удаляет `cache_control`**: шлюз может [удалить это поле и всё равно вернуть успех](/docs/ru/prompt-caching#where-the-cache-lives)

188* **Другой мод переписывает начало текста**: тогда Claude Code [отправляет его без точек останова](#what-a-model-complete-hook-receives)

189 

190<h3 id="what-a-model-complete-hook-receives">

191 Что получает хук `model.complete`

192</h3>

193 

194Если вы подключаете хук к событию [`model.complete`](/docs/ru/plugins/mods/reference#mods-api-calls), чтобы просматривать или изменять запросы других модов, читайте текст из этих полей:

195 

196* **`e.prompt`**: всегда строка. Когда вызывающий передал массив, это текст блоков, объединённый по порядку.

197* **`e.system`**: строка, построенная тем же образом, или отсутствует, если вызывающий не передал `system`

198* **`e.promptBlocks` и `e.systemBlocks`**: массивы вызывающего, каждый присутствует, когда вызывающий передал массив для соответствующего поля

199 

200Claude Code отправляет строки, которые ваш хук передаёт в `next`, и использует переданные вместе с ними массивы для размещения [точек останова кэша](#use-prompt-caching). Он сохраняет начальные блоки, которые всё ещё совпадают с началом строки, вместе с их точками останова, а остаток строки отправляет без точки останова. Например, `next({ ...e, prompt: e.prompt + NOTE })` сохраняет точки останова вызывающего, а хук, который изменяет начало `prompt`, удаляет их.

110 201 

111<h2 id="run-work-in-the-background">202<h2 id="run-work-in-the-background">

112 Запуск работы в фоне203 Запуск работы в фоне


140| Вызов | Что видит пользователь |231| Вызов | Что видит пользователь |

141| :- | :- |232| :- | :- |

142| `$.ui.status(text)` | Одна строка под запросом, которая остаётся, пока вы её не измените. Она начинается с `⚠` и имени mod, как в `⚠ my-mod: checks: 3 passing`. |233| `$.ui.status(text)` | Одна строка под запросом, которая остаётся, пока вы её не измените. Она начинается с `⚠` и имени mod, как в `⚠ my-mod: checks: 3 passing`. |

143| `$.ui.toast(text)` | Всплывающее уведомление в верхнем правом углу с именем mod над текстом, которое исчезает через несколько секунд |234| `$.ui.toast(text)` | Всплывающее уведомление с именем мода, которое исчезает через несколько секунд. В [полноэкранном режиме отрисовки](/docs/ru/fullscreen) это блок в правом верхнем углу, а в классическом рендерере — одна строка справа под промптом. |

144| `$.ui.log(text)` | Тусклая строка в стенограмме, которую Claude не читает. Она начинается с `●` и имени mod, как в `● my-mod: build finished`. |235| `$.ui.log(text)` | Тусклая строка в стенограмме, которую Claude не читает. Она начинается с `●` и имени mod, как в `● my-mod: build finished`. |

145 236 

146<h3 id="start-a-turn-from-a-background-job">237<h3 id="start-a-turn-from-a-background-job">


159 Отправка и получение сообщений между сеансами250 Отправка и получение сообщений между сеансами

160</h2>251</h2>

161 252 

162Mod может отправить простое текстовое сообщение другому вашему сеансу или одному из подагентов этого сеанса и наблюдать сообщения, которые приходят и уходят. `$.session.send({ to, text })` отправляет один, такую же доставку, которую делает инструмент SendMessage. `to` — это `{ sessionId }` для сеанса, `{ agentId }` для подагента из `$.agent.list()` или адрес строки, из которого пришло полученное сообщение. Вызов разрешается после того, как сообщение поставлено в очередь, с `{ isDelivered: true }`. Когда ничего не было доставлено, он разрешается с `{ isDelivered: false, reason }`, и `reason` говорит почему.253Мод может отправить простое текстовое сообщение другой вашей сессии, одному из субагентов этой сессии или участнику её [команды агентов](/docs/ru/agent-teams). Он также может наблюдать за сообщениями, которые приходят и уходят.

254 

255Чтобы отправить сообщение, вызовите `$.session.send({ to, text })`: он выполняет такую же доставку, как инструмент SendMessage. Задайте `to` в зависимости от получателя сообщения:

256 

257* **Другая ваша сессия**: `{ sessionId }`

258* **Субагент или участник команды**: `{ agentId }` с id из `$.agent.list()`

259* **Отправитель полученного вами сообщения**: строковый адрес, с которого пришло это сообщение

260 

261Вызов разрешается после того, как сообщение поставлено в очередь, с `{ isDelivered: true }`. Если ничего не было доставлено, он разрешается с `{ isDelivered: false, reason }`, и `reason` сообщает причину.

163 262 

164Этот hook отвечает на команду `/ping`, [зарегистрированную как команда](#add-a-command), попросив сеанс, чей id вы вводите после неё, получить статус:263Этот hook отвечает на команду `/ping`, [зарегистрированную как команда](#add-a-command), попросив сеанс, чей id вы вводите после неё, получить статус:

165 264 

Details

281 Получите определения типов для вашей версии281 Получите определения типов для вашей версии

282</h3>282</h3>

283 283 

284Каждый раз, когда Claude Code загружает или перезагружает мод из каталога, который вы передаёте `--plugin-dir`, или мод [Claude написал для вас](#ask-claude-for-a-mod), он пишет файлы объявлений TypeScript, заканчивающиеся на `.d.ts`, в `.claude-plugin/types/` внутри каталога мода. Они описывают точные события, методы API модов и элементы в версии Claude Code, которую вы запускаете, поэтому ваш редактор может автодополнять и проверять типы ваших hooks. Чтобы просмотреть объявления в Интернете, прочитайте [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) в репозитории Claude Code, первая строка которого называет версию, которая его написала. Каталог содержит эти файлы:284Когда Claude Code загружает мод из `--plugin-dir` в интерактивной сессии или мод, который [Claude написал для вас](#ask-claude-for-a-mod), он записывает файлы объявлений TypeScript в каталог `.claude-plugin/types/` мода. Они описывают точные события, методы API модов и элементы в версии Claude Code, которую вы запускаете, поэтому ваш редактор может автодополнять и проверять типы ваших хуков. Каталог содержит эти файлы:

285 285 

286| Путь | Что он объявляет |286| Путь | Что он объявляет |

287| :- | :- |287| :- | :- |

Details

145 145 

146После того как Claude редактирует или записывает файл `.mdx`, тусклая строка в транскрипте называет этот файл. Для файлов другого типа, а также для вызовов, в которых было отказано или которые завершились ошибкой, ничего не записывается. Представление Claude о вызове не меняется, потому что хук возвращает полученный результат.146После того как Claude редактирует или записывает файл `.mdx`, тусклая строка в транскрипте называет этот файл. Для файлов другого типа, а также для вызовов, в которых было отказано или которые завершились ошибкой, ничего не записывается. Представление Claude о вызове не меняется, потому что хук возвращает полученный результат.

147 147 

148Чтобы изменить вызов, передайте изменённые аргументы в `next`. Чтобы повторить попытку вызова, снова вызовите `next(e)`: хук, который видит `isError` в первом результате, может запустить инструмент второй раз и вернуть этот результат. Чтобы ответить на вызов самостоятельно, верните объект с полем `result`, например `{ result: 'Skipped by my-mod' }`, не вызывая `next`. В этом случае запрос разрешения не появляется и инструмент не запускается, поэтому возвращённый вами результат — это всё, что Claude узнает о произошедшем.148Ваш хук также может изменить вызов, повторить его, ответить на него самостоятельно или скрыть его результат:

149 

150* **Изменить вызов**: передайте изменённые аргументы в `next`.

151* **Повторить попытку вызова**: снова вызовите `next(e)`. Хук, который видит `isError` в первом результате, может запустить инструмент второй раз и вернуть этот результат.

152* **Ответить на вызов самостоятельно**: верните объект с полем `result`, не вызывая `next`, а для встроенного инструмента придайте `result` ту форму, которую имеет собственный результат этого инструмента в [типах для вашей сборки](/docs/ru/plugins/mods/create#get-the-types-for-your-build). Запрос разрешения не появляется и инструмент не запускается, поэтому возвращённый вами результат — это всё, что Claude узнает о произошедшем.

153* **Скрыть результат от Claude**: верните `{ deny: reason }` после `await next(e)`. Claude читает вашу причину вместо того, что вернул `next`. Если инструмент был запущен, deny скрывает его результат от Claude и не отменяет ничего из того, что сделал инструмент. Если инструмент был запущен и выполнился успешно, причина следует за примечанием вида `Bash ran, and a plugin withheld its result:`.

149 154 

150Хуки в [управляемых настройках](/docs/ru/server-managed-settings) вашей организации запускаются раньше любого хука `tool.call` мода, и блокировка от одного из них является окончательной.155Хуки в [управляемых настройках](/docs/ru/server-managed-settings) вашей организации запускаются раньше любого хука `tool.call` мода, и блокировка от одного из них является окончательной.

151 156 


225 230 

226| Чтобы сделать это | Верните это |231| Чтобы сделать это | Верните это |

227| :- | :- |232| :- | :- |

228| Переписать промпт. Сообщение в транскрипте показывает новый текст. | `next({ ...e, text: newText })` |233| Переписать промпт. Транскрипт и ваша [история промптов](/docs/ru/interactive-mode#command-history) показывают новый текст. | `next({ ...e, text: newText })` |

229| Добавить после промпта текст, который читает только Claude | `next({ ...e, context: [...(e.context ?? []), extraText] })` |234| Добавить после промпта текст, который читает только Claude | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

230| Не допустить отправки промпта | `{ drop: 'the reason' }` |235| Не допустить отправки промпта | `{ drop: 'the reason' }` |

231 236 


245 250 

246Когда вы отправляете промпт, например `open a PR for this change`, ваше сообщение в транскрипте выглядит так же, а Claude после него также читает строку вида `Current branch: feature/auth`. Промпт, который не упоминает pull request, проходит без изменений, и `git` не запускается.251Когда вы отправляете промпт, например `open a PR for this change`, ваше сообщение в транскрипте выглядит так же, а Claude после него также читает строку вида `Current branch: feature/auth`. Промпт, который не упоминает pull request, проходит без изменений, и `git` не запускается.

247 252 

248Чтобы остановить промпт, верните `{ drop: 'the reason' }`, не вызывая `next`. Если ваш хук возвращает `drop` после того, как его вызов `next(e)` уже пропустил промпт, ход всё равно выполняется, а хук [завершается ошибкой](#handle-a-hook-that-fails) с сообщением, содержащим `a drop after its next() was answered`.253Чтобы остановить промпт, верните `{ drop: 'the reason' }`, не вызывая `next`. Текст возвращается в поле ввода промпта пользователя, и он видит `Prompt dropped by a hook:`, а затем вашу причину, поэтому адресуйте причину ему. Если ваш хук возвращает `drop` после того, как его вызов `next(e)` уже пропустил промпт, ход всё равно выполняется, а хук [завершается ошибкой](#handle-a-hook-that-fails) с сообщением, содержащим `a drop after its next() was answered`.

249 254 

250[Другие события](/docs/ru/plugins/mods/reference#prompts-and-what-claude-reads) охватывают остальное, что читает Claude: `prompt.section` для каждого раздела системного промпта, `prompt.context` для контекста, отправляемого с первым сообщением, и `skill.prompt` для текста скилла. Текст из этих хуков, меняющийся между запросами, [делает недействительным кэш промптов](/docs/ru/prompt-caching).255[Другие события](/docs/ru/plugins/mods/reference#prompts-and-what-claude-reads) охватывают остальное, что читает Claude: `prompt.section` для каждого раздела системного промпта, `prompt.context` для контекста, отправляемого с первым сообщением, и `skill.prompt` для текста скилла. Текст из этих хуков, меняющийся между запросами, [делает недействительным кэш промптов](/docs/ru/prompt-caching).

251 256 


281 286 

282`result.usage` содержит количество токенов, которое Claude API сообщает для запроса, а также `model`, которая ответила: `input_tokens`, `output_tokens`, `cache_read_input_tokens` и `cache_creation_input_tokens`. Хук запускается и для запросов субагентов, поэтому проверяйте `e.agentId`, если вам нужен только основной диалог.287`result.usage` содержит количество токенов, которое Claude API сообщает для запроса, а также `model`, которая ответила: `input_tokens`, `output_tokens`, `cache_read_input_tokens` и `cache_creation_input_tokens`. Хук запускается и для запросов субагентов, поэтому проверяйте `e.agentId`, если вам нужен только основной диалог.

283 288 

289Чтобы увидеть вызовы инструментов, которые API выполнил сам во время запроса, например вызовы [инструмента advisor](/docs/ru/advisor), читайте `result.serverToolUses`. Claude Code не выполняет эти вызовы, поэтому для них не срабатывает ни один хук `tool.call` или `tool.check`. Поле отсутствует, если в ответе нет таких вызовов, и для него требуется Claude Code v2.1.290 или новее.

290 

284<h3 id="hook-the-settings-hook-events">291<h3 id="hook-the-settings-hook-events">

285 Обработка событий хуков настроек292 Обработка событий хуков настроек

286</h3>293</h3>


369* **`tool.check`**: верните `{ decision: 'deny', reason: 'the reason' }`376* **`tool.check`**: верните `{ decision: 'deny', reason: 'the reason' }`

370* **`plugin.register`**: верните `{ refuse: 'the reason' }`, как показано в разделе [Отклонять моды, когда ваша проверка даёт сбой](/docs/ru/plugins/mods/admin#refuse-mods-when-your-check-fails)377* **`plugin.register`**: верните `{ refuse: 'the reason' }`, как показано в разделе [Отклонять моды, когда ваша проверка даёт сбой](/docs/ru/plugins/mods/admin#refuse-mods-when-your-check-fails)

371 378 

379На `tool.call` значение `deny`, возвращённое после того, как `next` разрешился, [скрывает результат от Claude](#guard-or-change-a-tool-call).

380 

372<h2 id="next-steps">381<h2 id="next-steps">

373 Следующие шаги382 Следующие шаги

374</h2>383</h2>

Details

10 10 

11На этой карте показано, где мод может рисовать в сессии терминала:11На этой карте показано, где мод может рисовать в сессии терминала:

12 12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Map of a Claude Code terminal session. A mod can add a pane as a sidebar on the right, a toast at the top right of the transcript, a log line in the transcript, a band above the prompt, and a status line under the prompt. A mod can redraw messages, tool call rows, and the spinner. The prompt is Claude Code's own." width="600" height="336" data-path="images/mods-screen-map.svg" />13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Карта сессии терминала Claude Code в полноэкранном режиме отрисовки. Мод может добавить панель в виде боковой панели справа, всплывающее уведомление в правом верхнем углу транскрипта, строку лога в транскрипте, полосу над промптом и строку состояния под промптом. Мод может перерисовывать сообщения, строки вызовов инструментов и спиннер. Промпт принадлежит самому Claude Code." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Map of a Claude Code terminal session. A mod can add a pane as a sidebar on the right, a toast at the top right of the transcript, a log line in the transcript, a band above the prompt, and a status line under the prompt. A mod can redraw messages, tool call rows, and the spinner. The prompt is Claude Code's own." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Карта сессии терминала Claude Code в полноэкранном режиме отрисовки. Мод может добавить панель в виде боковой панели справа, всплывающее уведомление в правом верхнем углу транскрипта, строку лога в транскрипте, полосу над промптом и строку состояния под промптом. Мод может перерисовывать сообщения, строки вызовов инструментов и спиннер. Промпт принадлежит самому Claude Code." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 16 

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

18 18 


324| `title` | Метка вкладки панели, когда открыто несколько панелей |324| `title` | Метка вкладки панели, когда открыто несколько панелей |

325| `focus` | Запрашивает [фокус клавиатуры](#know-which-keys-your-mod-can-receive) |325| `focus` | Запрашивает [фокус клавиатуры](#know-which-keys-your-mod-can-receive) |

326| `closeOnEscape` | Позволяет закрыть панель клавишей Esc |326| `closeOnEscape` | Позволяет закрыть панель клавишей Esc |

327| `holdToasts` | Удерживает всплывающие уведомления, небольшие уведомления от [`$.ui.toast`](/docs/ru/plugins/mods/api#show-something-without-starting-a-turn), пока панель не закроется |327| `holdToasts` | В терминале удерживает всплывающие уведомления, пока показывается именно эта панель. См. [Удержание всплывающих уведомлений за диалогом](#hold-toasts-behind-a-dialog). |

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

329| `columns` | Ширина, которую нужно запросить, когда панель находится рядом с транскриптом |329| `columns` | Ширина, которую нужно запросить, когда панель находится рядом с транскриптом |

330 330 


337 337 

338Чтобы позволить команде открыть панель, пока Claude работает, добавьте `immediate: true` при [регистрации команды](/docs/ru/plugins/mods/api#add-a-command). Без этого команда, введенная во время хода, ждет конца хода.338Чтобы позволить команде открыть панель, пока Claude работает, добавьте `immediate: true` при [регистрации команды](/docs/ru/plugins/mods/api#add-a-command). Без этого команда, введенная во время хода, ждет конца хода.

339 339 

340<h4 id="hold-toasts-behind-a-dialog">

341 Удержание всплывающих уведомлений за диалогом

342</h4>

343 

344Передайте `holdToasts: true` в `$.ui.open`, когда панель — это диалог, на который пользователь отвечает и который затем покидает, чтобы всплывающие уведомления не появлялись, пока он принимает решение. В терминале удержание длится, пока показывается именно эта панель, а всплывающее уведомление, вызванное в это время, ждет окончания удержания.

345 

346Claude Code удерживает всплывающие уведомления других модов и собственные кратковременные уведомления, а также те, которые ваш мод вызывает с помощью [`$.ui.toast`](/docs/ru/plugins/mods/api#show-something-without-starting-a-turn). Не задавайте это поле для панели, которая остается открытой, чтобы пользователь продолжал их видеть.

347 

340<h4 id="when-a-pane-waits-for-a-wider-terminal">348<h4 id="when-a-pane-waits-for-a-wider-terminal">

341 Когда панель ждет более широкого терминала349 Когда панель ждет более широкого терминала

342</h4>350</h4>

Details

64| :- | :- | :- |64| :- | :- | :- |

65| [`tool.call`](/docs/ru/plugins/mods/events#guard-or-change-a-tool-call) | Инструмент вот-вот запустится | `next(e)`, `{ deny: reason }` или `{ result }` |65| [`tool.call`](/docs/ru/plugins/mods/events#guard-or-change-a-tool-call) | Инструмент вот-вот запустится | `next(e)`, `{ deny: reason }` или `{ result }` |

66| [`tool.check`](/docs/ru/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code решает, может ли вызов инструмента выполниться, после хуков `tool.call` и `PreToolUse`. `next(e)` разрешается в решение, к которому пришли правила, режим разрешений и эти хуки. | `{ decision }`, то есть `allow`, `ask` или `deny` |66| [`tool.check`](/docs/ru/plugins/mods/events#where-settings-hooks-run-in-the-order) | Claude Code решает, может ли вызов инструмента выполниться, после хуков `tool.call` и `PreToolUse`. `next(e)` разрешается в решение, к которому пришли правила, режим разрешений и эти хуки. | `{ decision }`, то есть `allow`, `ask` или `deny` |

67| `tool.describe` | Один раз для каждого инструмента, когда его описание впервые отправляется Claude | `{ description }`, при необходимости с `isDeferred`, равным `true`, чтобы поместить инструмент за [поиск инструментов](/docs/ru/mcp#scale-with-mcp-tool-search), или `false`, чтобы загрузить его сразу |67| `tool.describe` | Один раз для каждого инструмента, когда его описание впервые отправляется Claude. Второй раз для инструмента MCP, когда Claude загружает его через [поиск инструментов](/docs/ru/mcp#scale-with-mcp-tool-search); при этом `e.description` содержит текст, который Claude читает для загруженного инструмента. | `{ description }`, при необходимости с `isDeferred`, равным `true`, чтобы поместить инструмент за поиск инструментов, или `false`, чтобы загрузить его сразу |

68 68 

69<h4 id="agent-and-organization-fields-on-tool-check">69<h4 id="agent-and-organization-fields-on-tool-check">

70 Поля агента и организации в `tool.check`70 Поля агента и организации в `tool.check`


133| `session.end` | Сессия завершается или выполняется `/clear`, `/resume` либо `/branch`. `e.reason` — это `clear`, `resume`, `logout`, `prompt_input_exit` или `other`. `/branch` сообщает `resume`. | `next(e)` |133| `session.end` | Сессия завершается или выполняется `/clear`, `/resume` либо `/branch`. `e.reason` — это `clear`, `resume`, `logout`, `prompt_input_exit` или `other`. `/branch` сообщает `resume`. | `next(e)` |

134| `session.compact` | Диалог вот-вот будет сжат | `{ skip: reason }` |134| `session.compact` | Диалог вот-вот будет сжат | `{ skip: reason }` |

135| [`session.receive`](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions) | Сообщение приходит от другого агента или сессии либо вот-вот будет отправлено им. См. [Отправка и получение сообщений между сессиями](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` для `receive`, `{ isDelivered: false, reason }` для `send` |135| [`session.receive`](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions), [`session.send`](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions) | Сообщение приходит от другого агента или сессии либо вот-вот будет отправлено им. См. [Отправка и получение сообщений между сессиями](/docs/ru/plugins/mods/api#send-and-receive-messages-between-sessions). | `{ consumed: reason }` для `receive`, `{ isDelivered: false, reason }` для `send` |

136| `session.append` | Один раз для каждой строки, которую сохраняет диалог, например промпта, блока ответа, результата инструмента или уведомления, перед её сохранением | `next({ ...e, message })`, чтобы переписать `content` строки |136| `session.append` | Один раз для каждой строки, которую сохраняет диалог, например промпта, блока ответа, результата инструмента или уведомления, перед её сохранением | `next({ ...e, message })` с изменённым `message.content`, чтобы переписать текстовые блоки строки или `content` блока `tool_result` в ней |

137| `session.attach`, `session.detach` | Другое приложение подключается к сессии или отключается от неё | `next(e)` |137| `session.attach`, `session.detach` | Другое приложение подключается к сессии или отключается от неё | `next(e)` |

138| `session.measure` | После каждого хода, а также когда меняется процент использования лимита тарифа | `next(e)` |138| `session.measure` | После каждого хода, а также когда меняется процент использования лимита тарифа | `next(e)` |

139 139 


209| [`$.ui`](/docs/ru/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |209| [`$.ui`](/docs/ru/plugins/mods/interface#pick-where-to-draw) | `resolve`, `invalidate`, `open`, `close`, `panes`, `focus`, `scroll`, `toast`, `status`, `log`, `notice`, `ask`, `copy`, `selection`, `blit` |

210| [`$.command`](/docs/ru/plugins/mods/api#add-a-command) | `register`, `run`, `list` |210| [`$.command`](/docs/ru/plugins/mods/api#add-a-command) | `register`, `run`, `list` |

211| [`$.tool`](/docs/ru/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |211| [`$.tool`](/docs/ru/plugins/mods/api#add-a-tool) | `register`, `call`, `check`, `list` |

212| `$.agent` | `register`, `spawn`, `list` |212| `$.agent` | `register`, `spawn`, `list`. `list()` возвращает субагентов и участников команды агентов этой сессии, у каждого из которых есть `status` со значением `pending`, `running`, `waiting`, `idle`, `completed`, `failed` или `killed`, причём `idle` и `waiting` требуют Claude Code v2.1.289 или более поздней версии. |

213| [`$.model`](/docs/ru/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |213| [`$.model`](/docs/ru/plugins/mods/api#call-a-model) | `complete`, `fork`, `classify` |

214| [`$.prompt`](/docs/ru/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude читает текст из `submit({ text })` после предложения, называющего ваш мод отправителем. `submit({ text, asUser: true })` отправляет текст как собственные слова пользователя, без этого предложения. |214| [`$.prompt`](/docs/ru/plugins/mods/api#start-a-turn-from-a-background-job) | `submit`, `read`, `fill`, `suggest`, `compose`. Claude читает текст из `submit({ text })` после предложения, называющего ваш мод отправителем. `submit({ text, asUser: true })` отправляет текст как собственные слова пользователя, без этого предложения. |

215| `$.turn` | `abort` |215| `$.turn` | `abort` |


317| Таймаут `$.process.run` | 30 секунд по умолчанию, не более 10 минут |317| Таймаут `$.process.run` | 30 секунд по умолчанию, не более 10 минут |

318| `maxTokens` для `$.model.complete` | 1024 по умолчанию, до 64 000 или предела вывода модели |318| `maxTokens` для `$.model.complete` | 1024 по умолчанию, до 64 000 или предела вывода модели |

319| `$.fs.read` и `$.fs.write` | 4 МиБ на один файл |319| `$.fs.read` и `$.fs.write` | 4 МиБ на один файл |

320| Причина `drop` хука или причина `deny` для `config.set` | 4 096 символов. Конец более длинной причины обрезается, а drop или deny всё равно применяется. Обрезка требует Claude Code v2.1.292 или новее; в более ранних версиях хук вместо этого [завершается с ошибкой](/docs/ru/plugins/mods/events#handle-a-hook-that-fails). |

320| Текст в одном дереве | Отрисовываются первые 100 000 символов |321| Текст в одном дереве | Отрисовываются первые 100 000 символов |

321| `language` или `path` элемента `Code`, `value` варианта `Select` или `module` элемента `Client` | 10 000 символов. Если значение длиннее, Claude Code [отрисовывает собственную версию области](/docs/ru/plugins/mods/interface#build-a-tree-from-elements). |322| `language` или `path` элемента `Code`, `value` варианта `Select` или `module` элемента `Client` | 10 000 символов. Если значение длиннее, Claude Code [отрисовывает собственную версию области](/docs/ru/plugins/mods/interface#build-a-tree-from-elements). |

322| `href` элемента `Link` | 2 048 символов. Более длинный `href` не даёт отрисовать всё дерево. |323| `href` элемента `Link` | 2 048 символов. Более длинный `href` не даёт отрисовать всё дерево. |


325| Перерисовки `$.ui.invalidate('ui.render')` | Ограничены 10 в секунду или 30 в терминале для видимой панели, развёрнутой полосы и строки подсказки под промптом. Более частые вызовы объединяются. |326| Перерисовки `$.ui.invalidate('ui.render')` | Ограничены 10 в секунду или 30 в терминале для видимой панели, развёрнутой полосы и строки подсказки под промптом. Более частые вызовы объединяются. |

326| `$.ui.toast` | Показывается 4 секунды, если не передать `{ timeoutMs }` |327| `$.ui.toast` | Показывается 4 секунды, если не передать `{ timeoutMs }` |

327| Панель, открытая без запроса пользователя | Размещается начиная со 144 столбцов терминала, со 110 — после того как пользователь однажды её открыл |328| Панель, открытая без запроса пользователя | Размещается начиная со 144 столбцов терминала, со 110 — после того как пользователь однажды её открыл |

329| Области видимости, такие как функции, блоки и циклы, вложенные друг в друга в одном файле модуля хуков | 2 000 |

328| Имена команд, инструментов, типов субагентов и панелей | Буквы, цифры, `_` и `-`, до 64 символов |330| Имена команд, инструментов, типов субагентов и панелей | Буквы, цифры, `_` и `-`, до 64 символов |

329| Один тест `claude plugin test` | 5 секунд, если тест не задаёт `timeoutMs` |331| Один тест `claude plugin test` | 5 секунд, если тест не задаёт `timeoutMs` |

330 332 

Details

110* `returned neither { value } nor { deny }`: stub для вызова mods API вернул простое значение, из-за чего тест не проходит110* `returned neither { value } nor { deny }`: stub для вызова mods API вернул простое значение, из-за чего тест не проходит

111* `no implementation for` с последующим именем: ваш мод сделал этот вызов и никакой stub не отвечает на него111* `no implementation for` с последующим именем: ваш мод сделал этот вызов и никакой stub не отвечает на него

112 112 

113Набор также экспортирует встроенные mock, которые отвечают за целое пространство имён для вас. `mock.clock(on)` отвечает на [`$.clock`](/docs/ru/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` отвечает на `$.store` из хранилища, которое начинается с этих записей, и `mock.env(on, { CI: 'true' })` отвечает на `$.env.get` из этих переменных. `mock.clock` возвращает mock часы, которые ваш тест продвигает, поэтому тест таймера не ждёт. `mock.store` ничего не возвращает, поэтому чтобы проверить, что сохранил ваш мод, напишите два `store` stub сами, как это делает [drawing test](#test-a-drawing).113Набор также экспортирует готовые mock для часов, хранилища, переменных окружения и строк, добавляемых в диалог:

114 

115* **`mock.clock(on)`**: отвечает на [`$.clock`](/docs/ru/plugins/mods/api#run-work-in-the-background) и возвращает mock часов, которые ваш тест продвигает, поэтому тест таймера не ждёт.

116* **`mock.store(on, { count: 7 })`**: отвечает на `$.store` из хранилища, которое начинается с этих записей. Он ничего не возвращает, поэтому чтобы проверить, что сохранил ваш мод, напишите два `store` stub сами, как это делает [drawing test](#test-a-drawing).

117* **`mock.env(on, { CI: 'true' })`**: отвечает на `$.env.get` из этих переменных.

118* **`mock.session(on)`**: возвращает mock сессии, чей метод `appended()` перечисляет строки, добавленные вашим модом с помощью [`$.session.append`](/docs/ru/plugins/mods/reference#session), начиная с самых старых; требуется Claude Code v2.1.293 или новее.

114 119 

115<h3 id="follow-the-test-kit’s-rules">120<h3 id="follow-the-test-kit’s-rules">

116 Следуйте правилам набора для тестирования121 Следуйте правилам набора для тестирования


168 Посмотрите, что возвращает stub173 Посмотрите, что возвращает stub

169</h3>174</h3>

170 175 

171Каждый вызов mods API, который ваш мод делает в тесте, нуждается в stub, который отвечает в место Claude Code, кроме нескольких, которые набор отвечает сам: [`$.ui.invalidate`](/docs/ru/plugins/mods/interface#redraw-when-something-changes) и [`$.state`](/docs/ru/plugins/mods/interface#keep-state) вызовы. Для вызовов `$.clock` используйте `mock.clock(on)`, иначе `$.clock.now()` вашего мода завершится неудачей с `no implementation for clock.now`.176Каждый вызов mods API, который ваш мод делает в тесте, нуждается в stub, который отвечает вместо Claude Code, кроме нескольких, на которые набор отвечает сам: вызовы [`$.ui.invalidate`](/docs/ru/plugins/mods/interface#redraw-when-something-changes), [`$.state`](/docs/ru/plugins/mods/interface#keep-state) и `$.session.append`. Для вызовов `$.clock` используйте `mock.clock(on)`, иначе `$.clock.now()` вашего мода завершится неудачей с `no implementation for clock.now`.

172 177 

173Эта таблица перечисляет те, которые моды используют чаще всего. Первый столбец — это вызов, который делает ваш мод, или событие, которое он передаёт с `next(e)`. Второй — это функция для передачи `on` под этим именем, поэтому строка `$.store.get` становится `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` в stub отмечает текст для вас, чтобы заполнить:178Эта таблица перечисляет те, которые моды используют чаще всего. Первый столбец — это вызов, который делает ваш мод, или событие, которое он передаёт с `next(e)`. Второй — это функция для передачи `on` под этим именем, поэтому строка `$.store.get` становится `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. `'...'` в stub отмечает текст для вас, чтобы заполнить:

174 179 

Details

116 116 

117Установите или измените значение. Конец строки называет его запись `pluginConfigs` в `settings.json`.117Установите или измените значение. Конец строки называет его запись `pluginConfigs` в `settings.json`.

118 118 

119<h3 id="code-nested-too-deep-to-scan-more-than-2000-scopes">

120 `code nested too deep to scan: more than 2000 scopes`

121</h3>

122 

123Строка начинается с имени мода, затем `hooks module did not load:`, файл и `code nested too deep to scan: more than 2000 scopes`. Файл в модуле хуков не может вкладывать области видимости, такие как функции, блоки и циклы, глубже чем на [2 000 уровней](/docs/ru/plugins/mods/reference#limits). [`claude plugin validate`](/docs/ru/plugins/mods/create#check-what-claude-code-reads-from-your-mod) сообщает ту же причину.

124 

125Перепишите код так, чтобы его области видимости были вложены менее глубоко.

126 

119<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">127<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

120 Ни один мод не загружается в директории, которую вы открыли впервые128 Ни один мод не загружается в директории, которую вы открыли впервые

121</h3>129</h3>


132 140 

133Запустите без флага.141Запустите без флага.

134 142 

143<h3 id="claude-code-stops-asking-to-enable-hot-reloading">

144 Claude Code перестает предлагать включить горячую перезагрузку

145</h3>

146 

147Claude пишет мод в интерактивной сессии, ничего не загружается, и Claude Code больше не спрашивает, [включить ли горячую перезагрузку](/docs/ru/plugins/mods/create#ask-claude-for-a-mod). Если вопрос трижды завершается без выбранного ответа, горячая перезагрузка остается отключенной. Например, вопрос завершается так, когда вы задали [`askUserQuestionTimeout`](/docs/ru/settings-reference#askuserquestiontimeout) и время истекает до вашего ответа. Эта настройка применяется здесь, потому что Claude Code задает вопрос в том же [диалоге вопросов, который использует `AskUserQuestion`](/docs/ru/tools-reference#question-auto-continue-timeout). Вопрос, который вы закрываете сами, не засчитывается в эти три.

148 

149Чтобы запустить мод, [скопируйте его директорию из папки модов](/docs/ru/plugins/mods/create#use-the-mod-in-other-sessions), затем в оболочке запустите новую сессию с `--plugin-dir`, как в `claude --plugin-dir ~/mods/git-branch`.

150 

135<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">151<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

136 Hook пропускается или мод выгружается152 Hook пропускается или мод выгружается

137</h2>153</h2>


209 Рисунок не появляется или не отвечает225 Рисунок не появляется или не отвечает

210</h2>226</h2>

211 227 

212Мод загрузился, и его панель, полоса или элементы управления не ведут себя так, как вы ожидаете.228Мод загрузился, и его панель, полоса, всплывающее уведомление или элементы управления не ведут себя так, как вы ожидаете.

213 229 

214<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">230<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

215 Панель или полоса пуста или показывает обычное содержимое Claude Code231 Панель или полоса пуста или показывает обычное содержимое Claude Code


247 263 

248Откройте панель из команды или кнопки или проверьте результат `isPlaced` вызова. См. [Откройте панель в нужное время](/docs/ru/plugins/mods/interface#open-a-pane-at-the-right-time).264Откройте панель из команды или кнопки или проверьте результат `isPlaced` вызова. См. [Откройте панель в нужное время](/docs/ru/plugins/mods/interface#open-a-pane-at-the-right-time).

249 265 

266<h3 id="a-toast-doesn’t-appear">

267 Всплывающее уведомление не появляется

268</h3>

269 

270Ваш мод вызывает [`$.ui.toast`](/docs/ru/plugins/mods/api#show-something-without-starting-a-turn) в интерактивной сессии терминала, а вы не видите уведомление. Чтобы убедиться, что вызов выполнился, найдите в [логе отладки](#read-the-debug-log) строку с именем вашего мода и текстом уведомления, как в `$.ui.toast (first-mod): build finished`. Затем проверьте такие причины:

271 

272* **Строки для вызова нет**: найдите строку, которая объясняет, почему Claude Code отклонил вызов, как в `first-mod: $.ui.toast dropped: timeoutMs is a whole number of ms, 1 to 60000`.

273* **Панель удерживает уведомления**: ваш или другой мод передал [`holdToasts`](/docs/ru/plugins/mods/interface#hold-toasts-behind-a-dialog) при открытии отображаемой панели. Закройте панель, чтобы прекратить удержание. Если панель ваша и должна оставаться открытой, удалите `holdToasts` из ее вызова `$.ui.open` и откройте панель снова.

274* **Уведомление находится под промптом**: в [классическом рендерере](/docs/ru/fullscreen#enable-fullscreen-rendering) посмотрите справа под промптом. Уведомление там - это одна строка, начинающаяся с имени мода, а не блок в правом верхнем углу.

275* **Ваш мод показал более новое уведомление**: в классическом рендерере более новое уведомление от вашего мода может заменить то, которое отображается или ожидает отображения. В логе отладки есть еще одна строка для старого уведомления, которая заканчивается на `gave way, cut short`, если оно отображалось, или на `gave way, unseen`, если оно так и не появилось. Чтобы показать оба сообщения, поместите их в одно уведомление.

276* **Время уведомления истекло до отрисовки**: в полноэкранной отрисовке Claude Code отрисовывает не более трех уведомлений одновременно, поэтому время уведомления может истечь до его отрисовки. В логе отладки есть еще одна строка для этого уведомления, которая заканчивается на `left the stack, never drawn`. Когда ваш мод показывает несколько уведомлений сразу, поместите сообщения в одно уведомление.

277 

278До v2.1.290 Claude Code отбрасывал уведомление, показанное в течение двух секунд после последнего уведомления, которое он отобразил для вашего мода, и строка лога отладки для отброшенного уведомления сообщала `within 2000ms of the last; dropped`.

279 

250<h3 id="hotkeys-do-nothing">280<h3 id="hotkeys-do-nothing">

251 Горячие клавиши ничего не делают281 Горячие клавиши ничего не делают

252</h3>282</h3>

Details

110}110}

111```111```

112 112 

113В вашей оболочке запустите `claude plugin validate .` в репозитории, чтобы проверить файл перед отправкой.113В вашей оболочке запустите `claude plugin validate .` в репозитории перед отправкой. О том, что проверяет этот запуск, см. [Проверка каталога](/docs/ru/plugins/cli-reference#validate-a-directory).

114 114 

115[Создание маркетплейса](/docs/ru/plugins/create-marketplace) охватывает макет с несколькими плагинами в одном репозитории.115[Создание маркетплейса](/docs/ru/plugins/create-marketplace) охватывает макет с несколькими плагинами в одном репозитории.

116 116 


129* Добавьте маркетплейс один раз: `claude plugin marketplace add your-org/your-marketplace`, где аргумент — это сокращение GitHub `owner/repo`, URL или путь129* Добавьте маркетплейс один раз: `claude plugin marketplace add your-org/your-marketplace`, где аргумент — это сокращение GitHub `owner/repo`, URL или путь

130* Установите плагин: `claude plugin install deploy-helper@your-marketplace`130* Установите плагин: `claude plugin install deploy-helper@your-marketplace`

131* Или сделайте оба из сеанса: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Требуется Claude Code v2.1.275 или позже. См. [Добавьте маркетплейс и установите в одной команде](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command)131* Или сделайте оба из сеанса: `/plugin install deploy-helper --marketplace your-org/your-marketplace`. Требуется Claude Code v2.1.275 или позже. См. [Добавьте маркетплейс и установите в одной команде](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command)

132* Или сделайте оба действия из оболочки одной командой: `claude plugin install deploy-helper --marketplace your-org/your-marketplace`. Требуется Claude Code v2.1.292 или позже

132 133 

133<h3 id="ship-updates-to-users">134<h3 id="ship-updates-to-users">

134 Отправьте обновления пользователям135 Отправьте обновления пользователям

Details

163 `Invalid marketplace source format`163 `Invalid marketplace source format`

164</h3>164</h3>

165 165 

166Вы запустили `/plugin marketplace add <source>` или `claude plugin marketplace add <source>`, и Claude Code ответил `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.166Вы запустили `/plugin marketplace add <source>`, `claude plugin marketplace add <source>` или `claude plugin install <plugin> --marketplace <source>`, и Claude Code ответил `Invalid marketplace source format. Try: owner/repo, https://..., or ./path`.

167 167 

168Claude Code принимает источник в одной из этих форм:168Claude Code принимает источник в одной из этих форм:

169 169 


237* **Вы владеете маркетплейсом**: поместите файл в это расположение и повторно добавьте маркетплейс237* **Вы владеете маркетплейсом**: поместите файл в это расположение и повторно добавьте маркетплейс

238* **Кто-то другой размещает его**: попросите у владельца точный источник, который они публикуют238* **Кто-то другой размещает его**: попросите у владельца точный источник, который они публикуют

239 239 

240<h3 id="cannot-install-plugins-from-a-marketplace-with-this-name">

241 `Cannot add marketplace "<name>": Claude Code cannot install plugins from a marketplace with this name`

242</h3>

243 

244Вы добавили маркетплейс, и [`name`](/docs/ru/plugins/marketplace-reference#top-level-fields) в его `marketplace.json` недопустимо в качестве части после `@` в [идентификаторе плагина](/docs/ru/plugins/loading#find-where-a-plugin-came-from), таком как `my-plugin@my-marketplace`. Claude Code отклоняет добавление и ничего не регистрирует.

245 

246Остальная часть сообщения формулирует правило для имени. В этом примере `_internal` нарушает правило, так как начинается с `_`:

247 

248```text theme={null}

249Cannot add marketplace "_internal": Claude Code cannot install plugins from a marketplace with this name. Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. The name is set by "name" in the marketplace's marketplace.json; ask its maintainer to change it.

250```

251 

252Дайте маркетплейсу имя, соответствующее этому правилу, затем добавьте его снова:

253 

254* **Вы владеете маркетплейсом**: измените `name` в `marketplace.json`, например на `internal-tools`

255* **Кто-то другой размещает его**: попросите владельца изменить имя

256 

257До v2.1.295 Claude Code сообщал о добавлении в этом примере как об успешном.

258 

240<h3 id="ssh-authentication-failed-or-https-authentication-failed">259<h3 id="ssh-authentication-failed-or-https-authentication-failed">

241 `SSH authentication failed` или `HTTPS authentication failed`260 `SSH authentication failed` или `HTTPS authentication failed`

242</h3>261</h3>


568 `Marketplace "<name>" is already added from a different source`587 `Marketplace "<name>" is already added from a different source`

569</h3>588</h3>

570 589 

571Вы подтвердили добавление маркетплейса через [`/plugin install <plugin> --marketplace <source>`](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command), и каталог, который Claude Code получил из этого источника, имеет то же имя, что и маркетплейс, который вы уже добавили из другого источника. Claude Code сохраняет существующий маркетплейс вместо его замены, и плагин не устанавливается.590Вы указали новый источник маркетплейса с помощью [`--marketplace <source>` в команде установки](/docs/ru/plugins/install#add-a-marketplace-and-install-in-one-command), в сессии или из вашей оболочки. Каталог, который Claude Code получил из этого источника, имеет то же имя, что и маркетплейс, который вы уже добавили из другого источника. Claude Code сохраняет существующий маркетплейс вместо его замены, и плагин не устанавливается.

572 591 

573Полное сообщение выглядит так:592Полное сообщение выглядит так:

574 593 


786 805 

787Claude Code копирует непригодные записи в файл `.set-aside` и удаляет их из списка. Claude Code никогда не читает копии обратно, и копии стареют по расписанию [`cleanupPeriodDays`](/docs/ru/settings-reference#cleanupperioddays).806Claude Code копирует непригодные записи в файл `.set-aside` и удаляет их из списка. Claude Code никогда не читает копии обратно, и копии стареют по расписанию [`cleanupPeriodDays`](/docs/ru/settings-reference#cleanupperioddays).

788 807 

808<h3 id="does-not-load-so-claude-code-ignores-the-whole-file">

809 `does not load (...), so Claude Code ignores the whole file`

810</h3>

811 

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

813 

814Исправьте ошибку, названную в предупреждении. Для значения, которое Claude Code не принимает, см. [Исправление повреждённого файла настроек](/docs/ru/settings#fix-a-broken-settings-file). Затем снова выполните команду, если её изменения больше нет в файле.

815 

816Предупреждение следует за строкой об успехе `claude plugin install`, `enable`, `disable` или `claude plugin marketplace add` в вашей оболочке:

817 

818```text theme={null}

819⚠ /home/user/.claude/settings.json does not load (its "permissions" is not valid), so Claude Code ignores the whole file, including anything this command wrote there. Fix the file, then run this command again if its change is missing. If a newer Claude Code wrote the file, update Claude Code instead.

820```

821 

822Текст в скобках называет ошибку:

823 

824* **`its "<key>" is not valid`**: указанная в кавычках настройка содержит значение, которое Claude Code не принимает. Найдите настройку в [справочнике настроек](/docs/ru/settings-reference), чтобы узнать допустимые значения. Когда не проходит проверку более одного значения, текст называет первую настройку и подсчитывает остальные, как в `its "permissions" and 1 other value are not valid`.

825* **`it is not a JSON object`**: верхний уровень файла не является объектом JSON, например файл, верхний уровень которого — массив.

826 

789<h3 id="a-plugin-you-disabled-still-loads">827<h3 id="a-plugin-you-disabled-still-loads">

790 `Disabled in ~/.claude/settings.json but still loads`828 `Disabled in ~/.claude/settings.json but still loads`

791</h3>829</h3>


812 850 

813Если ваша организация предварительно устанавливает плагины для вас, она делает это через управляемые параметры вместо этого. См. [Предварительная установка и требование плагинов](/docs/ru/plugins/org#pre-install-and-require-plugins).851Если ваша организация предварительно устанавливает плагины для вас, она делает это через управляемые параметры вместо этого. См. [Предварительная установка и требование плагинов](/docs/ru/plugins/org#pre-install-and-require-plugins).

814 852 

853<h3 id="a-plugin-stays-installed-after-plugin-uninstall-on-windows">

854 Плагин остаётся установленным после `plugin uninstall` в Windows

855</h3>

856 

857В Windows вы выполняете `claude plugin uninstall` на уровне проекта или на локальном уровне, и команда сообщает об успехе, но `claude plugin list` или `/plugin` по-прежнему показывает плагин.

858 

859`installed_plugins.json` содержал две записи об установке плагина для папки проекта, в каждой из которых путь к папке записан по-разному, а одно удаление удаляет только одну из них. Чтобы проверить это, выполните `claude plugin list --json` в вашей оболочке. У оставшейся строки плагина есть `projectPath`, в котором папка записана иначе, чем там, где вы выполняли удаление, например `c:\work\app` вместо `C:\work\app`.

860 

861Выполните ту же команду удаления ещё раз, с тем же `--scope`, из той же папки. Второй запуск не находит записи под своим написанием пути, поэтому удаляет запись под другим написанием. Для установки на уровне проекта:

862 

863```shell theme={null}

864claude plugin uninstall <name>@<marketplace> --scope project

865```

866 

867Затем снова выполните `claude plugin list --json`, чтобы убедиться, что строка исчезла.

868 

869До v2.1.295 второй запуск завершается ошибкой `Plugin "<name>" is not installed in project scope`. Выполните `claude update`, затем снова выполните удаление.

870 

815<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">871<h3 id="failed-to-load-hooks-from-and-hooks-that-dont-fire">

816 `Failed to load hooks from <path>` и hooks, которые не срабатывают872 `Failed to load hooks from <path>` и hooks, которые не срабатывают

817</h3>873</h3>


835 891 

836Если stderr показывает путь плагина, обрезанный в пробеле, команда hook в форме shell использует `${CLAUDE_PLUGIN_ROOT}` вне кавычек и путь установки содержит пробел. Оберните переменную в двойные кавычки или используйте [форму exec](/docs/ru/hooks#exec-form-and-shell-form). Чтобы найти неквотированную переменную, запустите `claude plugin validate` в каталоге плагина и ищите его [предупреждение о кавычках](/docs/ru/plugins/manifest-reference#quoting-and-path-separators).892Если stderr показывает путь плагина, обрезанный в пробеле, команда hook в форме shell использует `${CLAUDE_PLUGIN_ROOT}` вне кавычек и путь установки содержит пробел. Оберните переменную в двойные кавычки или используйте [форму exec](/docs/ru/hooks#exec-form-and-shell-form). Чтобы найти неквотированную переменную, запустите `claude plugin validate` в каталоге плагина и ищите его [предупреждение о кавычках](/docs/ru/plugins/manifest-reference#quoting-and-path-separators).

837 893 

894Если уведомление гласит `Failed to run: Plugin directory does not exist: <path>`, см. [`Plugin directory does not exist`](#plugin-directory-does-not-exist).

895 

838Для любой другой ошибки запустите команду hook самостоятельно из каталога плагина, чтобы увидеть полный вывод, или захватите полный stderr с помощью [отладочного логирования](/docs/ru/hooks#debug-hooks).896Для любой другой ошибки запустите команду hook самостоятельно из каталога плагина, чтобы увидеть полный вывод, или захватите полный stderr с помощью [отладочного логирования](/docs/ru/hooks#debug-hooks).

839 897 

840<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">898<h4 id="a-plugin-hook-blocks-a-tool-call-or-prompt">


869 </Step>927 </Step>

870</Steps>928</Steps>

871 929 

930<h3 id="plugin-directory-does-not-exist">

931 `Plugin directory does not exist: <path>`

932</h3>

933 

934Сначала выполните `/reload-plugins` в промпте Claude Code, даже если сообщение предлагает переустановить плагин. Хук плагина завершается ошибкой `Failed to run: Plugin directory does not exist: <path> (<plugin> — run /plugin to reinstall)`, и хук не запускается, когда каталог, из которого ваша сессия загрузила хуки плагина, исчез с диска. [`Plugin directory not found at path: <path>`](#plugin-directory-not-found-at-path) — это другое сообщение, касающееся записи маркетплейса.

935 

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

937 

938* **`Reloaded:` без строки с ошибками**: хуки плагина больше не указывают на отсутствующий каталог

939* **`N errors during load. Run /plugin for details.`**: откройте вкладку **Errors** в `/plugin` и следуйте записи на этой странице для показанного там сообщения

940* **Строка, заканчивающаяся на `Run /reload-plugins --force to apply.`**: ничего не перезагрузилось, и хуки продолжают завершаться ошибкой. Выполните `/reload-plugins --force` в промпте Claude Code

941 

872<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">942<h3 id="invalid-mcp-server-config-for-and-mcp-servers-that-dont-start">

873 `Invalid MCP server config for "<server>"` и MCP серверы, которые не запускаются943 `Invalid MCP server config for "<server>"` и MCP серверы, которые не запускаются

874</h3>944</h3>


1063 1133 

1064Вы запустили `claude plugin validate <path>` или `/plugin validate <path>` в сессии, и он вывел `Found N errors` и `Validation failed`, затем вышел с кодом 1.1134Вы запустили `claude plugin validate <path>` или `/plugin validate <path>` в сессии, и он вывел `Found N errors` и `Validation failed`, затем вышел с кодом 1.

1065 1135 

1066Валидатор читает манифест по пути, который вы даёте ему: `.claude-plugin/plugin.json` для каталога плагина или `.claude-plugin/marketplace.json` для каталога маркетплейса. Для маркетплейса он предваряет проблемы в собственном манифесте записи с индексом записи, как `plugins[1] plugin.json → json: ...`.1136Валидатор читает манифест по пути, который вы даёте ему: `.claude-plugin/plugin.json` для каталога плагина, `.claude-plugin/marketplace.json` для каталога маркетплейса или оба манифеста для каталога, который содержит оба. Для маркетплейса он предваряет проблемы в собственном манифесте записи с индексом записи, как `plugins[1] plugin.json → json: ...`. До v2.1.289 Claude Code проверял каталог, содержащий оба манифеста, только как маркетплейс.

1067 1137 

1068Таблица охватывает сообщения, которые останавливают валидацию, и два предупреждения, `No frontmatter block found` и `Unknown field '<key>'`, которые останавливают её только при передаче `--strict`. Другие предупреждения, такие как отсутствующее описание, не указаны.1138Таблица охватывает сообщения, которые останавливают валидацию, и два предупреждения, `No frontmatter block found` и `Unknown field '<key>'`, которые останавливают её только при передаче `--strict`. Другие предупреждения, такие как отсутствующее описание, не указаны.

1069 1139 

scheduled-tasks.md +27 −10

Details

180Каждая запланированная задача имеет 8-символьный ID, который вы можете передать в `CronDelete`. Сеанс может одновременно содержать до 50 запланированных задач.180Каждая запланированная задача имеет 8-символьный ID, который вы можете передать в `CronDelete`. Сеанс может одновременно содержать до 50 запланированных задач.

181 181 

182<h2 id="how-scheduled-tasks-run">182<h2 id="how-scheduled-tasks-run">

183 Как работают запланированные задачи183 Как выполняются запланированные задачи

184</h2>184</h2>

185 185 

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

187 187 

188Все времена интерпретируются в вашем локальном часовом поясе. Выражение cron, такое как `0 9 * * *`, означает 9 утра там, где вы запускаете Claude Code, а не UTC.188Все значения времени интерпретируются в вашем локальном часовом поясе. Cron-выражение вроде `0 9 * * *` означает 9 утра там, где вы запускаете Claude Code, а не по UTC.

189 189 

190<h3 id="jitter">190<h3 id="jitter">

191 Дрожание191 Джиттер

192</h3>192</h3>

193 193 

194Чтобы избежать того, чтобы каждый сеанс обращался к API в один и тот же момент по стене часов, планировщик добавляет детерминированное смещение к времени срабатывания:194Запланированная задача может выполниться не в то время, которое указано в её расписании. Если бы задачи каждой сессии выполнялись точно по расписанию, многие из них обращались бы к API в один и тот же момент, поэтому Claude Code сдвигает время выполнения каждой задачи. Повторяющиеся задачи выполняются с опозданием, а одноразовые задачи, запланированные на начало часа или на половину часа, выполняются немного раньше.

195 195 

196* Повторяющиеся задачи срабатывают до 30 минут после запланированного времени (или до половины интервала для задач, которые выполняются чаще, чем раз в час). Почасовое задание, запланированное на `:00`, может срабатывать в любое время до `:30`.196<h4 id="how-late-a-recurring-task-runs">

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

198</h4>

198 199 

199Смещение получается из ID задачи, поэтому одна и та же задача всегда получает одно и то же смещение. Если точное время имеет значение, выберите минуту, которая не является `:00` или `:30`, например `3 9 * * *` вместо `0 9 * * *`, и одноразовое дрожание не будет применяться.200Когда вы создаёте повторяющуюся задачу, Claude Code назначает ей фиксированную задержку и добавляет эту задержку к каждому запуску. Задержка вычисляется на основе ID задачи, поэтому одна и та же задача каждый раз выполняется с опозданием на одно и то же количество минут, в том числе когда сессия простаивает и больше ничего не выполняется.

201 

202Задачи, которые выполняются чаще, получают более короткие задержки, а 30 минут — это максимальная задержка, которую может получить задача. Ниже приведены диапазоны задержки для некоторых распространённых расписаний:

203 

204| Задача выполняется | Задержка составляет от |

205| :- | :- |

206| Каждые 10 минут | 0 до 5 минут |

207| Каждые 30 минут | 0 до 15 минут |

208| Каждый час или реже, например ежедневно | 0 до 30 минут |

209 

210Например, `7,37 * * * *` планирует задачу на `:07` и `:37`, между которыми 30 минут, поэтому её задержка составляет от 0 до 15 минут. Если задержка этой задачи равна 14 минутам, она выполняется в `:21` и `:51` каждый час. Изменение расписания на другую минуту сдвигает время выполнения, и задержка по-прежнему добавляется сверху.

211 

212<h4 id="when-a-one-shot-task-runs-early">

213 Когда одноразовая задача выполняется раньше

214</h4>

215 

216Одноразовая задача, запланированная на `:00` или `:30`, выполняется раньше — до 90 секунд. Claude Code не сдвигает одноразовую задачу, запланированную на любую другую минуту, поэтому, когда время важно, планируйте её не на начало часа и не на половину часа: `3 9 * * *` вместо `0 9 * * *`.

200 217 

201<h3 id="seven-day-expiry">218<h3 id="seven-day-expiry">

202 Истечение через семь дней219 Истечение срока через семь дней

203</h3>220</h3>

204 221 

205Повторяющиеся задачи автоматически истекают через 7 дней после создания. Задача срабатывает в последний раз, а затем удаляет себя. Это ограничивает, как долго может работать забытый цикл. Если вам нужна повторяющаяся задача, которая длится дольше, отмените и пересоздайте её перед истечением срока, или используйте [Routines](/docs/ru/routines) или [Desktop запланированные задачи](/docs/ru/desktop-scheduled-tasks) для долговечного планирования.222Срок действия повторяющихся задач автоматически истекает через 7 дней после создания. Задача срабатывает в последний раз, а затем удаляет себя. Это ограничивает время работы забытого цикла. Если вам нужно, чтобы повторяющаяся задача действовала дольше, отмените и создайте её заново до истечения срока или используйте [Routines](/docs/ru/routines) либо [запланированные задачи Desktop](/docs/ru/desktop-scheduled-tasks) для долговременного планирования.

206 223 

207<h2 id="cron-expression-reference">224<h2 id="cron-expression-reference">

208 Справочник выражений cron225 Справочник выражений cron

Details

403 403 

404* [Управляемый файл MCP](/docs/ru/managed-mcp) корпоративного уровня по стандартному системному пути: `/etc/claude-code/managed-mcp.json` на хостах раннеров под Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` на хостах под macOS. Используйте его для строго контролируемых парков машин, где могут загружаться только серверы из списка администратора. Правила приоритета описаны в разделе [эксклюзивный контроль с помощью managed-mcp.json](/docs/ru/managed-mcp#exclusive-control-with-managed-mcp-json). Если этот файл находится на хосте раннера, Claude Code пропускает MCP-серверы, которые плоскость управления Anthropic передаёт в сессию, включая коннекторы claude.ai, и перечисляет их в предупреждении в stderr дочернего процесса сессии, которое раннер записывает в лог на уровне `debug`. До версии v2.1.229 такие сессии завершались при запуске с ошибкой `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.404* [Управляемый файл MCP](/docs/ru/managed-mcp) корпоративного уровня по стандартному системному пути: `/etc/claude-code/managed-mcp.json` на хостах раннеров под Linux, `/Library/Application Support/ClaudeCode/managed-mcp.json` на хостах под macOS. Используйте его для строго контролируемых парков машин, где могут загружаться только серверы из списка администратора. Правила приоритета описаны в разделе [эксклюзивный контроль с помощью managed-mcp.json](/docs/ru/managed-mcp#exclusive-control-with-managed-mcp-json). Если этот файл находится на хосте раннера, Claude Code пропускает MCP-серверы, которые плоскость управления Anthropic передаёт в сессию, включая коннекторы claude.ai, и перечисляет их в предупреждении в stderr дочернего процесса сессии, которое раннер записывает в лог на уровне `debug`. До версии v2.1.229 такие сессии завершались при запуске с ошибкой `You cannot dynamically configure MCP servers when an enterprise MCP config is present`.

405* Ключ [`managedMcpServers`](/docs/ru/settings-reference#managedmcpservers) в [управляемых настройках](/docs/ru/managed-settings) на хосте раннера: предоставляет серверы HTTP и SSE без эксклюзивного контроля, поэтому серверы из других источников по-прежнему загружаются. Требуется Claude Code v2.1.259 или новее.405* Ключ [`managedMcpServers`](/docs/ru/settings-reference#managedmcpservers) в [управляемых настройках](/docs/ru/managed-settings) на хосте раннера: предоставляет серверы HTTP и SSE без эксклюзивного контроля, поэтому серверы из других источников по-прежнему загружаются. Требуется Claude Code v2.1.259 или новее.

406* `<repo>/.mcp.json`: область действия проекта. Сделайте коммит этого файла в репозиторий; его серверы автоматически подтверждаются в облачных сессиях.406* `<repo>/.mcp.json`: область действия проекта. Сделайте коммит этого файла в репозиторий; его серверы автоматически подтверждаются в облачных сессиях. В сессии с несколькими репозиториями [загружается файл не более чем из одного репозитория](#repository-settings-in-sessions-with-several-repositories).

407 407 

408Если для вашей организации включена передача коннекторов, плоскость управления Anthropic передаёт коннекторы, настроенные вами на claude.ai, в сессии, созданные интерактивно, через предоставляемую сервером конфигурацию MCP, маршрутизируемую через `api.anthropic.com`. Сессии, созданные программно, например [запуски через CLI](/docs/ru/self-hosted-environments-testing#run-the-test-loop), не получают коннекторы; вместо этого предоставьте им MCP-серверы через любой из других источников, перечисленных в этом разделе. OAuth-токен дочернего процесса не содержит scope для прямого получения коннекторов, поэтому дочерний процесс сам не пытается их получить; передача управляется сервером.408Если для вашей организации включена передача коннекторов, плоскость управления Anthropic передаёт коннекторы, настроенные вами на claude.ai, в сессии, созданные интерактивно, через предоставляемую сервером конфигурацию MCP, маршрутизируемую через `api.anthropic.com`. Сессии, созданные программно, например [запуски через CLI](/docs/ru/self-hosted-environments-testing#run-the-test-loop), не получают коннекторы; вместо этого предоставьте им MCP-серверы через любой из других источников, перечисленных в этом разделе. OAuth-токен дочернего процесса не содержит scope для прямого получения коннекторов, поэтому дочерний процесс сам не пытается их получить; передача управляется сервером.

409 409 


542exit 0542exit 0

543```543```

544 544 

545Хук подсказывает Claude зафиксировать и отправить перед завершением сеанса и остается молчаливым, когда каталог не является репозиторием git или не имеет удаленного.545Хук предлагает Claude сделать коммит и отправить изменения до завершения сессии и ничего не выводит, если каталог не является репозиторием git или у него нет удаленного репозитория. О сессиях с несколькими репозиториями см. раздел [на что указывает `$CLAUDE_PROJECT_DIR`](#repository-settings-in-sessions-with-several-repositories).

546 546 

547<h2 id="permissions-and-tool-approval">547<h2 id="permissions-and-tool-approval">

548 Разрешения и одобрение инструментов548 Разрешения и одобрение инструментов


571 571 

572Установите `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` для заполнения из другого пути или укажите его на пустой каталог для отключения заполнения.572Установите `SELF_HOSTED_RUNNER_HOST_CONFIG_DIR` для заполнения из другого пути или укажите его на пустой каталог для отключения заполнения.

573 573 

574Зафиксированный в репозитории `.claude/settings.json` накладывается сверху как настройки проекта. Сеансы также читают [`managed-settings.json`](/docs/ru/settings#where-settings-live) из стандартного системного пути в вашем образе средства выполнения. Применяются ли его ключи наряду с [управляемыми сервером настройками](/docs/ru/server-managed-settings) следует [как Claude Code объединяет управляемые источники](/docs/ru/managed-settings#how-claude-code-combines-managed-sources): по умолчанию, когда ваша организация доставляет любые управляемые сервером ключи, сеансы игнорируют файл образа средства выполнения, кроме [ключей, которые Claude Code читает из каждого источника администратора](/docs/ru/managed-settings#keys-read-from-every-admin-source), такие как блок `env`, блокировки песочницы, пути двоичных файлов песочницы и `forceRemoteSettingsRefresh`. См. [приоритет настроек](/docs/ru/settings#settings-precedence).574Закоммиченный в репозиторий `.claude/settings.json` накладывается сверху как настройки проекта. В сессии с несколькими репозиториями [действует файл не более чем одного репозитория](#repository-settings-in-sessions-with-several-repositories). Сессии также читают [`managed-settings.json`](/docs/ru/settings#where-settings-live) из стандартного системного пути в вашем образе средства выполнения. Применяются ли его ключи наряду с [управляемыми сервером настройками](/docs/ru/server-managed-settings), определяется тем, [как Claude Code объединяет управляемые источники](/docs/ru/managed-settings#how-claude-code-combines-managed-sources): по умолчанию, когда ваша организация доставляет какие-либо управляемые сервером ключи, сессии игнорируют файл из образа средства выполнения, за исключением [ключей, которые Claude Code читает из каждого источника администратора](/docs/ru/managed-settings#keys-read-from-every-admin-source), таких как блок `env`, блокировки песочницы, пути к исполняемым файлам песочницы и `forceRemoteSettingsRefresh`. См. [приоритет настроек](/docs/ru/settings#settings-precedence).

575 575 

576Когда плоскость управления Anthropic предоставляет сеансу [хуки Claude Code](/docs/ru/hooks), средство выполнения устанавливает их рядом, а не над вашей собственной конфигурацией. Требует Claude Code v2.1.229 или позже.576Когда плоскость управления Anthropic предоставляет сеансу [хуки Claude Code](/docs/ru/hooks), средство выполнения устанавливает их рядом, а не над вашей собственной конфигурацией. Требует Claude Code v2.1.229 или позже.

577 577 


583 583 

584Снимок `~/.claude/` хоста, который делает средство выполнения, не включает каталог `projects/`. Место хранения автоматической памяти по умолчанию находится внутри этого каталога. Если вы поместите туда файлы памяти, средство выполнения не перенесёт их в сессии, и они не включат автоматическую память.584Снимок `~/.claude/` хоста, который делает средство выполнения, не включает каталог `projects/`. Место хранения автоматической памяти по умолчанию находится внутри этого каталога. Если вы поместите туда файлы памяти, средство выполнения не перенесёт их в сессии, и они не включат автоматическую память.

585 585 

586<h3 id="repository-settings-in-sessions-with-several-repositories">

587 Настройки репозиториев в сессиях с несколькими репозиториями

588</h3>

589 

590В сессии с несколькими репозиториями Claude Code читает настройки проекта из каталога, в котором запускается сессия, поэтому как настройки проекта действует `.claude/settings.json` не более чем одного репозитория. Хук, определённый в файле другого репозитория, не выполняется, правило deny в нём не применяется, а его `env` не задаётся.

591 

592* **`--capacity 1` (по умолчанию) со встроенным извлечением репозиториев**: сессия запускается в первом репозитории из своего списка репозиториев. `.claude/settings.json` этого репозитория действует как настройки проекта, и загружается его `.mcp.json`, а файлы остальных репозиториев — нет.

593* **`--capacity` больше единицы или [хук `checkout`](#checkout)**: сессия запускается в отдельном каталоге сессии, содержащем извлечённые репозитории. Ни один `.claude/settings.json` репозиториев не действует как настройки проекта, ни один `.mcp.json` репозиториев не загружается, а [`$CLAUDE_PROJECT_DIR`](/docs/ru/hooks#reference-scripts-by-path) в команде хука указывает на этот каталог, а не на извлечённый репозиторий.

594 

595`CLAUDE.md` и скиллы каждого репозитория загружаются независимо от того, где запускается сессия. Средство выполнения передаёт каждый репозиторий в Claude Code как [дополнительный каталог](/docs/ru/permissions#additional-directories-grant-file-access-not-configuration), поэтому Claude Code также читает ключи `enabledPlugins` и `extraKnownMarketplaces` из `.claude/settings.json` каждого репозитория.

596 

597Чтобы хук выполнялся или правило разрешений применялось в каждой сессии, поместите его в `~/.claude/settings.json` на хосте средства выполнения. Средство выполнения [переносит файл хоста в каждую сессию](#how-each-session’s-config-is-assembled), где бы сессия ни запускалась. Указывайте путь в правиле `Read` или `Edit` как абсолютный [шаблон](/docs/ru/permissions#read-and-edit) с `//` или шаблон относительно домашнего каталога с `~/`, поскольку другие шаблоны привязываются к источнику настроек или к текущему каталогу.

598 

586<h3 id="repository-committed-permission-rules">599<h3 id="repository-committed-permission-rules">

587 Правила разрешений, зафиксированные в репозитории600 Правила разрешений, зафиксированные в репозитории

588</h3>601</h3>

Details

87 87 

88 Поскольку hooks выполняют команды оболочки, пользователи в интерактивных сеансах видят [диалог одобрения безопасности](#security-approval-dialogs) перед тем, как Claude Code применит их.88 Поскольку hooks выполняют команды оболочки, пользователи в интерактивных сеансах видят [диалог одобрения безопасности](#security-approval-dialogs) перед тем, как Claude Code применит их.

89 89 

90 Чтобы настроить [классификатор режима автоматизации](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) так, чтобы он знал, какие репозитории, бакеты и домены доверяет ваша организация, доставьте блок `autoMode` таким же образом; см. [Настройка режима автоматизации](/docs/ru/auto-mode-config) для информации о том, как записи `autoMode` влияют на то, что блокирует классификатор, и важные предупреждения о полях `environment`, `allow`, `soft_deny` и `hard_deny`.90 Чтобы настроить классификатор [авторежима](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) так, чтобы он знал, каким репозиториям, бакетам и доменам доверяет ваша организация, доставьте блок `autoMode` таким же образом; см. [Настройка авторежима](/docs/ru/auto-mode-config) для информации о том, как записи `autoMode` влияют на то, что блокирует классификатор, и важные предупреждения о полях `environment`, `allow`, `soft_deny` и `hard_deny`.

91 </Step>91 </Step>

92 92 

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

94 Сохраните ваши изменения. Клиенты Claude Code получат обновленные параметры при следующем запуске или в цикле опроса каждый час.94 Сохраните ваши изменения. Клиенты Claude Code получат обновленные настройки при следующем запуске или в цикле опроса каждый час.

95 

96 Редактор проверяет ваш JSON по опубликованной JSON-схеме настроек Claude Code. Если он находит проблему в JSON, который успешно разбирается, он показывает предупреждение и меняет надпись на кнопке сохранения. Надпись будет **Update with errors**, если настройки уже сохранены, и **Add with errors**, если настройки еще не сохранены. Эта кнопка все равно сохраняет, поскольку предупреждение схемы не блокирует сохранение.

97 

98 Схема [может отставать от новейших релизов](/docs/ru/settings#edit-a-settings-file), поэтому редактор может пометить ключ или значение, которые описаны в [справочнике настроек](/docs/ru/settings-reference#all-settings). Claude Code получает сохраненные вами ключи и значения и выполняет [собственную проверку](#invalid-entries-in-delivered-settings) при их загрузке.

95 </Step>99 </Step>

96</Steps>100</Steps>

97 101 

settings.md +39 −39

Details

397<span id="where-settings-live" />397<span id="where-settings-live" />

398 398 

399<h2 id="settings-files-and-who-they-affect">399<h2 id="settings-files-and-who-they-affect">

400 Файлы параметров и кого они затрагивают400 Файлы настроек и кого они затрагивают

401</h2>401</h2>

402 402 

403Claude Code читает настройки из четырёх файлов, и организация также может доставлять управляемые настройки из консоли claude.ai. Каждый источник имеет область действия: круг людей и проектов, к которым применяется сохранённая в нём настройка, будь то только вы, все в проекте или все в вашей организации.403Claude Code читает настройки из четырёх файлов, и организация также может доставлять управляемые настройки из консоли claude.ai. Каждый источник имеет область действия: круг людей и проектов, к которым применяется сохранённая в нём настройка, будь то только вы, все в проекте или все в вашей организации.


405| Область действия | Файл | Кого это затрагивает | Используйте для |405| Область действия | Файл | Кого это затрагивает | Используйте для |

406| :- | :- | :- | :- |406| :- | :- | :- | :- |

407| Пользователь | `~/.claude/settings.json` | Вас, в каждом проекте на этой машине | Личные предпочтения: тема, режим редактора, модель по умолчанию, ваши собственные правила разрешений |407| Пользователь | `~/.claude/settings.json` | Вас, в каждом проекте на этой машине | Личные предпочтения: тема, режим редактора, модель по умолчанию, ваши собственные правила разрешений |

408| Общий проект | `.claude/settings.json` | Всех, кто работает в папке, которая его содержит. В репозитории git зафиксируйте его, чтобы товарищи по команде его получили | Разрешения команды, hooks, plugins и переменные окружения, которые нужны проекту |408| Общий проект | `.claude/settings.json` | Всех, кто работает в папке, которая его содержит. В репозитории git сделайте его коммит, чтобы товарищи по команде его получили | Разрешения команды, хуки, плагины и переменные окружения, которые нужны проекту |

409| Локальный проект | `.claude/settings.local.json` | Вас, только в этом одном проекте. Claude Code исключает его из git при создании файла; если вы создадите его вручную, добавьте его в `.gitignore` сами | Личные переопределения для одного проекта и тестирование перед тем, как вы поделитесь |409| Локальный проект | `.claude/settings.local.json` | Вас, только в этом одном проекте. Claude Code исключает его из git при создании файла; если вы создадите его вручную, добавьте его в `.gitignore` сами | Личные переопределения для одного проекта и тестирование перед тем, как вы поделитесь |

410| Управляемый | `managed-settings.json` и другие [управляемые источники](/docs/ru/managed-settings#delivery-mechanisms) | Всех, кому ваша организация его развёртывает; раздел [Приоритет настроек](#settings-precedence) описывает, что может его переопределить | Требования политики безопасности и соответствия |410| Управляемый | `managed-settings.json` и другие [управляемые источники](/docs/ru/managed-settings#delivery-mechanisms) | Всех, кому ваша организация его развёртывает; раздел [Приоритет настроек](#settings-precedence) описывает, что может его переопределить | Требования политики безопасности и соответствия |

411 411 

412В столбце File `~/.claude` — это папка `.claude` в вашем домашнем каталоге, а простой `.claude` — это папка `.claude` внутри вашего проекта.412В столбце «Файл» `~/.claude` — это папка `.claude` в вашем домашнем каталоге, а просто `.claude` — это папка `.claude` внутри вашего проекта.

413 413 

414<span id="where-each-file-applies" />414<span id="where-each-file-applies" />

415 415 

416<span id="compare-what-each-file-reaches" />416<span id="compare-what-each-file-reaches" />

417 417 

418<h3 id="compare-the-scope-of-each-settings-file">418<h3 id="compare-the-scope-of-each-settings-file">

419 Сравните область действия каждого файла параметров419 Сравните область действия каждого файла настроек

420</h3>420</h3>

421 421 

422Предположим, у вас есть три проекта на вашей машине: `website/`, `api/` и `acme-app/`, товарищ по команде имеет свой собственный клон `acme-app/`, и вы запускаете [облачный сеанс](#settings-in-cloud-sessions) на `acme-app/`.422Предположим, у вас есть три проекта на вашей машине: `website/`, `api/` и `acme-app/`, у товарища по команде есть свой собственный клон `acme-app/`, и вы запускаете [облачную сессию](#settings-in-cloud-sessions) для `acme-app/`.

423 423 

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

425 425 

426<SettingsScope />426<SettingsScope />

427 427 

428* **`~/.claude/settings.json`**: каждый проект на вашей машине, и ничего на машине вашего товарища или в облачном сеансе428* **`~/.claude/settings.json`**: каждый проект на вашей машине, и ничего на машине вашего товарища или в облачной сессии

429* **`acme-app/.claude/settings.json`**: ваш `acme-app/`. Он охватывает клон вашего товарища и облачный сеанс только если вы зафиксируете файл в системе контроля версий; до этого это файл на вашем диске, как и любой другой, и никто другой его не имеет429* **`acme-app/.claude/settings.json`**: ваш `acme-app/`. Он охватывает клон вашего товарища и облачную сессию, только если вы зафиксируете файл в системе контроля версий; до этого это файл на вашем диске, как и любой другой, и ни у кого больше его нет

430* **`acme-app/.claude/settings.local.json`**: только ваш `acme-app/`. Claude Code добавляет его в ваши глобальные исключения git при первом написании файла, поэтому он остаётся вне ваших коммитов; если вы создадите файл вручную, [добавьте его в `.gitignore` сами](#keep-personal-settings-out-of-a-repository)430* **`acme-app/.claude/settings.local.json`**: только ваш `acme-app/`. Claude Code добавляет его в ваши глобальные исключения git при первой записи файла, поэтому он остаётся вне ваших коммитов; если вы создадите файл вручную, [добавьте его в `.gitignore` сами](#keep-personal-settings-out-of-a-repository)

431* **Управляемые параметры**, будь то файл `managed-settings.json`, политика MDM или [управляемые сервером параметры](/docs/ru/server-managed-settings) из консоли claude.ai: каждый проект на каждой машине, на которую ваша организация его развёртывает, или на которую вы входите с учётной записью вашей организации. Только управляемые сервером параметры охватывают облачный сеанс431* **Управляемые настройки**, будь то файл `managed-settings.json`, политика MDM или [управляемые сервером настройки](/docs/ru/server-managed-settings) из консоли claude.ai: каждый проект на каждой машине, на которую ваша организация их развёртывает, или на которую вы входите с учётной записью вашей организации. Только управляемые сервером настройки охватывают облачную сессию

432 432 

433<span id="which-files-you-have" />433<span id="which-files-you-have" />

434 434 

435<h3 id="find-or-create-your-settings-files">435<h3 id="find-or-create-your-settings-files">

436 Найдите или создайте ваши файлы параметров436 Найдите или создайте ваши файлы настроек

437</h3>437</h3>

438 438 

439Установка Claude Code не создаёт никакой файл параметров. Если на вашей машине или в проекте уже есть один, он пришёл из одного из этих источников:439Установка Claude Code не создаёт никакого файла настроек. Если на вашей машине или в проекте он уже есть, он пришёл из одного из этих источников:

440 440 

441* **Управляемый**: ваша организация его развёртывает. Вы его не создаёте и не редактируете.441* **Управляемый**: ваша организация его развёртывает. Вы его не создаёте и не редактируете.

442* **Общий проект**: проект, который уже использует Claude Code, может иметь один зафиксированный. Если нет, создайте его в `.claude/settings.json` в папке проекта.442* **Общий проект**: в проекте, который уже использует Claude Code, он может быть зафиксирован. Если нет, создайте его в `.claude/settings.json` в папке проекта.

443* **Пользователь** и **Локальный проект**: создайте их сами или позвольте Claude Code их создать. Он записывает `~/.claude/settings.json` при первом изменении опции в меню `/config`, которую он сохраняет в пользовательские параметры, такой как тема, и `.claude/settings.local.json` при первом предоставлении постоянного одобрения на запрос разрешения, такой как "Да, и больше не спрашивайте" для команды Bash. Несколько опций `/config`, включая **Show tips**, сохраняются в `.claude/settings.local.json` вместо файла пользователя.443* **Пользователь** и **Локальный проект**: создайте их сами или позвольте Claude Code их создать. Он записывает `~/.claude/settings.json` при первом изменении опции в меню `/config`, которую он сохраняет в пользовательские настройки, например темы, и `.claude/settings.local.json` при первом предоставлении постоянного подтверждения на запрос разрешения, например "Да, и больше не спрашивайте" для команды Bash. Несколько опций `/config`, включая **Show tips**, сохраняются в `.claude/settings.local.json` вместо файла пользователя.

444 444 

445<Info>445<Info>

446 На Windows `~/.claude` означает `%USERPROFILE%\.claude`. Чтобы хранить файлы домашнего каталога в другом месте, установите [`CLAUDE_CONFIG_DIR`](/docs/ru/env-vars); Claude Code затем сохраняет ваши параметры, историю сеансов и plugins там вместо этого.446 В Windows `~/.claude` означает `%USERPROFILE%\.claude`. Чтобы хранить файлы домашнего каталога в другом месте, установите [`CLAUDE_CONFIG_DIR`](/docs/ru/env-vars); тогда Claude Code будет сохранять ваши настройки, историю сессий и плагины там.

447</Info>447</Info>

448 448 

449Claude Code также хранит пятый файл, [`~/.claude.json`](/docs/ru/claude-directory#ce-claude-json), который он записывает для себя; вам не нужно его редактировать. Он содержит вашу сессию входа, конфигурации [MCP server](/docs/ru/mcp), состояние для каждого проекта, такое как решения о доверии, и [глобальные ключи конфигурации](/docs/ru/settings-reference#global-config-settings), которые `/config` записывает для вас.449Claude Code также хранит пятый файл, [`~/.claude.json`](/docs/ru/claude-directory#ce-claude-json), который он записывает для себя; вам не нужно его редактировать. Он содержит вашу сессию входа, конфигурации [MCP-серверов](/docs/ru/mcp), состояние для каждого проекта, такое как решения о доверии, и [глобальные ключи конфигурации](/docs/ru/settings-reference#global-config-settings), которые `/config` записывает для вас.

450 450 

451<h3 id="share-settings-with-your-team">451<h3 id="share-settings-with-your-team">

452 Поделитесь параметрами с вашей командой452 Поделитесь настройками с вашей командой

453</h3>453</h3>

454 454 

455Зафиксируйте `.claude/settings.json`, чтобы все, кто клонирует репозиторий, получили одинаковые разрешения, hooks и plugins. Каждый товарищ по команде всё ещё может переопределить его для себя в своём собственном `.claude/settings.local.json`, поэтому личные исключения не нуждаются в коммите. Для полного файла команды см. [общие параметры команды](/docs/ru/settings-example#a-teams-shared-settings).455Сделайте коммит `.claude/settings.json`, чтобы все, кто клонирует репозиторий, получили одинаковые разрешения, хуки и плагины. Каждый товарищ по команде всё ещё может переопределить его для себя в своём собственном `.claude/settings.local.json`, поэтому личные исключения не требуют коммита. Полный файл команды см. в разделе [общие настройки команды](/docs/ru/settings-example#a-teams-shared-settings).

456 456 

457Некоторые из того, что вы зафиксируете, ждут, пока каждый товарищ по команде [доверит папку](/docs/ru/permissions#project-allow-rules-and-workspace-trust), и несколько ключей никогда не вступают в силу из файла репозитория; [Troubleshoot a setting that doesn't apply](#common-cases) охватывает оба случая.457Часть того, что вы зафиксируете, ждёт, пока каждый товарищ по команде [доверит папку](/docs/ru/permissions#project-allow-rules-and-workspace-trust), а некоторые ключи никогда не вступают в силу из файла репозитория; раздел [Устранение неполадок с настройкой, которая не применяется](#common-cases) охватывает оба случая.

458 458 

459<span id="local-settings-file" />459<span id="local-settings-file" />

460 460 


465<span id="keep-personal-settings-out-of-the-repository" />465<span id="keep-personal-settings-out-of-the-repository" />

466 466 

467<h3 id="keep-personal-settings-out-of-a-repository">467<h3 id="keep-personal-settings-out-of-a-repository">

468 Держите личные параметры вне репозитория468 Держите личные настройки вне репозитория

469</h3>469</h3>

470 470 

471Чтобы изменить параметр для себя в одном проекте без изменения его для товарищей по команде, сохраните его в `.claude/settings.local.json` внутри проекта. Claude Code применяет этот файл поверх зафиксированного `.claude/settings.json`, поэтому если файл вашей команды устанавливает `"model": "claude-sonnet-5"` и вы хотите Opus, поместите `"model": "claude-opus-5-5"` в ваш локальный файл и только ваши сеансы изменятся.471Чтобы изменить настройку для себя в одном проекте, не меняя её для товарищей по команде, сохраните её в `.claude/settings.local.json` внутри проекта. Claude Code применяет этот файл поверх зафиксированного `.claude/settings.json`, поэтому если файл вашей команды устанавливает `"model": "claude-sonnet-5"`, а вы хотите Opus, поместите `"model": "claude-opus-5-5"` в ваш локальный файл, и изменятся только ваши сессии.

472 472 

473Claude Code также записывает в этот файл, держит его вне ваших коммитов и применяет его правила разрешений без шага доверия:473Claude Code также записывает в этот файл, держит его вне ваших коммитов и применяет его правила allow без шага доверия:

474 474 

475* **Claude Code также его записывает.** Когда Claude просит разрешение запустить команду Bash и вы выбираете "Да, и больше не спрашивайте", Claude Code сохраняет это [одобрение разрешения](/docs/ru/permissions#permission-system) здесь как правило `allow`.475* **Claude Code также его записывает.** Когда Claude запрашивает разрешение на запуск команды Bash и вы выбираете "Да, и больше не спрашивайте", Claude Code сохраняет это [подтверждение разрешения](/docs/ru/permissions#permission-system) здесь как правило `allow`.

476* **Вам не нужно его gitignore самостоятельно, если только вы не создали его вручную.** При первом написании файла Claude Code в репозитории git, который его ещё не игнорирует, он добавляет `**/.claude/settings.local.json` в ваш глобальный файл исключений git, поэтому файл остаётся вне ваших коммитов в каждом репозитории. Этот файл — это `core.excludesFile`, когда ваша глобальная конфигурация git устанавливает его на абсолютный путь или путь с префиксом `~`; в противном случае это `$XDG_CONFIG_HOME/git/ignore`, или `~/.config/git/ignore`, когда `XDG_CONFIG_HOME` не установлен. Если вы создали файл вручную и Claude Code ещё не писал в него, добавьте его в `.gitignore` сами.476* **Вам не нужно самостоятельно добавлять его в gitignore, если только вы не создали его вручную.** При первой записи файла Claude Code в репозитории git, который его ещё не игнорирует, он добавляет `**/.claude/settings.local.json` в ваш глобальный файл исключений git, поэтому файл остаётся вне ваших коммитов в каждом репозитории. Этот файл — `core.excludesFile`, когда ваша глобальная конфигурация git задаёт для него абсолютный путь или путь с префиксом `~`; в противном случае это `$XDG_CONFIG_HOME/git/ignore` или `~/.config/git/ignore`, когда `XDG_CONFIG_HOME` не установлен. Если вы создали файл вручную и Claude Code ещё не писал в него, добавьте его в `.gitignore` сами.

477* **Его правила allow не ждут доверия, пока файл остаётся неотслеживаемым.** Поскольку файл принадлежит вам, а не репозиторию, Claude Code применяет его правила `allow` без шага [workspace trust](/docs/ru/permissions#project-allow-rules-and-workspace-trust), который он требует для зафиксированного файла. Если файл отслеживается git, шаг доверия применяется к нему также; см. [When your local settings file needs trust](/docs/ru/permissions#when-your-local-settings-file-needs-trust).477* **Его правила allow не ждут доверия, пока файл остаётся неотслеживаемым.** Поскольку файл принадлежит вам, а не репозиторию, Claude Code применяет его правила `allow` без шага [доверия к рабочему пространству](/docs/ru/permissions#project-allow-rules-and-workspace-trust), который он требует для зафиксированного файла. Если файл отслеживается git, шаг доверия применяется и к нему; см. [Когда вашему локальному файлу настроек нужно доверие](/docs/ru/permissions#when-your-local-settings-file-needs-trust).

478 478 

479<span id="where-claude-code-looks-for-each-file" />479<span id="where-claude-code-looks-for-each-file" />

480 480 


486 Где Claude Code хранит локальный файл в репозитории git486 Где Claude Code хранит локальный файл в репозитории git

487</h4>487</h4>

488 488 

489Когда Claude просит разрешение запустить команду Bash и вы выбираете "Да, и больше не спрашивайте", Claude Code сохраняет это одобрение как правило `allow` в `.claude/settings.local.json`. Если вы запускаете Claude Code в подкаталоге репозитория git, он читает и записывает этот файл в корень репозитория и применяет одобрение по всему репозиторию. В [worktree](/docs/ru/worktrees) он использует файл в корне основного checkout.489Когда Claude запрашивает разрешение на запуск команды Bash и вы выбираете "Да, и больше не спрашивайте", Claude Code сохраняет это подтверждение как правило `allow` в `.claude/settings.local.json`. Если вы запускаете Claude Code в подкаталоге репозитория git, он читает и записывает этот файл в корне репозитория и применяет подтверждение ко всему репозиторию. В [worktree](/docs/ru/worktrees) он использует файл в корне основного checkout.

490 490 

491Два правила уточняют расположение корня:491Два правила уточняют расположение в корне:

492 492 

493* **Когда файл остаётся с `.claude/settings.json` вместо этого**: вне репозитория git, когда корень репозитория — это ваш домашний каталог, на Windows или когда корень репозитория или его запись `.git` или `.claude` не принадлежит вашему пользователю.493* **Когда файл вместо этого остаётся рядом с `.claude/settings.json`**: вне репозитория git, когда корень репозитория — это ваш домашний каталог, в Windows или когда корень репозитория либо его запись `.git` или `.claude` не принадлежит вашему пользователю.

494* **Пути в файле не привязаны к корню репозитория**: правило разрешения, которое начинается с `/` или относительный путь sandbox [привязывается к основному рабочему каталогу сеанса](/docs/ru/permissions#read-and-edit) вместо этого.494* **Пути в файле не привязаны к корню репозитория**: правило разрешений, которое начинается с `/`, или относительный путь песочницы [привязывается вместо этого к основному рабочему каталогу сессии](/docs/ru/permissions#read-and-edit).

495 495 

496До v2.1.211 Claude Code хранил файл в начальном каталоге. Он всё ещё читает файл, который более ранняя версия оставила там рядом с файлом корня; где оба устанавливают один и тот же ключ, применяется значение корня, и правила разрешений из обоих файлов применяются. Помощник Agent SDK [`resolveSettings()`](/docs/ru/agent-sdk/typescript#resolvesettings) всегда читает файл из начального каталога.496До v2.1.211 Claude Code хранил файл в начальном каталоге. Он всё ещё читает файл, который более ранняя версия оставила там, наряду с файлом в корне; если оба задают один и тот же ключ, применяется значение из корня, а правила разрешений из обоих файлов применяются. Вспомогательная функция Agent SDK [`resolveSettings()`](/docs/ru/agent-sdk/typescript#resolvesettings) всегда читает файл из начального каталога.

497 497 

498Claude Code читает общий `.claude/settings.json` из [основного рабочего каталога](/docs/ru/permissions#working-directories) сеанса, поэтому для использования файла, зафиксированного в корне репозитория, запустите Claude Code там. После того как вы [переместите сеанс с `/cd`](/docs/ru/permissions#move-the-session-to-another-directory), Claude Code читает оба файла проекта из нового каталога вместо этого, размещая локальный файл по тем же правилам. Чтение их из каталога, в который вы переместились, требует Claude Code v2.1.246 или позже.498Claude Code читает общий `.claude/settings.json` из [основного рабочего каталога](/docs/ru/permissions#working-directories) сессии, поэтому, чтобы использовать файл, зафиксированный в корне репозитория, запустите Claude Code там. После того как вы [переместите сессию с помощью `/cd`](/docs/ru/permissions#move-the-session-to-another-directory), Claude Code читает оба файла проекта из нового каталога, размещая локальный файл по тем же правилам. Чтение их из каталога, в который вы переместились, требует Claude Code v2.1.246 или более поздней версии.

499 499 

500<span id="managed-settings-delivery" />500<span id="managed-settings-delivery" />

501 501 


508<span id="settings-your-organization-manages" />508<span id="settings-your-organization-manages" />

509 509 

510<h3 id="check-what-your-organization-enforces">510<h3 id="check-what-your-organization-enforces">

511 Проверьте, что ваша организация требует511 Проверьте, что требует ваша организация

512</h3>512</h3>

513 513 

514Если ваша организация управляет Claude Code, некоторые параметры решены за вас и ничто из того, что вы поместили в ваши собственные файлы, их не изменяет. Чтобы увидеть, какие, запустите `/status`: строка `Setting sources` называет управляемый источник, который применяется к вам. Управляемые параметры применяются везде, где Claude Code работает на этой машине; [What a developer can change](/docs/ru/managed-settings#what-a-developer-can-change) охватывает права локального администратора и инструменты, отличные от Claude Code.514Если ваша организация управляет Claude Code, некоторые настройки определены за вас, и ничто из того, что вы поместите в ваши собственные файлы, их не изменит. Чтобы увидеть, какие именно, запустите `/status`: строка `Setting sources` называет управляемый источник, который применяется к вам. Управляемые настройки применяются везде, где Claude Code работает на этой машине; раздел [Что может изменить разработчик](/docs/ru/managed-settings#what-a-developer-can-change) охватывает права локального администратора и инструменты, отличные от Claude Code.

515 515 

516Управляемые параметры достигают вас через [механизмы доставки](/docs/ru/managed-settings#delivery-mechanisms) на странице управляемых параметров, чаще всего:516Управляемые настройки доходят до вас через [механизмы доставки](/docs/ru/managed-settings#delivery-mechanisms), описанные на странице управляемых настроек, чаще всего:

517 517 

518* [Server-managed settings](/docs/ru/server-managed-settings), которые Claude Code получает из консоли администратора claude.ai или самостоятельно размещённого [Claude apps gateway](/docs/ru/claude-apps-gateway)518* [Управляемые сервером настройки](/docs/ru/server-managed-settings), которые Claude Code получает из консоли администратора claude.ai или из самостоятельно размещённого [шлюза приложений Claude](/docs/ru/claude-apps-gateway)

519* Политики MDM или уровня ОС и файлы `managed-settings.json` в системном каталоге519* Политики MDM или уровня ОС и файлы `managed-settings.json` в системном каталоге

520* Хост встраивания, такой как Claude Desktop, через опцию SDK `managedSettings`; см. [Control policy from an embedding host](/docs/ru/managed-settings#parent-settings-from-embedding-hosts)520* Встраивающий хост, такой как Claude Desktop, через опцию SDK `managedSettings`; см. [Управление политикой из встраивающего хоста](/docs/ru/managed-settings#parent-settings-from-embedding-hosts)

521 521 

522В сеансе [Cowork](https://claude.com/docs/cowork/overview), который работает на вашей машине в приложении Claude Desktop, Claude Code не получает управляемые сервером параметры из консоли администратора claude.ai и читает политику, развёрнутую на вашем устройстве, если конфигурация Claude Desktop вашей организации не устанавливает `requireCoworkFullVmSandbox`. [Where and when a policy applies](/docs/ru/managed-settings#where-and-when-a-policy-applies) охватывает Cowork и облачные сеансы.522В сессии [Cowork](https://claude.com/docs/cowork/overview), которая работает на вашей машине в приложении Claude Desktop, Claude Code не получает управляемые сервером настройки из консоли администратора claude.ai и читает политику, развёрнутую на вашем устройстве, если только конфигурация Claude Desktop вашей организации не устанавливает `requireCoworkFullVmSandbox`. Раздел [Где и когда применяется политика](/docs/ru/managed-settings#where-and-when-a-policy-applies) охватывает Cowork и облачные сессии.

523 523 

524Если вы администратор, [Set up Claude Code for your organization](/docs/ru/admin-setup) проходит через выбор того, что требуется применить, и [Deploy managed settings](/docs/ru/managed-settings) охватывает доставку и как подтвердить, что политика действует.524Если вы администратор, руководство [Настройка Claude Code для вашей организации](/docs/ru/admin-setup) проводит через выбор того, что требовать, а [Развёртывание управляемых настроек](/docs/ru/managed-settings) охватывает доставку и то, как подтвердить, что политика действует. Сведения о предупреждении, которое может показывать редактор управляемых настроек в консоли администратора claude.ai, см. в разделе [Настройка управляемых сервером настроек](/docs/ru/server-managed-settings#configure-server-managed-settings).

525 525 

526<h2 id="change-a-setting">526<h2 id="change-a-setting">

527 Измените параметр527 Измените параметр


809 809 

810[Облачный сеанс](/docs/ru/claude-code-on-the-web) работает в [облачной среде](/docs/ru/cloud-environments) на свежем клоне вашего репозитория, не на вашей машине. Это изменяет, какие параметры его достигают:810[Облачный сеанс](/docs/ru/claude-code-on-the-web) работает в [облачной среде](/docs/ru/cloud-environments) на свежем клоне вашего репозитория, не на вашей машине. Это изменяет, какие параметры его достигают:

811 811 

812* **Общие параметры проекта** (`.claude/settings.json`): читаются в сеансе с одним репозиторием, потому что файл является частью клона и сеанс начинается внутри него. Зафиксируйте параметр там, чтобы применить его в этих сеансах. Сеанс с несколькими репозиториями начинается выше клонов и читает только ключи `enabledPlugins` и `extraKnownMarketplaces` из файла `.claude/settings.json` каждого репозитория, но не правила разрешений, hooks, `env` или другие ключи. Маркетплейсы и плагины, которые эти два ключа объявляют, по-прежнему [не загружаются в облачном сеансе](/docs/ru/cloud-environments#what-carries-over-from-your-setup).812* **Общие настройки проекта** (`.claude/settings.json`): читаются в сессии с одним репозиторием, потому что файл является частью клона и сессия начинается внутри него. Сделайте коммит настройки в этот файл, чтобы применить её в таких сессиях. В среде, размещённой Anthropic, сессия с несколькими репозиториями начинается выше клонов и читает только ключи `enabledPlugins` и `extraKnownMarketplaces` из файла `.claude/settings.json` каждого репозитория, но не правила разрешений, хуки, `env` или другие ключи. Маркетплейсы и плагины, которые объявляют эти два ключа, по-прежнему [не загружаются в облачной сессии](/docs/ru/cloud-environments#what-carries-over-from-your-setup). Для самостоятельно размещённой среды см. раздел [настройки какого репозитория применяются](/docs/ru/self-hosted-environments-configuration#repository-settings-in-sessions-with-several-repositories).

813* **Параметры пользователя и локальные параметры проекта** (`~/.claude/settings.json` и `.claude/settings.local.json`): не читаются. Оба остаются на вашей машине, и локальный файл не находится в клоне.813* **Параметры пользователя и локальные параметры проекта** (`~/.claude/settings.json` и `.claude/settings.local.json`): не читаются. Оба остаются на вашей машине, и локальный файл не находится в клоне.

814* **Managed settings**: файл `managed-settings.json` или профиль MDM на вашем устройстве не достигают облачного сеанса. [Параметры, управляемые сервером](/docs/ru/server-managed-settings) вашей организации достигают; [покрытие поверхности](/docs/ru/model-config#surface-coverage) перечисляет, какие облачные сеансы их получают. [Самостоятельно размещенная среда](/docs/ru/self-hosted-environments) также читает файл управляемых параметров в образе своего runner. [Как Claude Code объединяет управляемые источники](/docs/ru/managed-settings#how-claude-code-combines-managed-sources) говорит, когда этот файл применяется.814* **Managed settings**: файл `managed-settings.json` или профиль MDM на вашем устройстве не достигают облачного сеанса. [Параметры, управляемые сервером](/docs/ru/server-managed-settings) вашей организации достигают; [покрытие поверхности](/docs/ru/model-config#surface-coverage) перечисляет, какие облачные сеансы их получают. [Самостоятельно размещенная среда](/docs/ru/self-hosted-environments) также читает файл управляемых параметров в образе своего runner. [Как Claude Code объединяет управляемые источники](/docs/ru/managed-settings#how-claude-code-combines-managed-sources) говорит, когда этот файл применяется.

815* **`/config`**: в вашем браузере на claude.ai/code открывает раздел Claude Code ваших параметров claude.ai вместо изменения значения. Чтобы изменить параметр для облачного сеанса, установите [переменную окружения](/docs/ru/cloud-environments#set-environment-variables) в среде или в сеансе с одним репозиторием зафиксируйте ключ в файле `.claude/settings.json` этого репозитория.815* **`/config`**: в вашем браузере на claude.ai/code открывает раздел Claude Code ваших параметров claude.ai вместо изменения значения. Чтобы изменить параметр для облачного сеанса, установите [переменную окружения](/docs/ru/cloud-environments#set-environment-variables) в среде или в сеансе с одним репозиторием зафиксируйте ключ в файле `.claude/settings.json` этого репозитория.

skills.md +2 −0

Details

94| `migrate` | Обновить ваш существующий код Claude API на более новую модель | Ранее v2.1.221 |94| `migrate` | Обновить ваш существующий код Claude API на более новую модель | Ранее v2.1.221 |

95| `upgrade` | Переместить зависимость Anthropic SDK вашего проекта через основную версию, в настоящее время пакет Python `anthropic` с 0.x на 1.x | v2.1.236 или позже |95| `upgrade` | Переместить зависимость Anthropic SDK вашего проекта через основную версию, в настоящее время пакет Python `anthropic` с 0.x на 1.x | v2.1.236 или позже |

96| `managed-agents-onboard` | Пройти через создание нового Managed Agent | Ранее v2.1.221 |96| `managed-agents-onboard` | Пройти через создание нового Managed Agent | Ранее v2.1.221 |

97| `managed-agents-onboard <url>` | Создать Managed Agent, описанный на странице по указанному URL, например на странице в [документации Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) | v2.1.290 или позже |

98| `managed-agents-onboard <quickstart-name>` | Создать один из шаблонов быстрого старта Console, например `deep-researcher`. Если вы укажете одно слово, которое не является именем шаблона, Claude перечислит допустимые имена | v2.1.290 или позже |

97| `prompt-audit` | Отметить инструкции, написанные для более старых моделей в ваших промптах, skills и описаниях инструментов, и предложить исправления в виде diff | v2.1.221 или позже |99| `prompt-audit` | Отметить инструкции, написанные для более старых моделей в ваших промптах, skills и описаниях инструментов, и предложить исправления в виде diff | v2.1.221 или позже |

98| `cost-optimize` | Профилировать, куда идут расходы Claude API вашего проекта, и предложить экономию из таких опций, как кэширование промптов, сокращение ненужных входных и выходных токенов, пакетная обработка, усилие и выбор модели, по одному изменению за раз | v2.1.247 или позже |100| `cost-optimize` | Профилировать, куда идут расходы Claude API вашего проекта, и предложить экономию из таких опций, как кэширование промптов, сокращение ненужных входных и выходных токенов, пакетная обработка, усилие и выбор модели, по одному изменению за раз | v2.1.247 или позже |

99| `build-eval` | Построить набор eval для вашего приложения на базе Claude | v2.1.259 или позже |101| `build-eval` | Построить набор eval для вашего приложения на базе Claude | v2.1.259 или позже |

sub-agents.md +4 −2

Details

609Режим разрешений основного разговора решает, использует ли Claude Code значение, которое вы установили:609Режим разрешений основного разговора решает, использует ли Claude Code значение, которое вы установили:

610 610 

611* Когда основной разговор находится в `bypassPermissions`, `acceptEdits` или [auto mode](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode), subagent работает в этом же режиме и Claude Code игнорирует `permissionMode`, который вы установили. Под auto mode классификатор оценивает вызовы инструментов subagent с правилами блокировки и разрешения основного разговора. Когда subagent завершается, классификатор также проверяет его работу и его финальный отчёт перед доставкой отчёта, как [How auto mode handles subagents](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) описывает.611* Когда основной разговор находится в `bypassPermissions`, `acceptEdits` или [auto mode](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode), subagent работает в этом же режиме и Claude Code игнорирует `permissionMode`, который вы установили. Под auto mode классификатор оценивает вызовы инструментов subagent с правилами блокировки и разрешения основного разговора. Когда subagent завершается, классификатор также проверяет его работу и его финальный отчёт перед доставкой отчёта, как [How auto mode handles subagents](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) описывает.

612* Когда основной разговор находится в режиме `default`, `dontAsk` или `plan`, subagent работает в режиме разрешений, который вы установили, кроме `bypassPermissions`. Subagent, который объявляет `bypassPermissions`, сохраняет режим основного разговора вместо этого. Исключение `bypassPermissions` требует Claude Code v2.1.267 или позже.612* Когда основной диалог находится в режиме `default`, `dontAsk` или `plan`, субагент работает в заданном вами режиме разрешений. В следующих случаях он вместо этого сохраняет режим разрешений основного диалога:

613 * Вы задали `bypassPermissions`. Исключение для `bypassPermissions` требует Claude Code v2.1.267 или новее.

614 * Вы задали `auto`, а [авторежим недоступен](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) субагенту, например когда файл настроек задаёт [`disableAutoMode`](/docs/ru/settings-reference#disableautomode) или модель субагента не поддерживает авторежим.

613 615 

614`permissionMode` принимает эти значения и `manual` как псевдоним для `default`:616`permissionMode` принимает эти значения и `manual` как псевдоним для `default`:

615 617 


640Implement API endpoints. Follow the conventions and patterns from the preloaded skills.642Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

641```643```

642 644 

643Полное содержимое каждого перечисленного skill инжектируется в контекст subagent при запуске. Это поле контролирует, какие skills предварительно загружаются, а не какие skills может использовать subagent: без него subagent по-прежнему может открывать и вызывать project, user и plugin skills через инструмент Skill во время выполнения. Чтобы предотвратить использование subagent skills полностью, опустите `Skill` из списка [`tools`](#available-tools) или добавьте его в `disallowedTools`.645Полное содержимое каждого указанного скилла внедряется в контекст субагента при запуске — до первых 32 различных имён в списке. Это поле определяет, какие скиллы загружаются заранее, а не к каким скиллам у субагента есть доступ: без него субагент всё равно может находить и вызывать скиллы проекта, пользователя и плагинов через инструмент Skill во время выполнения. Чтобы полностью запретить субагенту вызывать скиллы, исключите `Skill` из списка [`tools`](#available-tools) или добавьте его в `disallowedTools`.

644 646 

645Нельзя предварительно загрузить скиллы, в которых задано [`disable-model-invocation: true`](/docs/ru/skills#control-who-invokes-a-skill), поскольку предварительная загрузка берёт скиллы из того же набора, который может вызывать Claude. Это относится и к встроенному скиллу `/verify`, который Claude не может запустить самостоятельно.647Нельзя предварительно загрузить скиллы, в которых задано [`disable-model-invocation: true`](/docs/ru/skills#control-who-invokes-a-skill), поскольку предварительная загрузка берёт скиллы из того же набора, который может вызывать Claude. Это относится и к встроенному скиллу `/verify`, который Claude не может запустить самостоятельно.

646 648 

Details

666 666 

667* WebFetch отказывает `localhost` и любому другому имени хоста без точки, например простому имени интранета, перед выполнением запроса. [Ошибка, которую он возвращает](/docs/ru/errors#webfetch-cannot-fetch-localhost), говорит Claude достичь локальных серверов с помощью `curl` через Bash вместо этого.667* WebFetch отказывает `localhost` и любому другому имени хоста без точки, например простому имени интранета, перед выполнением запроса. [Ошибка, которую он возвращает](/docs/ru/errors#webfetch-cannot-fetch-localhost), говорит Claude достичь локальных серверов с помощью `curl` через Bash вместо этого.

668* HTTP URL-адреса автоматически обновляются до HTTPS.668* HTTP URL-адреса автоматически обновляются до HTTPS.

669* Большие страницы усекаются до фиксированного ограничения символов перед обработкой.669* WebFetch считывает до 100 000 символов содержимого страницы за один вызов. В Claude Code v2.1.290 или новее результат для более длинной страницы сообщает Claude, какой объём остался непрочитанным, чтобы Claude мог загрузить следующую часть.

670* WebFetch кэширует каждый ответ на 15 минут по умолчанию, поэтому повторные загрузки одного и того же URL возвращаются быстро. На Claude Code v2.1.233 или позже установите [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/ru/env-vars#variables) для изменения того, как долго WebFetch хранит каждый ответ.670* WebFetch кэширует каждый ответ на 15 минут по умолчанию, поэтому повторные загрузки одного и того же URL возвращаются быстро. На Claude Code v2.1.233 или позже установите [`CLAUDE_CODE_WEBFETCH_CACHE_TTL_MS`](/docs/ru/env-vars#variables) для изменения того, как долго WebFetch хранит каждый ответ.

671* Страница, которая не завершила загрузку в течение пяти минут, включая любые перенаправления, которые следует WebFetch, завершается ошибкой истечения срока. На Claude Code v2.1.268 или позже установите [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/ru/env-vars#variables) для изменения ограничения или на `0` для его удаления.671* Страница, которая не завершила загрузку в течение пяти минут, включая любые перенаправления, которые следует WebFetch, завершается ошибкой истечения срока. На Claude Code v2.1.268 или позже установите [`CLAUDE_CODE_WEBFETCH_DEADLINE_MS`](/docs/ru/env-vars#variables) для изменения ограничения или на `0` для его удаления.

672* Когда URL перенаправляет на другой хост, WebFetch возвращает текстовый результат, который называет исходный URL и цель перенаправления вместо его следования. Claude затем загружает новый URL со вторым вызовом WebFetch.672* Когда URL перенаправляет на другой хост, WebFetch возвращает текстовый результат, который называет исходный URL и цель перенаправления вместо его следования. Claude затем загружает новый URL со вторым вызовом WebFetch.

ultrareview.md +6 −6

Details

56 Анализ запроса на слияние56 Анализ запроса на слияние

57</h3>57</h3>

58 58 

59Чтобы анализировать запрос на слияние GitHub вместо локальной ветви, передайте номер PR:59Чтобы проанализировать pull request на `github.com` вместо локальной ветки, передайте номер PR:

60 60 

61```text theme={null}61```text theme={null}

62/code-review ultra 123462/code-review ultra 1234


64 64 

65Команда также принимает `#1234`, `PR 1234` и вставленные URL-адреса PR; вставленный URL должен указывать на репозиторий в вашем текущем каталоге.65Команда также принимает `#1234`, `PR 1234` и вставленные URL-адреса PR; вставленный URL должен указывать на репозиторий в вашем текущем каталоге.

66 66 

67В режиме PR удаленная изолированная среда клонирует запрос на слияние непосредственно с хоста, а не упаковывает ваше локальное рабочее дерево. Режим PR работает с репозиториями на `github.com` и на экземплярах [GitHub Enterprise Server](/docs/ru/github-enterprise-server), которые администратор подключил к Claude Code.67Для режима PR нужен репозиторий на `github.com`. Для репозитория на экземпляре [GitHub Enterprise Server](/docs/ru/github-enterprise-server) запустите `/code-review ultra` без номера PR, чтобы вместо этого проанализировать вашу локальную ветку.

68 68 

69Для репозиториев на `github.com` изолированная среда клонирует с учетной записью GitHub, подключенной к вашей учетной записи Claude, поэтому учетная запись должна иметь возможность читать репозиторий PR.69В режиме PR облачная песочница клонирует pull request с `github.com` вместо загрузки вашего рабочего дерева. Она использует учётную запись GitHub, подключённую к вашей учётной записи Claude, поэтому эта учётная запись должна иметь доступ на чтение к репозиторию.

70 70 

71Запустите [`/web-setup`](/docs/ru/web-quickstart#connect-from-your-terminal), чтобы подключить вашу учетную запись GitHub CLI к вашей учетной записи Claude.71Запустите [`/web-setup`](/docs/ru/web-quickstart#connect-from-your-terminal), чтобы подключить вашу учетную запись GitHub CLI к вашей учетной записи Claude.

72 72 


74 Опубликуйте результаты в запросе на слияние74 Опубликуйте результаты в запросе на слияние

75</h3>75</h3>

76 76 

77На Claude Code версии 2.1.227 или позже, когда вы анализируете запрос на слияние на `github.com`, вы можете попросить Claude опубликовать готовые результаты в PR как один простой комментарий от вашей собственной учетной записи GitHub. Комментарий не является рецензией или одобрением и заканчивается примечанием "Generated by Claude Code". Когда вы анализируете ветвь или запрос на слияние GitHub Enterprise Server, Claude Code показывает результаты только в вашей сессии.77В Claude Code версии 2.1.227 или новее, когда вы анализируете pull request на `github.com`, вы можете попросить Claude опубликовать готовые результаты в PR как один простой комментарий от вашей собственной учётной записи GitHub. Комментарий не является рецензией или одобрением и заканчивается примечанием "Generated by Claude Code". Когда вы анализируете ветку, Claude Code показывает результаты только в вашей сессии.

78 78 

79Claude Code никогда не публикует, если вы не выберете это на этом запуске, и `--no-post` является значением по умолчанию. Публикация — это выбор, который вы делаете для каждого запуска:79Claude Code никогда не публикует, если вы не выберете это на этом запуске, и `--no-post` является значением по умолчанию. Публикация — это выбор, который вы делаете для каждого запуска:

80 80 


106Claude Code рассматривает ваш текст как примечание только, когда он содержит более одного слова и не является именем ветви или ссылкой на PR. Он читает одно слово как имя ветви или ссылку на PR, поэтому неправильно введенное имя ветви получает ошибку ближайшей ветви из [Анализ относительно другой базы](#review-against-a-different-base) вместо запуска с примечанием. Если ваш текст объединяет ссылку на PR с другими словами, такие как `check PR 123 again`, Claude Code также не запускается; он просит вас повторно запустить только с номером PR для анализа этого PR или без ссылки для анализа вашей текущей ветви.106Claude Code рассматривает ваш текст как примечание только, когда он содержит более одного слова и не является именем ветви или ссылкой на PR. Он читает одно слово как имя ветви или ссылку на PR, поэтому неправильно введенное имя ветви получает ошибку ближайшей ветви из [Анализ относительно другой базы](#review-against-a-different-base) вместо запуска с примечанием. Если ваш текст объединяет ссылку на PR с другими словами, такие как `check PR 123 again`, Claude Code также не запускается; он просит вас повторно запустить только с номером PR для анализа этого PR или без ссылки для анализа вашей текущей ветви.

107 107 

108<Tip>108<Tip>

109 Если ваш репозиторий слишком большой для упаковки, Claude Code предложит вам вместо этого использовать режим PR. Отправьте вашу ветвь и откройте черновик PR, затем запустите `/code-review ultra <PR-number>`.109 Если ваш репозиторий слишком большой для упаковки, Claude Code предложит вам вместо этого использовать режим PR. Для репозитория на `github.com` отправьте вашу ветку и откройте черновик PR, затем запустите `/code-review ultra <PR-number>`.

110</Tip>110</Tip>

111 111 

112<h3 id="diff-limits-and-fallbacks">112<h3 id="diff-limits-and-fallbacks">


173claude ultrareview origin/main173claude ultrareview origin/main

174```174```

175 175 

176Без аргументов подкоманда проверяет разницу между вашей текущей веткой и веткой по умолчанию, с тем же [резервным вариантом для всего репозитория](#diff-limits-and-fallbacks), что и `/code-review ultra`, когда база слияния не существует. Передайте номер PR для проверки pull request или базовую ветку для проверки относительно неё; [обработка базовой ветки](#review-against-a-different-base) соответствует интерактивной команде.176Без аргументов подкоманда проверяет разницу между вашей текущей веткой и веткой по умолчанию, с тем же [резервным вариантом для всего репозитория](#diff-limits-and-fallbacks), что и `/code-review ultra`, когда база слияния не существует. Передайте номер PR, чтобы [проверить pull request на `github.com`](#review-a-pull-request), или базовую ветку для проверки относительно неё; [обработка базовой ветки](#review-against-a-different-base) соответствует интерактивной команде.

177 177 

178Вы даёте согласие на резервный вариант для всего репозитория и на подтверждение выставления счёта и условия при запуске подкоманды, поэтому выполнение начинается без ожидания ввода. Запуск её самостоятельно — это то, что считается согласием. Когда Claude запускает подкоманду для вас, например через инструмент Bash, Claude Code отказывает в проверке всего репозитория.178Вы даёте согласие на резервный вариант для всего репозитория и на подтверждение выставления счёта и условия при запуске подкоманды, поэтому выполнение начинается без ожидания ввода. Запуск её самостоятельно — это то, что считается согласием. Когда Claude запускает подкоманду для вас, например через инструмент Bash, Claude Code отказывает в проверке всего репозитория.

179 179 

vs-code.md +1 −0

Details

166* **Закладки**: наведите курсор на ответ и нажмите **Bookmark response**, чтобы сохранить его, или нажмите **Remove bookmark** на сохранённом ответе, чтобы удалить закладку.166* **Закладки**: наведите курсор на ответ и нажмите **Bookmark response**, чтобы сохранить его, или нажмите **Remove bookmark** на сохранённом ответе, чтобы удалить закладку.

167 167 

168 Чтобы просмотреть сохранённые ответы, откройте панель Bookmarks: нажмите на значок закладки в верхней части панели Claude Code, выберите **Bookmarks** в разделе Context меню команд или введите `/bookmarks`. Требуется Claude Code v2.1.286 или новее.168 Чтобы просмотреть сохранённые ответы, откройте панель Bookmarks: нажмите на значок закладки в верхней части панели Claude Code, выберите **Bookmarks** в разделе Context меню команд или введите `/bookmarks`. Требуется Claude Code v2.1.286 или новее.

169* **Файлы, которые вам отправляет Claude**: когда сессия подключена к [Remote Control](/docs/ru/remote-control#start-a-remote-control-session) и Claude отправляет вам файлы с помощью [инструмента `SendUserFile`](/docs/ru/tools-reference), в диалоге отображается строка, например **Sent report.md, chart.png**. Нажмите на имя файла, чтобы открыть его в редакторе.

169* **Индикатор контекста**: поле ввода промпта показывает, какая часть контекстного окна Claude используется. Claude автоматически выполняет сжатие контекста при необходимости, или вы можете запустить `/compact` вручную.170* **Индикатор контекста**: поле ввода промпта показывает, какая часть контекстного окна Claude используется. Claude автоматически выполняет сжатие контекста при необходимости, или вы можете запустить `/compact` вручную.

170* **Часы кэша промптов**: значок часов рядом с индикатором контекста показывает приблизительное время, оставшееся до истечения [кэша промптов](/docs/ru/prompt-caching) диалога. Отсчёт идёт от пятиминутного или часового [срока жизни](/docs/ru/prompt-caching#cache-lifetime) кэша, и каждый ответ, использующий кэш, перезапускает отсчёт. Помимо сжатия контекста, [действия, которые делают кэш недействительным](/docs/ru/prompt-caching#actions-that-invalidate-the-cache), не сбрасывают часы, поэтому после смены модели они всё ещё могут показывать оставшиеся минуты.171* **Часы кэша промптов**: значок часов рядом с индикатором контекста показывает приблизительное время, оставшееся до истечения [кэша промптов](/docs/ru/prompt-caching) диалога. Отсчёт идёт от пятиминутного или часового [срока жизни](/docs/ru/prompt-caching#cache-lifetime) кэша, и каждый ответ, использующий кэш, перезапускает отсчёт. Помимо сжатия контекста, [действия, которые делают кэш недействительным](/docs/ru/prompt-caching#actions-that-invalidate-the-cache), не сбрасывают часы, поэтому после смены модели они всё ещё могут показывать оставшиеся минуты.

171 * Пока отсчёт не закончился, значок показывает оставшиеся минуты, например **12m**.172 * Пока отсчёт не закончился, значок показывает оставшиеся минуты, например **12m**.

workflows.md +27 −1

Details

354 354 

355Тело — это простой JavaScript с top-level `await`. `agent()` создаёт один подагент, `pipeline()` запускает один на элемент в списке, а `parallel()` запускает набор задач агента одновременно и ждёт завершения всех из них.355Тело — это простой JavaScript с top-level `await`. `agent()` создаёт один подагент, `pipeline()` запускает один на элемент в списке, а `parallel()` запускает набор задач агента одновременно и ждёт завершения всех из них.

356 356 

357Вызов `agent()` разрешается в `null`, если вы остановите его во время выполнения или он столкнётся с неустранимой ошибкой API. `pipeline()` сохраняет каждый `null` в массиве результатов, поэтому пример заканчивается на `.filter(Boolean)`, чтобы удалить эти записи.357Вызов `agent()` разрешается в `null`, если вы остановите его во время выполнения или он столкнётся с неустранимой ошибкой API. `pipeline()` сохраняет каждый `null` в массиве результатов, поэтому пример заканчивается на `.filter(Boolean)`, чтобы удалить эти записи, включая слот [агента, который зависал при каждой попытке](#when-an-agent-stalls-and-restarts).

358 358 

359В [режиме auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) подсказка, которую ваш скрипт передаёт в `agent()`, не считается запросом от вас, когда классификатор проверяет действия этого подагента, потому что Claude Code отмечает её как текст, вычисленный скриптом.359В [режиме auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) подсказка, которую ваш скрипт передаёт в `agent()`, не считается запросом от вас, когда классификатор проверяет действия этого подагента, потому что Claude Code отмечает её как текст, вычисленный скриптом.

360 360 


463* Лимит сбросится в течение 24 часов. Еженедельный лимит может сбросится позже.463* Лимит сбросится в течение 24 часов. Еженедельный лимит может сбросится позже.

464* Запуск ещё не ждал дважды. Когда он достигает лимита в третий раз, агент отказывает.464* Запуск ещё не ждал дважды. Когда он достигает лимита в третий раз, агент отказывает.

465 465 

466<h3 id="when-an-agent-stalls-and-restarts">

467 Когда агент зависает и перезапускается

468</h3>

469 

470Агент, вывод которого перестаёт поступать в течение достаточно долгого времени, начинает заново с того же промпта. В [`/workflows`](#watch-the-run) к его имени добавляется суффикс `(retry 1)`, а в его подробностях отображается `attempt 2 (stalled)`. Перезапуск происходит автоматически, поэтому вам ничего не нужно делать.

471 

472Новая попытка начинается без транскрипта зависшей попытки. Файлы, которые зависшая попытка уже изменила, остаются изменёнными, а потраченные ею токены остаются в общем итоге запуска. Окно зависания — это время, в течение которого Claude Code ждёт вывода от агента, прежде чем завершить попытку. Время, которое агент проводит в ожидании собственных вызовов инструментов или [сброса лимита использования](#when-a-run-hits-your-usage-limit), не учитывается в окне зависания.

473 

474Агент перезапускается не более пяти раз, включая любой перезапуск, запрошенный вами с помощью `r`. Если шестая попытка тоже зависает, вызов `agent()` завершается ошибкой, и в начале ошибки указывается причина:

475 

476* `agent stalled on all 6 attempts`: каждая попытка провела всё окно без вывода. Если работа агента заставляет его молчать так долго, увеличьте окно

477* `agent lost its reply on all 6 attempts`: поток ответа каждой попытки замолкал, и Claude Code прекращал его ожидание. Увеличение окна зависания не помогает, поскольку [сторожевой таймер простоя потоковой передачи](/docs/ru/network-config#streaming-idle-watchdogs) завершил ответ раньше, а `CLAUDE_STREAM_IDLE_TIMEOUT_MS` задаёт таймаут этого сторожевого таймера

478* `agent abandoned after 6 attempts`: попытки завершились по-разному, и ошибка перечисляет их по порядку

479 

480Чтобы дать агенту больше времени на вывод до окончания окна:

481 

482* **Один агент**: передайте `stallMs` в миллисекундах в его вызове `agent()`, например `agent(prompt, { stallMs: 1800000 })` для 30 минут

483* **Все агенты**: задайте [`CLAUDE_ASYNC_AGENT_STALL_TIMEOUT_MS`](/docs/ru/env-vars#variables), который также применяется к субагентам вне workflows

484 

485Продолжится ли запуск после сбоя, зависит от того, как ваш скрипт вызвал агента:

486 

487* **Внутри [`parallel()` или `pipeline()`](#what-the-saved-script-looks-like)**: запуск продолжается с `null` вместо результата агента

488* **При прямом ожидании**: запуск завершается с ошибкой

489 

490Чтобы попробовать снова, попросите Claude перезапустить workflow. В разделе [Возобновить после паузы](#resume-after-a-pause) описано, что запускается снова.

491 

466<h3 id="cost">492<h3 id="cost">

467 Стоимость493 Стоимость

468</h3>494</h3>

worktrees.md +1 −1

Details

104* **Перенаправления git**: Claude Code блокирует команду Bash или Monitor, которая перенаправляет git в основную копию. Перенаправление может поступать через `git -C`, `--git-dir`, переменную `GIT_DIR` или `GIT_WORK_TREE` или `cd` в основную копию перед запуском git.104* **Перенаправления git**: Claude Code блокирует команду Bash или Monitor, которая перенаправляет git в основную копию. Перенаправление может поступать через `git -C`, `--git-dir`, переменную `GIT_DIR` или `GIT_WORK_TREE` или `cd` в основную копию перед запуском git.

105* **Форма команды**: Claude Code блокирует команду Bash или Monitor, когда он не может проверить из текста команды, что любой git, который запускает команда, остаётся внутри worktree. Это происходит, например, когда имя команды вычисляется во время выполнения, когда синтаксис не может быть проанализирован, или когда расширение, такое как `${!name}` или `${ command; }`, может запустить команду, которую текст не указывает явно. Claude Code сообщает Claude, как переписать отказанную команду, например разделив её на простые отдельные команды. Вы не можете отключить эту проверку.105* **Форма команды**: Claude Code блокирует команду Bash или Monitor, когда он не может проверить из текста команды, что любой git, который запускает команда, остаётся внутри worktree. Это происходит, например, когда имя команды вычисляется во время выполнения, когда синтаксис не может быть проанализирован, или когда расширение, такое как `${!name}` или `${ command; }`, может запустить команду, которую текст не указывает явно. Claude Code сообщает Claude, как переписать отказанную команду, например разделив её на простые отдельные команды. Вы не можете отключить эту проверку.

106 106 

107Эти проверки считывают путь, на который нацелена правка, каталог, в котором выполняется команда, и текст команды. Ни одна из них не отслеживает, какие файлы записывает shell-команда, поэтому команда, которая записывает в основную копию, не запуская там git, например `cp` или перенаправление оболочки, ими не отклоняется. Claude Code обрабатывает такую команду как любую другую shell-команду, поэтому будет ли она выполнена или запросит у вас подтверждение, зависит от вашего [режима разрешений](/docs/ru/permission-modes) и правил.107Эти проверки считывают путь, на который нацелена правка, каталог, в котором выполняется команда, и текст команды. Ни одна из них не отслеживает, какие файлы записывает shell-команда, поэтому команда, которая записывает в основную копию, не запуская там git, например `cp` или перенаправление оболочки, ими не отклоняется. Claude Code обрабатывает такую команду как любую другую shell-команду в соответствии с вашими настройками [разрешений](/docs/ru/permissions) и [изоляции в песочнице](/docs/ru/sandboxing).

108 108 

109Проверки применяются к репозиторию, из которого вы запустили Claude Code. Они также охватывают основную копию, на которую ссылается связанный worktree. Для команд PowerShell Claude Code применяет только проверку рабочего каталога.109Проверки применяются к репозиторию, из которого вы запустили Claude Code. Они также охватывают основную копию, на которую ссылается связанный worktree. Для команд PowerShell Claude Code применяет только проверку рабочего каталога.

110 110