SpyBara
Go Premium

Documentation 2026-07-20 23:01 UTC to 2026-07-21 23:00 UTC

6 files changed +225 −209. View all changes and history on the product overview
2026
Tue 21 23:00 Mon 20 23:01 Sat 18 16:02 Fri 17 22:57 Thu 16 22:59 Wed 15 22:00 Tue 14 23:01 Mon 13 23:57 Sat 11 19:03 Fri 10 17:00 Thu 9 23:58 Wed 8 16:02 Tue 7 16:02 Mon 6 23:57 Sat 4 03:01 Fri 3 23:00 Thu 2 23:59 Wed 1 21:01
Details

6 6 

7> Зарегистрируйте шлюз в вашем поставщике идентификации, создайте контейнер, разверните на Kubernetes или Cloud Run и управляйте им: проверки здоровья, ротация секретов, обновления и безопасность.7> Зарегистрируйте шлюз в вашем поставщике идентификации, создайте контейнер, разверните на Kubernetes или Cloud Run и управляйте им: проверки здоровья, ротация секретов, обновления и безопасность.

8 8 

9На этой странице рассматривается операционная сторона запуска [шлюза Claude apps](/ru/claude-apps-gateway): регистрация клиента OAuth в вашем поставщике идентификации (IdP), развертывание шлюза как контейнера и его ежедневное управление. Для каждого параметра в файле `gateway.yaml`, который шлюз читает при загрузке, см. [Справочник по конфигурации](/ru/claude-apps-gateway-config).9На этой странице рассматривается операционная сторона запуска [шлюза Claude apps](/docs/ru/claude-apps-gateway): регистрация клиента OAuth в вашем поставщике идентификации (IdP), развертывание шлюза как контейнера и его ежедневное управление. Для каждого параметра в файле `gateway.yaml`, который шлюз читает при загрузке, см. [Справочник по конфигурации](/docs/ru/claude-apps-gateway-config).

10 10 

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

12 12 


31 31 

32Работает любой OIDC-совместимый IdP: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate и другие. IdP должен соответствовать трем требованиям:32Работает любой OIDC-совместимый IdP: Okta, Microsoft Entra ID, Google Workspace, Keycloak, Dex, PingFederate и другие. IdP должен соответствовать трем требованиям:

33 33 

34* Обслуживает `/.well-known/openid-configuration` по HTTPS в production; шлюз принимает [`http://` издателя](/ru/claude-apps-gateway-config#oidc), и издатель loopback дополнительно требует `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`34* Обслуживает `/.well-known/openid-configuration` по HTTPS в production; шлюз принимает [`http://` издателя](/docs/ru/claude-apps-gateway-config#oidc), и издатель loopback дополнительно требует `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1`

35* Поддерживает поток authorization-code. PKCE (Proof Key for Code Exchange) включен по умолчанию; отключите его с помощью `oidc.use_pkce: false` для IdP, которые его не поддерживают35* Поддерживает поток authorization-code. PKCE (Proof Key for Code Exchange) включен по умолчанию; отключите его с помощью `oidc.use_pkce: false` для IdP, которые его не поддерживают

36* Возвращает `email` и опционально `groups` в id\_token или обслуживает их из конечной точки userinfo с `oidc.userinfo_fallback: true`36* Возвращает `email` и опционально `groups` в id\_token или обслуживает их из конечной точки userinfo с `oidc.userinfo_fallback: true`

37 37 


41 41 

42* **Okta**: сервер авторизации организации в `https://example.okta.com` возвращает тонкий id\_token, который опускает `email` и `groups`, поэтому установите `oidc.userinfo_fallback: true` всякий раз, когда вы используете его как `issuer`. Пользовательский сервер авторизации, такой как `https://example.okta.com/oauth2/default`, который включает `email` и опционально `groups` в id\_token, выдает их напрямую и не требует fallback. Okta выдает `groups` только когда область `groups` запрашивается в `oidc.scopes` и фильтр утверждения groups приложения это позволяет; `userinfo_fallback` не может заполнить утверждение, которое IdP не был попрошен выдать.42* **Okta**: сервер авторизации организации в `https://example.okta.com` возвращает тонкий id\_token, который опускает `email` и `groups`, поэтому установите `oidc.userinfo_fallback: true` всякий раз, когда вы используете его как `issuer`. Пользовательский сервер авторизации, такой как `https://example.okta.com/oauth2/default`, который включает `email` и опционально `groups` в id\_token, выдает их напрямую и не требует fallback. Okta выдает `groups` только когда область `groups` запрашивается в `oidc.scopes` и фильтр утверждения groups приложения это позволяет; `userinfo_fallback` не может заполнить утверждение, которое IdP не был попрошен выдать.

43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra выдает Object ID групп, а не имена, поэтому используйте GUID в `managed.policies.match.groups` или используйте App Roles для читаемых имен. Если ваш tenant выдает роли под `roles` вместо `groups`, установите `oidc.groups_claim: roles`.43* **Microsoft Entra ID**: `issuer` = `https://login.microsoftonline.com/<tenant-id>/v2.0`. Entra выдает Object ID групп, а не имена, поэтому используйте GUID в `managed.policies.match.groups` или используйте App Roles для читаемых имен. Если ваш tenant выдает роли под `roles` вместо `groups`, установите `oidc.groups_claim: roles`.

44* **Google Workspace**: `issuer` = `https://accounts.google.com`. id\_token Google не содержит groups. Чтобы использовать основанные на группах `allowed_groups` или `managed.policies` с Google в качестве IdP, настройте [`oidc.google_groups`](/ru/claude-apps-gateway-config#oidc), которая ищет группы каждого пользователя через Admin SDK Directory API, используя сервисный аккаунт с делегированием на уровне домена. Без этого используйте `oidc.allowed_email_domains` для проверки членства и `managed.policies.match.email_domain` для назначения политики. Google также игнорирует стандартную область `offline_access`. Для refresh tokens установите `oidc.scopes: [openid, profile, email]` и `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.44* **Google Workspace**: `issuer` = `https://accounts.google.com`. id\_token Google не содержит groups. Чтобы использовать основанные на группах `allowed_groups` или `managed.policies` с Google в качестве IdP, настройте [`oidc.google_groups`](/docs/ru/claude-apps-gateway-config#oidc), которая ищет группы каждого пользователя через Admin SDK Directory API, используя сервисный аккаунт с делегированием на уровне домена. Без этого используйте `oidc.allowed_email_domains` для проверки членства и `managed.policies.match.email_domain` для назначения политики. Google также игнорирует стандартную область `offline_access`. Для refresh tokens установите `oidc.scopes: [openid, profile, email]` и `oidc.extra_auth_params: { access_type: offline, prompt: consent }`.

45 45 

46Для поддержки с поставщиком удостоверений, не описанным выше, см. [Troubleshooting](#troubleshooting).46Для поддержки с поставщиком удостоверений, не описанным выше, см. [Troubleshooting](#troubleshooting).

47 47 

48<Warning>48<Warning>

49 Refresh tokens позволяют шлюзу молча обновлять сеанс разработчика без отправки разработчика в браузер. Они также управляют deprovisioningом, потому что когда IdP отключает пользователя, следующее обновление не удается и сеанс заканчивается в течение `ttl_hours`. Шлюз запрашивает `offline_access` по умолчанию, чтобы получить refresh token. Если ваш IdP требует явного согласия для offline access, настройте клиент OAuth, чтобы это позволить.49 Refresh tokens позволяют шлюзу молча обновлять сеанс разработчика без отправки разработчика в браузер. Они также управляют deprovisioningом, потому что когда IdP отключает пользователя, следующее обновление не удается и сеанс заканчивается в течение `ttl_hours`. Шлюз запрашивает `offline_access` по умолчанию, чтобы получить refresh token. Если ваш IdP требует явного согласия для offline access, настройте клиент OAuth, чтобы это позволить.

50 50 

51 Если ваш IdP вообще не может выдавать refresh tokens, шлюз все еще работает, но нет молчаливого обновления, поэтому разработчики повторно запускают вход в браузер, когда их сеанс истекает. Чтобы это не происходило каждый час, поднимите [`session.ttl_hours`](/ru/claude-apps-gateway-config#session) на `8` или `12`. Компромисс — это задержка deprovisioningа, потому что без refresh tokens отключенный пользователь сохраняет доступ до истечения более длительного TTL.51 Если ваш IdP вообще не может выдавать refresh tokens, шлюз все еще работает, но нет молчаливого обновления, поэтому разработчики повторно запускают вход в браузер, когда их сеанс истекает. Чтобы это не происходило каждый час, поднимите [`session.ttl_hours`](/docs/ru/claude-apps-gateway-config#session) на `8` или `12`. Компромисс — это задержка deprovisioningа, потому что без refresh tokens отключенный пользователь сохраняет доступ до истечения более длительного TTL.

52</Warning>52</Warning>

53 53 

54<h2 id="deployment">54<h2 id="deployment">


62Несколько решений формируют развертывание помимо того, где оно работает:62Несколько решений формируют развертывание помимо того, где оно работает:

63 63 

64* **Стоимость**: нет отдельной лицензии или платы за место для шлюза; это часть бинарного файла `claude`. Вы платите за inference через ваше существующее облачное или обязательство Anthropic, плюс вычисления для контейнера и вашего сборщика телеметрии.64* **Стоимость**: нет отдельной лицензии или платы за место для шлюза; это часть бинарного файла `claude`. Вы платите за inference через ваше существующее облачное или обязательство Anthropic, плюс вычисления для контейнера и вашего сборщика телеметрии.

65* **Обход**: шлюз не требует, чтобы единственный маршрут к модели проходил через него. Разработчик со своими собственными учетными данными все еще может вызвать поставщика напрямую, поэтому закрытие этого пути — это решение политики сети, например блокировка выхода на `api.anthropic.com` кроме как от шлюза. Блокировка этого выхода также нарушает [проверку безопасности домена WebFetch](/ru/data-usage#webfetch-domain-safety-check), которая вызывает `api.anthropic.com` с каждой машины разработчика; установите `skipWebFetchPreflight: true` в управляемой политике, чтобы отключить это.65* **Обход**: шлюз не требует, чтобы единственный маршрут к модели проходил через него. Разработчик со своими собственными учетными данными все еще может вызвать поставщика напрямую, поэтому закрытие этого пути — это решение политики сети, например блокировка выхода на `api.anthropic.com` кроме как от шлюза. Блокировка этого выхода также нарушает [проверку безопасности домена WebFetch](/docs/ru/data-usage#webfetch-domain-safety-check), которая вызывает `api.anthropic.com` с каждой машины разработчика; установите `skipWebFetchPreflight: true` в управляемой политике, чтобы отключить это.

66* **Несколько шлюзов**: каждый шлюз — это отдельное развертывание со своей конфигурацией. CLI хранит отпечаток доверия и учетные данные для каждого имени хоста шлюза, поэтому разные команды могут подключаться к разным шлюзам без конфликтов. Чтобы обслуживать несколько издателей OIDC, запустите отдельные экземпляры.66* **Несколько шлюзов**: каждый шлюз — это отдельное развертывание со своей конфигурацией. CLI хранит отпечаток доверия и учетные данные для каждого имени хоста шлюза, поэтому разные команды могут подключаться к разным шлюзам без конфликтов. Чтобы обслуживать несколько издателей OIDC, запустите отдельные экземпляры.

67* **Бессерверная архитектура**: Cloud Run работает; установите `min-instances: 1`, чтобы избежать холодного обнаружения OIDC. Lambda и Cloud Functions не работают, потому что шлюз — это долгоживущий HTTP сервер.67* **Бессерверная архитектура**: Cloud Run работает; установите `min-instances: 1`, чтобы избежать холодного обнаружения OIDC. Lambda и Cloud Functions не работают, потому что шлюз — это долгоживущий HTTP сервер.

68 68 

69Каждая production топология здесь помещает прокси L7, такой как Ingress, фронтенд Cloud Run или ALB, перед простыми HTTP репликами. Установите [`listen.trusted_proxies`](/ru/claude-apps-gateway-config#listen) на диапазоны источников прокси, чтобы шлюз читал IP клиентов из `X-Forwarded-For`. Шлюз соблюдает заголовок только когда TCP peer доверен; [пример Google Cloud](/ru/claude-apps-gateway-on-gcp) имеет конкретные значения для каждой топологии. Без доверенных прокси каждый запрос выглядит как исходящий с IP прокси, что сворачивает ограничения скорости для каждого IP в один общий bucket и записывает IP прокси в события аудита.69Каждая production топология здесь помещает прокси L7, такой как Ingress, фронтенд Cloud Run или ALB, перед простыми HTTP репликами. Установите [`listen.trusted_proxies`](/docs/ru/claude-apps-gateway-config#listen) на диапазоны источников прокси, чтобы шлюз читал IP клиентов из `X-Forwarded-For`. Шлюз соблюдает заголовок только когда TCP peer доверен; [пример Google Cloud](/docs/ru/claude-apps-gateway-on-gcp) имеет конкретные значения для каждой топологии. Без доверенных прокси каждый запрос выглядит как исходящий с IP прокси, что сворачивает ограничения скорости для каждого IP в один общий bucket и записывает IP прокси в события аудита.

70 70 

71<h3 id="container-image">71<h3 id="container-image">

72 Образ контейнера72 Образ контейнера


74 74 

75Создайте свой собственный образ вокруг нативного бинарного файла `claude` из стандартного выпуска Claude Code:75Создайте свой собственный образ вокруг нативного бинарного файла `claude` из стандартного выпуска Claude Code:

76 76 

771. Загрузите сборку Linux для архитектуры вашего образа из закрепленного выпуска; см. [Установка конкретной версии](/ru/setup#install-a-specific-version) для URL загрузки.771. Загрузите сборку Linux для архитектуры вашего образа из закрепленного выпуска; см. [Установка конкретной версии](/docs/ru/setup#install-a-specific-version) для URL загрузки.

782. Проверьте его против подписанного GPG `manifest.json` выпуска, как описано в [Целостность бинарного файла и подпись кода](/ru/setup#binary-integrity-and-code-signing).782. Проверьте его против подписанного GPG `manifest.json` выпуска, как описано в [Целостность бинарного файла и подпись кода](/docs/ru/setup#binary-integrity-and-code-signing).

793. Скопируйте его в контекст сборки.793. Скопируйте его в контекст сборки.

80 80 

81Зеркалируйте выпуск в ваш внутренний реестр, если ваши сборки не могут достичь хоста выпуска, и закрепите версию, которую запускает ваш флот.81Зеркалируйте выпуск в ваш внутренний реестр, если ваши сборки не могут достичь хоста выпуска, и закрепите версию, которую запускает ваш флот.

82 82 

83Помимо бинарного файла, образу нужны:83Помимо бинарного файла, образу нужны:

84 84 

85* **Образ на основе glibc**: единственные динамические зависимости сборки glibc — это библиотеки glibc. Образы на основе Musl нуждаются в сборке `linux-x64-musl` или `linux-arm64-musl` плюс дополнительные пакеты; см. [Настройка Alpine Linux](/ru/setup#alpine-linux-and-musl-based-distributions).85* **Образ на основе glibc**: единственные динамические зависимости сборки glibc — это библиотеки glibc. Образы на основе Musl нуждаются в сборке `linux-x64-musl` или `linux-arm64-musl` плюс дополнительные пакеты; см. [Настройка Alpine Linux](/docs/ru/setup#alpine-linux-and-musl-based-distributions).

86* **Записываемый каталог состояния**: шлюз работает как любой пользователь, но минимальные образы не имеют записываемого home. Установите `CLAUDE_CONFIG_DIR` на записываемый путь, такой как `/tmp/.claude`.86* **Записываемый каталог состояния**: шлюз работает как любой пользователь, но минимальные образы не имеют записываемого home. Установите `CLAUDE_CONFIG_DIR` на записываемый путь, такой как `/tmp/.claude`.

87* **Команда контейнера**: `claude gateway --config /etc/claude/gateway.yaml`, с файлом конфигурации, смонтированным только для чтения, и секретами, предоставленными как переменные окружения; шлюз слушает на `listen.port`, по умолчанию `8080`.87* **Команда контейнера**: `claude gateway --config /etc/claude/gateway.yaml`, с файлом конфигурации, смонтированным только для чтения, и секретами, предоставленными как переменные окружения; шлюз слушает на `listen.port`, по умолчанию `8080`.

88 88 


99<Note>99<Note>

100 **Workload identity**100 **Workload identity**

101 101 

102 Предпочитайте workload identity платформы вместо статических ключей: IRSA на EKS для Bedrock и для Claude Platform на AWS, Workload Identity на GKE для Agent Platform и workload identity на AKS для Foundry. Установите `auth: {}` в блоке upstream или `use_azure_ad: true` для Foundry, и шлюз подхватывает идентификацию pod через цепь учетных данных по умолчанию этого поставщика. Для кросс-облачного сопряжения, такого как upstream Bedrock на GKE, установите явные учетные данные в блоке `auth` upstream вместо этого. [Справочник `upstreams`](/ru/claude-apps-gateway-config#upstreams) имеет детали настройки для каждой платформы.102 Предпочитайте workload identity платформы вместо статических ключей: IRSA на EKS для Bedrock и для Claude Platform на AWS, Workload Identity на GKE для Agent Platform и workload identity на AKS для Foundry. Установите `auth: {}` в блоке upstream или `use_azure_ad: true` для Foundry, и шлюз подхватывает идентификацию pod через цепь учетных данных по умолчанию этого поставщика. Для кросс-облачного сопряжения, такого как upstream Bedrock на GKE, установите явные учетные данные в блоке `auth` upstream вместо этого. [Справочник `upstreams`](/docs/ru/claude-apps-gateway-config#upstreams) имеет детали настройки для каждой платформы.

103</Note>103</Note>

104 104 

105<h3 id="cloud-run">105<h3 id="cloud-run">


109Настройте сервис следующим образом:109Настройте сервис следующим образом:

110 110 

111* Оставьте `listen.port` на его значении по умолчанию `8080`, которое соответствует `PORT` Cloud Run по умолчанию, или установите `port: ${PORT}`111* Оставьте `listen.port` на его значении по умолчанию `8080`, которое соответствует `PORT` Cloud Run по умолчанию, или установите `port: ${PORT}`

112* Установите `public_url` на внешне доступное происхождение. Для production это обычно имя хоста внутреннего балансировщика нагрузки, потому что `/login` [отклоняет публичные адреса](/ru/claude-apps-gateway#prerequisites) и URL `*.run.app` разрешается на один, поэтому URL Cloud Run один работает только для `curl` или дымового теста браузера. Исключение — сеть, где `*.run.app` разрешается приватно через Private Service Connect и приватную зону Cloud DNS; в этой топологии URL Cloud Run — это действительный `public_url`. [Пример Google Cloud](/ru/claude-apps-gateway-on-gcp#deploy-the-gateway) охватывает оба.112* Установите `public_url` на внешне доступное происхождение. Для production это обычно имя хоста внутреннего балансировщика нагрузки, потому что `/login` [отклоняет публичные адреса](/docs/ru/claude-apps-gateway#prerequisites) и URL `*.run.app` разрешается на один, поэтому URL Cloud Run один работает только для `curl` или дымового теста браузера. Исключение — сеть, где `*.run.app` разрешается приватно через Private Service Connect и приватную зону Cloud DNS; в этой топологии URL Cloud Run — это действительный `public_url`. [Пример Google Cloud](/docs/ru/claude-apps-gateway-on-gcp#deploy-the-gateway) охватывает оба.

113* Смонтируйте конфигурацию как том секрета113* Смонтируйте конфигурацию как том секрета

114* Установите `min-instances: 1`, чтобы избежать холодного обнаружения OIDC при первом запросе114* Установите `min-instances: 1`, чтобы избежать холодного обнаружения OIDC при первом запросе

115 115 

116<Note>116<Note>

117 Для полного примера на Google Cloud, охватывающего Cloud Run или GKE, Cloud SQL и Secret Manager, см. [Развертывание на Google Cloud](/ru/claude-apps-gateway-on-gcp).117 Для полного примера на Google Cloud, охватывающего Cloud Run или GKE, Cloud SQL и Secret Manager, см. [Развертывание на Google Cloud](/docs/ru/claude-apps-gateway-on-gcp).

118</Note>118</Note>

119 119 

120<h3 id="push-the-gateway-url-to-developer-machines">120<h3 id="push-the-gateway-url-to-developer-machines">

121 Отправьте URL шлюза на машины разработчиков121 Отправьте URL шлюза на машины разработчиков

122</h3>122</h3>

123 123 

124Как только шлюз начнет обслуживать, отправьте `forceLoginMethod` и `forceLoginGatewayUrl` на каждую машину разработчика через управляемые параметры, через MDM или путем прямого написания файла `managed-settings.json` для каждой ОС. Без этого `/login` показывает стандартный выбор аккаунта без опции шлюза. См. [Управляемые параметры на стороне клиента](/ru/claude-apps-gateway-config#client-side-managed-settings) для путей файлов.124Как только шлюз начнет обслуживать, отправьте `forceLoginMethod` и `forceLoginGatewayUrl` на каждую машину разработчика через управляемые параметры, через MDM или путем прямого написания файла `managed-settings.json` для каждой ОС. Без этого `/login` показывает стандартный выбор аккаунта без опции шлюза. См. [Управляемые параметры на стороне клиента](/docs/ru/claude-apps-gateway-config#client-side-managed-settings) для путей файлов.

125 125 

126<h2 id="operations">126<h2 id="operations">

127 Операции127 Операции


160 160 

161* **Существующие сеансы**: bearer tokens проверяются локально с помощью JWT secret, обновления сеанса не касаются хранилища, и процесс шлюза все еще может обслуживать inference161* **Существующие сеансы**: bearer tokens проверяются локально с помощью JWT secret, обновления сеанса не касаются хранилища, и процесс шлюза все еще может обслуживать inference

162* **Новые входы**: не удаются до восстановления Postgres, потому что поток устройства и его счетчики ограничения скорости живут в Postgres162* **Новые входы**: не удаются до восстановления Postgres, потому что поток устройства и его счетчики ограничения скорости живут в Postgres

163* **[Применение ограничения расходов](/ru/claude-apps-gateway-spend-limits#postgres-availability)**: по умолчанию не удается открыто во время сбоя, поэтому inference все еще течет; переключите его на отказ закрыто, если вы предпочитаете блокировать, чем работать без учета163* **[Применение ограничения расходов](/docs/ru/claude-apps-gateway-spend-limits#postgres-availability)**: по умолчанию не удается открыто во время сбоя, поэтому inference все еще течет; переключите его на отказ закрыто, если вы предпочитаете блокировать, чем работать без учета

164* **Готовность**: `/readyz` сообщает о неготовности во время сбоя, поэтому оркестраторы, которые управляют трафиком на готовность, удаляют каждую реплику из ротации сразу. В этой топологии весь трафик, включая inference, который шлюз все еще может обслуживать, не удается на балансировщике нагрузки до восстановления Postgres. Зонд живучести на `/healthz` продолжает проходить, поэтому реплики не перезапускаются. Укажите зонд готовности на `/healthz` вместо этого, если вы предпочитаете, чтобы вошедшие разработчики продолжали работать через сбой хранилища; стоимость в том, что новые входы не удаются против реплики, которая все еще сообщает о готовности.164* **Готовность**: `/readyz` сообщает о неготовности во время сбоя, поэтому оркестраторы, которые управляют трафиком на готовность, удаляют каждую реплику из ротации сразу. В этой топологии весь трафик, включая inference, который шлюз все еще может обслуживать, не удается на балансировщике нагрузки до восстановления Postgres. Зонд живучести на `/healthz` продолжает проходить, поэтому реплики не перезапускаются. Укажите зонд готовности на `/healthz` вместо этого, если вы предпочитаете, чтобы вошедшие разработчики продолжали работать через сбой хранилища; стоимость в том, что новые входы не удаются против реплики, которая все еще сообщает о готовности.

165 165 

166Если ваш IdP выходит из строя, существующие сеансы работают до `ttl_hours`, а новые входы и обновления не удаются. Установите более длительный `ttl_hours`, если ваш IdP имеет частые окна обслуживания.166Если ваш IdP выходит из строя, существующие сеансы работают до `ttl_hours`, а новые входы и обновления не удаются. Установите более длительный `ttl_hours`, если ваш IdP имеет частые окна обслуживания.


191| `admin_audit` | Трассировка мутаций Admin API | `admin.audit_retention_days`, по умолчанию 365 |191| `admin_audit` | Трассировка мутаций Admin API | `admin.audit_retention_days`, по умолчанию 365 |

192| `principal_emails` | Последний просмотренный email каждого principal, отображаемое имя и группы IdP. Содержит PII. | `admin.identity_retention_days` с момента последней активности, по умолчанию 90 |192| `principal_emails` | Последний просмотренный email каждого principal, отображаемое имя и группы IdP. Содержит PII. | `admin.identity_retention_days` с момента последней активности, по умолчанию 90 |

193 193 

194Цикл на 30 секунд истекает строки `kv` прошедшие их TTL, и почасовая очистка применяет окна хранения на таблицы расходов, поэтому ничего не растет без ограничений. Без [ограничений расходов](/ru/claude-apps-gateway-spend-limits) настроенных, только `kv` записывается. Если ваша политика безопасности запрещает DDL из роли приложения, предварительно создайте эти таблицы и `_migrations` с ролью администратора и предоставьте роли приложения `SELECT, INSERT, UPDATE, DELETE` на каждой.194Цикл на 30 секунд истекает строки `kv` прошедшие их TTL, и почасовая очистка применяет окна хранения на таблицы расходов, поэтому ничего не растет без ограничений. Без [ограничений расходов](/docs/ru/claude-apps-gateway-spend-limits) настроенных, только `kv` записывается. Если ваша политика безопасности запрещает DDL из роли приложения, предварительно создайте эти таблицы и `_migrations` с ролью администратора и предоставьте роли приложения `SELECT, INSERT, UPDATE, DELETE` на каждой.

195 195 

196С ограничениями расходов в использовании, потерянная база данных означает потерю отслеживания расходов и лимитов, а не просто повторные входы разработчиков, поэтому запускайте регулярные резервные копии. Чтобы стереть одного ушедшего разработчика немедленно, а не ждать хранения, запустите `DELETE FROM principal_emails WHERE principal = '<sub>'` напрямую; это удаляет единственную таблицу, содержащую их email, имя и группы. Строки `spend` и `admin_audit` ссылаются только на псевдонимный OIDC `sub`.196С ограничениями расходов в использовании, потерянная база данных означает потерю отслеживания расходов и лимитов, а не просто повторные входы разработчиков, поэтому запускайте регулярные резервные копии. Чтобы стереть одного ушедшего разработчика немедленно, а не ждать хранения, запустите `DELETE FROM principal_emails WHERE principal = '<sub>'` напрямую; это удаляет единственную таблицу, содержащую их email, имя и группы. Строки `spend` и `admin_audit` ссылаются только на псевдонимный OIDC `sub`.

197 197 


218| Данные | Путь | Отправлено Anthropic шлюзом |218| Данные | Путь | Отправлено Anthropic шлюзом |

219| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------- |219| ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------- |

220| Inference (prompts, completions) | CLI → шлюз → ваш upstream | Только если API Anthropic — это настроенный upstream |220| Inference (prompts, completions) | CLI → шлюз → ваш upstream | Только если API Anthropic — это настроенный upstream |

221| Телеметрия (метрики OTLP, плюс [опциональные логи и трассировки](/ru/claude-apps-gateway-config#telemetry)) | CLI → шлюз → ваш сборщик | Никогда |221| Телеметрия (метрики OTLP, плюс [опциональные логи и трассировки](/docs/ru/claude-apps-gateway-config#telemetry)) | CLI → шлюз → ваш сборщик | Никогда |

222| Идентификация (email, groups, sub) | IdP → шлюз → JWT → CLI; CLI штампует это на экспортах OTLP | Никогда |222| Идентификация (email, groups, sub) | IdP → шлюз → JWT → CLI; CLI штампует это на экспортах OTLP | Никогда |

223| Управляемые параметры | Ваш YAML шлюза → CLI | Никогда |223| Управляемые параметры | Ваш YAML шлюза → CLI | Никогда |

224| Журнал аудита | Stderr шлюза → ваш агрегатор | Никогда |224| Журнал аудита | Stderr шлюза → ваш агрегатор | Никогда |


237 237 

238Две угрозы выходят за рамки, потому что это ваша инфраструктура для защиты:238Две угрозы выходят за рамки, потому что это ваша инфраструктура для защиты:

239 239 

240* **Скомпрометированный хост шлюза**: хост как содержит upstream учетные данные, так и распределяет [управляемые параметры](/ru/claude-apps-gateway-config#managed) каждому подключенному разработчику, поэтому контроль над конфигурацией шлюза сравним с контролем над вашим MDM. Диалог одобрения CLI для параметров, способных к shell, ограничивает молчаливые изменения, но не заменяет безопасность хоста.240* **Скомпрометированный хост шлюза**: хост как содержит upstream учетные данные, так и распределяет [управляемые параметры](/docs/ru/claude-apps-gateway-config#managed) каждому подключенному разработчику, поэтому контроль над конфигурацией шлюза сравним с контролем над вашим MDM. Диалог одобрения CLI для параметров, способных к shell, ограничивает молчаливые изменения, но не заменяет безопасность хоста.

241* **Вредоносный поставщик OIDC**: поставщик подписывает id\_tokens, которым шлюз доверяет, поэтому он может утверждать любую идентификацию. Проверка и защита вашего IdP — это ваша ответственность.241* **Вредоносный поставщик OIDC**: поставщик подписывает id\_tokens, которым шлюз доверяет, поэтому он может утверждать любую идентификацию. Проверка и защита вашего IdP — это ваша ответственность.

242 242 

243<h3 id="user-code-brute-force-resistance">243<h3 id="user-code-brute-force-resistance">


246 246 

247`user_code`, который разработчик вводит на странице проверки `/device`, — это 8 символов, взятых из алфавита из 20 символов, что дает 20⁸ или около 2,56×10¹⁰ комбинаций, и он истекает через 10 минут.247`user_code`, который разработчик вводит на странице проверки `/device`, — это 8 символов, взятых из алфавита из 20 символов, что дает 20⁸ или около 2,56×10¹⁰ комбинаций, и он истекает через 10 минут.

248 248 

249Шлюз применяет ограничения скорости для каждого IP на конечных точках грантов устройства, настраиваемые через [`rate_limits`](/ru/claude-apps-gateway-config#http-tuning). Поднимите лимиты, если много разработчиков входят с одного общего корпоративного NAT адреса. Лимиты применяются только к потоку входа, а не к inference.249Шлюз применяет ограничения скорости для каждого IP на конечных точках грантов устройства, настраиваемые через [`rate_limits`](/docs/ru/claude-apps-gateway-config#http-tuning). Поднимите лимиты, если много разработчиков входят с одного общего корпоративного NAT адреса. Лимиты применяются только к потоку входа, а не к inference.

250 250 

251<h3 id="compliance-posture">251<h3 id="compliance-posture">

252 Позиция соответствия252 Позиция соответствия


255* **Резидентность данных**: собственная плоскость данных шлюза не отправляет ничего Anthropic, если только API Anthropic не является настроенным upstream; когда это так, ваше существующее соглашение об обработке данных применяется к пути inference. Телеметрия, аудит, идентификация и параметры идут только к назначениям, которые вы настраиваете.255* **Резидентность данных**: собственная плоскость данных шлюза не отправляет ничего Anthropic, если только API Anthropic не является настроенным upstream; когда это так, ваше существующее соглашение об обработке данных применяется к пути inference. Телеметрия, аудит, идентификация и параметры идут только к назначениям, которые вы настраиваете.

256* **Трафик хост-процесса**: хост-процесс — это CLI Claude Code, который может отправлять аналитику запуска и проверки обновлений Anthropic. Для развертываний со строгим выходом установите `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` в окружении контейнера шлюза.256* **Трафик хост-процесса**: хост-процесс — это CLI Claude Code, который может отправлять аналитику запуска и проверки обновлений Anthropic. Для развертываний со строгим выходом установите `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` в окружении контейнера шлюза.

257* **Аналитика клиента**: CLI отключает свою собственную аналитику использования при входе в шлюз, и отчеты об ошибках отключены по умолчанию на поверхностях API третьих сторон.257* **Аналитика клиента**: CLI отключает свою собственную аналитику использования при входе в шлюз, и отчеты об ошибках отключены по умолчанию на поверхностях API третьих сторон.

258* **Машины клиентов**: CLI разработчиков все еще отправляют проверки имени хоста WebFetch и проверки версии Anthropic, если не установлены `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` и `skipWebFetchPreflight: true`. См. [использование данных](/ru/data-usage).258* **Машины клиентов**: CLI разработчиков все еще отправляют проверки имени хоста WebFetch и проверки версии Anthropic, если не установлены `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1` и `skipWebFetchPreflight: true`. См. [использование данных](/docs/ru/data-usage).

259* **Рейтинги опроса**: учетные данные шлюза отключают приемник рейтингов, привязанный к Anthropic, поэтому рейтинги не отправляются Anthropic.259* **Рейтинги опроса**: учетные данные шлюза отключают приемник рейтингов, привязанный к Anthropic, поэтому рейтинги не отправляются Anthropic.

260* **Обмен транскриптом**: выбор Yes на подсказке обмена транскриптом опроса записывает локальный файл в `~/.claude/feedback-bundles/` вместо загрузки Anthropic.260* **Обмен транскриптом**: выбор Yes на подсказке обмена транскриптом опроса записывает локальный файл в `~/.claude/feedback-bundles/` вместо загрузки Anthropic.

261* **Обновления клиента**: проверки обновлений отделены от трафика шлюза. Закрепите версии через вашу собственную дистрибуцию и установите `DISABLE_UPDATES`, если ноутбуки не должны получать выпуски. `DISABLE_AUTOUPDATER` останавливает только фоновые обновления, в то время как `claude update` все еще работает.261* **Обновления клиента**: проверки обновлений отделены от трафика шлюза. Закрепите версии через вашу собственную дистрибуцию и установите `DISABLE_UPDATES`, если ноутбуки не должны получать выпуски. `DISABLE_AUTOUPDATER` останавливает только фоновые обновления, в то время как `claude update` все еще работает.

262* **TLS**: обслуживайте `public_url` по HTTPS в production, либо из собственного слушателя шлюза через `listen.tls`, либо из TLS-завершающего ingress перед простыми HTTP репликами с установленным `listen.public_url`. Шлюз не отказывает простой HTTP. IdP должен обслуживать HTTPS в production, и Postgres поддерживает `?sslmode=require`. Установите `Strict-Transport-Security` на вашем ingress.262* **TLS**: обслуживайте `public_url` по HTTPS в production, либо из собственного слушателя шлюза через `listen.tls`, либо из TLS-завершающего ingress перед простыми HTTP репликами с установленным `listen.public_url`. Шлюз не отказывает простой HTTP. IdP должен обслуживать HTTPS в production, и Postgres поддерживает `?sslmode=require`. Установите `Strict-Transport-Security` на вашем ingress.

263* **Раскрытие уязвимостей**: следуйте [Отчету о проблемах безопасности](/ru/security#reporting-security-issues)263* **Раскрытие уязвимостей**: следуйте [Отчету о проблемах безопасности](/docs/ru/security#reporting-security-issues)

264 264 

265<h2 id="troubleshooting">265<h2 id="troubleshooting">

266 Устранение неполадок266 Устранение неполадок


272* **Проблема входа**: разработчик запускает `claude --debug-file ./claude-debug.txt`, воспроизводит и отправляет этот файл плюс журнал аудита шлюза для того же окна272* **Проблема входа**: разработчик запускает `claude --debug-file ./claude-debug.txt`, воспроизводит и отправляет этот файл плюс журнал аудита шлюза для того же окна

273* **Проблема inference**: запрошенная модель, настроенные upstreams и журнал аудита шлюза для запроса, который записывает, какой upstream обслужил его и статус ответа273* **Проблема inference**: запрошенная модель, настроенные upstreams и журнал аудита шлюза для запроса, который записывает, какой upstream обслужил его и статус ответа

274 274 

275stderr шлюза включает поток событий аудита, журнал аудита записывает идентификаторы разработчиков, а файл отладки записывает выходные данные hook и MCP сервера с машины разработчика. Проверьте и удалите эту информацию перед публикацией в общедоступную проблему.

276 

275| Симптом | Причина | Исправление |277| Симптом | Причина | Исправление |

276| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |278| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

277| `/login` разработчика показывает стандартный выбор аккаунта вместо экрана **Cloud gateway** | `forceLoginMethod` или `forceLoginGatewayUrl` не установлены в управляемых параметрах на этой машине | Разверните [файл управляемых параметров](/ru/claude-apps-gateway#set-the-gateway-url) на устройство; `/login` читает URL шлюза оттуда |279| `/login` разработчика показывает стандартный выбор аккаунта вместо экрана **Cloud gateway** | `forceLoginMethod` или `forceLoginGatewayUrl` не установлены в управляемых параметрах на этой машине | Разверните [файл управляемых параметров](/docs/ru/claude-apps-gateway#set-the-gateway-url) на устройство; `/login` читает URL шлюза оттуда |

278| Запуск показывает `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Установленная сборка Claude Code предшествует поддержке шлюза | Попросите разработчика обновить Claude Code до выпуска, который включает поддержку Cloud gateway |280| Запуск показывает `Gateway login is configured in managed settings, but this Claude Code build does not include Cloud gateway support.` | Установленная сборка Claude Code предшествует поддержке шлюза | Попросите разработчика обновить Claude Code до выпуска, который включает поддержку Cloud gateway |

279| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Имя хоста шлюза разрешается на по крайней мере один публичный IP адрес. Claude Code проверяет каждый разрешенный адрес и требует, чтобы каждый был приватным. Частая причина — dual-stack имя, где одно семейство разрешается на публичный адрес, включая AWS внутренние dual-stack балансировщики нагрузки, которые возвращают публичные AAAA адреса. Публичные конечные точки шлюза, управляемые Anthropic, исключены из проверки, и `/login` принимает их через `https://`. До версии v2.1.206 `/login` отклонял их как любой другой публичный адрес | Попросите имя шлюза разрешаться только на приватные адреса на машинах разработчиков. Для dual-stack имени удалите публичный диапазон записи или обслуживайте отдельное внутреннее DNS имя. См. [предпосылку приватной сети](/ru/claude-apps-gateway#prerequisites). |281| CLI `/login`: `Gateway hosts must be on your organization's private network; <host> resolves to the public (or unrecognized) address <ip>` | Имя хоста шлюза разрешается на по крайней мере один публичный IP адрес. Claude Code проверяет каждый разрешенный адрес и требует, чтобы каждый был приватным. Частая причина — dual-stack имя, где одно семейство разрешается на публичный адрес, включая AWS внутренние dual-stack балансировщики нагрузки, которые возвращают публичные AAAA адреса. Публичные конечные точки шлюза, управляемые Anthropic, исключены из проверки, и `/login` принимает их через `https://`. До версии v2.1.206 `/login` отклонял их как любой другой публичный адрес | Попросите имя шлюза разрешаться только на приватные адреса на машинах разработчиков. Для dual-stack имени удалите публичный диапазон записи или обслуживайте отдельное внутреннее DNS имя. См. [предпосылку приватной сети](/docs/ru/claude-apps-gateway#prerequisites). |

280| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` или `HTTP_PROXY` применяется к хосту шлюза и имя хоста прокси разрешается на публичный адрес. Прокси, чье имя хоста разрешается только на приватные адреса, разрешен и не вызывает эту ошибку | Добавьте хост шлюза в `NO_PROXY` на машине разработчика, чтобы соединение было прямым, или используйте прокси, чье имя хоста разрешается на приватные адреса |282| CLI `/login`: `Gateway login requires a direct connection and does not support connecting through an HTTP proxy` | `HTTPS_PROXY` или `HTTP_PROXY` применяется к хосту шлюза и имя хоста прокси разрешается на публичный адрес. Прокси, чье имя хоста разрешается только на приватные адреса, разрешен и не вызывает эту ошибку | Добавьте хост шлюза в `NO_PROXY` на машине разработчика, чтобы соединение было прямым, или используйте прокси, чье имя хоста разрешается на приватные адреса |

281| CLI `/login`: `Could not resolve gateway host <host>` | Машина не может разрешить внутреннее DNS имя шлюза, обычно потому что она не в корпоративной сети | Попросите разработчика подключиться к вашей сети или VPN, затем повторите попытку `/login` |283| CLI `/login`: `Could not resolve gateway host <host>` | Машина не может разрешить внутреннее DNS имя шлюза, обычно потому что она не в корпоративной сети | Попросите разработчика подключиться к вашей сети или VPN, затем повторите попытку `/login` |

282| Загрузка выходит с ошибкой валидации конфигурации, называющей `store.postgres_url` | Postgres не настроен; шлюз требует Postgres | Установите `store.postgres_url`. Для локальной разработки используйте одноразовый контейнер: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |284| Загрузка выходит с ошибкой валидации конфигурации, называющей `store.postgres_url` | Postgres не настроен; шлюз требует Postgres | Установите `store.postgres_url`. Для локальной разработки используйте одноразовый контейнер: `docker run --rm -p 5432:5432 -e POSTGRES_HOST_AUTH_METHOD=trust postgres`. |

283| Загрузка выходит: `requires the native binary` | Запуск под Node вместо нативного бинарного файла | Установите Claude Code с одним из [методов автономной установки](/ru/setup) |285| Загрузка выходит: `requires the native binary` | Запуск под Node вместо нативного бинарного файла | Установите Claude Code с одним из [методов автономной установки](/docs/ru/setup) |

284| Загрузка выходит с ошибкой обнаружения OIDC после `config.load` | `oidc.issuer` недоступен или цепь TLS не доверена | Проверьте, что издатель доступен из pod и обслуживает `/.well-known/openid-configuration`. Установите `ca_cert_pem` для приватной PKI. |286| Загрузка выходит с ошибкой обнаружения OIDC после `config.load` | `oidc.issuer` недоступен или цепь TLS не доверена | Проверьте, что издатель доступен из pod и обслуживает `/.well-known/openid-configuration`. Установите `ca_cert_pem` для приватной PKI. |

285| Загрузка выходит с ошибкой разрешения Postgres | Роль приложения не имеет `CREATE TABLE` | Предварительно создайте схему с ролью администратора и предоставьте DML роли приложения или временно предоставьте DDL для загрузок, которые применяют новые миграции |287| Загрузка выходит с ошибкой разрешения Postgres | Роль приложения не имеет `CREATE TABLE` | Предварительно создайте схему с ролью администратора и предоставьте DML роли приложения или временно предоставьте DDL для загрузок, которые применяют новые миграции |

286| `/oauth/callback` показывает "Sign-in could not be completed" | Домен email отклонен, валидация id\_token не удалась или `email_verified` явно `false`, что шлюз всегда отклоняет без переопределения | Проверьте `allowed_email_domains` и что IdP возвращает проверенное утверждение `email`. Для `email_verified: false` исправьте проверку на стороне IdP. Если ваш IdP выдает email под другим именем утверждения, установите `oidc.email_claim`. |288| `/oauth/callback` показывает "Sign-in could not be completed" | Домен email отклонен, валидация id\_token не удалась или `email_verified` явно `false`, что шлюз всегда отклоняет без переопределения | Проверьте `allowed_email_domains` и что IdP возвращает проверенное утверждение `email`. Для `email_verified: false` исправьте проверку на стороне IdP. Если ваш IdP выдает email под другим именем утверждения, установите `oidc.email_claim`. |


293| Вход завершается в IdP, но callback не удается, с ошибкой CSP в Chrome или "this sign-in link has expired" в Safari | IdP вернул код через `response_mode=form_post`, который автоматически отправляет его cross-origin через POST на `/oauth/callback`. Chrome блокирует это под строгой CSP; Safari позволяет отправку, но callback читает только строку запроса. | Убедитесь, что ваш IdP соблюдает `response_mode=query`, который шлюз явно запрашивает, чтобы callback был простым перенаправлением |295| Вход завершается в IdP, но callback не удается, с ошибкой CSP в Chrome или "this sign-in link has expired" в Safari | IdP вернул код через `response_mode=form_post`, который автоматически отправляет его cross-origin через POST на `/oauth/callback`. Chrome блокирует это под строгой CSP; Safari позволяет отправку, но callback читает только строку запроса. | Убедитесь, что ваш IdP соблюдает `response_mode=query`, который шлюз явно запрашивает, чтобы callback был простым перенаправлением |

294| Вход работает локально, но не удается за ALB | `public_url` не установлен, поэтому IdP получает внутреннее происхождение `http://` как `redirect_uri` | Установите `listen.public_url` на внешнее происхождение `https://` |296| Вход работает локально, но не удается за ALB | `public_url` не установлен, поэтому IdP получает внутреннее происхождение `http://` как `redirect_uri` | Установите `listen.public_url` на внешнее происхождение `https://` |

295| Разработчик видит подсказку доверия повторно | Сертификат TLS ротируется для каждой реплики или для каждого запроса | Используйте стабильный сертификат на ingress или завершите TLS один раз и запустите реплики по простому HTTP внутри |297| Разработчик видит подсказку доверия повторно | Сертификат TLS ротируется для каждой реплики или для каждого запроса | Используйте стабильный сертификат на ingress или завершите TLS один раз и запустите реплики по простому HTTP внутри |

296| CLI `/login`: "Could not verify the gateway's TLS certificate" или `SELF_SIGNED_CERT_IN_CHAIN` | Цепь TLS шлюза подписана приватным CA, не в хранилище доверия хоста CLI | Claude Code читает хранилище доверия ОС по умолчанию на нативном бинарном файле и на Node 22.15 или позже; [`CLAUDE_CODE_CERT_STORE`](/ru/network-config#ca-certificate-store) управляет этим поведением. Если CA установлен в хранилище доверия ОС, убедитесь, что разработчики используют текущий runtime. В противном случае установите `NODE_EXTRA_CA_CERTS` на сертификат CA PEM перед запуском. Подсказка отпечатка первого подключения все еще применяется. |298| CLI `/login`: "Could not verify the gateway's TLS certificate" или `SELF_SIGNED_CERT_IN_CHAIN` | Цепь TLS шлюза подписана приватным CA, не в хранилище доверия хоста CLI | Claude Code читает хранилище доверия ОС по умолчанию на нативном бинарном файле и на Node 22.15 или позже; [`CLAUDE_CODE_CERT_STORE`](/docs/ru/network-config#ca-certificate-store) управляет этим поведением. Если CA установлен в хранилище доверия ОС, убедитесь, что разработчики используют текущий runtime. В противном случае установите `NODE_EXTRA_CA_CERTS` на сертификат CA PEM перед запуском. Подсказка отпечатка первого подключения все еще применяется. |

297 299 

298<h2 id="related">300<h2 id="related">

299 Связанное301 Связанное

300</h2>302</h2>

301 303 

302* [Обзор шлюза Claude apps](/ru/claude-apps-gateway): быстрый старт и подключение разработчика304* [Обзор шлюза Claude apps](/docs/ru/claude-apps-gateway): быстрый старт и подключение разработчика

303* [Справочник по конфигурации](/ru/claude-apps-gateway-config): каждый параметр файла `gateway.yaml`305* [Справочник по конфигурации](/docs/ru/claude-apps-gateway-config): каждый параметр файла `gateway.yaml`

env-vars.md +21 −11

Details

87 87 

88Когда одно и то же поведение имеет как переменную окружения, так и поле параметров, переменная окружения имеет приоритет. Например, `ANTHROPIC_MODEL` переопределяет параметр `model`, а `CLAUDE_CODE_AUTO_CONNECT_IDE` переопределяет `autoConnectIde`. Поле параметров применяется, когда переменная окружения не установлена.88Когда одно и то же поведение имеет как переменную окружения, так и поле параметров, переменная окружения имеет приоритет. Например, `ANTHROPIC_MODEL` переопределяет параметр `model`, а `CLAUDE_CODE_AUTO_CONNECT_IDE` переопределяет `autoConnectIde`. Поле параметров применяется, когда переменная окружения не установлена.

89 89 

90Когда одна и та же переменная установлена как в вашей оболочке, так и в файле параметров в блоке `env`, применяется значение из файла параметров. Claude Code записывает каждую запись `env` в переменные окружения процесса при запуске, заменяя значение, унаследованное из оболочки. Несколько переменных обрабатываются специально; [параметр `env`](/ru/settings#available-settings) содержит список исключений.

91 

92Между файлами параметров значения `env` следуют [приоритету параметров](/ru/settings#settings-precedence), поэтому управляемая запись параметров переопределяет ту же переменную в пользовательских или проектных параметрах.

93 

90То, как переменная окружения взаимодействует с флагами CLI и командами в сессии, варьируется в зависимости от функции: `--model` и `/model` переопределяют `ANTHROPIC_MODEL`, а `CLAUDE_CODE_EFFORT_LEVEL` переопределяет `/effort`. Когда переменная взаимодействует с другим источником конфигурации, её строка в списке [Переменные](#variables) указывает приоритет или ссылается на страницу, которая это документирует.94То, как переменная окружения взаимодействует с флагами CLI и командами в сессии, варьируется в зависимости от функции: `--model` и `/model` переопределяют `ANTHROPIC_MODEL`, а `CLAUDE_CODE_EFFORT_LEVEL` переопределяет `/effort`. Когда переменная взаимодействует с другим источником конфигурации, её строка в списке [Переменные](#variables) указывает приоритет или ссылается на страницу, которая это документирует.

91 95 

92Claude Code читает переменные окружения при запуске, поэтому изменения вступают в силу при следующем запуске `claude`.96Claude Code читает переменные окружения при запуске, поэтому изменения вступают в силу при следующем запуске `claude`.


96</h2>100</h2>

97 101 

98| Переменная | Назначение |102| Переменная | Назначение |

99| :------------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |103| :------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

100| `ANTHROPIC_API_KEY` | Ключ API, отправляемый как заголовок `X-Api-Key`. При установке этот ключ используется вместо вашей подписки Claude Pro, Max, Team или Enterprise, даже если вы вошли в систему. В неинтерактивном режиме (`-p`) ключ всегда используется при наличии. В интерактивном режиме вам предлагается одобрить ключ один раз перед тем, как он переопределит вашу подписку. Чтобы использовать вашу подписку вместо этого, запустите `unset ANTHROPIC_API_KEY` |104| `ANTHROPIC_API_KEY` | Ключ API, отправляемый как заголовок `X-Api-Key`. При установке этот ключ используется вместо вашей подписки Claude Pro, Max, Team или Enterprise, даже если вы вошли в систему. В неинтерактивном режиме (`-p`) ключ всегда используется при наличии. В интерактивном режиме вам предлагается одобрить ключ один раз перед тем, как он переопределит вашу подписку. Чтобы использовать вашу подписку вместо этого, запустите `unset ANTHROPIC_API_KEY` |

101| `ANTHROPIC_AUTH_TOKEN` | Пользовательское значение для заголовка `Authorization` (значение, которое вы установите здесь, будет дополнено префиксом `Bearer `) |105| `ANTHROPIC_AUTH_TOKEN` | Пользовательское значение для заголовка `Authorization` (значение, которое вы установите здесь, будет дополнено префиксом `Bearer `) |

102| `ANTHROPIC_AWS_API_KEY` | Ключ API рабочей области для [Claude Platform on AWS](/ru/claude-platform-on-aws), созданный в AWS Console. Отправляется как `x-api-key` и имеет приоритет над AWS SigV4 |106| `ANTHROPIC_AWS_API_KEY` | Ключ API рабочей области для [Claude Platform on AWS](/ru/claude-platform-on-aws), созданный в AWS Console. Отправляется как `x-api-key` и имеет приоритет над AWS SigV4 |


165| `CLAUDE_CODE_ATTRIBUTION_HEADER` | Установите на `0`, чтобы опустить блок атрибуции (версия клиента и отпечаток приглашения) с начала системного приглашения. Отключение его улучшает коэффициент попадания кэша приглашений при маршрутизации через [шлюз LLM](/ru/llm-gateway). Кэширование Anthropic API не затронуто |169| `CLAUDE_CODE_ATTRIBUTION_HEADER` | Установите на `0`, чтобы опустить блок атрибуции (версия клиента и отпечаток приглашения) с начала системного приглашения. Отключение его улучшает коэффициент попадания кэша приглашений при маршрутизации через [шлюз LLM](/ru/llm-gateway). Кэширование Anthropic API не затронуто |

166| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Установите ёмкость контекста в токенах, используемую для расчётов auto-compaction. По умолчанию используется контекстное окно модели: 200K для стандартных моделей или 1M для моделей с [расширенным контекстом](/ru/model-config#extended-context), кроме Sonnet 5, который имеет свой [порог по умолчанию](/ru/model-config#sonnet-5-context-window). Используйте меньшее значение, такое как `500000`, на модели 1M, чтобы рассматривать окно как 500K для целей сжатия. Значение ограничено фактическим контекстным окном модели. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` применяется как процент от этого значения. Установка этой переменной отделяет порог сжатия от `used_percentage` в строке состояния, который всегда использует полное контекстное окно модели |170| `CLAUDE_CODE_AUTO_COMPACT_WINDOW` | Установите ёмкость контекста в токенах, используемую для расчётов auto-compaction. По умолчанию используется контекстное окно модели: 200K для стандартных моделей или 1M для моделей с [расширенным контекстом](/ru/model-config#extended-context), кроме Sonnet 5, который имеет свой [порог по умолчанию](/ru/model-config#sonnet-5-context-window). Используйте меньшее значение, такое как `500000`, на модели 1M, чтобы рассматривать окно как 500K для целей сжатия. Значение ограничено фактическим контекстным окном модели. `CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` применяется как процент от этого значения. Установка этой переменной отделяет порог сжатия от `used_percentage` в строке состояния, который всегда использует полное контекстное окно модели |

167| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Переопределить автоматическое [подключение IDE](/ru/vs-code). По умолчанию Claude Code подключается автоматически при запуске внутри встроенного терминала поддерживаемой IDE. Установите на `false`, чтобы предотвратить это. Установите на `true`, чтобы принудительно попытаться подключиться, когда автоматическое обнаружение не удаётся, например, когда tmux скрывает родительский терминал. Имеет приоритет над параметром [`autoConnectIde`](/ru/settings#global-config-settings) глобальной конфигурации |171| `CLAUDE_CODE_AUTO_CONNECT_IDE` | Переопределить автоматическое [подключение IDE](/ru/vs-code). По умолчанию Claude Code подключается автоматически при запуске внутри встроенного терминала поддерживаемой IDE. Установите на `false`, чтобы предотвратить это. Установите на `true`, чтобы принудительно попытаться подключиться, когда автоматическое обнаружение не удаётся, например, когда tmux скрывает родительский терминал. Имеет приоритет над параметром [`autoConnectIde`](/ru/settings#global-config-settings) глобальной конфигурации |

172| `CLAUDE_CODE_AWS_CHAIN_RESOLVE_TIMEOUT_MS` | {/* min-version: 2.1.207 */}Время в миллисекундах Claude Code ждёт для цепи поставщика учётных данных AWS по умолчанию, чтобы произвести учётные данные перед отказом запроса с [`AWS default-chain credential resolve timed out`](/ru/errors#aws-default-chain-credential-resolve-timed-out) (по умолчанию: `60000`). Повысьте это, когда шаг в вашей цепи законно нуждается в большем времени, такой как вход в браузер на основе SSO с MFA через обёртку, такую как `aws-vault`. Применяется везде, где Claude Code подписывает с цепью по умолчанию: [Amazon Bedrock](/ru/amazon-bedrock#credential-caching-and-resolution-timeout), [Claude Platform on AWS](/ru/claude-platform-on-aws) и [конечная точка Mantle](/ru/amazon-bedrock#use-the-mantle-endpoint). Требуется Claude Code v2.1.207 или более поздняя версия |

168| `CLAUDE_CODE_BRIDGE_SESSION_ID` | {/* min-version: 2.1.199 */}Установите автоматически в подпроцессах инструмента Bash и [команды hook](/ru/hooks) во время активного соединения [Remote Control](/ru/remote-control), и удалено при завершении соединения. Значение — это ID сессии в форме `session_`, тот же идентификатор, который появляется в URL сессии `claude.ai/code`, поэтому скрипт может ссылаться обратно на сессию, которая его запустила. Требуется Claude Code v2.1.199 или более поздняя версия. В [облачных сессиях](/ru/claude-code-on-the-web) прочитайте вместо этого `CLAUDE_CODE_REMOTE_SESSION_ID` |173| `CLAUDE_CODE_BRIDGE_SESSION_ID` | {/* min-version: 2.1.199 */}Установите автоматически в подпроцессах инструмента Bash и [команды hook](/ru/hooks) во время активного соединения [Remote Control](/ru/remote-control), и удалено при завершении соединения. Значение — это ID сессии в форме `session_`, тот же идентификатор, который появляется в URL сессии `claude.ai/code`, поэтому скрипт может ссылаться обратно на сессию, которая его запустила. Требуется Claude Code v2.1.199 или более поздняя версия. В [облачных сессиях](/ru/claude-code-on-the-web) прочитайте вместо этого `CLAUDE_CODE_REMOTE_SESSION_ID` |

169| `CLAUDE_CODE_CERT_STORE` | Разделённый запятыми список источников сертификатов CA для TLS соединений. `bundled` — это набор Mozilla CA, поставляемый с Claude Code. `system` — это хранилище доверия операционной системы, доступное только для чтения на средах выполнения с `tls.getCACertificates`: собственный бинарный файл или Node 22.15 или более поздняя версия для установок npm. См. [Хранилище сертификатов CA](/ru/network-config#ca-certificate-store). По умолчанию `bundled,system` |174| `CLAUDE_CODE_CERT_STORE` | Разделённый запятыми список источников сертификатов CA для TLS соединений. `bundled` — это набор Mozilla CA, поставляемый с Claude Code. `system` — это хранилище доверия операционной системы, доступное только для чтения на средах выполнения с `tls.getCACertificates`: собственный бинарный файл или Node 22.15 или более поздняя версия для установок npm. См. [Хранилище сертификатов CA](/ru/network-config#ca-certificate-store). По умолчанию `bundled,system` |

170| `CLAUDE_CODE_CHILD_SESSION` | {/* min-version: 2.1.172 */}Установите на `1` в подпроцессах, которые Claude Code порождает через инструменты Bash, PowerShell и Monitor, команды [hook](/ru/hooks) и команды [строки состояния](/ru/statusline). Не установлено для подпроцессов stdio [MCP server](/ru/mcp), которые долгоживущие и пережидают сессию, которая их порождала. В отличие от `CLAUDECODE`, это устанавливается только путём собственного порождения Claude Code, а не IDE extensions, поэтому надёжно различает вложенную сессию от верхнего уровня `claude`, запущенного в встроенном терминале IDE. Вложенный интерактивный `claude` TUI, запущенный таким образом, автоматически исключается из `--resume`, `--continue`, истории стрелок вверх и списка `claude agents`. Сессии `claude -p` без интерактивности по-прежнему сохраняются. Установите `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE=1`, чтобы переопределить это исключение. Требуется Claude Code v2.1.172 или более поздняя версия |175| `CLAUDE_CODE_CHILD_SESSION` | {/* min-version: 2.1.172 */}Установите на `1` в подпроцессах, которые Claude Code порождает через инструменты Bash, PowerShell и Monitor, команды [hook](/ru/hooks) и команды [строки состояния](/ru/statusline). Не установлено для подпроцессов stdio [MCP server](/ru/mcp), которые долгоживущие и пережидают сессию, которая их порождала. В отличие от `CLAUDECODE`, это устанавливается только путём собственного порождения Claude Code, а не IDE extensions, поэтому надёжно различает вложенную сессию от верхнего уровня `claude`, запущенного в встроенном терминале IDE. Вложенный интерактивный `claude` TUI, запущенный таким образом, автоматически исключается из `--resume`, `--continue`, истории стрелок вверх и списка `claude agents`. Сессии `claude -p` без интерактивности по-прежнему сохраняются. Установите `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE=1`, чтобы переопределить это исключение. Требуется Claude Code v2.1.172 или более поздняя версия |


176| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | Минимальный уровень логирования, записываемый в файл журнала отладки. Значения: `verbose`, `debug` (по умолчанию), `info`, `warn`, `error`. Установите на `verbose`, чтобы включить высокообъёмную диагностику, такую как полный вывод команды строки состояния, или повысьте до `error`, чтобы снизить шум |181| `CLAUDE_CODE_DEBUG_LOG_LEVEL` | Минимальный уровень логирования, записываемый в файл журнала отладки. Значения: `verbose`, `debug` (по умолчанию), `info`, `warn`, `error`. Установите на `verbose`, чтобы включить высокообъёмную диагностику, такую как полный вывод команды строки состояния, или повысьте до `error`, чтобы снизить шум |

177| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | Установите на `1`, чтобы отключить поддержку [контекстного окна 1M](/ru/model-config#extended-context). При установке варианты модели 1M недоступны в средстве выбора модели, и сессии [Sonnet 5](/ru/model-config#sonnet-5-context-window) рассматриваются как имеющие окно 200K. Полезно для корпоративных сред с требованиями соответствия |182| `CLAUDE_CODE_DISABLE_1M_CONTEXT` | Установите на `1`, чтобы отключить поддержку [контекстного окна 1M](/ru/model-config#extended-context). При установке варианты модели 1M недоступны в средстве выбора модели, и сессии [Sonnet 5](/ru/model-config#sonnet-5-context-window) рассматриваются как имеющие окно 200K. Полезно для корпоративных сред с требованиями соответствия |

178| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | Установите на `1`, чтобы отключить [адаптивное рассуждение](/ru/model-config#adjust-effort-level) на Opus 4.6 и Sonnet 4.6 и вернуться к фиксированному бюджету мышления, контролируемому `MAX_THINKING_TOKENS`. {/* min-version: 2.1.111 */}Начиная с v2.1.111, не влияет на Fable 5, Sonnet 5 или на Opus 4.7 и более поздние версии, которые всегда используют адаптивное рассуждение |183| `CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING` | Установите на `1`, чтобы отключить [адаптивное рассуждение](/ru/model-config#adjust-effort-level) на Opus 4.6 и Sonnet 4.6 и вернуться к фиксированному бюджету мышления, контролируемому `MAX_THINKING_TOKENS`. {/* min-version: 2.1.111 */}Начиная с v2.1.111, не влияет на Fable 5, Sonnet 5 или на Opus 4.7 и более поздние версии, которые всегда используют адаптивное рассуждение |

179| `CLAUDE_CODE_DISABLE_ADVISOR_TOOL` | {/* min-version: 2.1.98 */}Установите на `1`, чтобы отключить [инструмент advisor](/ru/advisor). Команда `/advisor` становится недоступной, любой настроенный `advisorModel` игнорируется, и флаг `--advisor` принимается, но не имеет эффекта, поэтому существующие скрипты, которые его передают, продолжают работать без ошибок. Требуется Claude Code v2.1.98 или более поздняя версия |184| `CLAUDE_CODE_DISABLE_ADVISOR_TOOL` | Установите на `1`, чтобы отключить [инструмент advisor](/ru/advisor). Команда `/advisor` становится недоступной, любой настроенный `advisorModel` игнорируется, и флаг `--advisor` принимается, но не имеет эффекта, поэтому существующие скрипты, которые его передают, продолжают работать без ошибок |

180| `CLAUDE_CODE_DISABLE_AGENT_VIEW` | Установите на `1`, чтобы отключить [фоновых агентов и представление агентов](/ru/agent-view): `claude agents`, `--bg`, `/background` и супервизор по требованию. Эквивалент параметра [`disableAgentView`](/ru/settings#available-settings) |185| `CLAUDE_CODE_DISABLE_AGENT_VIEW` | Установите на `1`, чтобы отключить [фоновых агентов и представление агентов](/ru/agent-view): `claude agents`, `--bg`, `/background` и супервизор по требованию. Эквивалент параметра [`disableAgentView`](/ru/settings#available-settings) |

181| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | Установите на `1`, чтобы отключить [полноэкранный режим](/ru/fullscreen) и использовать классический рендерер основного экрана. Разговор остаётся в собственной прокрутке вашего терминала, поэтому `Cmd+f` и режим копирования tmux работают как обычно. Имеет приоритет над `CLAUDE_CODE_NO_FLICKER` и параметром [`tui`](/ru/settings#available-settings). Вы также можете переключаться с помощью `/tui default`. Не применяется к фоновым сессиям, открытым из [представления агента](/ru/agent-view), которые всегда используют полноэкранный режим |186| `CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN` | Установите на `1`, чтобы отключить [полноэкранный режим](/ru/fullscreen) и использовать классический рендерер основного экрана. Разговор остаётся в собственной прокрутке вашего терминала, поэтому `Cmd+f` и режим копирования tmux работают как обычно. Имеет приоритет над `CLAUDE_CODE_NO_FLICKER` и параметром [`tui`](/ru/settings#available-settings). Вы также можете переключаться с помощью `/tui default`. Не применяется к фоновым сессиям, открытым из [представления агента](/ru/agent-view), которые всегда используют полноэкранный режим |

182| `CLAUDE_CODE_DISABLE_ARTIFACT` | Установите на `1`, чтобы отключить инструмент [Artifact](/ru/artifacts), который публикует вывод сессии как приватную веб-страницу на claude.ai. Эквивалент параметра [`disableArtifact`](/ru/settings#available-settings) |187| `CLAUDE_CODE_DISABLE_ARTIFACT` | Установите на `1`, чтобы отключить инструмент [Artifact](/ru/artifacts), который публикует вывод сессии как приватную веб-страницу на claude.ai. Эквивалент параметра [`disableArtifact`](/ru/settings#available-settings) |

183| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | Установите на `1`, чтобы отключить обработку вложений. Упоминания файлов с синтаксисом `@` отправляются как простой текст вместо расширения в содержимое файла |188| `CLAUDE_CODE_DISABLE_ATTACHMENTS` | Установите на `1`, чтобы отключить обработку вложений. Упоминания файлов с синтаксисом `@` отправляются как простой текст вместо расширения в содержимое файла |

184| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Установите на `1`, чтобы отключить [автоматическую память](/ru/memory#auto-memory). Установите на `0`, чтобы принудительно включить автоматическую память даже когда режим `--bare` или [`autoMemoryEnabled: false`](/ru/settings#available-settings) в противном случае отключили бы её. При отключении Claude не создаёт и не загружает файлы автоматической памяти |189| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Установите на `1`, чтобы отключить [автоматическую память](/ru/memory#auto-memory). Установите на `0`, чтобы принудительно включить автоматическую память даже когда режим `--bare` или [`autoMemoryEnabled: false`](/ru/settings#available-settings) в противном случае отключили бы её. При отключении Claude не создаёт и не загружает файлы автоматической памяти |

185| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Установите на `1`, чтобы отключить всю функциональность фоновых задач, включая параметр `run_in_background` на инструментах Bash и subagent, автоматическое фоновое выполнение и сочетание клавиш Ctrl+B |190| `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` | Установите на `1`, чтобы отключить всю функциональность фоновых задач, включая параметр `run_in_background` на инструментах Bash и subagent, автоматическое фоновое выполнение и сочетание клавиш Ctrl+B |

191| `CLAUDE_CODE_DISABLE_BEDROCK_CONTENT_TYPE_GUARD` | {/* min-version: 2.1.208 */}Установите на `1`, чтобы пропустить проверку, что потоковый ответ [Amazon Bedrock](/ru/amazon-bedrock) имеет тип содержимого `application/vnd.amazon.eventstream`. Без этой переменной ответ с другим типом содержимого не удаётся с ошибкой, называющей этот тип содержимого, что означает [шлюз или прокси преобразует ответ](/ru/amazon-bedrock#streaming-errors-behind-a-gateway-or-proxy). Установите это только когда шлюз переписывает заголовок `Content-Type`, но пропускает двоичное тело потока событий без изменений; если само тело было преобразовано, запросы не удаются с `Truncated event message received` вместо этого. Требуется Claude Code v2.1.208 или более поздняя версия |

186| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | {/* min-version: 2.1.196 */}Установите на `1`, чтобы остановить выполняющиеся фоновые команды оболочки, динамические workflows {/* min-version: 2.1.198 */}и, начиная с v2.1.198, фоновые subagents [фоновой сессии](/ru/agent-view) при остановке, перезагрузке или обновлении процесса этой сессии [супервизором](/ru/agent-view#the-supervisor-process), вместо передачи их следующему процессу сессии. Влияет только на эту передачу: фоновое выполнение сессии с помощью `←` или [`/background`](/ru/agent-view#from-inside-a-session) по-прежнему переносит выполняющуюся работу, и `CLAUDE_DISABLE_ADOPT` отключает оба. Требуется Claude Code v2.1.196 или более поздняя версия |192| `CLAUDE_CODE_DISABLE_BG_EXIT_HANDOFF` | {/* min-version: 2.1.196 */}Установите на `1`, чтобы остановить выполняющиеся фоновые команды оболочки, динамические workflows {/* min-version: 2.1.198 */}и, начиная с v2.1.198, фоновые subagents [фоновой сессии](/ru/agent-view) при остановке, перезагрузке или обновлении процесса этой сессии [супервизором](/ru/agent-view#the-supervisor-process), вместо передачи их следующему процессу сессии. Влияет только на эту передачу: фоновое выполнение сессии с помощью `←` или [`/background`](/ru/agent-view#from-inside-a-session) по-прежнему переносит выполняющуюся работу, и `CLAUDE_DISABLE_ADOPT` отключает оба. Требуется Claude Code v2.1.196 или более поздняя версия |

187| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | {/* min-version: 2.1.193 */}Установите на `1`, чтобы остановить Claude Code от завершения [фоновых команд оболочки](/ru/interactive-mode#background-bash-commands) при сообщении операционной системой о нехватке памяти. По умолчанию на macOS и Linux Claude Code завершает фоновую оболочку, запущенную в основной сессии, при сигнале нехватки памяти, как только сессия была неактивна в течение 30 минут и ни один ход или subagent не выполняется. Windows не имеет сигнала нехватки памяти, поэтому эта переменная не влияет там. Требуется Claude Code v2.1.193 или более поздняя версия |193| `CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP` | {/* min-version: 2.1.193 */}Установите на `1`, чтобы остановить Claude Code от завершения [фоновых команд оболочки](/ru/interactive-mode#background-bash-commands) при сообщении операционной системой о нехватке памяти. По умолчанию на macOS и Linux Claude Code завершает фоновую оболочку, запущенную в основной сессии, при сигнале нехватки памяти, как только сессия была неактивна в течение 30 минут и ни один ход или subagent не выполняется. Windows не имеет сигнала нехватки памяти, поэтому эта переменная не влияет там. Требуется Claude Code v2.1.193 или более поздняя версия |

188| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Установите на `1`, чтобы отключить [skills](/ru/skills) и workflows, которые поставляются с Claude Code: встроенные skills и workflows полностью удаляются, в то время как встроенные slash commands, такие как `/init`, остаются доступными для ввода, но скрыты от модели. `/doctor` остаётся доступной для ввода, как встроенные команды; скройте её с помощью `DISABLE_DOCTOR_COMMAND` вместо этого. Skills из plugins, `.claude/skills/` и `.claude/commands/` не затронуты. Эквивалент параметра [`disableBundledSkills`](/ru/settings#available-settings); `0` не переопределяет его |194| `CLAUDE_CODE_DISABLE_BUNDLED_SKILLS` | Установите на `1`, чтобы отключить [skills](/ru/skills) и workflows, которые поставляются с Claude Code: встроенные skills и workflows полностью удаляются, в то время как встроенные slash commands, такие как `/init`, остаются доступными для ввода, но скрыты от модели. `/doctor` остаётся доступной для ввода, как встроенные команды; скройте её с помощью `DISABLE_DOCTOR_COMMAND` вместо этого. Skills из plugins, `.claude/skills/` и `.claude/commands/` не затронуты. Эквивалент параметра [`disableBundledSkills`](/ru/settings#available-settings); `0` не переопределяет его |

189| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Установите на `1`, чтобы предотвратить загрузку любых файлов памяти CLAUDE.md в контекст, включая файлы пользователя, проекта и автоматической памяти |195| `CLAUDE_CODE_DISABLE_CLAUDE_MDS` | Установите на `1`, чтобы предотвратить загрузку любых файлов памяти CLAUDE.md в контекст, включая файлы пользователя, проекта и автоматической памяти |

190| `CLAUDE_CODE_DISABLE_CRON` | Установите на `1`, чтобы отключить [запланированные задачи](/ru/scheduled-tasks). Skill `/loop` и инструменты cron становятся недоступными и все уже запланированные задачи перестают срабатывать, включая задачи, которые уже выполняются в середине сессии |196| `CLAUDE_CODE_DISABLE_CRON` | Установите на `1`, чтобы отключить [запланированные задачи](/ru/scheduled-tasks). Skill `/loop` и инструменты cron становятся недоступными и все уже запланированные задачи перестают срабатывать, включая задачи, которые уже выполняются в середине сессии |

191| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Установите на `1`, чтобы удалить заголовки запроса `anthropic-beta` для Anthropic и поля схемы инструментов beta (такие как `defer_loading` и `eager_input_streaming`) из запросов API. Используйте это, когда шлюз прокси отклоняет запросы с ошибками типа "Unexpected value(s) for the `anthropic-beta` header" или "Extra inputs are not permitted". Стандартные поля (`name`, `description`, `input_schema`, `cache_control`) сохраняются |197| `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS` | Установите на `1`, чтобы удалить заголовки запроса `anthropic-beta` для Anthropic и поля схемы инструментов beta (такие как `defer_loading` и `eager_input_streaming`) из запросов API. Используйте это, когда шлюз прокси отклоняет запросы с ошибками типа "Unexpected value(s) for the `anthropic-beta` header" или "Extra inputs are not permitted". Стандартные поля (`name`, `description`, `input_schema`, `cache_control`) сохраняются. [Поиск инструментов MCP](/ru/mcp#scale-with-mcp-tool-search) отключен и все инструменты MCP загружаются заранее, даже когда установлен `ENABLE_TOOL_SEARCH` |

192| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | {/* min-version: 2.1.198 */}Установите на `1`, чтобы отключить встроенные [subagents Explore и Plan](/ru/sub-agents#built-in-subagents). Claude исследует с помощью своих инструментов поиска или общего назначения subagent вместо этого, и [режим плана](/ru/permission-modes#analyze-before-you-edit-with-plan-mode) читает файлы напрямую, а не запускает agents Explore и Plan. Пользовательские subagents с именами `Explore` или `Plan` не затронуты. Чтобы удалить каждый встроенный тип subagent в Agent SDK или неинтерактивном режиме, используйте `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` вместо этого. Требуется Claude Code v2.1.198 или более поздняя версия |198| `CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS` | {/* min-version: 2.1.198 */}Установите на `1`, чтобы отключить встроенные [subagents Explore и Plan](/ru/sub-agents#built-in-subagents). Claude исследует с помощью своих инструментов поиска или общего назначения subagent вместо этого, и [режим плана](/ru/permission-modes#analyze-before-you-edit-with-plan-mode) читает файлы напрямую, а не запускает agents Explore и Plan. Пользовательские subagents с именами `Explore` или `Plan` не затронуты. Чтобы удалить каждый встроенный тип subagent в Agent SDK или неинтерактивном режиме, используйте `CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS` вместо этого. Требуется Claude Code v2.1.198 или более поздняя версия |

193| `CLAUDE_CODE_DISABLE_FAST_MODE` | Установите на `1`, чтобы отключить [быстрый режим](/ru/fast-mode) |199| `CLAUDE_CODE_DISABLE_FAST_MODE` | Установите на `1`, чтобы отключить [быстрый режим](/ru/fast-mode) |

194| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Установите на `1`, чтобы отключить опросы качества сессии "How is Claude doing?". Опросы также отключаются, когда установлена переменная `DISABLE_TELEMETRY`, `DO_NOT_TRACK` или `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, если только `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` не согласится вернуться. Чтобы установить частоту выборки вместо полного отключения, используйте параметр [`feedbackSurveyRate`](/ru/settings#available-settings). См. [Опросы качества сессии](/ru/data-usage#session-quality-surveys) |200| `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` | Установите на `1`, чтобы отключить опросы качества сессии "How is Claude doing?". Опросы также отключаются, когда установлена переменная `DISABLE_TELEMETRY`, `DO_NOT_TRACK` или `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, если только `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` не согласится вернуться. Чтобы установить частоту выборки вместо полного отключения, используйте параметр [`feedbackSurveyRate`](/ru/settings#available-settings). См. [Опросы качества сессии](/ru/data-usage#session-quality-surveys) |


208| `CLAUDE_CODE_DISABLE_WORKFLOWS` | Установите на `1`, чтобы отключить [workflows](/ru/workflows#turn-workflows-off). Эквивалент параметра [`disableWorkflows`](/ru/settings#available-settings) |214| `CLAUDE_CODE_DISABLE_WORKFLOWS` | Установите на `1`, чтобы отключить [workflows](/ru/workflows#turn-workflows-off). Эквивалент параметра [`disableWorkflows`](/ru/settings#available-settings) |

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

210| `CLAUDE_CODE_ENABLE_APPEND_SUBAGENT_PROMPT` | {/* min-version: 2.1.205 */}Установите на `1`, чтобы включить добавление дополнительного текста в конец системного приглашения каждого [subagent](/ru/sub-agents). Флаг [`--append-subagent-system-prompt`](/ru/cli-reference#cli-flags) предоставляет добавленный текст и устанавливает эту переменную автоматически, поэтому вам не нужно устанавливать её самостоятельно. Требуется Claude Code v2.1.205 или более поздняя версия |216| `CLAUDE_CODE_ENABLE_APPEND_SUBAGENT_PROMPT` | {/* min-version: 2.1.205 */}Установите на `1`, чтобы включить добавление дополнительного текста в конец системного приглашения каждого [subagent](/ru/sub-agents). Флаг [`--append-subagent-system-prompt`](/ru/cli-reference#cli-flags) предоставляет добавленный текст и устанавливает эту переменную автоматически, поэтому вам не нужно устанавливать её самостоятельно. Требуется Claude Code v2.1.205 или более поздняя версия |

211| `CLAUDE_CODE_ENABLE_AUTO_MODE` | {/* min-version: 2.1.158 */}Установите на `1`, чтобы сделать [автоматический режим](/ru/permission-modes#eliminate-prompts-with-auto-mode) доступным на Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry и вошедших в систему сессиях [Claude apps gateway](/ru/claude-apps-gateway). Требуется Claude Code v2.1.158 или более поздняя версия. Не влияет на Anthropic API, где автоматический режим доступен по умолчанию. См. [Включить автоматический режим на Amazon Bedrock, Google Cloud's Agent Platform или Microsoft Foundry](/ru/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry) |217| `CLAUDE_CODE_ENABLE_AUTO_MODE` | {/* min-version: 2.1.207 */}Принято для совместимости со старыми выпусками и не имеет эффекта. Автоматический режим доступен по умолчанию на каждом поставщике, включая Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry и вошедшие в систему сессии [Claude apps gateway](/ru/claude-apps-gateway). В v2.1.158 через v2.1.206 установка этого на `1` была необходима, чтобы сделать [автоматический режим](/ru/permission-modes#eliminate-prompts-with-auto-mode) доступным на этих поставщиках |

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

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

214| `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` | Установите на `1`, чтобы направить опрос качества сессии "How is Claude doing?" на ваш собственный [сборщик OpenTelemetry](/ru/monitoring-usage), когда трафик, не связанный с Anthropic, заблокирован. Оценки опроса выдаются только как события OTEL вашему настроенному сборщику. Никакие данные опроса не отправляются в Anthropic в этом режиме. Применяется, когда установлена переменная `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_TELEMETRY` или `DO_NOT_TRACK`, и не имеет эффекта в противном случае. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` и политика обратной связи организации имеют приоритет |220| `CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL` | Установите на `1`, чтобы направить опрос качества сессии "How is Claude doing?" на ваш собственный [сборщик OpenTelemetry](/ru/monitoring-usage), когда трафик, не связанный с Anthropic, заблокирован. Оценки опроса выдаются только как события OTEL вашему настроенному сборщику. Никакие данные опроса не отправляются в Anthropic в этом режиме. Применяется, когда установлена переменная `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`, `DISABLE_TELEMETRY` или `DO_NOT_TRACK`, и не имеет эффекта в противном случае. `CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY` и политика обратной связи организации имеют приоритет |


220| `CLAUDE_CODE_ENABLE_TELEMETRY` | Установите на `1`, чтобы включить сбор данных OpenTelemetry для метрик и логирования. Требуется перед настройкой экспортёров OTel. См. [Мониторинг](/ru/monitoring-usage) |226| `CLAUDE_CODE_ENABLE_TELEMETRY` | Установите на `1`, чтобы включить сбор данных OpenTelemetry для метрик и логирования. Требуется перед настройкой экспортёров OTel. См. [Мониторинг](/ru/monitoring-usage) |

221| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Время в миллисекундах для ожидания после того, как цикл запроса становится неактивным, перед автоматическим выходом. Полезно для автоматизированных рабочих процессов и скриптов, использующих режим SDK |227| `CLAUDE_CODE_EXIT_AFTER_STOP_DELAY` | Время в миллисекундах для ожидания после того, как цикл запроса становится неактивным, перед автоматическим выходом. Полезно для автоматизированных рабочих процессов и скриптов, использующих режим SDK |

222| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Установите на `1`, чтобы включить [команды агентов](/ru/agent-teams). Команды агентов являются экспериментальными и отключены по умолчанию |228| `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS` | Установите на `1`, чтобы включить [команды агентов](/ru/agent-teams). Команды агентов являются экспериментальными и отключены по умолчанию |

223| `CLAUDE_CODE_EXTRA_BODY` | JSON объект для объединения на верхний уровень каждого тела запроса API. Полезно для передачи параметров, специфичных для поставщика, которые Claude Code не раскрывает напрямую |229| `CLAUDE_CODE_EXTRA_BODY` | JSON объект для объединения на верхний уровень каждого тела запроса API. Полезно для передачи параметров, специфичных для поставщика, которые Claude Code не раскрывает напрямую. {/* min-version: 2.1.206 */}Значение, экспортированное в вашей оболочке, также применяется к [фоновым сессиям](/ru/agent-view), которые вы отправляете с помощью `claude agents` или `--bg`. До v2.1.206 фоновые сессии игнорировали экспортированное значение оболочки и использовали любую копию, которую унаследовал процесс супервизора фоновых сессий |

224| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Переопределить ограничение токенов по умолчанию для чтения файлов. Полезно, когда вам нужно полностью прочитать большие файлы |230| `CLAUDE_CODE_FILE_READ_MAX_OUTPUT_TOKENS` | Переопределить ограничение токенов по умолчанию для чтения файлов. Полезно, когда вам нужно полностью прочитать большие файлы |

225| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | {/* min-version: 2.1.172 */}Установите на `1`, чтобы принудительно включить сохранение транскрипта, истории приглашений и регистрацию `claude agents` даже когда этот `claude` был запущен изнутри другой сессии Claude Code. Используйте, когда унаследованное значение `CLAUDE_CODE_CHILD_SESSION`, например из сервера tmux, впервые запущенного инструментом Bash Claude Code, вызывает неправильную классификацию подлинной сессии верхнего уровня как вложенной. {/* min-version: 2.1.178 */}Начиная с v2.1.178, Claude Code автоматически обнаруживает случай tmux и игнорирует унаследованный маркер, поэтому tmux больше не нуждается в этой переменной. Также соблюдается на v2.1.169 и более ранних версиях; не имеет эффекта на v2.1.170 и v2.1.171, где обнаружение вложенной сессии, которое оно переопределяет, было удалено |231| `CLAUDE_CODE_FORCE_SESSION_PERSISTENCE` | {/* min-version: 2.1.172 */}Установите на `1`, чтобы принудительно включить сохранение транскрипта, истории приглашений и регистрацию `claude agents` даже когда этот `claude` был запущен изнутри другой сессии Claude Code. Используйте, когда унаследованное значение `CLAUDE_CODE_CHILD_SESSION`, например из сервера tmux, впервые запущенного инструментом Bash Claude Code, вызывает неправильную классификацию подлинной сессии верхнего уровня как вложенной. {/* min-version: 2.1.178 */}Начиная с v2.1.178, Claude Code автоматически обнаруживает случай tmux и игнорирует унаследованный маркер, поэтому tmux больше не нуждается в этой переменной. Также соблюдается на v2.1.169 и более ранних версиях; не имеет эффекта на v2.1.170 и v2.1.171, где обнаружение вложенной сессии, которое оно переопределяет, было удалено |

226| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | {/* min-version: 2.1.186 */}Установите на `1`, чтобы принудительно использовать зачёркивание для `~~text~~` в ответах Claude, когда ваш терминал это поддерживает, но не автоматически обнаруживается, например, через SSH без переданного `TERM_PROGRAM`. Без этого необнаруженные терминалы показывают буквальные маркеры `~~` вместо отрисовки текста как зачёркнутого. Требуется Claude Code v2.1.186 или более поздняя версия |232| `CLAUDE_CODE_FORCE_STRIKETHROUGH` | {/* min-version: 2.1.186 */}Установите на `1`, чтобы принудительно использовать зачёркивание для `~~text~~` в ответах Claude, когда ваш терминал это поддерживает, но не автоматически обнаруживается, например, через SSH без переданного `TERM_PROGRAM`. Без этого необнаруженные терминалы показывают буквальные маркеры `~~` вместо отрисовки текста как зачёркнутого. Требуется Claude Code v2.1.186 или более поздняя версия |

227| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Установите на `1`, чтобы принудительно включить режим DEC private 2026 [синхронизированный вывод](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036), когда ваш терминал его поддерживает, но не автоматически обнаруживается. Полезно для эмуляторов, таких как Emacs `eat`, которые реализуют BSU/ESU, но не отвечают на зонд возможностей. Не влияет на tmux |233| `CLAUDE_CODE_FORCE_SYNC_OUTPUT` | Установите на `1`, чтобы принудительно включить режим DEC private 2026 [синхронизированный вывод](https://gist.github.com/christianparpart/d8a62cc1ab659194337d73e399004036), когда ваш терминал его поддерживает, но не автоматически обнаруживается. Полезно для эмуляторов, таких как Emacs `eat`, которые реализуют BSU/ESU, но не отвечают на зонд возможностей. Не влияет на tmux. В отличие от `CLAUDE_CODE_NO_FLICKER`, который переключается на [полноэкранный режим](/ru/fullscreen), это не изменяет рендерер |

228| `CLAUDE_CODE_FORK_SUBAGENT` | Установите на `1`, чтобы позволить Claude порождать [разветвлённые subagents](/ru/sub-agents#fork-the-current-conversation), или на `0`, чтобы отключить их, переопределяя любое развёртывание на стороне сервера. При включении Claude может запросить тип subagent `fork` для порождения разветвления, subagent, который наследует полный контекст разговора вместо начала с нуля. Порождения без типа subagent по-прежнему используют общего назначения subagent, и все порождения subagent выполняются в фоне. Явная команда [`/fork`](/ru/commands) работает без этой переменной. Работает в интерактивном режиме и через SDK или `claude -p` |234| `CLAUDE_CODE_FORK_SUBAGENT` | Установите на `1`, чтобы позволить Claude порождать [разветвлённые subagents](/ru/sub-agents#fork-the-current-conversation), или на `0`, чтобы отключить их, переопределяя любое развёртывание на стороне сервера. При включении Claude может запросить тип subagent `fork` для порождения разветвления, subagent, который наследует полный контекст разговора вместо начала с нуля. Порождения без типа subagent по-прежнему используют общего назначения subagent, и все порождения subagent выполняются в фоне. Явная команда [`/fork`](/ru/commands) работает без этой переменной. Работает в интерактивном режиме и через SDK или `claude -p` |

229| `CLAUDE_CODE_GIT_BASH_PATH` | Только Windows: путь к исполняемому файлу Git Bash (`bash.exe`). Используйте, когда Git Bash установлен, но не в вашем PATH. См. [Настройка Windows](/ru/setup#set-up-on-windows) |235| `CLAUDE_CODE_GIT_BASH_PATH` | Только Windows: путь к исполняемому файлу Git Bash (`bash.exe`). Используйте, когда Git Bash установлен, но не в вашем PATH. См. [Настройка Windows](/ru/setup#set-up-on-windows) |

230| `CLAUDE_CODE_GLOB_HIDDEN` | Установите на `false`, чтобы исключить скрытые файлы из результатов, когда Claude вызывает [инструмент Glob](/ru/tools-reference#glob-tool-behavior). Включено по умолчанию. Не влияет на автодополнение файлов `@`, `ls`, Grep или Read |236| `CLAUDE_CODE_GLOB_HIDDEN` | Установите на `false`, чтобы исключить скрытые файлы из результатов, когда Claude вызывает [инструмент Glob](/ru/tools-reference#glob-tool-behavior). Включено по умолчанию. Не влияет на автодополнение файлов `@`, `ls`, Grep или Read |


261| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Путь к одному или нескольким каталогам seed plugins только для чтения, разделённым `:` на Unix или `;` на Windows. Используйте это, чтобы объединить предварительно заполненный каталог plugins в образ контейнера. Claude Code регистрирует marketplaces из этих каталогов при запуске и использует предварительно кэшированные plugins без повторного клонирования. См. [Предварительное заполнение plugins для контейнеров](/ru/plugin-marketplaces#pre-populate-plugins-for-containers) |267| `CLAUDE_CODE_PLUGIN_SEED_DIR` | Путь к одному или нескольким каталогам seed plugins только для чтения, разделённым `:` на Unix или `;` на Windows. Используйте это, чтобы объединить предварительно заполненный каталог plugins в образ контейнера. Claude Code регистрирует marketplaces из этих каталогов при запуске и использует предварительно кэшированные plugins без повторного клонирования. См. [Предварительное заполнение plugins для контейнеров](/ru/plugin-marketplaces#pre-populate-plugins-for-containers) |

262| `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY` | Установите на `1`, чтобы остановить Claude Code от передачи `-ExecutionPolicy Bypass` при порождении PowerShell для вызовов инструментов, hooks и команд строки состояния, и вместо этого соблюдать эффективную политику выполнения машины. По умолчанию Claude Code обходит политику выполнения в области процесса, поэтому скрипты `.ps1` и импорты модулей работают на установках Windows с ограничением по умолчанию. Обход области процесса никогда не переопределяет Group Policy `MachinePolicy` или `UserPolicy` независимо от этого параметра |268| `CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY` | Установите на `1`, чтобы остановить Claude Code от передачи `-ExecutionPolicy Bypass` при порождении PowerShell для вызовов инструментов, hooks и команд строки состояния, и вместо этого соблюдать эффективную политику выполнения машины. По умолчанию Claude Code обходит политику выполнения в области процесса, поэтому скрипты `.ps1` и импорты модулей работают на установках Windows с ограничением по умолчанию. Обход области процесса никогда не переопределяет Group Policy `MachinePolicy` или `UserPolicy` независимо от этого параметра |

263| `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS` | {/* min-version: 2.1.182 */}Максимальное время в миллисекундах, которое [неинтерактивный режим](/ru/headless#background-tasks-at-exit) с флагом `-p` ждёт после финального хода для фоновых subagents и workflows, результат которых является частью вывода. По умолчанию: `600000`, или 10 минут. Когда лимит превышен, оставшиеся фоновые задачи завершаются и процесс выходит. Установите на `0`, чтобы ждать бесконечно. Этот лимит отделён от пятисекундного периода благодати, который применяется к простым фоновым оболочкам |269| `CLAUDE_CODE_PRINT_BG_WAIT_CEILING_MS` | {/* min-version: 2.1.182 */}Максимальное время в миллисекундах, которое [неинтерактивный режим](/ru/headless#background-tasks-at-exit) с флагом `-p` ждёт после финального хода для фоновых subagents и workflows, результат которых является частью вывода. По умолчанию: `600000`, или 10 минут. Когда лимит превышен, оставшиеся фоновые задачи завершаются и процесс выходит. Установите на `0`, чтобы ждать бесконечно. Этот лимит отделён от пятисекундного периода благодати, который применяется к простым фоновым оболочкам |

270| `CLAUDE_CODE_PROCESS_WRAPPER` | {/* min-version: 2.1.208 */}Запустить процессы Claude Code, которые он запускает из собственного бинарного файла, через обёртку исполняемого файла, заданную как префикс argv, такой как `/opt/corp/launcher`. Охватывает фоновый сервис, который размещает [представление агента](/ru/agent-view) сессии, каждую сессию, которую он порождает, и перезапуск Claude Code выполняет себя, чтобы завершить установку обновления. Первый токен должен быть абсолютным путём исполняемого файла, который заканчивается запуском `exec "$@"`, и большинство пусковых установок — это один путь. Значение — это список аргументов, а не команда оболочки: пробелы разделяют токены, двойные кавычки группируют путь, содержащий пробелы, и значение, которое начинается с `[`, читается как JSON массив строк. Установите это в блоке `env` пользовательских или [управляемых параметров](/ru/permissions#managed-settings), а не как экспорт оболочки, поэтому отделённый фоновый сервис его наследует; параметры проекта и локальные параметры не могут его установить. Расширение VS Code настраивает свой собственный пусковой механизм отдельно через его параметр `claudeProcessWrapper`. Игнорируется на Windows. `CLAUDE_CODE_SHELL_PREFIX` — это отдельный контроль: он обёртывает команды bash, которые Claude Code запускает как одну строку в кавычках оболочки, в то время как эта переменная обёртывает собственные процессы Claude Code как префикс argv. См. [Запустить Claude Code за корпоративным пусковым механизмом](/ru/corporate-launcher) |

264| `CLAUDE_CODE_PROPAGATE_TRACEPARENT` | {/* min-version: 2.1.152 */}Установите на `1`, чтобы распространять контекст трассировки W3C, когда `ANTHROPIC_BASE_URL` указывает на пользовательский прокси. Распространение охватывает заголовок `traceparent` на запросах модели и HTTP MCP и переменную окружения `TRACEPARENT` для подпроцессов Bash, PowerShell и hook. По умолчанию распространение включено только при прямом подключении к Anthropic API. Добавлено в v2.1.152. См. [Трассировки (beta)](/ru/monitoring-usage#traces-beta) |271| `CLAUDE_CODE_PROPAGATE_TRACEPARENT` | {/* min-version: 2.1.152 */}Установите на `1`, чтобы распространять контекст трассировки W3C, когда `ANTHROPIC_BASE_URL` указывает на пользовательский прокси. Распространение охватывает заголовок `traceparent` на запросах модели и HTTP MCP и переменную окружения `TRACEPARENT` для подпроцессов Bash, PowerShell и hook. По умолчанию распространение включено только при прямом подключении к Anthropic API. Добавлено в v2.1.152. См. [Трассировки (beta)](/ru/monitoring-usage#traces-beta) |

265| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Установлено хост-платформами, которые встраивают Claude Code и управляют маршрутизацией поставщика модели от его имени. При установке переменные выбора поставщика, конечной точки и аутентификации, такие как `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL` и `ANTHROPIC_API_KEY` в файлах параметров, игнорируются, поэтому параметры пользователя не могут переопределить маршрутизацию хоста. Автоматический отказ от телеметрии для Amazon Bedrock, Google Cloud's Agent Platform и Microsoft Foundry также пропускается, поэтому телеметрия следует стандартному отказу `DISABLE_TELEMETRY`. См. [Поведение по умолчанию по поставщику API](/ru/data-usage#default-behaviors-by-api-provider) |272| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Установлено хост-платформами, которые встраивают Claude Code и управляют маршрутизацией поставщика модели от его имени. При установке переменные выбора поставщика, конечной точки и аутентификации, такие как `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL` и `ANTHROPIC_API_KEY` в файлах параметров, игнорируются, поэтому параметры пользователя не могут переопределить маршрутизацию хоста. Автоматический отказ от телеметрии для Amazon Bedrock, Google Cloud's Agent Platform и Microsoft Foundry также пропускается, поэтому телеметрия следует стандартному отказу `DISABLE_TELEMETRY`. См. [Поведение по умолчанию по поставщику API](/ru/data-usage#default-behaviors-by-api-provider) |

266| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Установите на `1`, чтобы позволить прокси выполнять разрешение DNS вместо вызывающей стороны. Согласитесь для сред, где прокси должен обрабатывать разрешение имён хостов |273| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Установите на `1`, чтобы позволить прокси выполнять разрешение DNS вместо вызывающей стороны. Согласитесь для сред, где прокси должен обрабатывать разрешение имён хостов |


279| `CLAUDE_CODE_SIMPLE` | Установите на `1`, чтобы запустить с минимальным системным приглашением и только инструментами Bash, чтения файлов и редактирования файлов. MCP tools из `--mcp-config` по-прежнему доступны. Отключает автоматическое обнаружение hooks, skills, plugins, MCP servers, автоматическую память и CLAUDE.md. OAuth токены и учётные данные цепочки ключей не читаются, поэтому аутентификация Anthropic должна поступать из `ANTHROPIC_API_KEY` или `apiKeyHelper` в `--settings`. Эквивалент передачи [`--bare`](/ru/headless#start-faster-with-bare-mode) |286| `CLAUDE_CODE_SIMPLE` | Установите на `1`, чтобы запустить с минимальным системным приглашением и только инструментами Bash, чтения файлов и редактирования файлов. MCP tools из `--mcp-config` по-прежнему доступны. Отключает автоматическое обнаружение hooks, skills, plugins, MCP servers, автоматическую память и CLAUDE.md. OAuth токены и учётные данные цепочки ключей не читаются, поэтому аутентификация Anthropic должна поступать из `ANTHROPIC_API_KEY` или `apiKeyHelper` в `--settings`. Эквивалент передачи [`--bare`](/ru/headless#start-faster-with-bare-mode) |

280| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Установите на `1`, чтобы использовать минимальное системное приглашение и свёрнутые описания инструментов на любой модели. Установите на `0`, `false`, `no` или `off`, чтобы отказаться даже на моделях, где эксперимент или конфигурация сервера в противном случае включили бы это. Полный набор инструментов, hooks, MCP servers и обнаружение CLAUDE.md остаются включены |287| `CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT` | Установите на `1`, чтобы использовать минимальное системное приглашение и свёрнутые описания инструментов на любой модели. Установите на `0`, `false`, `no` или `off`, чтобы отказаться даже на моделях, где эксперимент или конфигурация сервера в противном случае включили бы это. Полный набор инструментов, hooks, MCP servers и обнаружение CLAUDE.md остаются включены |

281| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | Пропустить аутентификацию на стороне клиента для [Claude Platform on AWS](/ru/claude-platform-on-aws), для шлюзов, которые подписывают запросы сами |288| `CLAUDE_CODE_SKIP_ANTHROPIC_AWS_AUTH` | Пропустить аутентификацию на стороне клиента для [Claude Platform on AWS](/ru/claude-platform-on-aws), для шлюзов, которые подписывают запросы сами |

289| `CLAUDE_CODE_SKIP_AWS_CRED_CACHE` | {/* min-version: 2.1.207 */}Установите на `1`, чтобы отключить кэш в процессе учётных данных, разрешённых из цепи поставщика учётных данных AWS по умолчанию, поэтому Claude Code разрешает цепь при каждом запросе API. С отключённым кэшем профиль, поддерживаемый SSO, запрашивает учётные данные из IAM Identity Center при каждом запросе. См. [кэширование учётных данных и тайм-аут разрешения](/ru/amazon-bedrock#credential-caching-and-resolution-timeout). Требуется Claude Code v2.1.207 или более поздняя версия |

282| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Пропустить аутентификацию AWS для Amazon Bedrock (например, при использовании шлюза LLM) |290| `CLAUDE_CODE_SKIP_BEDROCK_AUTH` | Пропустить аутентификацию AWS для Amazon Bedrock (например, при использовании шлюза LLM) |

283| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Пропустить аутентификацию Azure для Microsoft Foundry, для прокси или шлюза, который внедряет свой собственный заголовок `Authorization`. Claude Code отправляет запросы без учётных данных Azure и сохраняет заголовок `Authorization`, который вы предоставляете, например через `ANTHROPIC_CUSTOM_HEADERS`. Игнорируется, когда установлен `ANTHROPIC_FOUNDRY_API_KEY` или `ANTHROPIC_FOUNDRY_AUTH_TOKEN`. {/* min-version: 2.1.203 */}До v2.1.203 эта переменная оставляла клиент Microsoft Foundry неспособным отправлять запросы, если ключ API также не был установлен |291| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Пропустить аутентификацию Azure для Microsoft Foundry, для прокси или шлюза, который внедряет свой собственный заголовок `Authorization`. Claude Code отправляет запросы без учётных данных Azure и сохраняет заголовок `Authorization`, который вы предоставляете, например через `ANTHROPIC_CUSTOM_HEADERS`. Игнорируется, когда установлен `ANTHROPIC_FOUNDRY_API_KEY` или `ANTHROPIC_FOUNDRY_AUTH_TOKEN`. {/* min-version: 2.1.203 */}До v2.1.203 эта переменная оставляла клиент Microsoft Foundry неспособным отправлять запросы, если ключ API также не был установлен |

284| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Пропустить аутентификацию AWS для Amazon Bedrock Mantle (например, при использовании шлюза LLM) |292| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Пропустить аутентификацию AWS для Amazon Bedrock Mantle (например, при использовании шлюза LLM) |


295| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Установите на `false`, чтобы отключить подсветку синтаксиса в выводе diff. Полезно, когда цвета мешают вашей настройке терминала. Чтобы также отключить подсветку в блоках кода и предпросмотрах файлов, используйте параметр [`syntaxHighlightingDisabled`](/ru/settings) |303| `CLAUDE_CODE_SYNTAX_HIGHLIGHT` | Установите на `false`, чтобы отключить подсветку синтаксиса в выводе diff. Полезно, когда цвета мешают вашей настройке терминала. Чтобы также отключить подсветку в блоках кода и предпросмотрах файлов, используйте параметр [`syntaxHighlightingDisabled`](/ru/settings) |

296| `CLAUDE_CODE_TASK_LIST_ID` | Поделитесь списком задач между сессиями. Установите один и тот же ID в нескольких экземплярах Claude Code для координации общего списка задач. См. [Список задач](/ru/interactive-mode#task-list) |304| `CLAUDE_CODE_TASK_LIST_ID` | Поделитесь списком задач между сессиями. Установите один и тот же ID в нескольких экземплярах Claude Code для координации общего списка задач. См. [Список задач](/ru/interactive-mode#task-list) |

297| `CLAUDE_CODE_TEAM_NAME` | Имя команды агентов, к которой принадлежит этот товарищ. Установите автоматически на членах [команды агентов](/ru/agent-teams) |305| `CLAUDE_CODE_TEAM_NAME` | Имя команды агентов, к которой принадлежит этот товарищ. Установите автоматически на членах [команды агентов](/ru/agent-teams) |

306| `CLAUDE_CODE_TEAM_TEARDOWN_PARK_TIMEOUT_MS` | {/* min-version: 2.1.206 */}Переопределить, в миллисекундах, как долго неинтерактивная сессия ждёт при выходе, чтобы её [команда агентов](/ru/agent-teams) завершила разборку. Принимает 1000 до 60000; значение вне диапазона игнорируется и применяется значение по умолчанию 10000. Требуется Claude Code v2.1.206 или более поздняя версия |

298| `CLAUDE_CODE_TMPDIR` | Переопределить временный каталог, используемый для внутренних временных файлов. Claude Code добавляет `/claude-{uid}/` на Unix или `/claude/` на Windows к этому пути. По умолчанию: `/tmp` на macOS, `os.tmpdir()` на Linux и Windows. {/* min-version: 2.1.161 */}Начиная с v2.1.161, на macOS и Linux [изолированные](/ru/sandboxing) подпроцессы Bash получают короткий резервный `$TMPDIR` в системном стандарте, когда ваше переопределение — это длинный путь, так как некоторые инструменты не работают, когда пути временных файлов становятся слишком длинными. Неизолированные команды Bash наследуют `$TMPDIR` вашей оболочки без изменений. Собственные временные файлы Claude Code всегда используют ваше переопределение |307| `CLAUDE_CODE_TMPDIR` | Переопределить временный каталог, используемый для внутренних временных файлов. Claude Code добавляет `/claude-{uid}/` на Unix или `/claude/` на Windows к этому пути. По умолчанию: `/tmp` на macOS, `os.tmpdir()` на Linux и Windows. {/* min-version: 2.1.161 */}Начиная с v2.1.161, на macOS и Linux [изолированные](/ru/sandboxing) подпроцессы Bash получают короткий резервный `$TMPDIR` в системном стандарте, когда ваше переопределение — это длинный путь, так как некоторые инструменты не работают, когда пути временных файлов становятся слишком длинными. Неизолированные команды Bash наследуют `$TMPDIR` вашей оболочки без изменений. Собственные временные файлы Claude Code всегда используют ваше переопределение |

299| `CLAUDE_CODE_TMUX_TRUECOLOR` | Установите на `1`, чтобы разрешить вывод 24-битного truecolor внутри tmux. По умолчанию Claude Code ограничивает 256 цветами, когда установлена `$TMUX`, потому что tmux не пропускает последовательности выхода truecolor, если не настроен. Установите это после добавления `set -ga terminal-overrides ',*:Tc'` в ваш `~/.tmux.conf`. См. [Конфигурация терминала](/ru/terminal-config) для других параметров tmux |308| `CLAUDE_CODE_TMUX_TRUECOLOR` | Установите на `1`, чтобы разрешить вывод 24-битного truecolor внутри tmux. По умолчанию Claude Code ограничивает 256 цветами, когда установлена `$TMUX`, потому что tmux не пропускает последовательности выхода truecolor, если не настроен. Установите это после добавления `set -ga terminal-overrides ',*:Tc'` в ваш `~/.tmux.conf`. См. [Конфигурация терминала](/ru/terminal-config) для других параметров tmux |

300| `CLAUDE_CODE_USE_ANTHROPIC_AWS` | Использовать [Claude Platform on AWS](/ru/claude-platform-on-aws) |309| `CLAUDE_CODE_USE_ANTHROPIC_AWS` | Использовать [Claude Platform on AWS](/ru/claude-platform-on-aws) |


318| `DISABLE_AUTO_COMPACT` | Установите на `1`, чтобы отключить автоматическое сжатие при приближении к лимиту контекста. Команда `/compact` остаётся доступной. Используйте, когда вы хотите явный контроль над тем, когда происходит сжатие |327| `DISABLE_AUTO_COMPACT` | Установите на `1`, чтобы отключить автоматическое сжатие при приближении к лимиту контекста. Команда `/compact` остаётся доступной. Используйте, когда вы хотите явный контроль над тем, когда происходит сжатие |

319| `DISABLE_COMPACT` | Установите на `1`, чтобы отключить все сжатие: как автоматическое сжатие, так и команду `/compact` |328| `DISABLE_COMPACT` | Установите на `1`, чтобы отключить все сжатие: как автоматическое сжатие, так и команду `/compact` |

320| `DISABLE_COST_WARNINGS` | Установите на `1`, чтобы отключить сообщения предупреждения о стоимости |329| `DISABLE_COST_WARNINGS` | Установите на `1`, чтобы отключить сообщения предупреждения о стоимости |

321| `DISABLE_DOCTOR_COMMAND` | Установите на `1`, чтобы скрыть команду `/doctor`. Полезно для управляемых развёртываний, где пользователи не должны запускать диагностику установки |330| `DISABLE_DOCTOR_COMMAND` | Установите на `1`, чтобы скрыть команду `/doctor`. Полезно для управляемых развёртываний, где пользователи не должны запускать диагностику установки. Не влияет на команду терминала `claude doctor`. {/* min-version: 2.1.205 */}До v2.1.205 эта переменная скрывала экран диагностики `/doctor` |

322| `DISABLE_ERROR_REPORTING` | Установите на `1`, чтобы отказаться от отчётов об ошибках Sentry |331| `DISABLE_ERROR_REPORTING` | Установите на `1`, чтобы отказаться от отчётов об ошибках |

323| `DISABLE_EXTRA_USAGE_COMMAND` | Установите на `1`, чтобы скрыть команду `/usage-credits`, которая позволяет пользователям приобретать дополнительное использование сверх лимитов скорости |332| `DISABLE_EXTRA_USAGE_COMMAND` | Установите на `1`, чтобы скрыть команду `/usage-credits`, которая позволяет пользователям приобретать дополнительное использование сверх лимитов скорости |

324| `DISABLE_FEEDBACK_COMMAND` | Установите на `1`, чтобы отключить команду `/feedback`. Также принимается старое имя `DISABLE_BUG_COMMAND` |333| `DISABLE_FEEDBACK_COMMAND` | Установите на `1`, чтобы отключить команду `/feedback`. Также принимается старое имя `DISABLE_BUG_COMMAND` |

325| `DISABLE_GROWTHBOOK` | Установите на `1`, чтобы отключить получение флагов функций GrowthBook и использовать значения по умолчанию кода для каждого флага. Логирование событий телеметрии остаётся включённым, если также не установлена переменная `DISABLE_TELEMETRY` |334| `DISABLE_GROWTHBOOK` | Установите на `1`, чтобы отключить получение флагов функций GrowthBook и использовать значения по умолчанию кода для каждого флага. Логирование событий телеметрии остаётся включённым, если также не установлена переменная `DISABLE_TELEMETRY` |


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

339| `DO_NOT_TRACK` | Установите на `1`, чтобы отказаться от телеметрии. Эквивалент установки `DISABLE_TELEMETRY`. Claude Code признаёт это как кроссплатформенное соглашение, признанное многими инструментами разработчика |348| `DO_NOT_TRACK` | Установите на `1`, чтобы отказаться от телеметрии. Эквивалент установки `DISABLE_TELEMETRY`. Claude Code признаёт это как кроссплатформенное соглашение, признанное многими инструментами разработчика |

340| `ENABLE_CLAUDEAI_MCP_SERVERS` | Установите на `false`, чтобы отключить [MCP servers claude.ai](/ru/mcp#use-mcp-servers-from-claude-ai) в Claude Code. Включено по умолчанию для вошедших в систему пользователей. Чтобы отключить для каждого проекта или организации, установите [`disableClaudeAiConnectors`](/ru/settings#available-settings) в параметрах вместо этого |349| `ENABLE_CLAUDEAI_MCP_SERVERS` | Установите на `false`, чтобы отключить [MCP servers claude.ai](/ru/mcp#use-mcp-servers-from-claude-ai) в Claude Code. Включено по умолчанию для вошедших в систему пользователей. Чтобы отключить для каждого проекта или организации, установите [`disableClaudeAiConnectors`](/ru/settings#available-settings) в параметрах вместо этого |

341| `ENABLE_PROMPT_CACHING_1H` | Установите на `1`, чтобы запросить TTL кэша приглашений в 1 час вместо стандартных 5 минут. Предназначено для пользователей ключа API, [Amazon Bedrock](/ru/amazon-bedrock), [Google Cloud's Agent Platform](/ru/google-vertex-ai), [Microsoft Foundry](/ru/microsoft-foundry) и [Claude Platform on AWS](/ru/claude-platform-on-aws). Пользователи подписки получают TTL в 1 час автоматически. Записи кэша в 1 час выставляются по более выс окой ставке |350| `ENABLE_PROMPT_CACHING_1H` | Установите на `1`, чтобы запросить TTL кэша приглашений в 1 час вместо стандартных 5 минут. Предназначено для пользователей ключа API, [Amazon Bedrock](/ru/amazon-bedrock), [Google Cloud's Agent Platform](/ru/google-vertex-ai), [Microsoft Foundry](/ru/microsoft-foundry) и [Claude Platform on AWS](/ru/claude-platform-on-aws). Пользователи подписки получают TTL в 1 час автомат ически. Записи кэша в 1 час выставляются по более высокой ставке |

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

343| `ENABLE_TOOL_SEARCH` | Управляет [поиском инструментов MCP](/ru/mcp#scale-with-mcp-tool-search). Не установлено: все инструменты MCP отложены по умолчанию, но загружены заранее на Google Cloud's Agent Platform или когда `ANTHROPIC_BASE_URL` указывает на хост, не являющийся хостом первой стороны. Значения: `true` (всегда откладывать и отправлять заголовок beta, запросы не удаются на моделях Google Cloud's Agent Platform ранее Sonnet 4.5 или Opus 4.5, или на прокси, которые не поддерживают `tool_reference`), `auto` (режим порога: загружать заранее, если инструменты подходят в пределах 10% контекста), `auto:N` (пользовательский порог, например, `auto:5` для 5%), `false` (загружать все заранее) |352| `ENABLE_TOOL_SEARCH` | Управляет [поиском инструментов MCP](/ru/mcp#scale-with-mcp-tool-search). Не установлено: все инструменты MCP отложены по умолчанию, но загружены заранее на Google Cloud's Agent Platform или когда `ANTHROPIC_BASE_URL` указывает на хост, не являющийся хостом первой стороны. Значения: `true` (всегда откладывать и отправлять заголовок beta, запросы не удаются на моделях Google Cloud's Agent Platform ранее Sonnet 4.5 или Opus 4.5, или на прокси, которые не поддерживают `tool_reference`), `auto` (режим порога: загружать заранее, если инструменты подходят в пределах 10% контекста), `auto:N` (пользовательский порог, например, `auto:5` для 5%), `false` (загружать все заранее). Игнорируется, когда установлен `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS`, который принудительно загружает все инструменты заранее |

344| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Установите на любое непустое значение, чтобы все модели, а не только Opus, перестали повторять попытки с повторной ошибкой перегрузки, когда резервная модель не настроена. {/* min-version: 2.1.160 */}Начиная с v2.1.160, настроенная [цепь резервных моделей](/ru/model-config#fallback-model-chains) срабатывает при повторных ошибках перегрузки для любой основной модели, поэтому эта переменная не влияет на переключение на резервную модель |353| `FALLBACK_FOR_ALL_PRIMARY_MODELS` | Установите на любое непустое значение, чтобы все модели, а не только Opus, перестали повторять попытки с повторной ошибкой перегрузки, когда резервная модель не настроена. {/* min-version: 2.1.160 */}Начиная с v2.1.160, настроенная [цепь резервных моделей](/ru/model-config#fallback-model-chains) срабатывает при повторных ошибках перегрузки для любой основной модели, поэтому эта переменная не влияет на переключение на резервную модель |

345| `FORCE_AUTOUPDATE_PLUGINS` | Установите на `1`, чтобы принудительно обновлять plugins автоматически, даже если основной автоматический обновитель отключен через `DISABLE_AUTOUPDATER` |354| `FORCE_AUTOUPDATE_PLUGINS` | Установите на `1`, чтобы принудительно обновлять plugins автоматически, даже если основной автоматический обновитель отключен через `DISABLE_AUTOUPDATER` |

355| `FORCE_HYPERLINK` | Установите на `1`, чтобы включить кликабельные гиперссылки OSC 8, когда ваш терминал их поддерживает, но не автоматически обнаруживается, или `0`, чтобы отключить их |

346| `FORCE_PROMPT_CACHING_5M` | Установите на `1`, чтобы принудительно использовать TTL кэша приглашений в 5 минут, даже когда в противном случае применялся бы TTL в 1 час. Переопределяет `ENABLE_PROMPT_CACHING_1H` |356| `FORCE_PROMPT_CACHING_5M` | Установите на `1`, чтобы принудительно использовать TTL кэша приглашений в 5 минут, даже когда в противном случае применялся бы TTL в 1 час. Переопределяет `ENABLE_PROMPT_CACHING_1H` |

347| `HTTP_PROXY` | Укажите HTTP прокси-сервер для сетевых соединений |357| `HTTP_PROXY` | Укажите HTTP прокси-сервер для сетевых соединений |

348| `HTTPS_PROXY` | Укажите HTTPS прокси-сервер для сетевых соединений |358| `HTTPS_PROXY` | Укажите HTTPS прокси-сервер для сетевых соединений |


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

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

359| `MCP_TIMEOUT` | Тайм-аут в миллисекундах для запуска MCP server (по умолчанию: 30000, или 30 секунд) |369| `MCP_TIMEOUT` | Тайм-аут в миллисекундах для запуска MCP server (по умолчанию: 30000, или 30 секунд) |

360| `MCP_TOOL_TIMEOUT` | Тайм-аут в миллисекундах для выполнения инструмента MCP (по умолчанию: 100000000, примерно 28 часов). Поле `timeout` для каждого сервера в `.mcp.json` переопределяет это для этого сервера. {/* min-version: 2.1.203 */}Поле `timeout` для каждого сервера не менее 1000 также устанавливает минимальное окно неактивности для вызовов инструментов этого сервера, поэтому `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` никогда не прерывает их раньше; этот пол требует Claude Code v2.1.203 или более поздней версии. Для переменной окружения значения ниже 1000 ограничиваются одной секундой; для поля для каждого сервера значения ниже 1000 игнорируются |370| `MCP_TOOL_TIMEOUT` | Тайм-аут в миллисекундах для выполнения инструмента MCP (по умолчанию: 100000000, примерно 28 часов). Для HTTP, SSE или claude.ai connector сервера каждый запрос также истекает через 60 секунд по умолчанию; установите эту переменную или поле `timeout` для каждого сервера выше 60000, чтобы повысить этот лимит для каждого запроса. Более низкое значение по-прежнему сокращает общий тайм-аут выполнения инструмента, но оставляет лимит для каждого запроса на 60 секунд. Stdio и WebSocket серверы не имеют таймера для каждого запроса. Поле `timeout` для каждого сервера в `.mcp.json` переопределяет это для этого сервера. {/* min-version: 2.1.203 */}Поле `timeout` для каждого сервера не менее 1000 также устанавливает минимальное окно неактивности для вызовов инструментов этого сервера, поэтому `CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT` никогда не прерывает их раньше; этот пол требует Claude Code v2.1.203 или более поздней версии. Для переменной окружения значения ниже 1000 ограничиваются одной секундой; для поля для каждого сервера значения ниже 1000 игнорируются |

361| `NO_PROXY` | Список доменов и IP-адресов, на которые запросы будут отправляться напрямую, обходя прокси |371| `NO_PROXY` | Список доменов и IP-адресов, на которые запросы будут отправляться напрямую, обходя прокси |

362| `OTEL_LOG_ASSISTANT_RESPONSES` | {/* min-version: 2.1.193 */}Установите на `1`, чтобы включить текст ответа модели на события логирования OpenTelemetry `assistant_response`. Когда не установлено, используется значение `OTEL_LOG_USER_PROMPTS`. Установите на `0`, чтобы сохранить ответы скрытыми, даже когда установлен `OTEL_LOG_USER_PROMPTS`. Требуется Claude Code v2.1.193 или более поздняя версия. См. [Мониторинг](/ru/monitoring-usage#assistant-response-event) |372| `OTEL_LOG_ASSISTANT_RESPONSES` | {/* min-version: 2.1.193 */}Установите на `1`, чтобы включить текст ответа модели на события логирования OpenTelemetry `assistant_response`. Когда не установлено, используется значение `OTEL_LOG_USER_PROMPTS`. Установите на `0`, чтобы сохранить ответы скрытыми, даже когда установлен `OTEL_LOG_USER_PROMPTS`. Требуется Claude Code v2.1.193 или более поздняя версия. См. [Мониторинг](/ru/monitoring-usage#assistant-response-event) |

363| `OTEL_LOG_RAW_API_BODIES` | Выдавать JSON запроса и ответа Anthropic Messages API как события логирования `api_request_body` / `api_response_body`. Установите на `1` для встроенных тел, усечённых на 60 КБ, или `file:<dir>` для записи неусечённых тел на диск и выдачи пути `body_ref` вместо этого. Отключено по умолчанию; тела включают всю историю разговора. См. [Мониторинг](/ru/monitoring-usage#api-request-body-event) |373| `OTEL_LOG_RAW_API_BODIES` | Выдавать JSON запроса и ответа Anthropic Messages API как события логирования `api_request_body` / `api_response_body`. Установите на `1` для встроенных тел, усечённых на 60 КБ, или `file:<dir>` для записи неусечённых тел на диск и выдачи пути `body_ref` вместо этого. Отключено по умолчанию; тела включают всю историю разговора. См. [Мониторинг](/ru/monitoring-usage#api-request-body-event) |

hooks.md +63 −63

Details

7> Справочник по событиям hook Claude Code, схеме конфигурации, форматам JSON входа/выхода, кодам выхода, асинхронным hooks, HTTP hooks, prompt hooks и MCP tool hooks.7> Справочник по событиям hook Claude Code, схеме конфигурации, форматам JSON входа/выхода, кодам выхода, асинхронным hooks, HTTP hooks, prompt hooks и MCP tool hooks.

8 8 

9<Tip>9<Tip>

10 Для краткого руководства с примерами см. [Автоматизация рабочих процессов с помощью hooks](/ru/hooks-guide).10 Для краткого руководства с примерами см. [Автоматизация рабочих процессов с помощью hooks](/docs/ru/hooks-guide).

11</Tip>11</Tip>

12 12 

13Hooks — это определяемые пользователем команды оболочки, конечные точки HTTP или подсказки LLM, которые выполняются автоматически в определённых точках жизненного цикла Claude Code. Используйте этот справочник для поиска схем событий, параметров конфигурации, форматов JSON входа/выхода и расширенных функций, таких как асинхронные hooks, HTTP hooks и MCP tool hooks. Если вы настраиваете hooks впервые, начните с [руководства](/ru/hooks-guide).13Hooks — это определяемые пользователем команды оболочки, конечные точки HTTP или подсказки LLM, которые выполняются автоматически в определённых точках жизненного цикла Claude Code. Используйте этот справочник для поиска схем событий, параметров конфигурации, форматов JSON входа/выхода и расширенных функций, таких как асинхронные hooks, HTTP hooks и MCP tool hooks. Если вы настраиваете hooks впервые, начните с [руководства](/docs/ru/hooks-guide).

14 14 

15<h2 id="hook-lifecycle">15<h2 id="hook-lifecycle">

16 Жизненный цикл hook16 Жизненный цикл hook


52| `TaskCompleted` | When a task is being marked as completed |52| `TaskCompleted` | When a task is being marked as completed |

53| `Stop` | When Claude finishes responding |53| `Stop` | When Claude finishes responding |

54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |54| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

55| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |55| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |56| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

57| `ConfigChange` | When a configuration file changes during a session |57| `ConfigChange` | When a configuration file changes during a session |

58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |58| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |59| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

60| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |60| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

61| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |61| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

62| `PreCompact` | Before context compaction |62| `PreCompact` | Before context compaction |

63| `PostCompact` | After context compaction completes |63| `PostCompact` | After context compaction completes |

64| `Elicitation` | When an MCP server requests user input during a tool call |64| `Elicitation` | When an MCP server requests user input during a tool call |


147 }147 }

148 ```148 ```

149 149 

150 Если бы команда была более безопасным вариантом `rm`, таким как `rm file.txt`, скрипт выполнил бы `exit 0` вместо этого. Код выхода 0 без вывода означает, что hook не имеет решения для отчёта, поэтому вызов инструмента продолжается через нормальный [поток разрешений](/ru/permissions). Hook может отклонить вызов, но молчание не одобряет его.150 Если бы команда была более безопасным вариантом `rm`, таким как `rm file.txt`, скрипт выполнил бы `exit 0` вместо этого. Код выхода 0 без вывода означает, что hook не имеет решения для отчёта, поэтому вызов инструмента продолжается через нормальный [поток разрешений](/docs/ru/permissions). Hook может отклонить вызов, но молчание не одобряет его.

151 </Step>151 </Step>

152 152 

153 <Step title="Claude Code действует на основе результата">153 <Step title="Claude Code действует на основе результата">


185| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репозитории |185| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репозитории |

186| `.claude/settings.local.json` | Один проект | Нет, игнорируется git когда Claude Code создаёт его |186| `.claude/settings.local.json` | Один проект | Нет, игнорируется git когда Claude Code создаёт его |

187| Управляемые параметры политики | Организация | Да, контролируется администратором |187| Управляемые параметры политики | Организация | Да, контролируется администратором |

188| [Plugin](/ru/plugins) `hooks/hooks.json` | Когда плагин включен | Да, поставляется с плагином |188| [Plugin](/docs/ru/plugins) `hooks/hooks.json` | Когда плагин включен | Да, поставляется с плагином |

189| [Skill](/ru/skills) или [agent](/ru/sub-agents) frontmatter | Пока компонент активен | Да, определено в файле компонента |189| [Skill](/docs/ru/skills) или [agent](/docs/ru/sub-agents) frontmatter | Пока компонент активен | Да, определено в файле компонента |

190 190 

191Для получения подробной информации о разрешении файлов настроек см. [settings](/ru/settings). Администраторы предприятия могут использовать `allowManagedHooksOnly` для блокировки пользовательских, проектных и плагинных hooks. Hooks из плагинов, принудительно включённых в управляемых параметрах `enabledPlugins`, исключены, поэтому администраторы могут распространять проверенные hooks через организационный marketplace. См. [Hook configuration](/ru/settings#hook-configuration).191Для получения подробной информации о разрешении файлов настроек см. [settings](/docs/ru/settings). Администраторы предприятия могут использовать `allowManagedHooksOnly` для блокировки пользовательских, проектных и плагинных hooks. Hooks из плагинов, принудительно включённых в управляемых параметрах `enabledPlugins`, исключены, поэтому администраторы могут распространять проверенные hooks через организационный marketplace. См. [Hook configuration](/docs/ru/settings#hook-configuration).

192 192 

193<h3 id="matcher-patterns">193<h3 id="matcher-patterns">

194 Matcher patterns194 Matcher patterns


258 258 

259`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay` и `CwdChanged` не поддерживают фильтры и всегда срабатывают при каждом вхождении. Если вы добавите поле `matcher` к этим событиям, оно будет молча проигнорировано.259`UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `MessageDisplay` и `CwdChanged` не поддерживают фильтры и всегда срабатывают при каждом вхождении. Если вы добавите поле `matcher` к этим событиям, оно будет молча проигнорировано.

260 260 

261Для событий инструмента вы можете фильтровать более узко, установив поле [`if`](#common-fields) на отдельных обработчиках hook. `if` использует [синтаксис правила разрешения](/ru/permissions) для совпадения с именем инструмента и аргументами вместе, поэтому `"Bash(git *)"` запускается когда любая подкоманда входа Bash совпадает с `git *` и `"Edit(*.ts)"` запускается только для файлов TypeScript.261Для событий инструмента вы можете фильтровать более узко, установив поле [`if`](#common-fields) на отдельных обработчиках hook. `if` использует [синтаксис правила разрешения](/docs/ru/permissions) для совпадения с именем инструмента и аргументами вместе, поэтому `"Bash(git *)"` запускается когда любая подкоманда входа Bash совпадает с `git *` и `"Edit(*.ts)"` запускается только для файлов TypeScript.

262 262 

263<h4 id="match-mcp-tools">263<h4 id="match-mcp-tools">

264 Match MCP tools264 Match MCP tools

265</h4>265</h4>

266 266 

267[MCP](/ru/mcp) server инструменты отображаются как обычные инструменты в событиях инструментов (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), поэтому вы можете совпадать с ними так же, как с любым другим именем инструмента.267[MCP](/docs/ru/mcp) server инструменты отображаются как обычные инструменты в событиях инструментов (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied`), поэтому вы можете совпадать с ними так же, как с любым другим именем инструмента.

268 268 

269MCP инструменты следуют шаблону именования `mcp__<server>__<tool>`, например:269MCP инструменты следуют шаблону именования `mcp__<server>__<tool>`, например:

270 270 


280 280 

281Дефисы в наборе точного совпадения требуют Claude Code v2.1.195 или позже. На более ранних версиях голый дефисный префикс, такой как `mcp__brave-search`, оценивается как регулярное выражение без привязки и совпадает с каждым инструментом с этого сервера. Форма `mcp__brave-search__.*` работает на каждой версии.281Дефисы в наборе точного совпадения требуют Claude Code v2.1.195 или позже. На более ранних версиях голый дефисный префикс, такой как `mcp__brave-search`, оценивается как регулярное выражение без привязки и совпадает с каждым инструментом с этого сервера. Форма `mcp__brave-search__.*` работает на каждой версии.

282 282 

283Инструменты из [plugin-bundled MCP server](/ru/mcp#plugin-provided-mcp-servers) используют сегмент сервера с областью, который включает имя плагина: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Фильтр, написанный против голого ключа сервера, никогда не срабатывает для этих инструментов. Для плагина с именем `my-plugin`, который объединяет сервер под ключом `db`, инструмент `query` отображается как `mcp__plugin_my-plugin_db__query`, поэтому фильтр для каждого инструмента с этого сервера — `mcp__plugin_my-plugin_db__.*`. Используйте то же имя инструмента с областью в поле [`if`](#common-fields) обработчика. См. [Plugin-provided MCP servers](/ru/mcp#plugin-provided-mcp-servers) для того, как строится имя с областью.283Инструменты из [plugin-bundled MCP server](/docs/ru/mcp#plugin-provided-mcp-servers) используют сегмент сервера с областью, который включает имя плагина: `mcp__plugin_<plugin-name>_<server-name>__<tool>`. Фильтр, написанный против голого ключа сервера, никогда не срабатывает для этих инструментов. Для плагина с именем `my-plugin`, который объединяет сервер под ключом `db`, инструмент `query` отображается как `mcp__plugin_my-plugin_db__query`, поэтому фильтр для каждого инструмента с этого сервера — `mcp__plugin_my-plugin_db__.*`. Используйте то же имя инструмента с областью в поле [`if`](#common-fields) обработчика. См. [Plugin-provided MCP servers](/docs/ru/mcp#plugin-provided-mcp-servers) для того, как строится имя с областью.

284 284 

285Этот пример логирует все операции сервера memory и проверяет операции записи из любого MCP сервера:285Этот пример логирует все операции сервера memory и проверяет операции записи из любого MCP сервера:

286 286 


319 319 

320* **[Command hooks](#command-hook-fields)** (`type: "command"`): запускают команду оболочки. Ваш скрипт получает [JSON входные данные](#hook-input-and-output) события на stdin и передаёт результаты обратно через коды выхода и stdout.320* **[Command hooks](#command-hook-fields)** (`type: "command"`): запускают команду оболочки. Ваш скрипт получает [JSON входные данные](#hook-input-and-output) события на stdin и передаёт результаты обратно через коды выхода и stdout.

321* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): отправляют JSON входные данные события как HTTP POST запрос на URL. Конечная точка передаёт результаты обратно через тело ответа, используя тот же [JSON формат выхода](#json-output), что и command hooks.321* **[HTTP hooks](#http-hook-fields)** (`type: "http"`): отправляют JSON входные данные события как HTTP POST запрос на URL. Конечная точка передаёт результаты обратно через тело ответа, используя тот же [JSON формат выхода](#json-output), что и command hooks.

322* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): вызывают инструмент на уже подключённом [MCP сервере](/ru/mcp). Текстовый вывод инструмента обрабатывается как stdout command hook.322* **[MCP tool hooks](#mcp-tool-hook-fields)** (`type: "mcp_tool"`): вызывают инструмент на уже подключённом [MCP сервере](/docs/ru/mcp). Текстовый вывод инструмента обрабатывается как stdout command hook.

323* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): отправляют подсказку модели Claude для однооборотной оценки. Модель возвращает решение да/нет как JSON. См. [Prompt-based hooks](#prompt-based-hooks).323* **[Prompt hooks](#prompt-and-agent-hook-fields)** (`type: "prompt"`): отправляют подсказку модели Claude для однооборотной оценки. Модель возвращает решение да/нет как JSON. См. [Prompt-based hooks](#prompt-based-hooks).

324* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): порождают subagent, который может использовать инструменты, такие как Read, Grep и Glob, для проверки условий перед возвратом решения. Agent hooks являются экспериментальными и могут измениться. См. [Agent-based hooks](#agent-based-hooks).324* **[Agent hooks](#prompt-and-agent-hook-fields)** (`type: "agent"`): порождают subagent, который может использовать инструменты, такие как Read, Grep и Glob, для проверки условий перед возвратом решения. Agent hooks являются экспериментальными и могут измениться. См. [Agent-based hooks](#agent-based-hooks).

325 325 

326Все совпадающие hooks запускаются параллельно, и идентичные обработчики автоматически дедублируются. Command hooks дедублируются по строке команды и `args`, а HTTP hooks дедублируются по URL.326Все совпадающие hooks запускаются параллельно, и идентичные обработчики автоматически дедублируются. Command hooks дедублируются по строке команды и `args`, а HTTP hooks дедублируются по URL.

327 327 

328Обработчики запускаются в текущем каталоге с окружением Claude Code. Переменная окружения `$CLAUDE_CODE_REMOTE` устанавливается на `"true"` в удалённых веб-окружениях и не устанавливается в локальном CLI. {/* min-version: 2.1.199 */}Начиная с v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/ru/env-vars) устанавливается на ID сеанса [Remote Control](/ru/remote-control) пока локальный сеанс имеет активное соединение Remote Control.328Обработчики запускаются в текущем каталоге с окружением Claude Code. Переменная окружения `$CLAUDE_CODE_REMOTE` устанавливается на `"true"` в удалённых веб-окружениях и не устанавливается в локальном CLI. {/* min-version: 2.1.199 */}Начиная с v2.1.199, [`$CLAUDE_CODE_BRIDGE_SESSION_ID`](/docs/ru/env-vars) устанавливается на ID сеанса [Remote Control](/docs/ru/remote-control) пока локальный сеанс имеет активное соединение Remote Control.

329 329 

330<h4 id="common-fields">330<h4 id="common-fields">

331 Common fields331 Common fields


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

337| :-------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |337| :-------------- | :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

338| `type` | да | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` или `"agent"` |338| `type` | да | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` или `"agent"` |

339| `if` | нет | Синтаксис правила разрешения для фильтрации срабатывания этого hook, такой как `"Bash(git *)"` или `"Edit(*.ts)"`. Hook запускается только если вызов инструмента совпадает с шаблоном. См. таблицу [Bash matching table](#bash-if-matching) ниже для того, как Bash шаблоны оцениваются против подкоманд, `$()` и обратных кавычек. Оценивается только на событиях инструмента: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` и `PermissionDenied`. На других событиях hook с установленным `if` никогда не запускается. Использует тот же синтаксис, что и [правила разрешения](/ru/permissions) |339| `if` | нет | Синтаксис правила разрешения для фильтрации срабатывания этого hook, такой как `"Bash(git *)"` или `"Edit(*.ts)"`. Hook запускается только если вызов инструмента совпадает с шаблоном. См. таблицу [Bash matching table](#bash-if-matching) ниже для того, как Bash шаблоны оцениваются против подкоманд, `$()` и обратных кавычек. Оценивается только на событиях инструмента: `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` и `PermissionDenied`. На других событиях hook с установленным `if` никогда не запускается. Использует тот же синтаксис, что и [правила разрешения](/docs/ru/permissions) |

340| `timeout` | нет | Секунды перед отменой. Значения по умолчанию: 600 для `command`, `http` и `mcp_tool`; 30 для `prompt`; 60 для `agent`. [`UserPromptSubmit`](#userpromptsubmit) снижает значение по умолчанию для `command`, `http` и `mcp_tool` до 30, и [`MessageDisplay`](#messagedisplay) снижает его до 10 |340| `timeout` | нет | Секунды перед отменой. Значения по умолчанию: 600 для `command`, `http` и `mcp_tool`; 30 для `prompt`; 60 для `agent`. [`UserPromptSubmit`](#userpromptsubmit) снижает значение по умолчанию для `command`, `http` и `mcp_tool` до 30, и [`MessageDisplay`](#messagedisplay) снижает его до 10 |

341| `statusMessage` | нет | Пользовательское сообщение спиннера, отображаемое во время выполнения hook |341| `statusMessage` | нет | Пользовательское сообщение спиннера, отображаемое во время выполнения hook |

342| `once` | нет | Если `true`, запускается один раз за сеанс затем удаляется. Только для hooks, объявленных в [skill frontmatter](#hooks-in-skills-and-agents); игнорируется в файлах настроек и agent frontmatter |342| `once` | нет | Если `true`, запускается один раз за сеанс затем удаляется. Только для hooks, объявленных в [skill frontmatter](#hooks-in-skills-and-agents); игнорируется в файлах настроек и agent frontmatter |


353| `Bash(rm *)` | `echo $(date)` | нет | ни одна подкоманда не совпадает с `rm *` |353| `Bash(rm *)` | `echo $(date)` | нет | ни одна подкоманда не совпадает с `rm *` |

354| `Bash(git push *)` | `echo $(date)` | да | шаблоны, которые указывают больше чем имя команды, запускают hook в любом случае на `$()`, обратных кавычках или `$VAR` |354| `Bash(git push *)` | `echo $(date)` | да | шаблоны, которые указывают больше чем имя команды, запускают hook в любом случае на `$()`, обратных кавычках или `$VAR` |

355 355 

356Фильтр также открывается с ошибкой, запуская ваш hook независимо от шаблона, когда команда Bash не может быть проанализирована. Поскольку фильтр `if` является лучшим усилием, используйте [систему разрешений](/ru/permissions) вместо hook для обеспечения жёсткого разрешения или отказа.356Фильтр также открывается с ошибкой, запуская ваш hook независимо от шаблона, когда команда Bash не может быть проанализирована. Поскольку фильтр `if` является лучшим усилием, используйте [систему разрешений](/docs/ru/permissions) вместо hook для обеспечения жёсткого разрешения или отказа.

357 357 

358<h4 id="command-hook-fields">358<h4 id="command-hook-fields">

359 Command hook fields359 Command hook fields


406 406 

407Обе формы поддерживают одни и те же [path placeholders](#reference-scripts-by-path), и обе экспортируют их как переменные окружения `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT` и `CLAUDE_PLUGIN_DATA` на порождённом процессе, поэтому скрипт может читать `process.env.CLAUDE_PLUGIN_ROOT` независимо от того, как он был запущен.407Обе формы поддерживают одни и те же [path placeholders](#reference-scripts-by-path), и обе экспортируют их как переменные окружения `CLAUDE_PROJECT_DIR`, `CLAUDE_PLUGIN_ROOT` и `CLAUDE_PLUGIN_DATA` на порождённом процессе, поэтому скрипт может читать `process.env.CLAUDE_PLUGIN_ROOT` независимо от того, как он был запущен.

408 408 

409Plugin hooks дополнительно подставляют значения [`${user_config.*}`](/ru/plugins-reference#user-configuration), только в exec form: значение подставляется в `command` и в каждый элемент `args` как простая строка, поэтому оболочка не переанализирует его.409Plugin hooks дополнительно подставляют значения [`${user_config.*}`](/docs/ru/plugins-reference#user-configuration), только в exec form: значение подставляется в `command` и в каждый элемент `args` как простая строка, поэтому оболочка не переанализирует его.

410 410 

411Shell-form plugin hook, чей `command` ссылается на `${user_config.*}`, завершается с [ошибкой](/ru/errors#plugin-command-references-user-config) вместо запуска. Чтобы использовать значение опции из shell-form hook, прочитайте переменную окружения `$CLAUDE_PLUGIN_OPTION_<KEY>`, такую как `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` для опции `webhook_url`, или установите `args` для переключения hook на exec form. До v2.1.207, shell-form plugin hook команды также подставляли `${user_config.*}`.411Shell-form plugin hook, чей `command` ссылается на `${user_config.*}`, завершается с [ошибкой](/docs/ru/errors#plugin-command-references-user-config) вместо запуска. Чтобы использовать значение опции из shell-form hook, прочитайте переменную окружения `$CLAUDE_PLUGIN_OPTION_<KEY>`, такую как `$CLAUDE_PLUGIN_OPTION_WEBHOOK_URL` для опции `webhook_url`, или установите `args` для переключения hook на exec form. До v2.1.207, shell-form plugin hook команды также подставляли `${user_config.*}`.

412 412 

413<Note>413<Note>

414 В exec form, `command` — это только имя исполняемого файла или путь. Если `command` — это голое имя без разделителя пути и содержит пробелы рядом с `args`, Claude Code логирует предупреждение, потому что spawn не удастся: нет исполняемого файла с именем `node script.js`. Переместите дополнительные токены в `args`. Абсолютные пути с пробелами, такие как `C:\Program Files\nodejs\node.exe`, — это один действительный исполняемый файл и не вызывают предупреждение.414 В exec form, `command` — это только имя исполняемого файла или путь. Если `command` — это голое имя без разделителя пути и содержит пробелы рядом с `args`, Claude Code логирует предупреждение, потому что spawn не удастся: нет исполняемого файла с именем `node script.js`. Переместите дополнительные токены в `args`. Абсолютные пути с пробелами, такие как `C:\Program Files\nodejs\node.exe`, — это один действительный исполняемый файл и не вызывают предупреждение.


463 463 

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

465| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |465| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

466| `server` | да | Имя настроенного MCP сервера. Для [plugin-bundled server](/ru/mcp#plugin-provided-mcp-servers), это имя с областью `plugin:<plugin-name>:<server-name>`, такое как `plugin:my-plugin:db`, не голый ключ сервера. Сервер должен быть уже подключён; hook никогда не запускает поток OAuth или подключения |466| `server` | да | Имя настроенного MCP сервера. Для [plugin-bundled server](/docs/ru/mcp#plugin-provided-mcp-servers), это имя с областью `plugin:<plugin-name>:<server-name>`, такое как `plugin:my-plugin:db`, не голый ключ сервера. Сервер должен быть уже подключён; hook никогда не запускает поток OAuth или подключения |

467| `tool` | да | Имя инструмента для вызова на этом сервере |467| `tool` | да | Имя инструмента для вызова на этом сервере |

468| `input` | нет | Аргументы, передаваемые инструменту. Строковые значения поддерживают подстановку `${path}` из [JSON входа](#hook-input-and-output) hook, такую как `"${tool_input.file_path}"` |468| `input` | нет | Аргументы, передаваемые инструменту. Строковые значения поддерживают подстановку `${path}` из [JSON входа](#hook-input-and-output) hook, такую как `"${tool_input.file_path}"` |

469 469 


510 510 

511Используйте эти заполнители для ссылки на скрипты hook относительно корня проекта или плагина, независимо от рабочего каталога при запуске hook:511Используйте эти заполнители для ссылки на скрипты hook относительно корня проекта или плагина, независимо от рабочего каталога при запуске hook:

512 512 

513* `${CLAUDE_PROJECT_DIR}`: корень проекта. Claude Code также устанавливает эту переменную в окружении [stdio MCP серверов](/ru/mcp#option-3-add-a-local-stdio-server) и plugin LSP серверов.513* `${CLAUDE_PROJECT_DIR}`: корень проекта. Claude Code также устанавливает эту переменную в окружении [stdio MCP серверов](/docs/ru/mcp#option-3-add-a-local-stdio-server) и plugin LSP серверов.

514* `${CLAUDE_PLUGIN_ROOT}`: каталог установки плагина, для скриптов, поставляемых с [плагином](/ru/plugins). Изменяется при каждом обновлении плагина.514* `${CLAUDE_PLUGIN_ROOT}`: каталог установки плагина, для скриптов, поставляемых с [плагином](/docs/ru/plugins). Изменяется при каждом обновлении плагина.

515* `${CLAUDE_PLUGIN_DATA}`: [каталог постоянных данных](/ru/plugins-reference#persistent-data-directory) плагина, для зависимостей и состояния, которые должны пережить обновления плагина.515* `${CLAUDE_PLUGIN_DATA}`: [каталог постоянных данных](/docs/ru/plugins-reference#persistent-data-directory) плагина, для зависимостей и состояния, которые должны пережить обновления плагина.

516 516 

517Предпочитайте [exec form](#exec-form-and-shell-form) для любого hook, который ссылается на path placeholder. Exec form передаёт каждый элемент `args` как один аргумент без токенизации оболочки, поэтому пути с пробелами или специальными символами не нуждаются в кавычках. В shell form оберните каждый заполнитель в двойные кавычки.517Предпочитайте [exec form](#exec-form-and-shell-form) для любого hook, который ссылается на path placeholder. Exec form передаёт каждый элемент `args` как один аргумент без токенизации оболочки, поэтому пути с пробелами или специальными символами не нуждаются в кавычках. В shell form оберните каждый заполнитель в двойные кавычки.

518 518 


566 }566 }

567 ```567 ```

568 568 

569 См. [plugin components reference](/ru/plugins-reference#hooks) для получения подробной информации о создании plugin hooks.569 См. [plugin components reference](/docs/ru/plugins-reference#hooks) для получения подробной информации о создании plugin hooks.

570 </Tab>570 </Tab>

571</Tabs>571</Tabs>

572 572 


574 Hooks in skills and agents574 Hooks in skills and agents

575</h3>575</h3>

576 576 

577В дополнение к файлам настроек и плагинам, hooks могут быть определены непосредственно в [skills](/ru/skills) и [subagents](/ru/sub-agents) с использованием frontmatter. Эти hooks ограничены жизненным циклом компонента и запускаются только когда этот компонент активен.577В дополнение к файлам настроек и плагинам, hooks могут быть определены непосредственно в [skills](/docs/ru/skills) и [subagents](/docs/ru/sub-agents) с использованием frontmatter. Эти hooks ограничены жизненным циклом компонента и запускаются только когда этот компонент активен.

578 578 

579Поддерживаются все hook события. Для subagents, `Stop` hooks автоматически преобразуются в `SubagentStop`, так как это событие, которое срабатывает при завершении subagent.579Поддерживаются все hook события. Для subagents, `Stop` hooks автоматически преобразуются в `SubagentStop`, так как это событие, которое срабатывает при завершении subagent.

580 580 


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

644| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |644| :---------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

645| `session_id` | Текущий идентификатор сеанса |645| `session_id` | Текущий идентификатор сеанса |

646| `prompt_id` | UUID, идентифицирующий пользовательский запрос, который в настоящее время обрабатывается. Совпадает с атрибутом [`prompt.id` на событиях OpenTelemetry](/ru/monitoring-usage#event-correlation-attributes), поэтому вы можете коррелировать выход hook с телеметрией для одного запроса. Отсутствует до первого пользовательского ввода. {/* min-version: 2.1.196 */}Требует Claude Code v2.1.196 или позже |646| `prompt_id` | UUID, идентифицирующий пользовательский запрос, который в настоящее время обрабатывается. Совпадает с атрибутом [`prompt.id` на событиях OpenTelemetry](/docs/ru/monitoring-usage#event-correlation-attributes), поэтому вы можете коррелировать выход hook с телеметрией для одного запроса. Отсутствует до первого пользовательского ввода. {/* min-version: 2.1.196 */}Требует Claude Code v2.1.196 или позже |

647| `transcript_path` | Путь к JSON разговора. Файл транскрипта записывается асинхронно и может отставать от разговора в памяти, поэтому он может ещё не включать самые последние сообщения текущего хода, когда срабатывает hook. Hooks, которым нужен финальный текст ассистента текущего хода, должны использовать `last_assistant_message` на [Stop](#stop) и [SubagentStop](#subagentstop) вместо чтения транскрипта |647| `transcript_path` | Путь к JSON разговора. Файл транскрипта записывается асинхронно и может отставать от разговора в памяти, поэтому он может ещё не включать самые последние сообщения текущего хода, когда срабатывает hook. Hooks, которым нужен финальный текст ассистента текущего хода, должны использовать `last_assistant_message` на [Stop](#stop) и [SubagentStop](#subagentstop) вместо чтения транскрипта |

648| `cwd` | Текущий рабочий каталог при вызове hook |648| `cwd` | Текущий рабочий каталог при вызове hook |

649| `permission_mode` | Текущий [режим разрешения](/ru/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` или `"bypassPermissions"`. Режим, обозначенный как **Manual**, поступает как `"default"`, никогда не как `"manual"`, поэтому скрипты, которые совпадают с `"default"`, продолжают работать. Не все события получают это поле. Проверьте пример JSON в каждом разделе [hook event](#hook-events) |649| `permission_mode` | Текущий [режим разрешения](/docs/ru/permissions#permission-modes): `"default"`, `"plan"`, `"acceptEdits"`, `"auto"`, `"dontAsk"` или `"bypassPermissions"`. Режим, обозначенный как **Manual**, поступает как `"default"`, никогда не как `"manual"`, поэтому скрипты, которые совпадают с `"default"`, продолжают работать. Не все события получают это поле. Проверьте пример JSON в каждом разделе [hook event](#hook-events) |

650| `effort` | Объект с полем `level`, содержащим активный [уровень усилий](/ru/model-config#adjust-effort-level) для хода: `"low"`, `"medium"`, `"high"`, `"xhigh"` или `"max"`. Если запрошенный уровень усилий модели превышает то, что поддерживает текущая модель, это понижающий уровень, который модель фактически использовала. Ultracode не является отдельным уровнем и сообщается как `"xhigh"`. Объект соответствует полю `effort` [строки статуса](/ru/statusline#available-data). Присутствует для событий, которые срабатывают в контексте использования инструмента, таких как `PreToolUse`, `PostToolUse`, `Stop` и `SubagentStop`, когда текущая модель поддерживает параметр усилий. Уровень также доступен для команд hook и инструмента Bash как переменная окружения `$CLAUDE_EFFORT`. |650| `effort` | Объект с полем `level`, содержащим активный [уровень усилий](/docs/ru/model-config#adjust-effort-level) для хода: `"low"`, `"medium"`, `"high"`, `"xhigh"` или `"max"`. Если запрошенный уровень усилий модели превышает то, что поддерживает текущая модель, это понижающий уровень, который модель фактически использовала. Ultracode не является отдельным уровнем и сообщается как `"xhigh"`. Объект соответствует полю `effort` [строки статуса](/docs/ru/statusline#available-data). Присутствует для событий, которые срабатывают в контексте использования инструмента, таких как `PreToolUse`, `PostToolUse`, `Stop` и `SubagentStop`, когда текущая модель поддерживает параметр усилий. Уровень также доступен для команд hook и инструмента Bash как переменная окружения `$CLAUDE_EFFORT`. |

651| `hook_event_name` | Имя события, которое сработало |651| `hook_event_name` | Имя события, которое сработало |

652 652 

653При запуске с `--agent` или внутри subagent включаются два дополнительных поля:653При запуске с `--agent` или внутри subagent включаются два дополнительных поля:


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

656| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |656| :----------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

657| `agent_id` | Уникальный идентификатор для subagent. Присутствует только когда hook срабатывает внутри вызова subagent. Используйте это для различения вызовов hook subagent от вызовов основного потока. |657| `agent_id` | Уникальный идентификатор для subagent. Присутствует только когда hook срабатывает внутри вызова subagent. Используйте это для различения вызовов hook subagent от вызовов основного потока. |

658| `agent_type` | Имя агента (например, `"Explore"` или `"security-reviewer"`). Присутствует когда сеанс использует `--agent` или hook срабатывает внутри subagent. Для subagents тип subagent имеет приоритет над значением `--agent` сеанса. Для [пользовательских subagents](/ru/sub-agents) это поле `name` из frontmatter агента, а не имя файла. Для subagents, поставляемых [plugin](/ru/plugins), это идентификатор с областью видимости плагина, такой как `my-plugin:reviewer`, а не простое имя frontmatter. См. [SubagentStart](#subagentstart) для того, как написать matcher для имени с областью видимости плагина. |658| `agent_type` | Имя агента (например, `"Explore"` или `"security-reviewer"`). Присутствует когда сеанс использует `--agent` или hook срабатывает внутри subagent. Для subagents тип subagent имеет приоритет над значением `--agent` сеанса. Для [пользовательских subagents](/docs/ru/sub-agents) это поле `name` из frontmatter агента, а не имя файла. Для subagents, поставляемых [plugin](/docs/ru/plugins), это идентификатор с областью видимости плагина, такой как `my-plugin:reviewer`, а не простое имя frontmatter. См. [SubagentStart](#subagentstart) для того, как написать matcher для имени с областью видимости плагина. |

659 659 

660Только hooks [`SessionStart`](#sessionstart) могут получать поле `model`, и его присутствие не гарантировано. Нет переменной окружения `$CLAUDE_MODEL`. Процесс hook наследует родительское окружение, поэтому он может читать `$ANTHROPIC_MODEL`, если вы установили её в вашей оболочке, но это значение не меняется при переключении моделей с `/model` во время сеанса. Один набор переменных не наследуется: Claude Code [удаляет переменные экспортера `OTEL_*` из каждого подпроцесса, который он порождает](/ru/monitoring-usage#administrator-configuration), включая hooks.660Только hooks [`SessionStart`](#sessionstart) могут получать поле `model`, и его присутствие не гарантировано. Нет переменной окружения `$CLAUDE_MODEL`. Процесс hook наследует родительское окружение, поэтому он может читать `$ANTHROPIC_MODEL`, если вы установили её в вашей оболочке, но это значение не меняется при переключении моделей с `/model` во время сеанса. Один набор переменных не наследуется: Claude Code [удаляет переменные экспортера `OTEL_*` из каждого подпроцесса, который он порождает](/docs/ru/monitoring-usage#administrator-configuration), включая hooks.

661 661 

662Например, hook `PreToolUse` для команды Bash получает это на stdin:662Например, hook `PreToolUse` для команды Bash получает это на stdin:

663 663 


776 Вы должны выбрать один подход на hook, не оба: либо используйте коды выхода отдельно для сигнализации, либо выйдите с 0 и выведите JSON для структурированного управления. Claude Code обрабатывает JSON только при exit 0. Если вы выйдете с 2, любой JSON игнорируется.776 Вы должны выбрать один подход на hook, не оба: либо используйте коды выхода отдельно для сигнализации, либо выйдите с 0 и выведите JSON для структурированного управления. Claude Code обрабатывает JSON только при exit 0. Если вы выйдете с 2, любой JSON игнорируется.

777</Note>777</Note>

778 778 

779Stdout вашего hook должен содержать только JSON объект. Если ваш профиль оболочки выводит текст при запуске, это может помешать анализу JSON. См. [JSON validation failed](/ru/hooks-guide#json-validation-failed) в руководстве по устранению неполадок.779Stdout вашего hook должен содержать только JSON объект. Если ваш профиль оболочки выводит текст при запуске, это может помешать анализу JSON. См. [JSON validation failed](/docs/ru/hooks-guide#json-validation-failed) в руководстве по устранению неполадок.

780 780 

781Выходные строки hook, включая `additionalContext`, `systemMessage` и простой stdout, ограничены 10 000 символами. Выход, превышающий этот лимит, сохраняется в файл и заменяется предпросмотром и путём к файлу, так же как обрабатываются большие результаты инструментов.781Выходные строки hook, включая `additionalContext`, `systemMessage` и простой stdout, ограничены 10 000 символами. Выход, превышающий этот лимит, сохраняется в файл и заменяется предпросмотром и путём к файлу, так же как обрабатываются большие результаты инструментов.

782 782 


868* **Условные правила проекта**: какая команда тестирования применяется к только что отредактированному файлу, какие каталоги доступны только для чтения в этом worktree868* **Условные правила проекта**: какая команда тестирования применяется к только что отредактированному файлу, какие каталоги доступны только для чтения в этом worktree

869* **Внешние данные**: открытые проблемы, назначенные вам, недавние результаты CI, содержимое, полученное из внутреннего сервиса869* **Внешние данные**: открытые проблемы, назначенные вам, недавние результаты CI, содержимое, полученное из внутреннего сервиса

870 870 

871Для инструкций, которые никогда не меняются, предпочитайте [CLAUDE.md](/ru/memory). Он загружается без запуска скрипта и является стандартным местом для статических соглашений проекта.871Для инструкций, которые никогда не меняются, предпочитайте [CLAUDE.md](/docs/ru/memory). Он загружается без запуска скрипта и является стандартным местом для статических соглашений проекта.

872 872 

873Напишите текст как фактические утверждения, а не как императивные системные инструкции. Формулировки такие как "Цель развёртывания — production" или "Этот репозиторий использует `bun test`" читаются как информация о проекте. Текст, сформулированный как внеполосные системные команды, может активировать защиту Claude от внедрения подсказок, что заставляет Claude вывести текст вам вместо того, чтобы рассматривать его как контекст.873Напишите текст как фактические утверждения, а не как императивные системные инструкции. Формулировки такие как "Цель развёртывания — production" или "Этот репозиторий использует `bun test`" читаются как информация о проекте. Текст, сформулированный как внеполосные системные команды, может активировать защиту Claude от внедрения подсказок, что заставляет Claude вывести текст вам вместо того, чтобы рассматривать его как контекст.

874 874 


950 </Tab>950 </Tab>

951</Tabs>951</Tabs>

952 952 

953Для расширенных примеров, включая валидацию команд Bash, фильтрацию подсказок и скрипты автоматического одобрения, см. [What you can automate](/ru/hooks-guide#what-you-can-automate) в руководстве и [Bash command validator reference implementation](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).953Для расширенных примеров, включая валидацию команд Bash, фильтрацию подсказок и скрипты автоматического одобрения, см. [What you can automate](/docs/ru/hooks-guide#what-you-can-automate) в руководстве и [Bash command validator reference implementation](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py).

954 954 

955<h2 id="hook-events">955<h2 id="hook-events">

956 Hook events956 Hook events


962 SessionStart962 SessionStart

963</h3>963</h3>

964 964 

965Запускается при запуске Claude Code нового сеанса или возобновлении существующего сеанса. Полезно для загрузки контекста разработки, такого как существующие проблемы или недавние изменения в вашей кодовой базе, или установки переменных окружения. Для статического контекста, который не требует скрипта, используйте [CLAUDE.md](/ru/memory) вместо этого.965Запускается при запуске Claude Code нового сеанса или возобновлении существующего сеанса. Полезно для загрузки контекста разработки, такого как существующие проблемы или недавние изменения в вашей кодовой базе, или установки переменных окружения. Для статического контекста, который не требует скрипта, используйте [CLAUDE.md](/docs/ru/memory) вместо этого.

966 966 

967SessionStart запускается при каждом сеансе, поэтому держите эти hooks быстрыми. Поддерживаются только hooks `type: "command"` и `type: "mcp_tool"`.967SessionStart запускается при каждом сеансе, поэтому держите эти hooks быстрыми. Поддерживаются только hooks `type: "command"` и `type: "mcp_tool"`.

968 968 


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

1009| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1009| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

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

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

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

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

1014| `reloadSkills` | Логическое значение. Когда `true`, Claude Code повторно сканирует каталоги [skill](/ru/skills) и команд после завершения SessionStart hooks, поэтому skills, которые установил hook, доступны в том же сеансе, начиная с первой подсказки |1014| `reloadSkills` | Логическое значение. Когда `true`, Claude Code повторно сканирует каталоги [skill](/docs/ru/skills) и команд после завершения SessionStart hooks, поэтому skills, которые установил hook, доступны в том же сеансе, начиная с первой подсказки |

1015 1015 

1016```json theme={null}1016```json theme={null}

1017{1017{


1085 Setup1085 Setup

1086</h3>1086</h3>

1087 1087 

1088Срабатывает только при запуске Claude Code с `--init-only` или с `--init` или `--maintenance` в [неинтерактивном режиме](/ru/headless) с флагом `-p`. Не срабатывает при нормальном запуске. Используйте это для одноразовой установки зависимостей или запланированной очистки, которую вы запускаете явно из CI или скриптов, отдельно от нормального запуска сеанса. Для инициализации для каждого сеанса используйте [SessionStart](#sessionstart) вместо этого.1088Срабатывает только при запуске Claude Code с `--init-only` или с `--init` или `--maintenance` в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`. Не срабатывает при нормальном запуске. Используйте это для одноразовой установки зависимостей или запланированной очистки, которую вы запускаете явно из CI или скриптов, отдельно от нормального запуска сеанса. Для инициализации для каждого сеанса используйте [SessionStart](#sessionstart) вместо этого.

1089 1089 

1090Значение фильтра соответствует флагу CLI, который запустил hook:1090Значение фильтра соответствует флагу CLI, который запустил hook:

1091 1091 


1096 1096 

1097`--init-only` запускает Setup hooks и SessionStart hooks с фильтром `startup`, затем выходит без запуска разговора. `--init` и `--maintenance` срабатывают Setup hooks только при объединении с `-p`; в интерактивном сеансе эти два флага в настоящее время не срабатывают Setup hooks.1097`--init-only` запускает Setup hooks и SessionStart hooks с фильтром `startup`, затем выходит без запуска разговора. `--init` и `--maintenance` срабатывают Setup hooks только при объединении с `-p`; в интерактивном сеансе эти два флага в настоящее время не срабатывают Setup hooks.

1098 1098 

1099Поскольку Setup не срабатывает при каждом запуске, плагин, которому нужна установленная зависимость, не может полагаться только на Setup. Практический паттерн — проверить зависимость при первом использовании и установить при отсутствии, например hook или skill, который проверяет `${CLAUDE_PLUGIN_DATA}/node_modules` и запускает `npm install` при отсутствии. См. [persistent data directory](/ru/plugins-reference#persistent-data-directory) для того, где хранить установленные зависимости.1099Поскольку Setup не срабатывает при каждом запуске, плагин, которому нужна установленная зависимость, не может полагаться только на Setup. Практический паттерн — проверить зависимость при первом использовании и установить при отсутствии, например hook или skill, который проверяет `${CLAUDE_PLUGIN_DATA}/node_modules` и запускает `npm install` при отсутствии. См. [persistent data directory](/docs/ru/plugins-reference#persistent-data-directory) для того, где хранить установленные зависимости.

1100 1100 

1101<h4 id="setup-input">1101<h4 id="setup-input">

1102 Setup input1102 Setup input


1118 Setup decision control1118 Setup decision control

1119</h4>1119</h4>

1120 1120 

1121Setup hooks не могут блокировать. При exit code 2 stderr показывается пользователю как уведомление об ошибке hook, и выполнение продолжается. В [неинтерактивном режиме](/ru/headless) выход hook появляется только при запуске с `--verbose`. Чтобы передать информацию в контекст Claude, верните `additionalContext` в JSON выходе; простой stdout записывается только в журнал отладки. В дополнение к [JSON полям выхода](#json-output), доступным для всех hooks, вы можете вернуть эти поля, специфичные для события:1121Setup hooks не могут блокировать. При exit code 2 stderr показывается пользователю как уведомление об ошибке hook, и выполнение продолжается. В [неинтерактивном режиме](/docs/ru/headless) выход hook появляется только при запуске с `--verbose`. Чтобы передать информацию в контекст Claude, верните `additionalContext` в JSON выходе; простой stdout записывается только в журнал отладки. В дополнение к [JSON полям выхода](#json-output), доступным для всех hooks, вы можете вернуть эти поля, специфичные для события:

1122 1122 

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

1124| :------------------ | :---------------------------------------------------------------------------- |1124| :------------------ | :---------------------------------------------------------------------------- |


1186 1186 

1187Hook `UserPromptSubmit`, который достигает своего таймаута, отменяется и его выход, включая любой `additionalContext`, отбрасывается. Подсказка всё ещё достигает Claude без этого контекста. Начиная с v2.1.196, транскрипт показывает уведомление, называющее hook, таймаут, который сработал, и что выход был отброшен. Более ранние версии отменяют hook без уведомления.1187Hook `UserPromptSubmit`, который достигает своего таймаута, отменяется и его выход, включая любой `additionalContext`, отбрасывается. Подсказка всё ещё достигает Claude без этого контекста. Начиная с v2.1.196, транскрипт показывает уведомление, называющее hook, таймаут, который сработал, и что выход был отброшен. Более ранние версии отменяют hook без уведомления.

1188 1188 

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

1190 1190 

1191<h4 id="userpromptsubmit-input">1191<h4 id="userpromptsubmit-input">

1192 UserPromptSubmit input1192 UserPromptSubmit input


1441Запускается после того, как Claude создаёт параметры инструмента и перед обработкой вызова инструмента. Совпадает с именем инструмента: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode` и любые [имена MCP инструментов](#match-mcp-tools).1441Запускается после того, как Claude создаёт параметры инструмента и перед обработкой вызова инструмента. Совпадает с именем инструмента: `Bash`, `Edit`, `Write`, `Read`, `Glob`, `Grep`, `Agent`, `WebFetch`, `WebSearch`, `AskUserQuestion`, `ExitPlanMode` и любые [имена MCP инструментов](#match-mcp-tools).

1442 1442 

1443<Warning>1443<Warning>

1444 PreToolUse запускается только когда Claude вызывает инструмент. Файлы, которые вы [ссылаетесь с `@` в вашей подсказке](/ru/common-workflows#reference-files-and-directories), добавляются без какого-либо вызова инструмента: Claude Code вставляет их содержимое при построении подсказки, поэтому никакой hook PreToolUse не срабатывает для них, включая hooks, соответствующие `Read`. Чтобы заблокировать определённые пути от ссылок `@`, используйте [правило отклонения `Read`](/ru/permissions#read-and-edit) вместо этого.1444 PreToolUse запускается только когда Claude вызывает инструмент. Файлы, которые вы [ссылаетесь с `@` в вашей подсказке](/docs/ru/common-workflows#reference-files-and-directories), добавляются без какого-либо вызова инструмента: Claude Code вставляет их содержимое при построении подсказки, поэтому никакой hook PreToolUse не срабатывает для них, включая hooks, соответствующие `Read`. Чтобы заблокировать определённые пути от ссылок `@`, используйте [правило отклонения `Read`](/docs/ru/permissions#read-and-edit) вместо этого.

1445</Warning>1445</Warning>

1446 1446 

1447Используйте [PreToolUse decision control](#pretooluse-decision-control) для разрешения, отклонения, запроса или отложения вызова инструмента.1447Используйте [PreToolUse decision control](#pretooluse-decision-control) для разрешения, отклонения, запроса или отложения вызова инструмента.


1462| :------------------ | :------ | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |1462| :------------------ | :------ | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |

1463| `command` | string | `"npm test"` | Команда оболочки для выполнения |1463| `command` | string | `"npm test"` | Команда оболочки для выполнения |

1464| `description` | string | `"Run test suite"` | Опциональное описание того, что делает команда |1464| `description` | string | `"Run test suite"` | Опциональное описание того, что делает команда |

1465| `timeout` | number | `120000` | Опциональный таймаут в миллисекундах. Значения выше [максимума](/ru/tools-reference#bash-tool-behavior) уменьшаются до максимума, а не отклоняются |1465| `timeout` | number | `120000` | Опциональный таймаут в миллисекундах. Значения выше [максимума](/docs/ru/tools-reference#bash-tool-behavior) уменьшаются до максимума, а не отклоняются |

1466| `run_in_background` | boolean | `false` | Запускать ли команду в фоне |1466| `run_in_background` | boolean | `false` | Запускать ли команду в фоне |

1467 1467 

1468<h5 id="write">1468<h5 id="write">


1554 Agent1554 Agent

1555</h5>1555</h5>

1556 1556 

1557Порождает [subagent](/ru/sub-agents).1557Порождает [subagent](/docs/ru/sub-agents).

1558 1558 

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

1560| :-------------- | :----- | :------------------------- | :------------------------------------------------------------- |1560| :-------------- | :----- | :------------------------- | :------------------------------------------------------------- |


1597 ExitPlanMode1597 ExitPlanMode

1598</h5>1598</h5>

1599 1599 

1600Представляет план и просит пользователя одобрить его перед тем, как Claude покинет [plan mode](/ru/permission-modes#analyze-before-you-edit-with-plan-mode). Claude записывает план в файл на диск перед вызовом инструмента, поэтому буквальный `tool_input` от модели обычно пуст. Claude Code внедряет содержимое плана и путь файла перед передачей входных данных в hooks.1600Представляет план и просит пользователя одобрить его перед тем, как Claude покинет [plan mode](/docs/ru/permission-modes#analyze-before-you-edit-with-plan-mode). Claude записывает план в файл на диск перед вызовом инструмента, поэтому буквальный `tool_input` от модели обычно пуст. Claude Code внедряет содержимое плана и путь файла перед передачей входных данных в hooks.

1601 1601 

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

1603| :--------------- | :----- | :------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1603| :--------------- | :----- | :------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |


1615 1615 

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

1617| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1617| :------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1618| `permissionDecision` | `"allow"` пропускает диалог разрешения, кроме [инструментов, требующих взаимодействия пользователя](#pretooluse-decision-control) и инструментов соединителя [ваша организация установила на `ask`](/ru/mcp#organization-controls-on-connector-tools). `"deny"` предотвращает вызов инструмента. `"ask"` предлагает пользователю подтвердить. `"defer"` выходит корректно, чтобы инструмент мог быть возобновлён позже. [Правила отклонения и запроса](/ru/permissions#manage-permissions) всё ещё применяются независимо от того, что возвращает hook |1618| `permissionDecision` | `"allow"` пропускает диалог разрешения, кроме [инструментов, требующих взаимодействия пользователя](#pretooluse-decision-control) и инструментов соединителя [ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools). `"deny"` предотвращает вызов инструмента. `"ask"` предлагает пользователю подтвердить. `"defer"` выходит корректно, чтобы инструмент мог быть возобновлён позже. [Правила отклонения и запроса](/docs/ru/permissions#manage-permissions) всё ещё применяются независимо от того, что возвращает hook |

1619| `permissionDecisionReason` | Для `"allow"` и `"ask"`, показывается пользователю, но не Claude. Для `"deny"`, показывается Claude. Для `"defer"`, игнорируется |1619| `permissionDecisionReason` | Для `"allow"` и `"ask"`, показывается пользователю, но не Claude. Для `"deny"`, показывается Claude. Для `"defer"`, игнорируется |

1620| `updatedInput` | Изменяет параметры входа инструмента перед выполнением. Заменяет весь объект входа, поэтому включите неизменённые поля наряду с изменёнными. Объедините с `"allow"` для автоматического одобрения или `"ask"` для показа изменённого входа пользователю. Для `"defer"`, игнорируется |1620| `updatedInput` | Изменяет параметры входа инструмента перед выполнением. Заменяет весь объект входа, поэтому включите неизменённые поля наряду с изменёнными. Объедините с `"allow"` для автоматического одобрения или `"ask"` для показа изменённого входа пользователю. Для `"defer"`, игнорируется |

1621| `additionalContext` | Строка, добавленная в контекст Claude наряду с результатом инструмента. Игнорируется при `permissionDecision` равном `"defer"`. См. [Add context for Claude](#add-context-for-claude) |1621| `additionalContext` | Строка, добавленная в контекст Claude наряду с результатом инструмента. Игнорируется при `permissionDecision` равном `"defer"`. См. [Add context for Claude](#add-context-for-claude) |


1638}1638}

1639```1639```

1640 1640 

1641`AskUserQuestion` и `ExitPlanMode` требуют взаимодействия пользователя и обычно блокируют в [неинтерактивном режиме](/ru/headless) с флагом `-p`. Возврат `permissionDecision: "allow"` вместе с `updatedInput` удовлетворяет этому требованию: hook читает входные данные инструмента из stdin, собирает ответ через ваш собственный UI и возвращает его в `updatedInput`, чтобы инструмент запустился без запроса. Возврат только `"allow"` недостаточен для этих инструментов. Для `AskUserQuestion` повторите исходный массив `questions` и добавьте объект [`answers`](#askuserquestion), соответствующий тексту каждого вопроса выбранному ответу.1641`AskUserQuestion` и `ExitPlanMode` требуют взаимодействия пользователя и обычно блокируют в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`. Возврат `permissionDecision: "allow"` вместе с `updatedInput` удовлетворяет этому требованию: hook читает входные данные инструмента из stdin, собирает ответ через ваш собственный UI и возвращает его в `updatedInput`, чтобы инструмент запустился без запроса. Возврат только `"allow"` недостаточен для этих инструментов. Для `AskUserQuestion` повторите исходный массив `questions` и добавьте объект [`answers`](#askuserquestion), соответствующий тексту каждого вопроса выбранному ответу.

1642 1642 

1643Инструменты соединителя [ваша организация установила на `ask`](/ru/mcp#organization-controls-on-connector-tools) запрашивают даже когда hook возвращает `"allow"`.1643Инструменты соединителя [ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) запрашивают даже когда hook возвращает `"allow"`.

1644 1644 

1645Начиная с v2.1.199, инструмент MCP, чей сервер помечает его с помощью [`_meta["anthropic/requiresUserInteraction"]`](/ru/mcp#require-approval-for-a-specific-tool), более строг: hook не может пропустить его диалог одобрения с помощью `"allow"`, с `updatedInput` или без, потому что Claude Code не может подтвердить, что hook собрал взаимодействие, которое нужно инструменту.1645Начиная с v2.1.199, инструмент MCP, чей сервер помечает его с помощью [`_meta["anthropic/requiresUserInteraction"]`](/docs/ru/mcp#require-approval-for-a-specific-tool), более строг: hook не может пропустить его диалог одобрения с помощью `"allow"`, с `updatedInput` или без, потому что Claude Code не может подтвердить, что hook собрал взаимодействие, которое нужно инструменту.

1646 1646 

1647<Note>1647<Note>

1648 PreToolUse ранее использовал верхнеуровневые поля `decision` и `reason`, но они устарели для этого события. Используйте `hookSpecificOutput.permissionDecision` и `hookSpecificOutput.permissionDecisionReason` вместо этого. Устаревшие значения `"approve"` и `"block"` соответствуют `"allow"` и `"deny"` соответственно. Другие события, такие как PostToolUse и Stop, продолжают использовать верхнеуровневые `decision` и `reason` как их текущий формат.1648 PreToolUse ранее использовал верхнеуровневые поля `decision` и `reason`, но они устарели для этого события. Используйте `hookSpecificOutput.permissionDecision` и `hookSpecificOutput.permissionDecisionReason` вместо этого. Устаревшие значения `"approve"` и `"block"` соответствуют `"allow"` и `"deny"` соответственно. Другие события, такие как PostToolUse и Stop, продолжают использовать верхнеуровневые `decision` и `reason` как их текущий формат.


1652 Defer a tool call for later1652 Defer a tool call for later

1653</h4>1653</h4>

1654 1654 

1655`"defer"` предназначен для интеграций, которые запускают `claude -p` как подпроцесс и читают его JSON выход, таких как приложение Agent SDK или пользовательский UI, построенный на основе Claude Code. Это позволяет этому вызывающему процессу приостановить Claude при вызове инструмента, собрать входные данные через его собственный интерфейс и возобновить с того же места. Claude Code соблюдает это значение только в [неинтерактивном режиме](/ru/headless) с флагом `-p`. В интерактивных сеансах он логирует предупреждение и игнорирует результат hook.1655`"defer"` предназначен для интеграций, которые запускают `claude -p` как подпроцесс и читают его JSON выход, таких как приложение Agent SDK или пользовательский UI, построенный на основе Claude Code. Это позволяет этому вызывающему процессу приостановить Claude при вызове инструмента, собрать входные данные через его собственный интерфейс и возобновить с того же места. Claude Code соблюдает это значение только в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`. В интерактивных сеансах он логирует предупреждение и игнорирует результат hook.

1656 1656 

1657Инструмент `AskUserQuestion` — это типичный случай: Claude хочет что-то спросить у пользователя, но нет терминала для ответа. Круговой путь работает так:1657Инструмент `AskUserQuestion` — это типичный случай: Claude хочет что-то спросить у пользователя, но нет терминала для ответа. Круговой путь работает так:

1658 1658 


1678}1678}

1679```1679```

1680 1680 

1681Нет таймаута или лимита повторных попыток. Сеанс остаётся на диске до возобновления, в соответствии с операцией очистки [`cleanupPeriodDays`](/ru/settings#available-settings), которая удаляет файлы сеанса через 30 дней по умолчанию. Если ответ не готов при возобновлении, hook может вернуть `"defer"` снова и процесс выходит так же. Вызывающий процесс управляет тем, когда разорвать цикл, в конечном итоге возвращая `"allow"` или `"deny"` из hook.1681Нет таймаута или лимита повторных попыток. Сеанс остаётся на диске до возобновления, в соответствии с операцией очистки [`cleanupPeriodDays`](/docs/ru/settings#available-settings), которая удаляет файлы сеанса через 30 дней по умолчанию. Если ответ не готов при возобновлении, hook может вернуть `"defer"` снова и процесс выходит так же. Вызывающий процесс управляет тем, когда разорвать цикл, в конечном итоге возвращая `"allow"` или `"deny"` из hook.

1682 1682 

1683`"defer"` работает только когда Claude делает один вызов инструмента в ходе. Если Claude делает несколько вызовов инструментов одновременно, `"defer"` игнорируется с предупреждением и инструмент проходит через обычный поток разрешений. Ограничение существует потому что возобновление может только повторно запустить один инструмент: нет способа отложить один вызов из пакета без оставления других неразрешённых.1683`"defer"` работает только когда Claude делает один вызов инструмента в ходе. Если Claude делает несколько вызовов инструментов одновременно, `"defer"` игнорируется с предупреждением и инструмент проходит через обычный поток разрешений. Ограничение существует потому что возобновление может только повторно запустить один инструмент: нет способа отложить один вызов из пакета без оставления других неразрешённых.

1684 1684 


1734 1734 

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

1736| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1736| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

1737| `behavior` | `"allow"` предоставляет разрешение, `"deny"` отклоняет его. [Правила отклонения и запроса](/ru/permissions#manage-permissions) всё ещё применяются, поэтому hook, возвращающий `"allow"`, не переопределяет совпадающее правило отклонения |1737| `behavior` | `"allow"` предоставляет разрешение, `"deny"` отклоняет его. [Правила отклонения и запроса](/docs/ru/permissions#manage-permissions) всё ещё применяются, поэтому hook, возвращающий `"allow"`, не переопределяет совпадающее правило отклонения |

1738| `updatedInput` | Только для `"allow"`: изменяет параметры входа инструмента перед выполнением. Заменяет весь объект входа, поэтому включите неизменённые поля наряду с изменёнными. Изменённый вход повторно оценивается против правил отклонения и запроса |1738| `updatedInput` | Только для `"allow"`: изменяет параметры входа инструмента перед выполнением. Заменяет весь объект входа, поэтому включите неизменённые поля наряду с изменёнными. Изменённый вход повторно оценивается против правил отклонения и запроса |

1739| `updatedPermissions` | Только для `"allow"`: массив [записей обновления разрешения](#permission-update-entries) для применения, таких как добавление правила разрешения или изменение режима разрешения сеанса |1739| `updatedPermissions` | Только для `"allow"`: массив [записей обновления разрешения](#permission-update-entries) для применения, таких как добавление правила разрешения или изменение режима разрешения сеанса |

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


1770| `removeDirectories` | `directories`, `destination` | Удаляет рабочие каталоги |1770| `removeDirectories` | `directories`, `destination` | Удаляет рабочие каталоги |

1771 1771 

1772<Note>1772<Note>

1773 `setMode` с `bypassPermissions` только вступает в силу, если сеанс был запущен с режимом обхода, уже доступным: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` или `permissions.defaultMode: "bypassPermissions"` в настройках, и режим не отключен [`permissions.disableBypassPermissionsMode`](/ru/permissions#managed-settings). В противном случае обновление — это no-op. `bypassPermissions` никогда не сохраняется как `defaultMode` независимо от `destination`.1773 `setMode` с `bypassPermissions` только вступает в силу, если сеанс был запущен с режимом обхода, уже доступным: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` или `permissions.defaultMode: "bypassPermissions"` в настройках, и режим не отключен [`permissions.disableBypassPermissionsMode`](/docs/ru/permissions#managed-settings). В противном случае обновление — это no-op. `bypassPermissions` никогда не сохраняется как `defaultMode` независимо от `destination`.

1774</Note>1774</Note>

1775 1775 

1776Поле `destination` на каждой записи определяет, остаётся ли изменение в памяти или сохраняется в файл настроек.1776Поле `destination` на каждой записи определяет, остаётся ли изменение в памяти или сохраняется в файл настроек.


1989 PermissionDenied1989 PermissionDenied

1990</h3>1990</h3>

1991 1991 

1992Запускается когда классификатор [auto mode](/ru/permission-modes#eliminate-prompts-with-auto-mode) отклоняет вызов инструмента. Этот hook срабатывает только в auto mode: он не запускается когда вы вручную отклоняете диалог разрешения, когда hook `PreToolUse` блокирует вызов или когда совпадает правило `deny`. Используйте это для логирования отказов классификатора, корректировки конфигурации или сообщения модели, что она может повторить попытку вызова инструмента.1992Запускается когда классификатор [auto mode](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) отклоняет вызов инструмента. Этот hook срабатывает только в auto mode: он не запускается когда вы вручную отклоняете диалог разрешения, когда hook `PreToolUse` блокирует вызов или когда совпадает правило `deny`. Используйте это для логирования отказов классификатора, корректировки конфигурации или сообщения модели, что она может повторить попытку вызова инструмента.

1993 1993 

1994Совпадает с именем инструмента, те же значения, что и PreToolUse.1994Совпадает с именем инструмента, те же значения, что и PreToolUse.

1995 1995 


2051| `elicitation_dialog` | MCP сервер открывает форму запроса |2051| `elicitation_dialog` | MCP сервер открывает форму запроса |

2052| `elicitation_complete` | Форма запроса MCP отправлена или отклонена |2052| `elicitation_complete` | Форма запроса MCP отправлена или отклонена |

2053| `elicitation_response` | Ответ на запрос MCP отправлен обратно на сервер |2053| `elicitation_response` | Ответ на запрос MCP отправлен обратно на сервер |

2054| `agent_needs_input` | Фоновый сеанс начинает ждать вашего ввода. Срабатывает только при открытом [agent view](/ru/agent-view) в терминале |2054| `agent_needs_input` | Фоновый сеанс начинает ждать вашего ввода. Срабатывает только при открытом [agent view](/docs/ru/agent-view) в терминале |

2055| `agent_completed` | Фоновый сеанс завершается или не удаётся. Срабатывает только при открытом [agent view](/ru/agent-view) в терминале |2055| `agent_completed` | Фоновый сеанс завершается или не удаётся. Срабатывает только при открытом [agent view](/docs/ru/agent-view) в терминале |

2056 2056 

2057Типы `agent_needs_input` и `agent_completed` требуют Claude Code v2.1.198 или позже.2057Типы `agent_needs_input` и `agent_completed` требуют Claude Code v2.1.198 или позже.

2058 2058 


2109 SubagentStart2109 SubagentStart

2110</h3>2110</h3>

2111 2111 

2112Запускается при порождении Claude Code subagent через инструмент Agent. Поддерживает фильтры для фильтрации по имени типа агента. Для встроенных агентов это имя агента, такое как `general-purpose`, `Explore` или `Plan`. Для [пользовательских subagents](/ru/sub-agents), это поле `name` из frontmatter агента, а не имя файла.2112Запускается при порождении Claude Code subagent через инструмент Agent. Поддерживает фильтры для фильтрации по имени типа агента. Для встроенных агентов это имя агента, такое как `general-purpose`, `Explore` или `Plan`. Для [пользовательских subagents](/docs/ru/sub-agents), это поле `name` из frontmatter агента, а не имя файла.

2113 2113 

2114Для subagents, поставляемых [плагином](/ru/plugins), тип агента — это идентификатор, ограниченный плагином, такой как `my-plugin:reviewer`, а не простое имя frontmatter. Двоеточие помещает имя, ограниченное плагином, на путь регулярного выражения, поэтому закрепите фильтр с `^` и `$` для точного совпадения: `^my-plugin:reviewer$`.2114Для subagents, поставляемых [плагином](/docs/ru/plugins), тип агента — это идентификатор, ограниченный плагином, такой как `my-plugin:reviewer`, а не простое имя frontmatter. Двоеточие помещает имя, ограниченное плагином, на путь регулярного выражения, поэтому закрепите фильтр с `^` и `$` для точного совпадения: `^my-plugin:reviewer$`.

2115 2115 

2116<h4 id="subagentstart-input">2116<h4 id="subagentstart-input">

2117 SubagentStart input2117 SubagentStart input


2243 TaskCompleted2243 TaskCompleted

2244</h3>2244</h3>

2245 2245 

2246Запускается при отметке задачи как завершённой. Это срабатывает в двух ситуациях: когда любой агент явно отмечает задачу как завершённую через инструмент TaskUpdate, или когда товарищ [agent team](/ru/agent-teams) завершает свой ход с незавершёнными задачами. Используйте это для обеспечения критериев завершения, таких как прохождение тестов или проверок линтинга перед закрытием задачи.2246Запускается при отметке задачи как завершённой. Это срабатывает в двух ситуациях: когда любой агент явно отмечает задачу как завершённую через инструмент TaskUpdate, или когда товарищ [agent team](/docs/ru/agent-teams) завершает свой ход с незавершёнными задачами. Используйте это для обеспечения критериев завершения, таких как прохождение тестов или проверок линтинга перед закрытием задачи.

2247 2247 

2248Когда hook `TaskCompleted` выходит с кодом 2, задача не отмечается как завершённая и сообщение stderr передаётся обратно модели как обратная связь. Чтобы полностью остановить товарища вместо его повторного запуска, верните JSON с `{"continue": false, "stopReason": "..."}`. TaskCompleted hooks не поддерживают фильтры и срабатывают при каждом вхождении.2248Когда hook `TaskCompleted` выходит с кодом 2, задача не отмечается как завершённая и сообщение stderr передаётся обратно модели как обратная связь. Чтобы полностью остановить товарища вместо его повторного запуска, верните JSON с `{"continue": false, "stopReason": "..."}`. TaskCompleted hooks не поддерживают фильтры и срабатывают при каждом вхождении.

2249 2249 


2308Запускается при завершении ответа основного агента Claude Code. Не запускается, если остановка произошла из-за прерывания пользователя. Ошибки API срабатывают [StopFailure](#stopfailure) вместо этого.2308Запускается при завершении ответа основного агента Claude Code. Не запускается, если остановка произошла из-за прерывания пользователя. Ошибки API срабатывают [StopFailure](#stopfailure) вместо этого.

2309 2309 

2310<Tip>2310<Tip>

2311 Команда [`/goal`](/ru/goal) — это встроенный ярлык для stop hook, ограниченного сеансом на основе подсказки. Используйте её, когда вы хотите, чтобы Claude продолжал работать до выполнения условия без написания конфигурации hook.2311 Команда [`/goal`](/docs/ru/goal) — это встроенный ярлык для stop hook, ограниченного сеансом на основе подсказки. Используйте её, когда вы хотите, чтобы Claude продолжал работать до выполнения условия без написания конфигурации hook.

2312</Tip>2312</Tip>

2313 2313 

2314<h4 id="stop-input">2314<h4 id="stop-input">


2441 TeammateIdle2441 TeammateIdle

2442</h3>2442</h3>

2443 2443 

2444Запускается когда товарищ [agent team](/ru/agent-teams) собирается перейти в режим ожидания после завершения своего хода. Используйте это для обеспечения качественных ворот перед остановкой работы товарища, такие как требование прохождения проверок линтинга или проверка существования выходных файлов.2444Запускается когда товарищ [agent team](/docs/ru/agent-teams) собирается перейти в режим ожидания после завершения своего хода. Используйте это для обеспечения качественных ворот перед остановкой работы товарища, такие как требование прохождения проверок линтинга или проверка существования выходных файлов.

2445 2445 

2446Когда hook `TeammateIdle` выходит с кодом 2, товарищ получает сообщение stderr как обратную связь и продолжает работать вместо перехода в режим ожидания. Чтобы полностью остановить товарища вместо его повторного запуска, верните JSON с `{"continue": false, "stopReason": "..."}`. TeammateIdle hooks не поддерживают фильтры и срабатывают при каждом вхождении.2446Когда hook `TeammateIdle` выходит с кодом 2, товарищ получает сообщение stderr как обратную связь и продолжает работать вместо перехода в режим ожидания. Чтобы полностью остановить товарища вместо его повторного запуска, верните JSON с `{"continue": false, "stopReason": "..."}`. TeammateIdle hooks не поддерживают фильтры и срабатывают при каждом вхождении.

2447 2447 


2655 WorktreeCreate2655 WorktreeCreate

2656</h3>2656</h3>

2657 2657 

2658Запускается при создании worktree, либо из `claude --worktree`, либо из [subagent, использующего `isolation: "worktree"`](/ru/sub-agents#choose-the-subagent-scope). По умолчанию Claude Code создаёт изолированную рабочую копию с помощью `git worktree`. Настройка hook WorktreeCreate заменяет это поведение git по умолчанию, позволяя вам использовать другую систему контроля версий, такую как SVN, Perforce или Mercurial.2658Запускается при создании worktree, либо из `claude --worktree`, либо из [subagent, использующего `isolation: "worktree"`](/docs/ru/sub-agents#choose-the-subagent-scope). По умолчанию Claude Code создаёт изолированную рабочую копию с помощью `git worktree`. Настройка hook WorktreeCreate заменяет это поведение git по умолчанию, позволяя вам использовать другую систему контроля версий, такую как SVN, Perforce или Mercurial.

2659 2659 

2660Потому что hook заменяет поведение по умолчанию полностью, [`.worktreeinclude`](/ru/worktrees#copy-gitignored-files-into-worktrees) не обрабатывается. Если вам нужно скопировать локальные файлы конфигурации, такие как `.env`, в новый worktree, сделайте это внутри вашего скрипта hook.2660Потому что hook заменяет поведение по умолчанию полностью, [`.worktreeinclude`](/docs/ru/worktrees#copy-gitignored-files-into-worktrees) не обрабатывается. Если вам нужно скопировать локальные файлы конфигурации, такие как `.env`, в новый worktree, сделайте это внутри вашего скрипта hook.

2661 2661 

2662Hook должен вернуть путь к созданному worktree каталогу. Claude Code использует этот путь как рабочий каталог для изолированного сеанса. См. [WorktreeCreate output](#worktreecreate-output) для того, как каждый тип hook возвращает путь.2662Hook должен вернуть путь к созданному worktree каталогу. Claude Code использует этот путь как рабочий каталог для изолированного сеанса. См. [WorktreeCreate output](#worktreecreate-output) для того, как каждый тип hook возвращает путь.

2663 2663 


3110 Check multiple conditions before stopping3110 Check multiple conditions before stopping

3111</h3>3111</h3>

3112 3112 

3113Этот hook `Stop` использует подробную подсказку для проверки трёх условий перед разрешением Claude остановиться. Hooks `SubagentStop` используют тот же формат для оценки, должен ли [subagent](/ru/sub-agents) остановиться. Если `"ok"` равно `false`, Claude продолжает работать с предоставленной причиной как своей следующей инструкцией:3113Этот hook `Stop` использует подробную подсказку для проверки трёх условий перед разрешением Claude остановиться. Hooks `SubagentStop` используют тот же формат для оценки, должен ли [subagent](/docs/ru/sub-agents) остановиться. Если `"ok"` равно `false`, Claude продолжает работать с предоставленной причиной как своей следующей инструкцией:

3114 3114 

3115```json theme={null}3115```json theme={null}

3116{3116{


3383 3383 

3384Для более детальной информации о совпадении hooks установите `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` для просмотра дополнительных строк логирования, таких как количество совпадений фильтра hook и совпадение запроса.3384Для более детальной информации о совпадении hooks установите `CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose` для просмотра дополнительных строк логирования, таких как количество совпадений фильтра hook и совпадение запроса.

3385 3385 

3386Для устранения неполадок распространённых проблем, таких как hooks, которые не срабатывают, бесконечные циклы Stop hook или ошибки конфигурации, см. [Limitations and troubleshooting](/ru/hooks-guide#limitations-and-troubleshooting) в руководстве. Для более широкого диагностического пошагового руководства, охватывающего `/context`, `/doctor` и приоритет параметров, см. [Debug your config](/ru/debug-your-config).3386Для устранения неполадок распространённых проблем, таких как hooks, которые не срабатывают, бесконечные циклы Stop hook или ошибки конфигурации, см. [Limitations and troubleshooting](/docs/ru/hooks-guide#limitations-and-troubleshooting) в руководстве. Для более широкого диагностического пошагового руководства, охватывающего `/context`, `/doctor` и приоритет параметров, см. [Debug your config](/docs/ru/debug-your-config).

hooks-guide.md +50 −50

Details

10 10 

11Для решений, требующих суждения, а не детерминированных правил, вы также можете использовать [hooks на основе подсказок](#prompt-based-hooks) или [hooks на основе агентов](#agent-based-hooks), которые используют модель Claude для оценки условий.11Для решений, требующих суждения, а не детерминированных правил, вы также можете использовать [hooks на основе подсказок](#prompt-based-hooks) или [hooks на основе агентов](#agent-based-hooks), которые используют модель Claude для оценки условий.

12 12 

13Для других способов расширения Claude Code см. [skills](/ru/skills) для предоставления Claude дополнительных инструкций и исполняемых команд, [subagents](/ru/sub-agents) для запуска задач в изолированных контекстах и [plugins](/ru/plugins) для упаковки расширений для совместного использования в проектах.13Для других способов расширения Claude Code см. [skills](/docs/ru/skills) для предоставления Claude дополнительных инструкций и исполняемых команд, [subagents](/docs/ru/sub-agents) для запуска задач в изолированных контекстах и [plugins](/docs/ru/plugins) для упаковки расширений для совместного использования в проектах.

14 14 

15<Tip>15<Tip>

16 Это руководство охватывает распространённые варианты использования и как начать работу. Для полных схем событий, форматов JSON ввода/вывода и расширенных функций, таких как асинхронные hooks и MCP tool hooks, см. [справочник Hooks](/ru/hooks).16 Это руководство охватывает распространённые варианты использования и как начать работу. Для полных схем событий, форматов JSON ввода/вывода и расширенных функций, таких как асинхронные hooks и MCP tool hooks, см. [справочник Hooks](/docs/ru/hooks).

17</Tip>17</Tip>

18 18 

19<h2 id="set-up-your-first-hook">19<h2 id="set-up-your-first-hook">


85 Что вы можете автоматизировать85 Что вы можете автоматизировать

86</h2>86</h2>

87 87 

88Hooks позволяют запускать код в ключевых точках жизненного цикла Claude Code: форматировать файлы после редактирования, блокировать команды перед их выполнением, отправлять уведомления, когда Claude требует ввода, внедрять контекст при запуске сеанса и многое другое. Для полного списка событий hook см. [справочник Hooks](/ru/hooks#hook-lifecycle).88Hooks позволяют запускать код в ключевых точках жизненного цикла Claude Code: форматировать файлы после редактирования, блокировать команды перед их выполнением, отправлять уведомления, когда Claude требует ввода, внедрять контекст при запуске сеанса и многое другое. Для полного списка событий hook см. [справочник Hooks](/docs/ru/hooks#hook-lifecycle).

89 89 

90Каждый пример включает готовый к использованию блок конфигурации, который вы добавляете в [файл параметров](#configure-hook-location).90Каждый пример включает готовый к использованию блок конфигурации, который вы добавляете в [файл параметров](#configure-hook-location).

91 91 

92Для примера использования в production с hooks, которые запускают отдельную проверку модели и передают результаты обратно в сеанс, см. [как плагин `security-guidance` интегрируется с Claude Code](/ru/security-guidance#how-the-plugin-integrates-with-claude-code).92Для примера использования в production с hooks, которые запускают отдельную проверку модели и передают результаты обратно в сеанс, см. [как плагин `security-guidance` интегрируется с Claude Code](/docs/ru/security-guidance#how-the-plugin-integrates-with-claude-code).

93 93 

94<h3 id="get-notified-when-claude-needs-input">94<h3 id="get-notified-when-claude-needs-input">

95 Получайте уведомления, когда Claude требует ввода95 Получайте уведомления, когда Claude требует ввода


181| `elicitation_dialog` | Сервер MCP открывает форму выяснения |181| `elicitation_dialog` | Сервер MCP открывает форму выяснения |

182| `elicitation_complete` | Форма выяснения MCP отправлена или закрыта |182| `elicitation_complete` | Форма выяснения MCP отправлена или закрыта |

183| `elicitation_response` | Ответ выяснения MCP отправлен обратно на сервер |183| `elicitation_response` | Ответ выяснения MCP отправлен обратно на сервер |

184| `agent_needs_input` | Фоновый сеанс начинает ожидание вашего ввода. Срабатывает только при открытом [представлении агента](/ru/agent-view) |184| `agent_needs_input` | Фоновый сеанс начинает ожидание вашего ввода. Срабатывает только при открытом [представлении агента](/docs/ru/agent-view) |

185| `agent_completed` | Фоновый сеанс завершается или завершается с ошибкой. Срабатывает только при открытом [представлении агента](/ru/agent-view) |185| `agent_completed` | Фоновый сеанс завершается или завершается с ошибкой. Срабатывает только при открытом [представлении агента](/docs/ru/agent-view) |

186 186 

187Matchers `agent_needs_input` и `agent_completed` требуют Claude Code v2.1.198 или позже.187Matchers `agent_needs_input` и `agent_completed` требуют Claude Code v2.1.198 или позже.

188 188 

189Введите `/hooks` и выберите `Notification`, чтобы подтвердить, что hook зарегистрирован. Для полной схемы события см. [справочник Notification](/ru/hooks#notification).189Введите `/hooks` и выберите `Notification`, чтобы подтвердить, что hook зарегистрирован. Для полной схемы события см. [справочник Notification](/docs/ru/hooks#notification).

190 190 

191<h3 id="auto-format-code-after-edits">191<h3 id="auto-format-code-after-edits">

192 Автоматическое форматирование кода после редактирования192 Автоматическое форматирование кода после редактирования


309}309}

310```310```

311 311 

312Вы можете заменить `echo` любой командой, которая производит динамический вывод, например `git log --oneline -5` для отображения недавних коммитов. Для внедрения контекста при каждом запуске сеанса рассмотрите использование [CLAUDE.md](/ru/memory) вместо этого. Для переменных окружения см. [`CLAUDE_ENV_FILE`](/ru/hooks#persist-environment-variables) в справочнике.312Вы можете заменить `echo` любой командой, которая производит динамический вывод, например `git log --oneline -5` для отображения недавних коммитов. Для внедрения контекста при каждом запуске сеанса рассмотрите использование [CLAUDE.md](/docs/ru/memory) вместо этого. Для переменных окружения см. [`CLAUDE_ENV_FILE`](/docs/ru/hooks#persist-environment-variables) в справочнике.

313 313 

314<h3 id="audit-configuration-changes">314<h3 id="audit-configuration-changes">

315 Аудит изменений конфигурации315 Аудит изменений конфигурации


337}337}

338```338```

339 339 

340Matcher фильтрует по типу конфигурации: `user_settings`, `project_settings`, `local_settings`, `policy_settings` или `skills`. Для блокировки вступления изменения в силу выйдите с кодом 2 или верните `{"decision": "block"}`. См. [справочник ConfigChange](/ru/hooks#configchange) для полной схемы ввода.340Matcher фильтрует по типу конфигурации: `user_settings`, `project_settings`, `local_settings`, `policy_settings` или `skills`. Для блокировки вступления изменения в силу выйдите с кодом 2 или верните `{"decision": "block"}`. См. [справочник ConfigChange](/docs/ru/hooks#configchange) для полной схемы ввода.

341 341 

342<h3 id="reload-environment-when-directory-or-files-change">342<h3 id="reload-environment-when-directory-or-files-change">

343 Перезагрузка окружения при изменении каталога или файлов343 Перезагрузка окружения при изменении каталога или файлов


376 376 

377Запустите `direnv allow` один раз в каждом каталоге, который имеет `.envrc`, чтобы direnv был разрешён загружать его. Если вы используете devbox или nix вместо direnv, тот же шаблон работает с `devbox shellenv` или `devbox global shellenv` вместо `direnv export bash`.377Запустите `direnv allow` один раз в каждом каталоге, который имеет `.envrc`, чтобы direnv был разрешён загружать его. Если вы используете devbox или nix вместо direnv, тот же шаблон работает с `devbox shellenv` или `devbox global shellenv` вместо `direnv export bash`.

378 378 

379Чтобы реагировать на определённые файлы вместо каждого изменения каталога, используйте `FileChanged` с matcher, указывающим имена файлов для наблюдения, разделённые `|`. Для построения списка наблюдения это значение разбивается на буквальные имена файлов, а не оценивается как regex. См. [FileChanged](/ru/hooks#filechanged) для того, как то же значение также фильтрует, какие группы hook запускаются при изменении файла. Этот пример наблюдает `.envrc` и `.env` в рабочем каталоге:379Чтобы реагировать на определённые файлы вместо каждого изменения каталога, используйте `FileChanged` с matcher, указывающим имена файлов для наблюдения, разделённые `|`. Для построения списка наблюдения это значение разбивается на буквальные имена файлов, а не оценивается как regex. См. [FileChanged](/docs/ru/hooks#filechanged) для того, как то же значение также фильтрует, какие группы hook запускаются при изменении файла. Этот пример наблюдает `.envrc` и `.env` в рабочем каталоге:

380 380 

381```json theme={null}381```json theme={null}

382{382{


396}396}

397```397```

398 398 

399См. справочные записи [CwdChanged](/ru/hooks#cwdchanged) и [FileChanged](/ru/hooks#filechanged) для схем ввода, вывода `watchPaths` и деталей `CLAUDE_ENV_FILE`.399См. справочные записи [CwdChanged](/docs/ru/hooks#cwdchanged) и [FileChanged](/docs/ru/hooks#filechanged) для схем ввода, вывода `watchPaths` и деталей `CLAUDE_ENV_FILE`.

400 400 

401<h3 id="auto-approve-specific-permission-prompts">401<h3 id="auto-approve-specific-permission-prompts">

402 Автоматическое одобрение определённых запросов разрешений402 Автоматическое одобрение определённых запросов разрешений


431Чтобы установить определённый режим разрешения вместо этого, вывод вашего hook может включать массив `updatedPermissions` с записью `setMode`. Значение `mode` — это любой режим разрешения, такой как `default`, `acceptEdits` или `bypassPermissions`, и `destination: "session"` применяет его только для текущего сеанса.431Чтобы установить определённый режим разрешения вместо этого, вывод вашего hook может включать массив `updatedPermissions` с записью `setMode`. Значение `mode` — это любой режим разрешения, такой как `default`, `acceptEdits` или `bypassPermissions`, и `destination: "session"` применяет его только для текущего сеанса.

432 432 

433<Note>433<Note>

434 `bypassPermissions` применяется только если сеанс был запущен с уже доступным режимом обхода: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` или `permissions.defaultMode: "bypassPermissions"` в параметрах, и не отключено [`permissions.disableBypassPermissionsMode`](/ru/permissions#managed-settings). Это никогда не сохраняется как `defaultMode`.434 `bypassPermissions` применяется только если сеанс был запущен с уже доступным режимом обхода: `--dangerously-skip-permissions`, `--permission-mode bypassPermissions`, `--allow-dangerously-skip-permissions` или `permissions.defaultMode: "bypassPermissions"` в параметрах, и не отключено [`permissions.disableBypassPermissionsMode`](/docs/ru/permissions#managed-settings). Это никогда не сохраняется как `defaultMode`.

435</Note>435</Note>

436 436 

437Чтобы переключить сеанс на `acceptEdits`, ваш hook пишет этот JSON в stdout:437Чтобы переключить сеанс на `acceptEdits`, ваш hook пишет этот JSON в stdout:


450}450}

451```451```

452 452 

453Держите matcher как можно более узким. Соответствие `.*` или оставление matcher пустым автоматически одобрит каждый запрос разрешения, включая записи файлов и команды оболочки. См. [справочник PermissionRequest](/ru/hooks#permissionrequest-decision-control) для полного набора полей решения.453Держите matcher как можно более узким. Соответствие `.*` или оставление matcher пустым автоматически одобрит каждый запрос разрешения, включая записи файлов и команды оболочки. См. [справочник PermissionRequest](/docs/ru/hooks#permissionrequest-decision-control) для полного набора полей решения.

454 454 

455<h2 id="how-hooks-work">455<h2 id="how-hooks-work">

456 Как работают hooks456 Как работают hooks


478| `TaskCompleted` | When a task is being marked as completed |478| `TaskCompleted` | When a task is being marked as completed |

479| `Stop` | When Claude finishes responding |479| `Stop` | When Claude finishes responding |

480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |480| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

481| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |481| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |482| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

483| `ConfigChange` | When a configuration file changes during a session |483| `ConfigChange` | When a configuration file changes during a session |

484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |484| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |485| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

486| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |486| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

487| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |487| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

488| `PreCompact` | Before context compaction |488| `PreCompact` | Before context compaction |

489| `PostCompact` | After context compaction completes |489| `PostCompact` | After context compaction completes |

490| `Elicitation` | When an MCP server requests user input during a tool call |490| `Elicitation` | When an MCP server requests user input during a tool call |


494Каждый hook имеет `type`, который определяет, как он запускается. Большинство hooks используют `"type": "command"`, который запускает команду оболочки. Доступны четыре других типа:494Каждый hook имеет `type`, который определяет, как он запускается. Большинство hooks используют `"type": "command"`, который запускает команду оболочки. Доступны четыре других типа:

495 495 

496* `"type": "http"`: POST данные события на URL. См. [HTTP hooks](#http-hooks).496* `"type": "http"`: POST данные события на URL. См. [HTTP hooks](#http-hooks).

497* `"type": "mcp_tool"`: вызвать инструмент на уже подключённом MCP сервере. См. [MCP tool hooks](/ru/hooks#mcp-tool-hook-fields).497* `"type": "mcp_tool"`: вызвать инструмент на уже подключённом MCP сервере. См. [MCP tool hooks](/docs/ru/hooks#mcp-tool-hook-fields).

498* `"type": "prompt"`: однооборотная оценка LLM. См. [Prompt-based hooks](#prompt-based-hooks).498* `"type": "prompt"`: однооборотная оценка LLM. См. [Prompt-based hooks](#prompt-based-hooks).

499* `"type": "agent"`: многооборотная проверка с доступом к инструментам. Agent hooks являются экспериментальными и могут измениться. См. [Agent-based hooks](#agent-based-hooks).499* `"type": "agent"`: многооборотная проверка с доступом к инструментам. Agent hooks являются экспериментальными и могут измениться. См. [Agent-based hooks](#agent-based-hooks).

500 500 


556}556}

557```557```

558 558 

559Ваш скрипт может анализировать этот JSON и действовать на основе любого из этих полей. Hooks `UserPromptSubmit` получают текст `prompt` вместо этого, hooks `SessionStart` получают `source` (`startup`, `resume`, `clear` или `compact`) и так далее. См. [Common input fields](/ru/hooks#common-input-fields) в справочнике для общих полей и раздел каждого события для схем, специфичных для события.559Ваш скрипт может анализировать этот JSON и действовать на основе любого из этих полей. Hooks `UserPromptSubmit` получают текст `prompt` вместо этого, hooks `SessionStart` получают `source` (`startup`, `resume`, `clear` или `compact`) и так далее. См. [Common input fields](/docs/ru/hooks#common-input-fields) в справочнике для общих полей и раздел каждого события для схем, специфичных для события.

560 560 

561<h4 id="hook-output">561<h4 id="hook-output">

562 Вывод hook562 Вывод hook


579 579 

580Код выхода определяет, что происходит дальше:580Код выхода определяет, что происходит дальше:

581 581 

582* **Exit 0**: hook не возражает и действие продолжается нормально. Для hook `PreToolUse` это не одобряет вызов инструмента: нормальный [permission flow](/ru/permissions) по-прежнему применяется. Для hooks `UserPromptSubmit`, `UserPromptExpansion` и `SessionStart` всё, что вы пишете в stdout, добавляется в контекст Claude.582* **Exit 0**: hook не возражает и действие продолжается нормально. Для hook `PreToolUse` это не одобряет вызов инструмента: нормальный [permission flow](/docs/ru/permissions) по-прежнему применяется. Для hooks `UserPromptSubmit`, `UserPromptExpansion` и `SessionStart` всё, что вы пишете в stdout, добавляется в контекст Claude.

583* **Exit 2**: действие блокируется. Напишите причину в stderr, и Claude получит её как обратную связь, чтобы он мог скорректировать. Некоторые события не могут быть заблокированы: для `SessionStart`, `Setup`, `Notification` и других, exit 2 показывает stderr пользователю и выполнение продолжается. См. [exit code 2 behavior per event](/ru/hooks#exit-code-2-behavior-per-event) для полного списка.583* **Exit 2**: действие блокируется. Напишите причину в stderr, и Claude получит её как обратную связь, чтобы он мог скорректировать. Некоторые события не могут быть заблокированы: для `SessionStart`, `Setup`, `Notification` и других, exit 2 показывает stderr пользователю и выполнение продолжается. См. [exit code 2 behavior per event](/docs/ru/hooks#exit-code-2-behavior-per-event) для полного списка.

584* **Любой другой код выхода**: действие продолжается. Стенограмма показывает уведомление об ошибке `<hook name> hook error`, за которым следует первая строка stderr; полный stderr переходит в [debug log](/ru/hooks#debug-hooks).584* **Любой другой код выхода**: действие продолжается. Стенограмма показывает уведомление об ошибке `<hook name> hook error`, за которым следует первая строка stderr; полный stderr переходит в [debug log](/docs/ru/hooks#debug-hooks).

585 585 

586<h4 id="structured-json-output">586<h4 id="structured-json-output">

587 Структурированный вывод JSON587 Структурированный вывод JSON


607 607 

608С `"deny"` Claude Code отменяет вызов инструмента и передаёт `permissionDecisionReason` обратно Claude. Эти значения `permissionDecision` специфичны для `PreToolUse`:608С `"deny"` Claude Code отменяет вызов инструмента и передаёт `permissionDecisionReason` обратно Claude. Эти значения `permissionDecision` специфичны для `PreToolUse`:

609 609 

610* `"allow"`: пропустить интерактивный запрос разрешения. Правила отказа и запроса, включая управляемые списки отказов предприятия, по-прежнему применяются, как и запросы для инструментов соединителя [которые ваша организация установила на `ask`](/ru/mcp#organization-controls-on-connector-tools) и MCP инструменты, отмеченные [`requiresUserInteraction`](/ru/mcp#require-approval-for-a-specific-tool)610* `"allow"`: пропустить интерактивный запрос разрешения. Правила отказа и запроса, включая управляемые списки отказов предприятия, по-прежнему применяются, как и запросы для инструментов соединителя [которые ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) и MCP инструменты, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool)

611* `"deny"`: отменить вызов инструмента и отправить причину Claude611* `"deny"`: отменить вызов инструмента и отправить причину Claude

612* `"ask"`: показать запрос разрешения пользователю как обычно612* `"ask"`: показать запрос разрешения пользователю как обычно

613 613 

614Четвёртое значение, `"defer"`, доступно в [non-interactive mode](/ru/headless) с флагом `-p`. Оно выходит из процесса с сохранённым вызовом инструмента, чтобы обёртка Agent SDK могла собрать ввод и возобновить. См. [Defer a tool call for later](/ru/hooks#defer-a-tool-call-for-later) в справочнике.614Четвёртое значение, `"defer"`, доступно в [non-interactive mode](/docs/ru/headless) с флагом `-p`. Оно выходит из процесса с сохранённым вызовом инструмента, чтобы обёртка Agent SDK могла собрать ввод и возобновить. См. [Defer a tool call for later](/docs/ru/hooks#defer-a-tool-call-for-later) в справочнике.

615 615 

616Возврат `"allow"` пропускает интерактивный запрос, но не переопределяет [permission rules](/ru/permissions#manage-permissions). Если правило отказа соответствует вызову инструмента, вызов блокируется даже когда ваш hook возвращает `"allow"`. Если правило запроса соответствует, пользователь по-прежнему получает запрос, как и инструменты соединителя [которые ваша организация установила на `ask`](/ru/mcp#organization-controls-on-connector-tools) и MCP инструменты, отмеченные [`requiresUserInteraction`](/ru/mcp#require-approval-for-a-specific-tool). Это означает, что правила отказа из любой области параметров, включая [managed settings](/ru/settings#settings-files), всегда имеют приоритет над одобрениями hook.616Возврат `"allow"` пропускает интерактивный запрос, но не переопределяет [permission rules](/docs/ru/permissions#manage-permissions). Если правило отказа соответствует вызову инструмента, вызов блокируется даже когда ваш hook возвращает `"allow"`. Если правило запроса соответствует, пользователь по-прежнему получает запрос, как и инструменты соединителя [которые ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) и MCP инструменты, отмеченные [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool). Это означает, что правила отказа из любой области параметров, включая [managed settings](/docs/ru/settings#settings-files), всегда имеют приоритет над одобрениями hook.

617 617 

618Другие события используют разные шаблоны решений. Например, hooks `PostToolUse` и `Stop` используют поле `decision: "block"` верхнего уровня, а `PermissionRequest` использует `hookSpecificOutput.decision.behavior`. См. [summary table](/ru/hooks#decision-control) в справочнике для полного разбора по событиям.618Другие события используют разные шаблоны решений. Например, hooks `PostToolUse` и `Stop` используют поле `decision: "block"` верхнего уровня, а `PermissionRequest` использует `hookSpecificOutput.decision.behavior`. См. [summary table](/docs/ru/hooks#decision-control) в справочнике для полного разбора по событиям.

619 619 

620Для hooks `UserPromptSubmit` используйте `hookSpecificOutput.additionalContext` вместо этого для внедрения текста в контекст Claude. Вложите `additionalContext` внутри `hookSpecificOutput`; если вы поместите его на верхний уровень JSON, Claude Code молча его игнорирует. Например, этот вывод добавляет текущее состояние ветви к каждому запросу:620Для hooks `UserPromptSubmit` используйте `hookSpecificOutput.additionalContext` вместо этого для внедрения текста в контекст Claude. Вложите `additionalContext` внутри `hookSpecificOutput`; если вы поместите его на верхний уровень JSON, Claude Code молча его игнорирует. Например, этот вывод добавляет текущее состояние ветви к каждому запросу:

621 621 


628}628}

629```629```

630 630 

631См. [UserPromptSubmit decision control](/ru/hooks#userpromptsubmit-decision-control) для полной формы вывода, включая блокировку запросов и установку заголовка сеанса.631См. [UserPromptSubmit decision control](/docs/ru/hooks#userpromptsubmit-decision-control) для полной формы вывода, включая блокировку запросов и установку заголовка сеанса.

632 632 

633Hooks с `type: "prompt"` обрабатывают вывод иначе: см. [Prompt-based hooks](#prompt-based-hooks).633Hooks с `type: "prompt"` обрабатывают вывод иначе: см. [Prompt-based hooks](#prompt-based-hooks).

634 634 


653}653}

654```654```

655 655 

656Matcher `"Edit|Write"` срабатывает только, когда Claude использует инструмент `Edit` или `Write`, а не когда он использует `Bash`, `Read` или любой другой инструмент. {/* min-version: 2.1.191 */}На Claude Code v2.1.191 или позже запятая разделяет альтернативы так же, поэтому `"Edit, Write"` эквивалентна. См. [Matcher patterns](/ru/hooks#matcher-patterns) для того, как простые имена и регулярные выражения оцениваются.656Matcher `"Edit|Write"` срабатывает только, когда Claude использует инструмент `Edit` или `Write`, а не когда он использует `Bash`, `Read` или любой другой инструмент. {/* min-version: 2.1.191 */}На Claude Code v2.1.191 или позже запятая разделяет альтернативы так же, поэтому `"Edit, Write"` эквивалентна. См. [Matcher patterns](/docs/ru/hooks#matcher-patterns) для того, как простые имена и регулярные выражения оцениваются.

657 657 

658<Note>658<Note>

659 Claude может также создавать или изменять файлы, запуская команды оболочки через инструмент `Bash`. Если ваш hook должен видеть каждое изменение файла, например для сканирования соответствия или логирования аудита, добавьте hook [`Stop`](/ru/hooks#stop), который сканирует рабочее дерево один раз за ход. Для покрытия за вызов вместо этого также соответствуйте `Bash` и пусть ваш скрипт перечисляет изменённые и неотслеживаемые файлы с помощью `git status --porcelain`.659 Claude может также создавать или изменять файлы, запуская команды оболочки через инструмент `Bash`. Если ваш hook должен видеть каждое изменение файла, например для сканирования соответствия или логирования аудита, добавьте hook [`Stop`](/docs/ru/hooks#stop), который сканирует рабочее дерево один раз за ход. Для покрытия за вызов вместо этого также соответствуйте `Bash` и пусть ваш скрипт перечисляет изменённые и неотслеживаемые файлы с помощью `git status --porcelain`.

660</Note>660</Note>

661 661 

662Каждый тип события соответствует определённому полю:662Каждый тип события соответствует определённому полю:


676| `InstructionsLoaded` | причина загрузки | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |676| `InstructionsLoaded` | причина загрузки | `session_start`, `nested_traversal`, `path_glob_match`, `include`, `compact` |

677| `Elicitation` | имя MCP сервера | ваши настроенные имена MCP серверов |677| `Elicitation` | имя MCP сервера | ваши настроенные имена MCP серверов |

678| `ElicitationResult` | имя MCP сервера | те же значения, что и `Elicitation` |678| `ElicitationResult` | имя MCP сервера | те же значения, что и `Elicitation` |

679| `FileChanged` | буквальные имена файлов для наблюдения (см. [FileChanged](/ru/hooks#filechanged)) | `.envrc\|.env` |679| `FileChanged` | буквальные имена файлов для наблюдения (см. [FileChanged](/docs/ru/hooks#filechanged)) | `.envrc\|.env` |

680| `UserPromptExpansion` | имя команды | ваши имена skill или команд |680| `UserPromptExpansion` | имя команды | ваши имена skill или команд |

681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | поддержка matcher отсутствует | всегда срабатывает при каждом возникновении |681| `UserPromptSubmit`, `PostToolBatch`, `Stop`, `TeammateIdle`, `TaskCreated`, `TaskCompleted`, `WorktreeCreate`, `WorktreeRemove`, `CwdChanged`, `MessageDisplay` | поддержка matcher отсутствует | всегда срабатывает при каждом возникновении |

682 682 


706 </Tab>706 </Tab>

707 707 

708 <Tab title="Соответствие MCP инструментам">708 <Tab title="Соответствие MCP инструментам">

709 MCP инструменты используют другое соглашение об именовании, чем встроенные инструменты: `mcp__<server>__<tool>`, где `<server>` — имя MCP сервера, а `<tool>` — инструмент, который он предоставляет. Например, `mcp__github__search_repositories` или `mcp__filesystem__read_file`. Инструменты из [plugin-bundled server](/ru/mcp#plugin-provided-mcp-servers) используют вместо этого сегмент сервера с областью видимости, такой как `mcp__plugin_my-plugin_db__query`. Используйте matcher regex для нацеливания на все инструменты с определённого сервера, или соответствуйте серверам с шаблоном, таким как `mcp__.*__write.*`. См. [Match MCP tools](/ru/hooks#match-mcp-tools) в справочнике для полного списка примеров.709 MCP инструменты используют другое соглашение об именовании, чем встроенные инструменты: `mcp__<server>__<tool>`, где `<server>` — имя MCP сервера, а `<tool>` — инструмент, который он предоставляет. Например, `mcp__github__search_repositories` или `mcp__filesystem__read_file`. Инструменты из [plugin-bundled server](/docs/ru/mcp#plugin-provided-mcp-servers) используют вместо этого сегмент сервера с областью видимости, такой как `mcp__plugin_my-plugin_db__query`. Используйте matcher regex для нацеливания на все инструменты с определённого сервера, или соответствуйте серверам с шаблоном, таким как `mcp__.*__write.*`. См. [Match MCP tools](/docs/ru/hooks#match-mcp-tools) в справочнике для полного списка примеров.

710 710 

711 Команда ниже извлекает имя инструмента из JSON ввода hook с помощью `jq` и записывает его в stderr. Запись в stderr сохраняет stdout чистым для вывода JSON и отправляет сообщение в [debug log](/ru/hooks#debug-hooks):711 Команда ниже извлекает имя инструмента из JSON ввода hook с помощью `jq` и записывает его в stderr. Запись в stderr сохраняет stdout чистым для вывода JSON и отправляет сообщение в [debug log](/docs/ru/hooks#debug-hooks):

712 712 

713 ```json theme={null}713 ```json theme={null}

714 {714 {


752 </Tab>752 </Tab>

753</Tabs>753</Tabs>

754 754 

755Для полного синтаксиса matcher см. [Hooks reference](/ru/hooks#configuration).755Для полного синтаксиса matcher см. [Hooks reference](/docs/ru/hooks#configuration).

756 756 

757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">757<h4 id="filter-by-tool-name-and-arguments-with-the-if-field">

758 Фильтрация по имени инструмента и аргументам с помощью поля `if`758 Фильтрация по имени инструмента и аргументам с помощью поля `if`

759</h4>759</h4>

760 760 

761Поле `if` использует [permission rule syntax](/ru/permissions) для фильтрации hooks по имени инструмента и аргументам вместе, поэтому процесс hook порождается только когда вызов инструмента совпадает. Это выходит за рамки `matcher`, который фильтрует на уровне группы только по имени инструмента.761Поле `if` использует [permission rule syntax](/docs/ru/permissions) для фильтрации hooks по имени инструмента и аргументам вместе, поэтому процесс hook порождается только когда вызов инструмента совпадает. Это выходит за рамки `matcher`, который фильтрует на уровне группы только по имени инструмента.

762 762 

763Например, чтобы запустить hook только когда Claude использует команды `git` вместо всех команд Bash:763Например, чтобы запустить hook только когда Claude использует команды `git` вместо всех команд Bash:

764 764 


791| `Bash(git *)` | `echo $(date)` | нет | ни одна подкоманда не совпадает с `git *` |791| `Bash(git *)` | `echo $(date)` | нет | ни одна подкоманда не совпадает с `git *` |

792| `Bash(git push *)` | `echo $(date)` | да | шаблоны, которые указывают больше, чем имя команды, запускают hook в любом случае на `$()`, обратных кавычках или `$VAR` |792| `Bash(git push *)` | `echo $(date)` | да | шаблоны, которые указывают больше, чем имя команды, запускают hook в любом случае на `$()`, обратных кавычках или `$VAR` |

793 793 

794Фильтр также открывается с ошибкой, запуская ваш hook независимо от шаблона, когда команда Bash не может быть проанализирована. Поскольку фильтр работает по принципу лучшего усилия, используйте [permission system](/ru/permissions) вместо hook для обеспечения жёсткого разрешения или отказа.794Фильтр также открывается с ошибкой, запуская ваш hook независимо от шаблона, когда команда Bash не может быть проанализирована. Поскольку фильтр работает по принципу лучшего усилия, используйте [permission system](/docs/ru/permissions) вместо hook для обеспечения жёсткого разрешения или отказа.

795 795 

796Поле `if` принимает те же шаблоны, что и правила разрешений: `"Bash(git *)"`, `"Edit(*.ts)"` и так далее. Для соответствия нескольким именам инструментов используйте отдельные обработчики каждый со своим значением `if`, или соответствуйте на уровне `matcher`, где поддерживается чередование трубой.796Поле `if` принимает те же шаблоны, что и правила разрешений: `"Bash(git *)"`, `"Edit(*.ts)"` и так далее. Для соответствия нескольким именам инструментов используйте отдельные обработчики каждый со своим значением `if`, или соответствуйте на уровне `matcher`, где поддерживается чередование трубой.

797 797 


809| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репо |809| `.claude/settings.json` | Один проект | Да, можно зафиксировать в репо |

810| `.claude/settings.local.json` | Один проект | Нет, gitignored когда Claude Code создаёт его |810| `.claude/settings.local.json` | Один проект | Нет, gitignored когда Claude Code создаёт его |

811| Managed policy settings | Организация | Да, контролируется администратором |811| Managed policy settings | Организация | Да, контролируется администратором |

812| [Plugin](/ru/plugins) `hooks/hooks.json` | Когда плагин включен | Да, упакован с плагином |812| [Plugin](/docs/ru/plugins) `hooks/hooks.json` | Когда плагин включен | Да, упакован с плагином |

813| [Skill](/ru/skills) или [agent](/ru/sub-agents) frontmatter | Пока skill или agent активны | Да, определено в файле компонента |813| [Skill](/docs/ru/skills) или [agent](/docs/ru/sub-agents) frontmatter | Пока skill или agent активны | Да, определено в файле компонента |

814 814 

815Запустите [`/hooks`](/ru/hooks#the-%2Fhooks-menu) в Claude Code для просмотра всех настроенных hooks, сгруппированных по событиям.815Запустите [`/hooks`](/docs/ru/hooks#the-%2Fhooks-menu) в Claude Code для просмотра всех настроенных hooks, сгруппированных по событиям.

816 816 

817Чтобы отключить hooks, установите `"disableAllHooks": true` в вашем файле параметров. Hooks, настроенные в управляемых параметрах, по-прежнему запускаются, если `disableAllHooks` также не установлен там.817Чтобы отключить hooks, установите `"disableAllHooks": true` в вашем файле параметров. Hooks, настроенные в управляемых параметрах, по-прежнему запускаются, если `disableAllHooks` также не установлен там.

818 818 


851}851}

852```852```

853 853 

854Для полных параметров конфигурации см. [Hooks на основе подсказок](/ru/hooks#prompt-based-hooks) в справочнике.854Для полных параметров конфигурации см. [Hooks на основе подсказок](/docs/ru/hooks#prompt-based-hooks) в справочнике.

855 855 

856<h2 id="agent-based-hooks">856<h2 id="agent-based-hooks">

857 Hooks на основе агентов857 Hooks на основе агентов

858</h2>858</h2>

859 859 

860<Warning>860<Warning>

861 Hooks агентов являются экспериментальными. Поведение и конфигурация могут измениться в будущих выпусках. Для производственных рабочих процессов предпочитайте [command hooks](/ru/hooks#command-hook-fields).861 Hooks агентов являются экспериментальными. Поведение и конфигурация могут измениться в будущих выпусках. Для производственных рабочих процессов предпочитайте [command hooks](/docs/ru/hooks#command-hook-fields).

862</Warning>862</Warning>

863 863 

864Когда проверка требует проверки файлов или запуска команд, используйте hooks `type: "agent"`. В отличие от hooks подсказок, которые делают один вызов LLM, hooks агентов порождают subagent, который может читать файлы, искать код и использовать другие инструменты для проверки условий перед возвратом решения.864Когда проверка требует проверки файлов или запуска команд, используйте hooks `type: "agent"`. В отличие от hooks подсказок, которые делают один вызов LLM, hooks агентов порождают subagent, который может читать файлы, искать код и использовать другие инструменты для проверки условий перед возвратом решения.


887 887 

888Используйте hooks подсказок, когда данных ввода hook достаточно для принятия решения. Используйте hooks агентов, когда вам нужно проверить что-то против фактического состояния кодовой базы.888Используйте hooks подсказок, когда данных ввода hook достаточно для принятия решения. Используйте hooks агентов, когда вам нужно проверить что-то против фактического состояния кодовой базы.

889 889 

890Для полных параметров конфигурации см. [Hooks на основе агентов](/ru/hooks#agent-based-hooks) в справочнике.890Для полных параметров конфигурации см. [Hooks на основе агентов](/docs/ru/hooks#agent-based-hooks) в справочнике.

891 891 

892<h2 id="http-hooks">892<h2 id="http-hooks">

893 HTTP hooks893 HTTP hooks


920}920}

921```921```

922 922 

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

924 924 

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

926 926 

927Для полных параметров конфигурации и обработки ответов см. [HTTP hooks](/ru/hooks#http-hook-fields) в справочнике.927Для полных параметров конфигурации и обработки ответов см. [HTTP hooks](/docs/ru/hooks#http-hook-fields) в справочнике.

928 928 

929<h2 id="limitations-and-troubleshooting">929<h2 id="limitations-and-troubleshooting">

930 Ограничения и устранение неполадок930 Ограничения и устранение неполадок


942 * `prompt`: 30 секунд.942 * `prompt`: 30 секунд.

943 * `agent`: 60 секунд.943 * `agent`: 60 секунд.

944* Hooks `PostToolUse` не могут отменить действия, так как инструмент уже выполнен.944* Hooks `PostToolUse` не могут отменить действия, так как инструмент уже выполнен.

945* Hooks `PermissionRequest` не срабатывают в [неинтерактивном режиме](/ru/headless) с флагом `-p`. Используйте hooks `PreToolUse` для автоматизированных решений разрешений.945* Hooks `PermissionRequest` не срабатывают в [неинтерактивном режиме](/docs/ru/headless) с флагом `-p`. Используйте hooks `PreToolUse` для автоматизированных решений разрешений.

946* Hooks `Stop` срабатывают всякий раз, когда Claude завершает ответ, а не только при завершении задачи. Они не срабатывают при прерывании пользователем. Ошибки API срабатывают [StopFailure](/ru/hooks#stopfailure) вместо этого.946* Hooks `Stop` срабатывают всякий раз, когда Claude завершает ответ, а не только при завершении задачи. Они не срабатывают при прерывании пользователем. Ошибки API срабатывают [StopFailure](/docs/ru/hooks#stopfailure) вместо этого.

947* Когда несколько hooks `PreToolUse` возвращают [`updatedInput`](/ru/hooks#pretooluse) для переписания аргументов инструмента, последний завершённый побеждает. Поскольку hooks запускаются параллельно, порядок недетерминирован. Избегайте наличия более одного hook, изменяющего ввод одного и того же инструмента.947* Когда несколько hooks `PreToolUse` возвращают [`updatedInput`](/docs/ru/hooks#pretooluse) для переписания аргументов инструмента, последний завершённый побеждает. Поскольку hooks запускаются параллельно, порядок недетерминирован. Избегайте наличия более одного hook, изменяющего ввод одного и того же инструмента.

948 948 

949<h3 id="hooks-and-permission-modes">949<h3 id="hooks-and-permission-modes">

950 Hooks и режимы разрешений950 Hooks и режимы разрешений


952 952 

953Hooks `PreToolUse` срабатывают перед любой проверкой режима разрешений. Hook, возвращающий `permissionDecision: "deny"`, блокирует инструмент даже в режиме `bypassPermissions` или с `--dangerously-skip-permissions`. Это позволяет вам применять политику, которую пользователи не могут обойти, изменив свой режим разрешений.953Hooks `PreToolUse` срабатывают перед любой проверкой режима разрешений. Hook, возвращающий `permissionDecision: "deny"`, блокирует инструмент даже в режиме `bypassPermissions` или с `--dangerously-skip-permissions`. Это позволяет вам применять политику, которую пользователи не могут обойти, изменив свой режим разрешений.

954 954 

955Обратное неверно: hook, возвращающий `"allow"`, не обходит правила отказа из параметров, и он не может подавить запрос для инструментов соединителя [которые ваша организация установила на `ask`](/ru/mcp#organization-controls-on-connector-tools) или инструментов MCP, отмеченных [`requiresUserInteraction`](/ru/mcp#require-approval-for-a-specific-tool). Hooks могут ужесточить ограничения, но не ослабить их сверх того, что разрешают правила разрешений.955Обратное неверно: hook, возвращающий `"allow"`, не обходит правила отказа из параметров, и он не может подавить запрос для инструментов соединителя [которые ваша организация установила на `ask`](/docs/ru/mcp#organization-controls-on-connector-tools) или инструментов MCP, отмеченных [`requiresUserInteraction`](/docs/ru/mcp#require-approval-for-a-specific-tool). Hooks могут ужесточить ограничения, но не ослабить их сверх того, что разрешают правила разрешений.

956 956 

957<h3 id="hook-not-firing">957<h3 id="hook-not-firing">

958 Hook не срабатывает958 Hook не срабатывает


976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh976 echo '{"tool_name":"Bash","tool_input":{"command":"ls"}}' | ./my-hook.sh

977 echo $? # Проверьте код выхода977 echo $? # Проверьте код выхода

978 ```978 ```

979* Если вы видите "command not found", используйте абсолютные пути или `${CLAUDE_PROJECT_DIR}` для ссылки на скрипты. Чтобы полностью избежать экранирования оболочки, добавьте `"args": []` для переключения на [exec form](/ru/hooks#exec-form-and-shell-form), который порождает скрипт напрямую без оболочки979* Если вы видите "command not found", используйте абсолютные пути или `${CLAUDE_PROJECT_DIR}` для ссылки на скрипты. Чтобы полностью избежать экранирования оболочки, добавьте `"args": []` для переключения на [exec form](/docs/ru/hooks#exec-form-and-shell-form), который порождает скрипт напрямую без оболочки

980* Если вы видите "jq: command not found", установите `jq` или используйте Python/Node.js для анализа JSON980* Если вы видите "jq: command not found", установите `jq` или используйте Python/Node.js для анализа JSON

981* Если скрипт вообще не запускается, сделайте его исполняемым: `chmod +x ./my-hook.sh`981* Если скрипт вообще не запускается, сделайте его исполняемым: `chmod +x ./my-hook.sh`

982 982 


1007# ... остальная логика вашего hook1007# ... остальная логика вашего hook

1008```1008```

1009 1009 

1010Если ваш hook законно нуждается в более чем восьми итерациях для сходимости, повысьте предел с помощью [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/ru/env-vars).1010Если ваш hook законно нуждается в более чем восьми итерациях для сходимости, повысьте предел с помощью [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](/docs/ru/env-vars).

1011 1011 

1012<h3 id="json-validation-failed">1012<h3 id="json-validation-failed">

1013 Ошибка валидации JSON1013 Ошибка валидации JSON


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

1046</h2>1046</h2>

1047 1047 

1048* [Справочник Hooks](/ru/hooks): полные схемы событий, формат вывода JSON, асинхронные hooks и MCP tool hooks1048* [Справочник Hooks](/docs/ru/hooks): полные схемы событий, формат вывода JSON, асинхронные hooks и MCP tool hooks

1049* [Соображения безопасности](/ru/hooks#security-considerations): просмотрите перед развёртыванием hooks в общих или производственных средах1049* [Соображения безопасности](/docs/ru/hooks#security-considerations): просмотрите перед развёртыванием hooks в общих или производственных средах

1050* [Пример валидатора команд Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): полная справочная реализация1050* [Пример валидатора команд Bash](https://github.com/anthropics/claude-code/blob/main/examples/hooks/bash_command_validator_example.py): полная справочная реализация

Details

7> Полный технический справочник по системе плагинов Claude Code, включая схемы, команды CLI и спецификации компонентов.7> Полный технический справочник по системе плагинов Claude Code, включая схемы, команды CLI и спецификации компонентов.

8 8 

9<Tip>9<Tip>

10 Ищете способ установить плагины? Смотрите [Обнаружение и установка плагинов](/ru/discover-plugins). Для создания плагинов смотрите [Плагины](/ru/plugins). Для распространения плагинов смотрите [Маркетплейсы плагинов](/ru/plugin-marketplaces).10 Ищете способ установить плагины? Смотрите [Обнаружение и установка плагинов](/docs/ru/discover-plugins). Для создания плагинов смотрите [Плагины](/docs/ru/plugins). Для распространения плагинов смотрите [Маркетплейсы плагинов](/docs/ru/plugin-marketplaces).

11</Tip>11</Tip>

12 12 

13Этот справочник содержит полные технические спецификации для системы плагинов Claude Code, включая схемы компонентов, команды CLI и инструменты разработки.13Этот справочник содержит полные технические спецификации для системы плагинов Claude Code, включая схемы компонентов, команды CLI и инструменты разработки.


48 48 

49Если плагин не имеет каталога `skills/` и не имеет поля манифеста `skills`, то `SKILL.md` в корне плагина загружается как один skill. Установите поле frontmatter `name` для управления именем вызова skill. Без него Claude Code возвращается к имени каталога установки, которое для плагинов, установленных из маркетплейса, является строкой версии, которая меняется при каждом обновлении. Для плагинов, которые поставляют более одного skill, используйте макет каталога `skills/`, показанный выше.49Если плагин не имеет каталога `skills/` и не имеет поля манифеста `skills`, то `SKILL.md` в корне плагина загружается как один skill. Установите поле frontmatter `name` для управления именем вызова skill. Без него Claude Code возвращается к имени каталога установки, которое для плагинов, установленных из маркетплейса, является строкой версии, которая меняется при каждом обновлении. Для плагинов, которые поставляют более одного skill, используйте макет каталога `skills/`, показанный выше.

50 50 

51Для полной информации смотрите [Skills](/ru/skills).51Для полной информации смотрите [Skills](/docs/ru/skills).

52 52 

53<h3 id="agents">53<h3 id="agents">

54 Agents54 Agents


79 79 

80**Точки интеграции**:80**Точки интеграции**:

81 81 

82* Агенты появляются в интерфейсе [@-mention typeahead](/ru/sub-agents#invoke-subagents-explicitly) под их областью видимости, такой как `my-plugin:code-reviewer`, после включения плагина82* Агенты появляются в интерфейсе [@-mention typeahead](/docs/ru/sub-agents#invoke-subagents-explicitly) под их областью видимости, такой как `my-plugin:code-reviewer`, после включения плагина

83* Claude может вызывать агентов автоматически на основе контекста задачи83* Claude может вызывать агентов автоматически на основе контекста задачи

84* Агенты могут быть вызваны вручную пользователями84* Агенты могут быть вызваны вручную пользователями

85* Плагины agents работают наряду со встроенными agents Claude85* Плагины agents работают наряду со встроенными agents Claude

86 86 

87Для полной информации смотрите [Subagents](/ru/sub-agents).87Для полной информации смотрите [Subagents](/docs/ru/sub-agents).

88 88 

89<h3 id="hooks">89<h3 id="hooks">

90 Hooks90 Hooks


116}116}

117```117```

118 118 

119Плагины hooks реагируют на те же события жизненного цикла, что и [определённые пользователем hooks](/ru/hooks):119Плагины hooks реагируют на те же события жизненного цикла, что и [определённые пользователем hooks](/docs/ru/hooks):

120 120 

121| Event | When it fires |121| Event | When it fires |

122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |122| :-------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |


138| `TaskCompleted` | When a task is being marked as completed |138| `TaskCompleted` | When a task is being marked as completed |

139| `Stop` | When Claude finishes responding |139| `Stop` | When Claude finishes responding |

140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |140| `StopFailure` | When the turn ends due to an API error. Output and exit code are ignored |

141| `TeammateIdle` | When an [agent team](/en/agent-teams) teammate is about to go idle |141| `TeammateIdle` | When an [agent team](/docs/en/agent-teams) teammate is about to go idle |

142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |142| `InstructionsLoaded` | When a CLAUDE.md or `.claude/rules/*.md` file is loaded into context. Fires at session start and when files are lazily loaded during a session |

143| `ConfigChange` | When a configuration file changes during a session |143| `ConfigChange` | When a configuration file changes during a session |

144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |144| `CwdChanged` | When the working directory changes, for example when Claude executes a `cd` command. Useful for reactive environment management with tools like direnv |

145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |145| `FileChanged` | When a watched file changes on disk. The `matcher` field specifies which filenames to watch |

146| `WorktreeCreate` | When a worktree is being created via `--worktree` or `isolation: "worktree"`. Replaces default git behavior |146| `WorktreeCreate` | When a worktree is being created via `--worktree`, `isolation: "worktree"`, or for a background session. Replaces default git behavior |

147| `WorktreeRemove` | When a worktree is being removed, either at session exit or when a subagent finishes |147| `WorktreeRemove` | When a worktree is being removed at session exit, when a subagent finishes, or when you delete a background session |

148| `PreCompact` | Before context compaction |148| `PreCompact` | Before context compaction |

149| `PostCompact` | After context compaction completes |149| `PostCompact` | After context compaction completes |

150| `Elicitation` | When an MCP server requests user input during a tool call |150| `Elicitation` | When an MCP server requests user input during a tool call |


155 155 

156* `command`: выполнение команд оболочки или скриптов156* `command`: выполнение команд оболочки или скриптов

157* `http`: отправка JSON события как POST запроса на URL157* `http`: отправка JSON события как POST запроса на URL

158* `mcp_tool`: вызов инструмента на настроенном [MCP server](/ru/mcp)158* `mcp_tool`: вызов инструмента на настроенном [MCP server](/docs/ru/mcp)

159* `prompt`: оценка приглашения с помощью LLM (использует заполнитель `$ARGUMENTS` для контекста)159* `prompt`: оценка приглашения с помощью LLM (использует заполнитель `$ARGUMENTS` для контекста)

160* `agent`: запуск проверки агента с инструментами для сложных задач проверки160* `agent`: запуск проверки агента с инструментами для сложных задач проверки

161 161 

162Hooks, которые нацелены на собственный [bundled MCP server](#mcp-servers) плагина, должны использовать его scoped names. Сопоставители инструментов и поля `if` принимают scoped tool name `mcp__plugin_<plugin-name>_<server-name>__<tool>`, а поле `server` hook `mcp_tool` принимает `plugin:<plugin-name>:<server-name>`. Сопоставитель, написанный для простого ключа сервера, никогда не срабатывает. Смотрите [Match MCP tools](/ru/hooks#match-mcp-tools) и [Plugin-provided MCP servers](/ru/mcp#plugin-provided-mcp-servers).162Hooks, которые нацелены на собственный [bundled MCP server](#mcp-servers) плагина, должны использовать его scoped names. Сопоставители инструментов и поля `if` принимают scoped tool name `mcp__plugin_<plugin-name>_<server-name>__<tool>`, а поле `server` hook `mcp_tool` принимает `plugin:<plugin-name>:<server-name>`. Сопоставитель, написанный для простого ключа сервера, никогда не срабатывает. Смотрите [Match MCP tools](/docs/ru/hooks#match-mcp-tools) и [Plugin-provided MCP servers](/docs/ru/mcp#plugin-provided-mcp-servers).

163 163 

164<h3 id="mcp-servers">164<h3 id="mcp-servers">

165 MCP servers165 MCP servers


300 300 

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

302 302 

303Плагины monitors используют тот же механизм, что и [инструмент Monitor](/ru/tools-reference#monitor-tool), и разделяют его ограничения доступности. Они работают только в интерактивных сеансах CLI, работают без песочницы на том же уровне доверия, что и [hooks](#hooks), и пропускаются на хостах, где инструмент Monitor недоступен.303Плагины monitors используют тот же механизм, что и [инструмент Monitor](/docs/ru/tools-reference#monitor-tool), и разделяют его ограничения доступности. Они работают только в интерактивных сеансах CLI, работают без песочницы на том же уровне доверия, что и [hooks](#hooks), и пропускаются на хостах, где инструмент Monitor недоступен.

304 304 

305**Расположение**: `monitors/monitors.json` в корне плагина или встроенный в `plugin.json`305**Расположение**: `monitors/monitors.json` в корне плагина или встроенный в `plugin.json`

306 306 


342 342 

343Значение `command` поддерживает [подстановки переменных](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}` и `${CLAUDE_PROJECT_DIR}`, плюс любой `${ENV_VAR}` из окружения. Добавьте префикс команды с `cd "${CLAUDE_PLUGIN_ROOT}" && `, если скрипт должен работать из собственного каталога плагина.343Значение `command` поддерживает [подстановки переменных](#environment-variables) `${CLAUDE_PLUGIN_ROOT}`, `${CLAUDE_PLUGIN_DATA}` и `${CLAUDE_PROJECT_DIR}`, плюс любой `${ENV_VAR}` из окружения. Добавьте префикс команды с `cd "${CLAUDE_PLUGIN_ROOT}" && `, если скрипт должен работать из собственного каталога плагина.

344 344 

345Команда monitor не может ссылаться на значения [`${user_config.*}`](#user-configuration). Команда работает через оболочку, поэтому Claude Code отклоняет monitor с [ошибкой](/ru/errors#plugin-command-references-user-config) вместо подстановки значения. Процессы monitor не получают переменные окружения `CLAUDE_PLUGIN_OPTION_<KEY>`, поэтому пусть скрипт monitor читает значение из файла конфигурации, который он владеет. До v2.1.207 команды monitor подставляли значения `${user_config.*}`.345Команда monitor не может ссылаться на значения [`${user_config.*}`](#user-configuration). Команда работает через оболочку, поэтому Claude Code отклоняет monitor с [ошибкой](/docs/ru/errors#plugin-command-references-user-config) вместо подстановки значения. Процессы monitor не получают переменные окружения `CLAUDE_PLUGIN_OPTION_<KEY>`, поэтому пусть скрипт monitor читает значение из файла конфигурации, который он владеет. До v2.1.207 команды monitor подставляли значения `${user_config.*}`.

346 346 

347Отключение плагина в середине сеанса не останавливает monitors, которые уже работают. Они останавливаются при завершении сеанса.347Отключение плагина в середине сеанса не останавливает monitors, которые уже работают. Они останавливаются при завершении сеанса.

348 348 


379| `user` | `~/.claude/settings.json` | Личные плагины, доступные во всех проектах (по умолчанию) |379| `user` | `~/.claude/settings.json` | Личные плагины, доступные во всех проектах (по умолчанию) |

380| `project` | `.claude/settings.json` | Плагины команды, общие через контроль версий |380| `project` | `.claude/settings.json` | Плагины команды, общие через контроль версий |

381| `local` | `.claude/settings.local.json` | Плагины, специфичные для проекта, игнорируемые git |381| `local` | `.claude/settings.local.json` | Плагины, специфичные для проекта, игнорируемые git |

382| `managed` | [Управляемые параметры](/ru/settings#settings-files) | Управляемые плагины (только для чтения, только обновление) |382| `managed` | [Управляемые параметры](/docs/ru/settings#settings-files) | Управляемые плагины (только для чтения, только обновление) |

383 383 

384Плагины используют ту же систему областей, что и другие конфигурации Claude Code. Для инструкций по установке и флагов области смотрите [Установка плагинов](/ru/discover-plugins#install-plugins). Для полного объяснения областей смотрите [Области конфигурации](/ru/settings#configuration-scopes).384Плагины используют ту же систему областей, что и другие конфигурации Claude Code. Для инструкций по установке и флагов области смотрите [Установка плагинов](/docs/ru/discover-plugins#install-plugins). Для полного объяснения областей смотрите [Области конфигурации](/docs/ru/settings#configuration-scopes).

385 385 

386***386***

387 387 


395 395 

396| Что у вас есть | Что это такое |396| Что у вас есть | Что это такое |

397| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------- |397| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------- |

398| `<skills-dir>/foo/SKILL.md` без манифеста | Простой [skill](/ru/skills) с именем `foo` |398| `<skills-dir>/foo/SKILL.md` без манифеста | Простой [skill](/docs/ru/skills) с именем `foo` |

399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Плагин `foo@skills-dir`, который может объединять свои собственные skills, agents, hooks и многое другое |399| `<skills-dir>/foo/.claude-plugin/plugin.json` | Плагин `foo@skills-dir`, который может объединять свои собственные skills, agents, hooks и многое другое |

400| `<plugin>/skills/bar/SKILL.md` | Skill `bar`, упакованный внутри плагина |400| `<plugin>/skills/bar/SKILL.md` | Skill `bar`, упакованный внутри плагина |

401 401 


406| Каталог skills | Область | Загружает |406| Каталог skills | Область | Загружает |

407| :---------------------- | :------ | :----------------------------------------------------------------------------------------------------------- |407| :---------------------- | :------ | :----------------------------------------------------------------------------------------------------------- |

408| `~/.claude/skills/` | личная | В каждом проекте, так как местоположение только ваше |408| `~/.claude/skills/` | личная | В каждом проекте, так как местоположение только ваше |

409| `<cwd>/.claude/skills/` | проект | Только после того, как вы примете диалог доверия рабочей области [trust dialog](/ru/settings) для этой папки |409| `<cwd>/.claude/skills/` | проект | Только после того, как вы примете диалог доверия рабочей области [trust dialog](/docs/ru/settings) для этой папки |

410 410 

411Плагин области проекта проверяется в репозитории и достигает каждого сотрудника, который его клонирует. Поскольку это содержимое поступает из репозитория, а не от вас, оно загружается только после того же шлюза доверия, который управляет `.claude/settings.json`, и компоненты, которые запускают код, дополнительно ограничены:411Плагин области проекта проверяется в репозитории и достигает каждого сотрудника, который его клонирует. Поскольку это содержимое поступает из репозитория, а не от вас, оно загружается только после того же шлюза доверия, который управляет `.claude/settings.json`, и компоненты, которые запускают код, дополнительно ограничены:

412 412 

413* Серверы MCP, которые он объявляет, проходят через [то же одобрение для каждого сервера](/ru/mcp) что и проект `.mcp.json`413* Серверы MCP, которые он объявляет, проходят через [то же одобрение для каждого сервера](/docs/ru/mcp) что и проект `.mcp.json`

414* Серверы LSP запускаются только после того, как вы доверяете рабочей области414* Серверы LSP запускаются только после того, как вы доверяете рабочей области

415* [Фоновые monitors](#monitors) не загружаются415* [Фоновые monitors](#monitors) не загружаются

416 416 

417Плагины личной области не имеют этих ограничений.417Плагины личной области не имеют этих ограничений.

418 418 

419<Warning>419<Warning>

420 Плагины `@skills-dir` области проекта загружаются только из `.claude/skills/` каталога, где вы запускаете Claude Code. Они не [поднимаются к корню репозитория](/ru/skills#automatic-discovery-from-parent-and-nested-directories) так, как это делают простые skills и команды, поэтому запуск из подкаталога пропускает плагин, который находится в корне репо. Запустите из корня репозитория или запустите `/reload-plugins` после изменения каталогов.420 Плагины `@skills-dir` области проекта загружаются только из `.claude/skills/` каталога, где вы запускаете Claude Code. Они не [поднимаются к корню репозитория](/docs/ru/skills#automatic-discovery-from-parent-and-nested-directories) так, как это делают простые skills и команды, поэтому запуск из подкаталога пропускает плагин, который находится в корне репо. Запустите из корня репозитория или запустите `/reload-plugins` после изменения каталогов.

421</Warning>421</Warning>

422 422 

423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">423<h3 id="edit-reload-and-disable-a-skills-directory-plugin">

424 Редактирование, перезагрузка и отключение плагина в каталоге skills424 Редактирование, перезагрузка и отключение плагина в каталоге skills

425</h3>425</h3>

426 426 

427Изменения, которые вы вносите в `SKILL.md` skill, вступают в силу немедленно в текущем сеансе. Изменения в других компонентах плагина, таких как `hooks/`, `.mcp.json`, `agents/` и `output-styles/`, не вступают в силу. Запустите `/reload-plugins` или перезагрузите Claude Code, чтобы их подхватить. Смотрите [Обнаружение изменений в реальном времени](/ru/skills#live-change-detection).427Изменения, которые вы вносите в `SKILL.md` skill, вступают в силу немедленно в текущем сеансе. Изменения в других компонентах плагина, таких как `hooks/`, `.mcp.json`, `agents/` и `output-styles/`, не вступают в силу. Запустите `/reload-plugins` или перезагрузите Claude Code, чтобы их подхватить. Смотрите [Обнаружение изменений в реальном времени](/docs/ru/skills#live-change-detection).

428 428 

429Чтобы остановить загрузку плагина в каталоге skills, удалите его папку или отключите его по имени. Нет шага `uninstall`, потому что ничего не было установлено из маркетплейса.429Чтобы остановить загрузку плагина в каталоге skills, удалите его папку или отключите его по имени. Нет шага `uninstall`, потому что ничего не было установлено из маркетплейса.

430 430 


487 487 

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

489| :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |489| :----- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------- |

490| `name` | string | Уникальный идентификатор (kebab-case, без пробелов). Когда [запись маркетплейса](/ru/plugin-marketplaces#plugin-entries) указывает плагин под другим именем, имя записи маркетплейса — это то, что используют ключи `enabledPlugins` и `/plugin` | `"deployment-tools"` |490| `name` | string | Уникальный идентификатор (kebab-case, без пробелов). Когда [запись маркетплейса](/docs/ru/plugin-marketplaces#plugin-entries) указывает плагин под другим именем, имя записи маркетплейса — это то, что используют ключи `enabledPlugins` и `/plugin` | `"deployment-tools"` |

491 491 

492Это имя используется для пространства имён компонентов. Например, в пользовательском интерфейсе агент `agent-creator` для плагина с именем `plugin-dev` будет отображаться как `plugin-dev:agent-creator`.492Это имя используется для пространства имён компонентов. Например, в пользовательском интерфейсе агент `agent-creator` для плагина с именем `plugin-dev` будет отображаться как `plugin-dev:agent-creator`.

493 493 


533`defaultEnabled` — это резервный вариант, когда ничто другое не решило состояние плагина. Два вещи имеют приоритет над ним:533`defaultEnabled` — это резервный вариант, когда ничто другое не решило состояние плагина. Два вещи имеют приоритет над ним:

534 534 

535* **Параметр пользователя**: запись для плагина в `enabledPlugins` в любой области параметров. После записи она сохраняется при обновлениях и переустановках плагина, поэтому изменение `defaultEnabled` в более позднем выпуске не переключает существующего пользователя.535* **Параметр пользователя**: запись для плагина в `enabledPlugins` в любой области параметров. После записи она сохраняется при обновлениях и переустановках плагина, поэтому изменение `defaultEnabled` в более позднем выпуске не переключает существующего пользователя.

536* **Требование зависимости**: когда плагин требуется другим активным плагином, Claude Code записывает `true` для него при установке или включении. Это даёт ему явный параметр, поэтому его собственное значение по умолчанию больше не применяется. Смотрите [Включение или отключение плагина с зависимостями](/ru/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).536* **Требование зависимости**: когда плагин требуется другим активным плагином, Claude Code записывает `true` для него при установке или включении. Это даёт ему явный параметр, поэтому его собственное значение по умолчанию больше не применяется. Смотрите [Включение или отключение плагина с зависимостями](/docs/ru/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies).

537 537 

538То же поле может появляться в записи маркетплейса плагина, где оно имеет приоритет над значением в `plugin.json`. Смотрите [Опциональные поля плагина](/ru/plugin-marketplaces#optional-plugin-fields).538То же поле может появляться в записи маркетплейса плагина, где оно имеет приоритет над значением в `plugin.json`. Смотрите [Опциональные поля плагина](/docs/ru/plugin-marketplaces#optional-plugin-fields).

539 539 

540<h3 id="component-path-fields">540<h3 id="component-path-fields">

541 Поля пути компонента541 Поля пути компонента


551| `outputStyles` | string\|array | Пользовательские файлы/каталоги стилей вывода (заменяет по умолчанию `output-styles/`) | `"./styles/"` |551| `outputStyles` | string\|array | Пользовательские файлы/каталоги стилей вывода (заменяет по умолчанию `output-styles/`) | `"./styles/"` |

552| `lspServers` | string\|array\|object | Конфигурации [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) для интеллектуальной информации о коде (переход к определению, поиск ссылок и т. д.) | `"./.lsp.json"` |552| `lspServers` | string\|array\|object | Конфигурации [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) для интеллектуальной информации о коде (переход к определению, поиск ссылок и т. д.) | `"./.lsp.json"` |

553| `experimental.themes` | string\|array | Файлы/каталоги цветовых тем (заменяет по умолчанию `themes/`). Смотрите [Themes](#themes) | `"./themes/"` |553| `experimental.themes` | string\|array | Файлы/каталоги цветовых тем (заменяет по умолчанию `themes/`). Смотрите [Themes](#themes) | `"./themes/"` |

554| `experimental.monitors` | string\|array | Конфигурации фонового [Monitor](/ru/tools-reference#monitor-tool), которые запускаются автоматически при активации плагина. Смотрите [Monitors](#monitors) | `"./monitors.json"` |554| `experimental.monitors` | string\|array | Конфигурации фонового [Monitor](/docs/ru/tools-reference#monitor-tool), которые запускаются автоматически при активации плагина. Смотрите [Monitors](#monitors) | `"./monitors.json"` |

555| `userConfig` | object | Значения, настраиваемые пользователем, запрашиваемые при включении. Смотрите [Конфигурация пользователя](#user-configuration) | Смотрите ниже |555| `userConfig` | object | Значения, настраиваемые пользователем, запрашиваемые при включении. Смотрите [Конфигурация пользователя](#user-configuration) | Смотрите ниже |

556| `channels` | array | Объявления каналов для внедрения сообщений (стиль Telegram, Slack, Discord). Смотрите [Каналы](#channels) | Смотрите ниже |556| `channels` | array | Объявления каналов для внедрения сообщений (стиль Telegram, Slack, Discord). Смотрите [Каналы](#channels) | Смотрите ниже |

557| `dependencies` | array | Другие плагины, которые требует этот плагин, опционально с ограничениями версии semver. Смотрите [Ограничение версий зависимостей плагина](/ru/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |557| `dependencies` | array | Другие плагины, которые требует этот плагин, опционально с ограничениями версии semver. Смотрите [Ограничение версий зависимостей плагина](/docs/ru/plugin-dependencies) | `[{ "name": "secrets-vault", "version": "~2.1.0" }]` |

558 558 

559<h3 id="experimental-components">559<h3 id="experimental-components">

560 Экспериментальные компоненты560 Экспериментальные компоненты


601 601 

602Каждое значение доступно для подстановки как `${user_config.KEY}` в конфигурациях серверов MCP и LSP и командах hooks. Нечувствительные значения также могут быть подставлены в содержимое skills и agents. Все значения экспортируются в процессы hooks как переменные окружения `CLAUDE_PLUGIN_OPTION_<KEY>`, где `<KEY>` — это ключ опции в верхнем регистре.602Каждое значение доступно для подстановки как `${user_config.KEY}` в конфигурациях серверов MCP и LSP и командах hooks. Нечувствительные значения также могут быть подставлены в содержимое skills и agents. Все значения экспортируются в процессы hooks как переменные окружения `CLAUDE_PLUGIN_OPTION_<KEY>`, где `<KEY>` — это ключ опции в верхнем регистре.

603 603 

604Поля, которые работают в shell, отклоняют `${user_config.*}`: подстановка настроенного значения в команду shell позволила бы shell выполнить всё, что содержит это значение, поэтому компонент не работает с [ошибкой](/ru/errors#plugin-command-references-user-config). Каждое отклонённое поле имеет альтернативный способ передачи значения:604Поля, которые работают в shell, отклоняют `${user_config.*}`: подстановка настроенного значения в команду shell позволила бы shell выполнить всё, что содержит это значение, поэтому компонент не работает с [ошибкой](/docs/ru/errors#plugin-command-references-user-config). Каждое отклонённое поле имеет альтернативный способ передачи значения:

605 605 

606| Отклонённое поле | Как передать значение |606| Отклонённое поле | Как передать значение |

607| :--------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |607| :--------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------- |

608| Команды hooks в форме shell | Используйте [форму exec](/ru/hooks#exec-form-and-shell-form) с `args` или читайте `CLAUDE_PLUGIN_OPTION_<KEY>` из окружения hook |608| Команды hooks в форме shell | Используйте [форму exec](/docs/ru/hooks#exec-form-and-shell-form) с `args` или читайте `CLAUDE_PLUGIN_OPTION_<KEY>` из окружения hook |

609| Команды [Monitor](#monitors) | Читайте значение из файла конфигурации в скрипте |609| Команды [Monitor](#monitors) | Читайте значение из файла конфигурации в скрипте |

610| MCP [`headersHelper`](/ru/mcp#use-dynamic-headers-for-custom-authentication) | Читайте значение из файла конфигурации в скрипте |610| MCP [`headersHelper`](/docs/ru/mcp#use-dynamic-headers-for-custom-authentication) | Читайте значение из файла конфигурации в скрипте |

611 611 

612До v2.1.207 эти поля подставляли значения `${user_config.KEY}`; обновите плагины, которые полагались на это.612До v2.1.207 эти поля подставляли значения `${user_config.KEY}`; обновите плагины, которые полагались на это.

613 613 

614Нечувствительные значения хранятся под ключом [`pluginConfigs`](/ru/settings#pluginconfigs) в `settings.json` как `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code записывает ключ в параметры пользователя и читает его обратно из параметров пользователя, флага `--settings` и управляемых параметров только; записи в `.claude/settings.json` или `.claude/settings.local.json` проекта игнорируются. До v2.1.207 Claude Code также читал параметры проекта и локальные параметры.614Нечувствительные значения хранятся под ключом [`pluginConfigs`](/docs/ru/settings#pluginconfigs) в `settings.json` как `pluginConfigs[<plugin-id>].options`. {/* min-version: 2.1.207 */}Claude Code записывает ключ в параметры пользователя и читает его обратно из параметров пользователя, флага `--settings` и управляемых параметров только; записи в `.claude/settings.json` или `.claude/settings.local.json` проекта игнорируются. До v2.1.207 Claude Code также читал параметры проекта и локальные параметры.

615 615 

616Чувствительные значения переходят в macOS Keychain или в `~/.claude/.credentials.json` на платформах, где keychain недоступен. Хранилище Keychain общее с OAuth токенами и имеет приблизительный лимит 2 КБ, поэтому держите чувствительные значения небольшими.616Чувствительные значения переходят в macOS Keychain или в `~/.claude/.credentials.json` на платформах, где keychain недоступен. Хранилище Keychain общее с OAuth токенами и имеет приблизительный лимит 2 КБ, поэтому держите чувствительные значения небольшими.

617 617 


653Замена ли пользовательский путь или расширяет каталог по умолчанию плагина, зависит от поля:653Замена ли пользовательский путь или расширяет каталог по умолчанию плагина, зависит от поля:

654 654 

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

656* **Добавляет к по умолчанию**: `skills`. Каталог по умолчанию `skills/` всегда сканируется, и каталоги, перечисленные в `skills`, загружаются вместе с ним. Исключение: для [записи маркетплейса, чей `source` разрешается в корень маркетплейса](/ru/plugin-marketplaces#advanced-plugin-entries), объявление конкретных подкаталогов заменяет сканирование по умолчанию `skills/`656* **Добавляет к по умолчанию**: `skills`. Каталог по умолчанию `skills/` всегда сканируется, и каталоги, перечисленные в `skills`, загружаются вместе с ним. Исключение: для [записи маркетплейса, чей `source` разрешается в корень маркетплейса](/docs/ru/plugin-marketplaces#advanced-plugin-entries), объявление конкретных подкаталогов заменяет сканирование по умолчанию `skills/`

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

658 658 

659Когда плагин имеет как папку по умолчанию, так и соответствующий ключ манифеста, Claude Code v2.1.140 и более поздние версии отмечают игнорируемую папку в `claude plugin list` и представлении деталей `/plugin`. Плагин всё ещё загружается с использованием путей манифеста. Предупреждение не показывается, когда ключ манифеста указывает на папку по умолчанию, например `"commands": ["./commands/deploy.md"]`, потому что папка явно адресуется в этом случае.659Когда плагин имеет как папку по умолчанию, так и соответствующий ключ манифеста, Claude Code v2.1.140 и более поздние версии отмечают игнорируемую папку в `claude plugin list` и представлении деталей `/plugin`. Плагин всё ещё загружается с использованием путей манифеста. Предупреждение не показывается, когда ключ манифеста указывает на папку по умолчанию, например `"commands": ["./commands/deploy.md"]`, потому что папка явно адресуется в этом случае.


704| MCP серверы `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |704| MCP серверы `http`, `sse`, `ws` | `url`, `headers`, `headersHelper` |

705| Серверы LSP | `command`, `args`, `env`, `workspaceFolder` |705| Серверы LSP | `command`, `args`, `env`, `workspaceFolder` |

706 706 

707В командах hook используйте [форму exec](/ru/hooks#exec-form-and-shell-form) с `args`, чтобы каждый путь передавался как один аргумент без кавычек. В hooks в форме shell и командах monitor оборачивайте переменные в двойные кавычки, как в `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Этот hook в форме shell запускает скрипт, поставляемый с плагином:707В командах hook используйте [форму exec](/docs/ru/hooks#exec-form-and-shell-form) с `args`, чтобы каждый путь передавался как один аргумент без кавычек. В hooks в форме shell и командах monitor оборачивайте переменные в двойные кавычки, как в `"${CLAUDE_PROJECT_DIR}/scripts/server.sh"`. Этот hook в форме shell запускает скрипт, поставляемый с плагином:

708 708 

709```json theme={null}709```json theme={null}

710{710{


727 727 

728Когда плагин обновляется во время сеанса, команды hooks, monitors, серверы MCP и серверы LSP продолжают использовать путь предыдущей версии. Запустите `/reload-plugins` для переключения hooks, серверов MCP и серверов LSP на новый путь; monitors требуют перезагрузки сеанса.728Когда плагин обновляется во время сеанса, команды hooks, monitors, серверы MCP и серверы LSP продолжают использовать путь предыдущей версии. Запустите `/reload-plugins` для переключения hooks, серверов MCP и серверов LSP на новый путь; monitors требуют перезагрузки сеанса.

729 729 

730Серверы MCP также могут вызывать запрос `roots/list` для чтения рабочих каталогов сеанса во время выполнения. Смотрите [что возвращает `roots/list` и когда Claude Code уведомляет сервер об изменениях](/ru/mcp#option-3-add-a-local-stdio-server).730Серверы MCP также могут вызывать запрос `roots/list` для чтения рабочих каталогов сеанса во время выполнения. Смотрите [что возвращает `roots/list` и когда Claude Code уведомляет сервер об изменениях](/docs/ru/mcp#option-3-add-a-local-stdio-server).

731 731 

732<h4 id="persistent-data-directory">732<h4 id="persistent-data-directory">

733 Каталог постоянных данных733 Каталог постоянных данных


893| **LSP servers** | `.lsp.json` | Конфигурации языкового сервера |893| **LSP servers** | `.lsp.json` | Конфигурации языкового сервера |

894| **Monitors** | `monitors/monitors.json` | Конфигурации фонового monitor |894| **Monitors** | `monitors/monitors.json` | Конфигурации фонового monitor |

895| **Executables** | `bin/` | Исполняемые файлы, добавленные в PATH инструмента Bash. Файлы здесь вызываются как голые команды в любом вызове инструмента Bash, пока плагин включен |895| **Executables** | `bin/` | Исполняемые файлы, добавленные в PATH инструмента Bash. Файлы здесь вызываются как голые команды в любом вызове инструмента Bash, пока плагин включен |

896| **Settings** | `settings.json` | Конфигурация по умолчанию, применяемая при включении плагина. В настоящее время поддерживаются только ключи [`agent`](/ru/sub-agents) и [`subagentStatusLine`](/ru/statusline#subagent-status-lines) |896| **Settings** | `settings.json` | Конфигурация по умолчанию, применяемая при включении плагина. В настоящее время поддерживаются только ключи [`agent`](/docs/ru/sub-agents) и [`subagentStatusLine`](/docs/ru/statusline#subagent-status-lines) |

897 897 

898***898***

899 899 


942| `mcp` | `.mcp.json` с примерами серверов HTTP и stdio |942| `mcp` | `.mcp.json` с примерами серверов HTTP и stdio |

943| `lsp` | Пример языкового сервера в `.lsp.json` |943| `lsp` | Пример языкового сервера в `.lsp.json` |

944| `output-style` | `output-styles/<name>.md`, который применяется автоматически при включении плагина |944| `output-style` | `output-styles/<name>.md`, который применяется автоматически при включении плагина |

945| `channel` | Основанный на MCP [канал](/ru/channels): сервер stdio (`server.ts`), его `.mcp.json` и `package.json` |945| `channel` | Основанный на MCP [канал](/docs/ru/channels): сервер stdio (`server.ts`), его `.mcp.json` и `package.json` |

946 946 

947Созданный плагин использует источник `@skills-dir` вместо маркетплейса. Администраторы могут заблокировать этот источник с помощью `strictKnownMarketplaces` или добавив `{"source": "skills-dir"}` в `blockedMarketplaces` в [управляемых параметрах](/ru/plugin-marketplaces#managed-marketplace-restrictions). При блокировке `plugin init` завершается с ошибкой перед записью.947Созданный плагин использует источник `@skills-dir` вместо маркетплейса. Администраторы могут заблокировать этот источник с помощью `strictKnownMarketplaces` или добавив `{"source": "skills-dir"}` в `blockedMarketplaces` в [управляемых параметрах](/docs/ru/plugin-marketplaces#managed-marketplace-restrictions). При блокировке `plugin init` завершается с ошибкой перед записью.

948 948 

949**Примеры:**949**Примеры:**

950 950 


1027 plugin prune1027 plugin prune

1028</h3>1028</h3>

1029 1029 

1030Удалите автоматически установленные зависимости плагинов, которые больше не требуются ни одному установленному плагину. Зависимости, которые Claude Code подтянул для удовлетворения поля [`dependencies`](/ru/plugin-dependencies) другого плагина, удаляются; плагины, которые вы установили напрямую, никогда не затрагиваются.1030Удалите автоматически установленные зависимости плагинов, которые больше не требуются ни одному установленному плагину. Зависимости, которые Claude Code подтянул для удовлетворения поля [`dependencies`](/docs/ru/plugin-dependencies) другого плагина, удаляются; плагины, которые вы установили напрямую, никогда не затрагиваются.

1031 1031 

1032```bash theme={null}1032```bash theme={null}

1033claude plugin prune [options]1033claude plugin prune [options]


1054 plugin enable1054 plugin enable

1055</h3>1055</h3>

1056 1056 

1057Включите отключённый плагин. Если плагин объявляет [зависимости](/ru/plugin-dependencies), Claude Code включает их транзитивно в той же области, и команда завершается с ошибкой, когда зависимость не установлена.1057Включите отключённый плагин. Если плагин объявляет [зависимости](/docs/ru/plugin-dependencies), Claude Code включает их транзитивно в той же области, и команда завершается с ошибкой, когда зависимость не установлена.

1058 1058 

1059```bash theme={null}1059```bash theme={null}

1060claude plugin enable <plugin> [options]1060claude plugin enable <plugin> [options]


1075 plugin disable1075 plugin disable

1076</h3>1076</h3>

1077 1077 

1078Отключите плагин без его удаления. Завершается с ошибкой, когда другой включённый плагин [зависит от](/ru/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) целевого плагина. Сообщение об ошибке включает цепочку команд, которая сначала отключает каждый зависимый плагин.1078Отключите плагин без его удаления. Завершается с ошибкой, когда другой включённый плагин [зависит от](/docs/ru/plugin-dependencies#enable-or-disable-a-plugin-with-dependencies) целевого плагина. Сообщение об ошибке включает цепочку команд, которая сначала отключает каждый зависимый плагин.

1079 1079 

1080```bash theme={null}1080```bash theme={null}

1081claude plugin disable <plugin> [options]1081claude plugin disable <plugin> [options]


1192 plugin tag1192 plugin tag

1193</h3>1193</h3>

1194 1194 

1195Создайте тег выпуска git для плагина в текущем каталоге. Запустите из папки плагина. Смотрите [Теги выпусков плагинов](/ru/plugin-dependencies#tag-plugin-releases-for-version-resolution).1195Создайте тег выпуска git для плагина в текущем каталоге. Запустите из папки плагина. Смотрите [Теги выпусков плагинов](/docs/ru/plugin-dependencies#tag-plugin-releases-for-version-resolution).

1196 1196 

1197```bash theme={null}1197```bash theme={null}

1198claude plugin tag [options]1198claude plugin tag [options]


1352 Смотрите также1352 Смотрите также

1353</h2>1353</h2>

1354 1354 

1355* [Плагины](/ru/plugins) - Учебные материалы и практическое использование1355* [Плагины](/docs/ru/plugins) - Учебные материалы и практическое использование

1356* [Маркетплейсы плагинов](/ru/plugin-marketplaces) - Создание и управление маркетплейсами1356* [Маркетплейсы плагинов](/docs/ru/plugin-marketplaces) - Создание и управление маркетплейсами

1357* [Skills](/ru/skills) - Детали разработки skills1357* [Skills](/docs/ru/skills) - Детали разработки skills

1358* [Subagents](/ru/sub-agents) - Конфигурация и возможности агентов1358* [Subagents](/docs/ru/sub-agents) - Конфигурация и возможности агентов

1359* [Hooks](/ru/hooks) - Обработка событий и автоматизация1359* [Hooks](/docs/ru/hooks) - Обработка событий и автоматизация

1360* [MCP](/ru/mcp) - Интеграция внешних инструментов1360* [MCP](/docs/ru/mcp) - Интеграция внешних инструментов

1361* [Параметры](/ru/settings) - Опции конфигурации для плагинов1361* [Параметры](/docs/ru/settings) - Опции конфигурации для плагинов

troubleshooting.md +18 −14

Details

10 10 

11| Симптом | Перейти к |11| Симптом | Перейти к |

12| :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |12| :------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------------------------- |

13| `command not found`, ошибка установки, проблемы PATH, `EACCES`, ошибки TLS | [Troubleshoot installation and login](/ru/troubleshoot-install) |13| `command not found`, ошибка установки, проблемы PATH, `EACCES`, ошибки TLS | [Troubleshoot installation and login](/docs/ru/troubleshoot-install) |

14| Обновление или установка загрузки не удаётся с `The connection dropped while downloading the update` или `aborted` | [Error reference](/ru/errors#the-connection-dropped-while-downloading-the-update) |14| Обновление или установка загрузки не удаётся с `The connection dropped while downloading the update` или `aborted` | [Error reference](/docs/ru/errors#the-connection-dropped-while-downloading-the-update) |

15| Циклы входа, ошибки OAuth, `403 Forbidden`, "organization disabled", учётные данные Amazon Bedrock, Google Cloud's Agent Platform или Microsoft Foundry | [Troubleshoot installation and login](/ru/troubleshoot-install#login-and-authentication) |15| Циклы входа, ошибки OAuth, `403 Forbidden`, "organization disabled", учётные данные Amazon Bedrock, Google Cloud's Agent Platform или Microsoft Foundry | [Troubleshoot installation and login](/docs/ru/troubleshoot-install#login-and-authentication) |

16| Параметры не применяются, hooks не срабатывают, MCP servers не загружаются | [Debug your configuration](/ru/debug-your-config) |16| Параметры не применяются, hooks не срабатывают, MCP servers не загружаются | [Debug your configuration](/docs/ru/debug-your-config) |

17| `API Error: 5xx`, `529 Overloaded`, `429`, ошибки валидации запроса | [Error reference](/ru/errors) |17| `API Error: 5xx`, `529 Overloaded`, `429`, ошибки валидации запроса | [Error reference](/docs/ru/errors) |

18| `model not found` или `you may not have access to it` | [Error reference](/ru/errors#theres-an-issue-with-the-selected-model) |18| `model not found` или `you may not have access to it` | [Error reference](/docs/ru/errors#theres-an-issue-with-the-selected-model) |

19| Расширение VS Code не подключается или не обнаруживает Claude | [VS Code integration](/ru/vs-code#fix-common-issues) |19| Расширение VS Code не подключается или не обнаруживает Claude | [VS Code integration](/docs/ru/vs-code#fix-common-issues) |

20| Плагин JetBrains или IDE не обнаружена | [JetBrains integration](/ru/jetbrains#troubleshooting) |20| Плагин JetBrains или IDE не обнаружена | [JetBrains integration](/docs/ru/jetbrains#troubleshooting) |

21| Высокое использование CPU или памяти, медленные ответы, зависания, поиск не находит файлы | [Performance and stability](#performance-and-stability) ниже |21| Высокое использование CPU или памяти, медленные ответы, зависания, поиск не находит файлы | [Performance and stability](#performance-and-stability) ниже |

22 22 

23Если вы не уверены, какой применяется, запустите `/doctor` внутри Claude Code для автоматической проверки вашей установки, параметров, расширений и использования контекста; он предлагает исправления, которые может применить после вашего подтверждения. Если `claude` вообще не запускается, запустите `claude doctor` из вашей оболочки вместо этого. Запустите `/mcp` для проверки статуса MCP server.23Если вы не уверены, какой применяется, запустите `/doctor` внутри Claude Code для автоматической проверки вашей установки, параметров, расширений и использования контекста; он предлагает исправления, которые может применить после вашего подтверждения. Если `claude` вообще не запускается, запустите `claude doctor` из вашей оболочки вместо этого. Запустите `/mcp` для проверки статуса MCP server.


371. Используйте `/compact` регулярно, чтобы уменьшить размер контекста371. Используйте `/compact` регулярно, чтобы уменьшить размер контекста

382. Закройте и перезагрузите Claude Code между основными задачами382. Закройте и перезагрузите Claude Code между основными задачами

393. Рассмотрите добавление больших директорий сборки в ваш файл `.gitignore`393. Рассмотрите добавление больших директорий сборки в ваш файл `.gitignore`

404. Перезагрузитесь с помощью [`claude --safe-mode`](/ru/cli-reference#cli-flags), чтобы проверить, является ли источником plugin, MCP server или hook. Это отключает все настройки на время сеанса; если использование снизится, см. [Debug your configuration](/ru/debug-your-config#test-against-a-clean-configuration), чтобы найти, какой именно404. Перезагрузитесь с помощью [`claude --safe-mode`](/docs/ru/cli-reference#cli-flags), чтобы проверить, является ли источником plugin, MCP server или hook. Это отключает все настройки на время сеанса; если использование снизится, см. [Debug your configuration](/docs/ru/debug-your-config#test-against-a-clean-configuration), чтобы найти, какой именно

41 41 

42Если использование памяти остаётся высоким после этих шагов, запустите `/heapdump`, чтобы записать снимок кучи JavaScript и разбор памяти на `~/Desktop`. На Linux без папки Desktop файлы записываются в вашу домашнюю директорию.42Если использование памяти остаётся высоким после этих шагов, запустите `/heapdump`, чтобы записать снимок кучи JavaScript и разбор памяти на `~/Desktop`. На Linux без папки Desktop файлы записываются в вашу домашнюю директорию.

43 43 

44Разбор показывает размер набора резидентов, кучу JS, буферы массивов и неучтённую собственную память, что помогает определить, находится ли рост в объектах JavaScript или в собственном коде. Чтобы проверить удерживающие элементы, откройте файл `.heapsnapshot` в Chrome DevTools под Memory → Load. Прикрепите оба файла при сообщении о проблеме с памятью на [GitHub](https://github.com/anthropics/claude-code/issues).44Разбор показывает размер резидентного набора, кучу JS, буферы массивов и неучтённую нативную память, что помогает определить, находится ли рост в объектах JavaScript или в нативном коде. Чтобы проверить удерживающие ссылки, откройте файл `.heapsnapshot` в Chrome DevTools в разделе Memory → Load; разбор находится в файле, заканчивающемся на `-diagnostics.json`.

45 

46<Warning>

47 Файл `.heapsnapshot` содержит каждую строку в процессе. Не прикрепляйте его к публичной проблеме и не делитесь им. Прикрепляйте только файл `-diagnostics.json` при сообщении о проблеме с памятью на [GitHub](https://github.com/anthropics/claude-code/issues). Этот файл содержит статистику памяти и не содержит содержимого разговора или учётных данных.

48</Warning>

45 49 

46<h3 id="large-tables-are-cut-off-in-the-terminal">50<h3 id="large-tables-are-cut-off-in-the-terminal">

47 Large tables are cut off in the terminal51 Large tables are cut off in the terminal

48</h3>52</h3>

49 53 

50Таблица Markdown с более чем 200 строками отображает первые 200 строк, за которыми следует строка `… N more rows not shown`. Отображение ограничено только визуально: полная таблица остаётся в разговоре, и [`/copy`](/ru/commands) копирует каждую строку. Для таблицы, которая слишком велика для чтения в терминале, попросите Claude записать её в файл вместо этого. До версии v2.1.208 Claude Code отображал каждую строку, поэтому возобновление сеанса, содержащего очень большую таблицу, могло зависнуть при её повторном отображении.54Таблица Markdown с более чем 200 строками отображает первые 200 строк, за которыми следует строка `… N more rows not shown`. Отображение ограничено только визуально: полная таблица остаётся в разговоре, и [`/copy`](/docs/ru/commands) копирует каждую строку. Для таблицы, которая слишком велика для чтения в терминале, попросите Claude записать её в файл вместо этого. До версии v2.1.208 Claude Code отображал каждую строку, поэтому возобновление сеанса, содержащего очень большую таблицу, могло зависнуть при её повторном отображении.

51 55 

52<h3 id="auto-compaction-stops-with-a-thrashing-error">56<h3 id="auto-compaction-stops-with-a-thrashing-error">

53 Auto-compaction stops with a thrashing error57 Auto-compaction stops with a thrashing error


59 63 

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

612. Запустите `/compact` с фокусом, который удаляет большой вывод, например `/compact keep only the plan and the diff`652. Запустите `/compact` с фокусом, который удаляет большой вывод, например `/compact keep only the plan and the diff`

623. Переместите работу с большим файлом на [subagent](/ru/sub-agents), чтобы она работала в отдельном окне контекста663. Переместите работу с большим файлом на [subagent](/docs/ru/sub-agents), чтобы она работала в отдельном окне контекста

634. Запустите `/clear`, если более ранний разговор больше не нужен674. Запустите `/clear`, если более ранний разговор больше не нужен

64 68 

65<h3 id="command-hangs-or-freezes">69<h3 id="command-hangs-or-freezes">


77 Garbled or corrupted text in an editor's integrated terminal81 Garbled or corrupted text in an editor's integrated terminal

78</h3>82</h3>

79 83 

80Если символы отображаются как прямоугольники, размазанные линии или неправильные глифы при запуске Claude Code в интегрированном терминале VS Code, Cursor или Devin Desktop, причиной, вероятно, является GPU-рендерер терминала. Запустите `/terminal-setup` внутри Claude Code, чтобы установить `terminal.integrated.gpuAcceleration` на `"off"`, или установите это вручную в настройках вашего редактора и перезагрузите окно. Смотрите [Terminal configuration](/ru/terminal-config) для других настроек, которые записывает `/terminal-setup`.84Если символы отображаются как прямоугольники, размазанные линии или неправильные глифы при запуске Claude Code в интегрированном терминале VS Code, Cursor или Devin Desktop, причиной, вероятно, является GPU-рендерер терминала. Запустите `/terminal-setup` внутри Claude Code, чтобы установить `terminal.integrated.gpuAcceleration` на `"off"`, или установите это вручную в настройках вашего редактора и перезагрузите окно. Смотрите [Terminal configuration](/docs/ru/terminal-config) для других настроек, которые записывает `/terminal-setup`.

81 85 

82<h3 id="search-and-discovery-issues">86<h3 id="search-and-discovery-issues">

83 Search and discovery issues87 Search and discovery issues


117 </Tab>121 </Tab>

118</Tabs>122</Tabs>

119 123 

120Затем установите `USE_BUILTIN_RIPGREP=0` в вашем [окружении](/ru/env-vars).124Затем установите `USE_BUILTIN_RIPGREP=0` в вашем [окружении](/docs/ru/env-vars).

121 125 

122<h3 id="slow-or-incomplete-search-results-on-wsl">126<h3 id="slow-or-incomplete-search-results-on-wsl">

123 Slow or incomplete search results on WSL127 Slow or incomplete search results on WSL