685 685
686CLI применяет одинаковые ограничения функций к шлюзам независимо от того, какой upstream обслуживает конкретный запрос, поэтому по умолчанию переключение не приводит к отправке поля тела, которое upstream отклонил бы. Если вы задаёте в политике [одночасовой TTL кэша](#one-hour-prompt-cache), он отправляется каждому upstream в списке, поэтому задавайте его, только если все они его принимают.686CLI применяет одинаковые ограничения функций к шлюзам независимо от того, какой upstream обслуживает конкретный запрос, поэтому по умолчанию переключение не приводит к отправке поля тела, которое upstream отклонил бы. Если вы задаёте в политике [одночасовой TTL кэша](#one-hour-prompt-cache), он отправляется каждому upstream в списке, поэтому задавайте его, только если все они его принимают.
687 687
688## Дополнительные разделы688## Необязательные разделы
689 689
690### `admin`690### `admin`
691 691
692Опционально. Включает `/v1/organizations/spend_limits`, который отражает публичный Admin API Anthropic, и принудительное ограничение расходов на разработчика на `/v1/messages`. Смотрите [Spend limits](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md), чтобы узнать, как устанавливаются и применяются ограничения; этот раздел охватывает ключи `gateway.yaml`, которые включают функцию и настраивают её.692Необязательный. Включает `/v1/organizations/spend_limits`, который повторяет публичный Admin API Anthropic, и применение лимитов расходов для каждого разработчика на `/v1/messages`. О том, как задаются и применяются лимиты, см. [Лимиты расходов](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md); в этом разделе описаны ключи `gateway.yaml`, которые включают и настраивают эту функцию.
693 693
694```yaml theme={null}694```yaml theme={null}
695admin:695admin:
696 # Именованные статические API-ключи для эндпоинтов администратора, отправляемые как x-api-key.696 # Named static API keys for the admin endpoints, sent as x-api-key.
697 # Идентификатор появляется в журнале аудита как admin-key:<id>, поэтому каждый ключ697 # The id appears in the audit log as admin-key:<id> so each key is
698 # можно отследить. Массив для ротации: добавьте новый ключ, обновите клиентов,698 # attributable. Array for rotation: add the new key, roll clients,
699 # удалите старый.699 # remove the old.
700 write_keys:700 write_keys:
701 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }701 - { id: terraform, key: "${GATEWAY_ADMIN_WRITE_KEY_TF}" }
702 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }702 - { id: ci, key: "${GATEWAY_ADMIN_WRITE_KEY_CI}" }
703 read_keys:703 read_keys:
704 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }704 - { id: reporting, key: "${GATEWAY_ADMIN_READ_KEY}" }
705 # Группы IdP с полным доступом администратора через обычный JWT шлюза (без API-ключа).705 # IdP groups granted full admin via the normal gateway JWT (no API key).
706 admin_groups: [platform-finops]706 admin_groups: [platform-finops]
707 blocked_message: request an increase at https://go.example.com/claude-limits707 blocked_message: request an increase at https://go.example.com/claude-limits
708```708```
709 709
710| Поле | Обязательно | Описание |710| Поле | Обязательное | Описание |
711| - | - | - |711| - | - | - |
712| `write_keys` | Нет | Массив `{id, key}`. `x-api-key`, соответствующий одному из них, может перечислять, устанавливать и удалять ограничения расходов. Значения ключей должны быть не менее 32 символов; `id` должны быть уникальны в `read_keys` и `write_keys`. |712| `write_keys` | Нет | Массив `{id, key}`. `x-api-key`, совпадающий с одним из них, может получать список лимитов расходов, задавать и удалять их. Значения ключей должны содержать не менее 32 символов; `id` должны быть уникальными среди `read_keys` и `write_keys`. |
713| `read_keys` | Нет | Массив `{id, key}`. Только для чтения: каждый эндпоинт `GET`, включая перечисление ограничений, получение одного по ID и чтение [`/effective`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) и [`/audit`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Faudit). |713| `read_keys` | Нет | Массив `{id, key}`. Только для чтения: все эндпоинты `GET`, включая получение списка лимитов, получение одного лимита по ID и чтение [`/effective`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) и [`/audit`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Faudit). |
714| `admin_groups` | Нет | Имена групп IdP. JWT шлюза, чей claim `groups` включает одну из них, имеет полный доступ администратора, чтение и запись, и аудит как `oidc:<sub>`. Используйте это для администраторов-людей; используйте API-ключи для машин. Пустая запись в этом списке останавливает шлюз при загрузке. Смотрите [Значения сопоставления, которые останавливают шлюз при загрузке](#matcher-values-that-stop-the-gateway-at-boot). |714| `admin_groups` | Нет | Имена групп IdP. JWT шлюза, claim `groups` которого содержит одну из них, получает полный доступ администратора на чтение и запись и записывается в журнал аудита как `oidc:<sub>`. Используйте это для администраторов-людей, а API-ключи — для машин. Пустой элемент в этом списке останавливает шлюз при запуске. См. [Значения matcher, которые останавливают шлюз при запуске](#matcher-values-that-stop-the-gateway-at-boot). |
715| `blocked_message` | Нет | Добавляется дословно к `429 billing_error`, который видит заблокированный разработчик. Напишите полную инструкцию, такую как URL или канал Slack. Если не установлено, шлюз отправляет только сообщение по умолчанию. Смотрите [Как работает принудительное ограничение](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md#how-enforcement-works). |715| `blocked_message` | Нет | Дословно добавляется к `429 billing_error`, который видит заблокированный разработчик. Напишите полную инструкцию, например URL или канал Slack. Если поле не задано, шлюз отправляет только сообщение по умолчанию. См. [Как работает применение лимитов](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md#how-enforcement-works). |
716| `audit_retention_days` | Нет | По умолчанию `365`. Более старые строки `admin_audit` удаляются. |716| `audit_retention_days` | Нет | По умолчанию `365`. Более старые строки `admin_audit` удаляются. |
717| `spend_retention_months` | Нет | По умолчанию `13`. Строки счётчика `spend` старше этого удаляются. По умолчанию сохраняется полный год плюс текущий неполный месяц для отчётности год к году. |717| `spend_retention_months` | Нет | По умолчанию `13`. Строки счётчиков `spend` старше этого срока удаляются. Значение по умолчанию сохраняет полный год плюс текущий неполный месяц для сравнения год к году. |
718| `identity_retention_days` | Нет | По умолчанию `90`. TTL последнего просмотра для строк `principal_emails`, которые содержат электронную почту каждого разработчика, отображаемое имя и группы (PII). Намеренно короче, чем сохранение расходов, поэтому отозванная идентичность устаревает, пока её анонимные счётчики расходов остаются. |718| `identity_retention_days` | Нет | По умолчанию `90`. TTL с момента последнего появления для строк `principal_emails`, которые хранят email, отображаемое имя и группы каждого разработчика (PII). Намеренно короче срока хранения расходов, чтобы удалённая учётная запись со временем исчезала, а её анонимные счётчики расходов сохранялись. |
719| `group_limit_mode` | Нет | `min` (по умолчанию) или `max`. Когда разработчик находится в нескольких группах с ограничениями, `min` применяет наиболее ограничивающее, а `max` — наименее ограничивающее. Используется как при принудительном ограничении, так и при `/effective`. |719| `group_limit_mode` | Нет | `min` (по умолчанию) или `max`. Когда разработчик состоит в нескольких группах с лимитами, `min` применяет самый строгий, а `max` — самый мягкий. Используется и при применении лимитов, и в `/effective`. |
720 720
721### `enforcement`721### `enforcement`
722 722
723Блок `enforcement` контролирует поведение проверок ограничения расходов, когда хранилище недоступно.723Блок `enforcement` управляет поведением проверок лимитов расходов, когда хранилище недоступно.
724 724
725| Поле | Обязательно | Описание |725| Поле | Обязательное | Описание |
726| - | - | - |726| - | - | - |
727| `fail_closed_on_error` | Нет | По умолчанию `false`. Принудительное ограничение расходов открывается при сбое Postgres, поэтому вывод остаётся доступным. Установите `true`, чтобы закрыться: разработчики, превысившие лимит, блокируются, но также блокируется всё остальное, если хранилище недоступно. Требует блока [`admin:`](#admin): принудительное ограничение расходов работает только при настройке `admin`, и шлюз отказывается запускаться, если вы установите это `true` без него. |727| `fail_closed_on_error` | Нет | По умолчанию `false`. При сбое Postgres применение лимитов расходов отключается (fail open), поэтому инференс продолжает работать. Установите `true`, чтобы блокировать при сбое (fail closed): разработчики, превысившие лимит, блокируются, но если хранилище недоступно, блокируются и все остальные. Требует блока [`admin:`](#admin): применение лимитов расходов работает, только когда настроен `admin`, и шлюз отказывается запускаться, если вы установили здесь `true` без него. |
728 728
729### `pricing`729### `pricing`
730 730
731Блок `pricing` сообщает счётчику расходов, что нужно взимать вместо цены USD по прайс-листу, поэтому ограничения и [`/effective`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) отражают ваши договорные ставки. Суммы остаются в USD и остаются оценкой, а не счётом. Два предварительных условия:731Блок `pricing` сообщает счётчику расходов, какие цены использовать вместо прейскурантных в USD, чтобы лимиты и [`/effective`](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits#%2Feffective) отражали ваши договорные тарифы. Суммы остаются в USD и являются оценкой, а не счётом. Два предварительных требования:
732 732
733* Claude Code v2.1.227 или позже на сервере шлюза. Более ранние версии отклоняют неизвестный ключ при загрузке.733* Claude Code v2.1.227 или новее на сервере шлюза. Более ранние версии отклоняют неизвестный ключ при запуске.
734* Блок [`admin:`](#admin) или, в v2.1.268 или позже, блок [`managed:`](#managed) с хотя бы одной политикой. Шлюз отказывается запускаться с установленным `pricing` и без одного из этих блоков, потому что ничто не будет его читать.734* Блок [`admin:`](#admin) или, в v2.1.268 и новее, блок [`managed:`](#managed) хотя бы с одной политикой. Шлюз отказывается запускаться, если задан `pricing` и нет ни одного из этих блоков, поскольку его никто не будет читать.
735 735
736```yaml theme={null}736```yaml theme={null}
737pricing:737pricing:
745 cache_write: 4.125745 cache_write: 4.125
746```746```
747 747
748| Поле | Обязательно | Описание |748| Поле | Обязательное | Описание |
749| - | - | - |749| - | - | - |
750| `multiplier` | Нет | По умолчанию `1`. Счётчик умножает каждую измеренную сумму на это значение, независимо от того, указана ли цена по прайс-листу или переопределена, поэтому `0.85` выставляет счёт на 85% цены. Должно быть больше 0 и не более 10, и значение выше 1 — это [надбавка](#mark-prices-up). |750| `multiplier` | Нет | По умолчанию `1`. Счётчик умножает на это значение каждую учитываемую сумму, будь она по прейскуранту или переопределённой, поэтому `0.85` начисляет 85% цены. Должно быть больше 0 и не больше 10, а значение выше 1 является [наценкой](#mark-prices-up). |
751| `overrides` | Нет | Строки `{upstream, model, input, output, cache_read, cache_write}` в USD за миллион токенов. Все четыре ставки обязательны. Каждая должна быть больше 0 и не более 10000. |751| `overrides` | Нет | Строки `{upstream, model, input, output, cache_read, cache_write}` в USD за миллион токенов. Все четыре тарифа обязательны. Каждый должен быть больше 0 и не больше 10000. |
752 752
753Как счётчик сопоставляет строку переопределения:753Как счётчик сопоставляет строку переопределения:
754 754
755* Строка заменяет цену по прайс-листу для запросов, которые `upstream`, [`upstreams[].name`](#upstreams), обслуживает для `model`. Это включает более высокую ставку [быстрого режима](https://code.claude.com/docs/ru/fast-mode.md#understand-the-cost-tradeoff), поэтому запросы быстрого и стандартного режимов измеряются с одинаковыми четырьмя ставками.755* Строка заменяет прейскурантную цену для запросов, которые `upstream`, то есть [`upstreams[].name`](#upstreams), обслуживает для `model`. Это включает повышенный тариф [быстрого режима](https://code.claude.com/docs/ru/fast-mode.md#understand-the-cost-tradeoff), поэтому быстрые и стандартные запросы учитываются по одним и тем же четырём тарифам.
756* Встроенный ID, такой как `claude-sonnet-4-6`, сопоставляемый как [`models[].id`](#models), охватывает каждую датированную форму, региональную форму Amazon Bedrock или форму Google Cloud's Agent Platform, которую счётчик оценивает как эту модель. Любая другая строка, такая как псевдоним или ARN профиля вывода, сопоставляется с ID, который отправил клиент, или строкой, отправленной вверх по потоку, без учёта регистра.756* Встроенный ID, например `claude-sonnet-4-6`, сопоставляемый так же, как [`models[].id`](#models), охватывает все датированные формы, региональные формы Amazon Bedrock или формы Google Cloud Agent Platform, которые счётчик тарифицирует как эту модель. Любая другая строка, например псевдоним или ARN профиля инференса, сопоставляется без учёта регистра с ID, отправленным клиентом, или со строкой, отправленной в upstream.
757* Где строки перекрываются, счётчик выбирает наиболее специфичную строку, а не первую: строку, чей `model` — это точная строка модели, отправленная вверх по потоку, затем строку, соответствующую точному ID, отправленному клиентом, затем строку, называющую встроенную модель.757* Если строки пересекаются, счётчик выбирает самую конкретную строку, а не первую: строку, чей `model` точно совпадает со строкой модели, отправленной в upstream, затем строку, совпадающую с точным ID, отправленным клиентом, затем строку, называющую встроенную модель.
758* Неизвестное имя upstream вызывает сбой при загрузке, как и две строки для одного upstream, которые называют одну и ту же модель, включая два написания одной встроенной модели. Шлюз предупреждает при загрузке о строке, которую не может использовать ни одна запрашиваемая модель.758* Неизвестное имя upstream приводит к ошибке при запуске, как и две строки для одного upstream с одной и той же моделью, включая два написания одной встроенной модели. Шлюз выдаёт предупреждение при запуске о строке, которую не может использовать ни одна запрашиваемая модель.
759* Запросы веб-поиска остаются на цене по прайс-листу \$0.01; множитель всё ещё применяется к ним.759* Запросы веб-поиска остаются по прейскурантной цене \$0.01; множитель к ним всё равно применяется.
760 760
761Для ставок по регионам дайте каждому региону свой именованный upstream и одну строку на upstream.761Для тарифов по регионам задайте каждому региону собственный именованный upstream и по одной строке на каждый upstream.
762 762
763#### Надбавка к ценам763#### Наценка на цены
764 764
765С v2.1.271 или позже на сервере шлюза вы можете установить `multiplier` выше 1, до 10, чтобы взимать больше, чем взимает поставщик, например внутреннюю ставку возмещения. Этот пример взимает каждый запрос на 120% цены:765С v2.1.271 или новее на сервере шлюза вы можете установить `multiplier` выше 1, вплоть до 10, чтобы учитывать больше, чем взимает провайдер, например по внутреннему тарифу перевыставления затрат. В этом примере каждый запрос учитывается по 120% цены:
766 766
767```yaml theme={null}767```yaml theme={null}
768pricing:768pricing:
769 multiplier: 1.2769 multiplier: 1.2
770```770```
771 771
772С блоком [`admin:`](#admin) надбавка также применяется к ограничениям расходов. Счётчик считает 120% цены, поэтому разработчики достигают своих ограничений быстрее. Шлюз записывает в лог предупреждение при загрузке, которое об этом сообщает.772При наличии блока [`admin:`](#admin) наценка применяется и к лимитам расходов. Счётчик учитывает 120% цены, поэтому разработчики достигают своих лимитов раньше. Шлюз записывает в лог предупреждение об этом при запуске.
773 773
774Множитель не изменяет то, что взимает поставщик upstream за запросы.774Множитель не меняет того, что upstream-провайдер взимает за запросы.
775 775
776Если шлюз также [отправляет ставки подписанным клиентам](#send-the-rates-to-signed-in-clients), разработчикам нужен Claude Code v2.1.271 или позже, чтобы увидеть надбавку. Более ранние клиенты игнорируют `multiplier` выше 1 и показывают затраты без него.776Если шлюз также [отправляет тарифы клиентам, вошедшим в систему](#send-the-rates-to-signed-in-clients), разработчикам нужен Claude Code v2.1.271 или новее, чтобы видеть наценку. Более ранние клиенты игнорируют `multiplier` выше 1 и показывают затраты без него.
777 777
778Сервер шлюза ранее v2.1.271 отказывается запускаться, если вы установите `multiplier` выше 1.778Сервер шлюза версии ниже v2.1.271 отказывается запускаться, если вы установили `multiplier` выше 1.
779 779
780#### Отправка ставок подписанным клиентам780#### Отправка тарифов клиентам, вошедшим в систему
781 781
782С v2.1.268 или позже на сервере шлюза шлюз также помещает ставки из `pricing` в политики [`managed`](#managed), которые он обслуживает, как управляемую настройку [`modelPricing`](https://code.claude.com/docs/ru/settings-reference#modelpricing). Разработчики, соответствующие политике, затем видят ставки `pricing` для первого upstream, который обслуживает каждый ID модели в `/usage`, строке состояния и OpenTelemetry. Разработчик, который не соответствует ни одной политике, не получает управляемые настройки, поэтому его цифры остаются по цене по прайс-листу. Клиенты применяют настройку в Claude Code v2.1.242 или позже.782С v2.1.268 или новее на сервере шлюза шлюз также помещает тарифы из `pricing` в обслуживаемые им политики [`managed`](#managed) в виде управляемой настройки [`modelPricing`](https://code.claude.com/docs/ru/settings-reference#modelpricing). Разработчики, подпадающие под политику, видят тарифы `pricing` первого upstream, обслуживающего каждый ID модели, в `/usage`, строке состояния и OpenTelemetry. Разработчик, не подпадающий ни под одну политику, не получает управляемых настроек, поэтому его цифры остаются по прейскуранту. Клиенты применяют эту настройку в Claude Code v2.1.242 или новее.
783 783
784* Что добавляет шлюз: если блок `cli` политики уже не устанавливает `modelPricing`, шлюз добавляет `multiplier` и, для каждого ID модели, который может запросить клиент, строку переопределения первого upstream, который обслуживает этот ID. Ставка, которую взимает только failover upstream, остаётся на шлюзе.784* Что добавляет шлюз: если блок `cli` политики ещё не задаёт `modelPricing`, шлюз добавляет `multiplier` и, для каждого ID модели, который может запросить клиент, строку переопределения первого upstream, обслуживающего этот ID. Тариф, который взимает только резервный upstream, остаётся на шлюзе.
785* Исключить одну политику: установите `modelPricing` на `{}` в блоке `cli` этой политики, и её разработчики остаются по цене по прайс-листу.785* Исключение отдельной политики: установите `modelPricing` в `{}` в блоке `cli` этой политики, и её разработчики останутся на прейскурантных ценах.
786* Сохранить собственные ставки политики: политика, чей блок `cli` устанавливает `modelPricing` с собственным `multiplier` или `overrides`, сохраняет этот `modelPricing` целиком, и шлюз не добавляет к нему свои ставки.786* Сохранение собственных тарифов политики: политика, блок `cli` которой задаёт `modelPricing` с собственными `multiplier` или `overrides`, сохраняет этот `modelPricing` целиком, и шлюз не добавляет в него свои тарифы.
787 787
788### `models`788### `models`
789 789
790Блок `models` — это опциональный список моделей, курируемый администратором, обслуживаемый в `/v1/models` и используемый для перевода ID моделей на upstream. Это требуется для регионов Amazon Bedrock, не входящих в США, ARN с выделенной пропускной способностью Amazon Bedrock и имён развёртывания Microsoft Foundry.790Блок `models` — необязательный список моделей, курируемый администратором; он отдаётся на `/v1/models` и используется для преобразования ID моделей для каждого upstream. Он обязателен для регионов Amazon Bedrock за пределами США, ARN provisioned throughput в Amazon Bedrock и имён развёртываний Microsoft Foundry.
791 791
792```yaml theme={null}792```yaml theme={null}
793auto_include_builtin_models: true # false: expose only the list below793auto_include_builtin_models: true # false: expose only the list below
801 foundry: your-opus-deployment-name801 foundry: your-opus-deployment-name
802```802```
803 803
804Каждый ключ под `upstream_model` должен соответствовать `name` настроенного upstream, который по умолчанию является именем поставщика. Ключ, который не соответствует ни одному upstream, вызывает сбой при загрузке, поэтому опустите строки для поставщиков, которых вы не используете.804Каждый ключ в `upstream_model` должен совпадать с `name` настроенного upstream, которое по умолчанию равно имени провайдера. Ключ, не совпадающий ни с одним upstream, приводит к ошибке при запуске, поэтому опустите строки для провайдеров, которые вы не используете.
805 805
806### `managed`806### `managed`
807 807
808Блок `managed` определяет политики доступа на основе ролей, ключевые по группам IdP или домену электронной почты. Политики оцениваются по порядку; выбирается первое совпадение, затем объединяется с базовым `match: {}` catch-all. Они обслуживаются для каждого пользователя в `GET /managed/settings` с кешированием ETag/304.808Блок `managed` определяет политики доступа на основе ролей, привязанные к группам IdP или домену email. Политики вычисляются по порядку; выбирается первое совпадение, которое затем объединяется с базовым универсальным `match: {}`. Они отдаются каждому пользователю на `GET /managed/settings` с кэшированием ETag/304.
809 809
810```yaml theme={null}810```yaml theme={null}
811managed:811managed:
824 enforceAvailableModels: true824 enforceAvailableModels: true
825```825```
826 826
827Catch-all `match: {}`, обычно указываемый последним, рассматривается как базовый слой. Каждая другая политика наследует любой ключ, который она не устанавливает, из catch-all, поэтому записи для каждой роли должны только перечислять то, что отличается от организационного значения по умолчанию. Правила объединения зависят от типа ключа:827Универсальная политика `match: {}`, которую по соглашению указывают последней, рассматривается как базовый слой. Любая другая политика наследует от неё каждый ключ, который сама не задаёт, поэтому в ролевых записях нужно перечислять только то, что отличается от значений по умолчанию для организации. Правила объединения зависят от типа ключа:
828 828
829* **Списки разрешённых**: `availableModels` и `permissions.allow`. Список конкретной политики полностью заменяет базовый.829* **Списки разрешённых**: `availableModels` и `permissions.allow`. Список конкретной политики полностью заменяет базовый.
830* **Списки запрещённого и массивы хуков**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels` и каждый массив типов событий `hooks`. Они берут объединение базовой политики и конкретной политики, поэтому запрет на уровне организации или хук аудита не может быть случайно удалён переопределением для роли.830* **Списки запрещённых и массивы хуков**: `permissions.deny`, `permissions.ask`, `disabledMcpjsonServers`, `deniedMcpServers`, `blockedMarketplaces`, `deniedModels` и каждый массив типа события `hooks`. Для них берётся объединение базы и политики, поэтому общеорганизационный запрет или хук аудита не может быть случайно потерян из-за ролевого переопределения.
831* **Ключи типа Record**: `env`, `modelOverrides` и `skillOverrides`. Они выполняют поверхностное объединение, поэтому блок `env` для каждой роли переопределяет ключи, которые он устанавливает, и наследует остальное из базового.831* **Ключи типа record**: `env`, `modelOverrides` и `skillOverrides`. Они объединяются поверхностно, поэтому ролевой блок `env` переопределяет заданные в нём ключи, а остальные наследует от базы.
832 832
833`availableModels` также применяется на стороне сервера в `/v1/messages`, поэтому запрещённая модель возвращает `400` независимо от того, что отправляет клиент. Пустой список запрещает все модели. Проверка также охватывает модель, на которой сессия запускается до того, как разработчик выберет модель, поэтому [запускайте сессии на модели, которую разрешает политика](#start-sessions-on-a-model-the-policy-allows).833`availableModels` также применяется на стороне сервера на `/v1/messages`, поэтому запрещённая модель возвращает `400` независимо от того, что отправляет клиент. Пустой список запрещает все модели. Проверка также охватывает модель, с которой сессия начинается до того, как разработчик выберет модель, поэтому [запускайте сессии на модели, разрешённой политикой](#start-sessions-on-a-model-the-policy-allows).
834 834
835Шлюз проверяет само значение `model` перед тем, как передать запрос upstream, поэтому неправильное значение никогда не достигает upstream. Он отклоняет запрос с `400` в двух случаях:835Шлюз сам проверяет значение `model`, прежде чем передать запрос, поэтому некорректное значение никогда не достигает upstream. Он отклоняет запрос с `400` в двух случаях:
836 836
837* Когда значение отсутствует или пусто, шлюз отклоняет запрос с сообщением `model is required`. Эта проверка требует шлюза, работающего на Claude Code v2.1.228 или позже.837* Когда значение отсутствует или пустое, шлюз отклоняет запрос с сообщением `model is required`. Для этой проверки нужен шлюз с Claude Code v2.1.228 или новее.
838* Когда значение присутствует, но не является строкой, шлюз отклоняет запрос с сообщением `model must be a string`. Требует шлюза, работающего на Claude Code v2.1.221 или позже.838* Когда значение присутствует, но не является строкой, шлюз отклоняет запрос с сообщением `model must be a string`. Требуется шлюз с Claude Code v2.1.221 или новее.
839 839
840| Сопоставление | Поведение |840| Matcher | Поведение |
841| - | - |841| - | - |
842| `match: {}` | Соответствует каждому аутентифицированному пользователю. Начните с одного из них и добавьте политики для каждой группы выше позже. |842| `match: {}` | Совпадает с любым аутентифицированным пользователем. Начните с такой политики и позже добавьте над ней политики для групп. |
843| `match: { groups: [a, b] }` | Соответствует, если claim `groups` JWT содержит любую из перечисленных групп. С учётом регистра: группы должны соответствовать точному регистру IdP. |843| `match: { groups: [a, b] }` | Совпадает, если claim `groups` в JWT содержит любую из перечисленных групп. С учётом регистра: группы должны совпадать с точным написанием в IdP. |
844| `match: { email_domain: example.com }` | Соответствует части после последнего `@` в claim `email` JWT, без учёта регистра. Принимает один домен на политику. |844| `match: { email_domain: example.com }` | Сопоставляется с частью после последнего `@` в claim `email` из JWT, без учёта регистра. Принимает один домен на политику. |
845| `match: { groups: [a], email_domain: example.com }` | Оба условия должны совпадать |845| `match: { groups: [a], email_domain: example.com }` | Должны выполняться оба условия |
846 846
847Аутентифицированный пользователь, который не соответствует ни одной политике, получает значения по умолчанию шлюза, что означает каждую модель в каталоге и никаких управляемых настроек. Добавьте catch-all `match: {}` последним, если вы хотите гарантированную политику по умолчанию.847Аутентифицированный пользователь, не подпадающий ни под одну политику, получает значения шлюза по умолчанию, то есть все модели из каталога и никаких управляемых настроек. Добавьте последней универсальную политику `match: {}`, если вам нужна гарантированная политика по умолчанию.
848 848
849> [!NOTE]849> [!NOTE]
850>850>
851> Шлюз не ведёт собственный каталог пользователей. Он авторизует каждый запрос из токена IdP пользователя, читая членство в группе из claim `groups` токена и оценивая политики против него. Нет реестра для перечисления и нет учётных записей для предварительного создания, и поэтому нет эндпоинта SCIM, потому что нечего синхронизировать в SCIM.851> Шлюз не хранит собственного каталога пользователей. Он авторизует каждый запрос по токену IdP пользователя, считывая членство в группах из claim `groups` токена и вычисляя политики по нему. Нет списка пользователей для перечисления и нет учётных записей для предварительного создания, а значит, нет и эндпоинта SCIM, потому что SCIM нечего синхронизировать.
852>852>
853> Запустите управление жизненным циклом пользователя и группы в источнике истины, который является собственной подготовкой SCIM вашего IdP или выделенной платформой управления идентификацией. Членство и отзыв, управляемые там, автоматически поступают в шлюз через токен. Если вы хотите подготовку SCIM самих учётных записей Claude, это возможность [Claude for Enterprise](https://code.claude.com/docs/ru/admin-setup.md).853> Управляйте жизненным циклом пользователей и групп в источнике истины — через встроенную подготовку SCIM вашего IdP или специализированную платформу управления учётными данными. Членство и отзыв доступа, управляемые там, автоматически попадают в шлюз через токен. Если вам нужна подготовка учётных записей Claude через SCIM, это возможность [Claude for Enterprise](https://code.claude.com/docs/ru/admin-setup.md).
854>854>
855> Применяются два часов распространения:855> Действуют два срока распространения изменений:
856>856>
857> * **Содержание политики**: редактирование политики и переразвёртывание достигает подключённых клиентов Claude Code при их следующем опросе управляемых настроек, в течение часа, кроме [изменений, которые применяются только при следующем запуске](https://code.claude.com/docs/ru/server-managed-settings.md#fetch-and-caching-behavior)857> * **Содержимое политики**: изменение политики и повторное развёртывание доходят до подключённых клиентов Claude Code при их следующем опросе управляемых настроек, в течение часа, за исключением [изменений, которые применяются только при следующем запуске](https://code.claude.com/docs/ru/server-managed-settings.md#fetch-and-caching-behavior)
858> * **Членство в группе**: изменение членства пользователя в группе изменяет, какая политика ему соответствует. Это вступает в силу при следующем перевыпуске сессии, то есть при следующем молчаливом обновлении, ограниченном `session.ttl_hours`.858> * **Членство в группах**: изменение членства пользователя в группах меняет то, какая политика с ним совпадает. Это вступает в силу при следующем перевыпуске сессии, то есть при следующем фоновом обновлении, не позднее `session.ttl_hours`.
859>859>
860> Claude Desktop следует [собственному расписанию](#when-a-policy-change-reaches-claude-desktop).860> Claude Desktop следует [собственному расписанию](#when-a-policy-change-reaches-claude-desktop).
861 861
862#### Запуск сессий на модели, которую разрешает политика862#### Запуск сессий на модели, разрешённой политикой
863 863
864Если `availableModels` не включает модель Claude Code по умолчанию, сессии получают ответы `400`, пока разработчик не выберет модель из списка, например с помощью `/model`. В сессиях шлюза моделью по умолчанию является модель Opus, в которую разрешается псевдоним `opus`, и сам по себе `availableModels` этого не меняет.864Если `availableModels` не включает модель Claude Code по умолчанию, сессии получают ответы `400`, пока разработчик не выберет модель из списка, например с помощью `/model`. В сессиях через шлюз моделью по умолчанию является модель Opus, на которую указывает псевдоним `opus`, и `availableModels` сам по себе её не меняет.
865 865
866Чтобы исправить это, установите [`enforceAvailableModels: true`](https://code.claude.com/docs/ru/model-config#enforce-the-allowlist-for-the-default-model) в том же блоке `cli`, затем проверьте, какие записи содержит список:866Чтобы это исправить, установите [`enforceAvailableModels: true`](https://code.claude.com/docs/ru/model-config#enforce-the-allowlist-for-the-default-model) в том же блоке `cli`, а затем проверьте, какого рода записи содержит список:
867 867
868* **Псевдоним, такой как `sonnet`, или встроенный ID, такой как `claude-sonnet-4-6`**: сессии начинаются на одной из этих моделей, и вариант Default в `/model` разрешается в неё868* **Псевдоним, например `sonnet`, или встроенный ID, например `claude-sonnet-4-6`**: сессии запускаются на одной из этих моделей, и вариант Default в `/model` указывает на неё
869* **В списке нет ни псевдонима, ни встроенного ID**: сессии могут по-прежнему начинаться на встроенной модели по умолчанию, поэтому также установите [`model`](https://code.claude.com/docs/ru/model-config#control-the-model-users-run-on) на один из перечисленных ID в блоке `cli` этой политики869* **В списке нет ни псевдонима, ни встроенного ID**: сессии могут продолжать запускаться на встроенной модели по умолчанию, поэтому также установите [`model`](https://code.claude.com/docs/ru/model-config#control-the-model-users-run-on) в один из перечисленных ID в блоке `cli` этой политики
870 870
871Эта политика перечисляет один пользовательский ID, определённый в [`models`](#models), и запускает сессии на этом ID:871Эта политика перечисляет один пользовательский ID, определённый в [`models`](#models), и запускает сессии на этом ID:
872 872
880 model: claude-opus-restricted880 model: claude-opus-restricted
881```881```
882 882
883#### Значения сопоставления, которые останавливают шлюз при загрузке883#### Значения matcher, которые останавливают шлюз при запуске
884 884
885При загрузке шлюз проверяет блок `match` каждой политики и список [`admin_groups`](#admin). Любое из этих значений останавливает шлюз с ошибкой, которая называет поле:885При запуске шлюз проверяет блок `match` каждой политики и список [`admin_groups`](#admin). Любое из этих значений останавливает шлюз с ошибкой, в которой названо поле:
886 886
887* Пустой список `groups`887* Пустой список `groups`
888* Пустая запись в `groups` или в `admin_groups`888* Пустой элемент в `groups` или в `admin_groups`
889* Пустой `email_domain`889* Пустой `email_domain`
890* `email_domain`, содержащий `@`, пробел или запятую. Шлюз обрезает значение и удаляет один ведущий `@` перед этой проверкой. Напишите один простой домен, такой как `example.com`.890* `email_domain`, содержащий `@`, пробельный символ или запятую. Перед этой проверкой шлюз обрезает значение и удаляет один начальный `@`. Укажите один домен без лишних символов, например `example.com`.
891 891
892До v2.1.232 шлюз запускался с этими значениями. Каждое значение имело этот эффект:892До v2.1.232 шлюз запускался с этими значениями. Каждое из них имело следующий эффект:
893 893
894* Пустой `email_domain`: шлюз пропустил проверку домена, поэтому политика с пустым `email_domain` и без списка `groups` соответствовала каждому аутентифицированному пользователю894* Пустой `email_domain`: шлюз пропускал проверку домена, поэтому политика с пустым `email_domain` и без списка `groups` совпадала с любым аутентифицированным пользователем
895* Пустой список `groups`: политика не соответствовала никому895* Пустой список `groups`: политика не совпадала ни с кем
896* `email_domain`, содержащий `@`, пробел или запятую: политика не соответствовала никому896* `email_domain`, содержащий `@`, пробельный символ или запятую: политика не совпадала ни с кем
897* Пустая запись в `groups` или в `admin_groups`: запись соответствовала пользователю только когда claim `groups` IdP этого пользователя также содержал пустую запись. В `admin_groups` это совпадение предоставляло доступ администратора. Если ваш список `admin_groups` никогда не содержал пустую запись, никто не получал доступ администратора таким образом.897* Пустой элемент в `groups` или в `admin_groups`: элемент совпадал с пользователем, только если claim `groups` этого пользователя в IdP тоже содержал пустой элемент. В `admin_groups` такое совпадение давало доступ администратора. Если ваш список `admin_groups` никогда не содержал пустого элемента, никто не получил доступ администратора таким образом.
898 898
899#### Выбор `cli` или `code`899#### Выбор между `cli` и `code`
900 900
901> [!WARNING]901> [!WARNING]
902>902>
903> Когда политика использует ключ `code`, каждое из следующих условий не даёт шлюзу запуститься:903> Когда политика использует ключ `code`, каждое из следующих условий не даёт шлюзу запуститься:
904>904>
905> * **Версия шлюза**: `code` требует Claude Code v2.1.296 или новее на сервере шлюза. Более ранний шлюз отказывается запускаться, обнаружив этот ключ. Обновите каждую реплику, прежде чем добавлять ключ, и замените `code` обратно на `cli`, прежде чем откатываться на более раннюю версию.905> * **Версия шлюза**: `code` требует Claude Code v2.1.296 или новее на сервере шлюза. Более ранний шлюз отказывается запускаться, обнаружив этот ключ. Обновите все реплики, прежде чем добавлять ключ, и замените `code` обратно на `cli`, прежде чем откатываться на более раннюю версию.
906> * **Смешанные ключи**: файл, содержащий и `code`, и `cli` или его прежнее написание `settings`, останавливает шлюз при запуске. Поместите все блоки под один ключ за одно изменение.906> * **Смешанные ключи**: файл, в котором есть и `code`, и `cli` или его прежнее написание `settings`, останавливает шлюз при запуске. Поместите все блоки под один ключ за одну правку.
907 907
908Настройки Claude Code в политике, например правило, запрещающее чтение файлов `.env`, помещаются в блок под ключом `cli` или `code`. `code` — рекомендуемый ключ, а `cli` — устаревший. Оба ключа принимают одинаковое содержимое. Ключ определяет, где применяются настройки:908Настройки Claude Code для политики, например правило, запрещающее чтение файлов `.env`, помещаются в блок под ключом `cli` или `code`. `code` — рекомендуемый ключ, а `cli` — устаревший. Оба ключа принимают одинаковое содержимое. Ключ определяет, где применяются настройки:
909 909
910* **`cli`**: терминал, расширения VS Code и JetBrains, а также Agent SDK. При `cli` вкладка Code в Claude Desktop получает [производные настройки](#claude-desktop-overlay), поэтому ограниченное правило, например `Read(./.env)`, не останавливает пользователя там.910* **`cli`**: терминал, расширения VS Code и JetBrains, а также Agent SDK. При `cli` вкладка Code в Claude Desktop получает [производные настройки](#claude-desktop-overlay), поэтому ограниченное правило, например `Read(./.env)`, не останавливает там пользователя.
911* **`code`**: те же места, плюс может быть охвачена и вкладка Code в Claude Desktop.911* **`code`**: те же места, и при этом может быть охвачена вкладка Code в Claude Desktop.
912 912
913Файл, использующий `cli`, работает как прежде, а шлюз, обнаруживший `cli` в политике с ключом [`desktop`](#claude-desktop-overlay), выдаёт предупреждение при запуске и всё равно запускается. Перейдите на `code`, чтобы настройки могли охватывать и вкладку Code.913Файл, использующий `cli`, работает как раньше, а шлюз, обнаруживший `cli` в политике с ключом [`desktop`](#claude-desktop-overlay), выдаёт предупреждение при запуске и всё равно запускается. Перейдите на `code`, чтобы настройки могли охватывать и вкладку Code.
914 914
915Прежде чем переключаться, прочитайте раздел [Применение настроек `code` во вкладке Code](#apply-code-settings-in-the-code-tab). Чтобы настройки там применялись, политике нужен ключ `desktop`, а машины пользователей требуют настройки; кроме того, в Claude Desktop отключается веб-поиск.915Прежде чем переходить, прочитайте раздел [Применение настроек `code` во вкладке Code](#apply-code-settings-in-the-code-tab). Политике нужен ключ `desktop`, а машины пользователей требуют настройки, прежде чем настройки начнут там действовать, и в Claude Desktop отключается веб-поиск.
916 916
917Эта политика помещает правило запрета под `code` с пустым ключом `desktop`:917Эта политика помещает правило запрета под `code` с пустым ключом `desktop`:
918 918
925 desktop: {}925 desktop: {}
926```926```
927 927
928При переключении удалите все строки `serve_to_desktop` в том же изменении, в котором переименовываете блоки. Там, где в инструкции упоминается блок `cli`, используйте свой блок `code`.928При переходе удалите все строки `serve_to_desktop` в той же правке, в которой переименовываете блоки. Там, где в инструкции упоминается блок `cli`, используйте ваш блок `code`.
929
930`serve_to_desktop: true` — устаревший способ предложить настройки `cli` политики вкладке Code. Он не действует, когда Claude Desktop подключается через [`bootstrapUrl`](#claude-desktop-overlay). Пока ваши политики используют `cli`, предупреждение при запуске, упоминающее этот ключ, означает, что эти настройки не доходят до вкладки Code:
929 931
930#### Что входит в `cli`932* **Чтобы охватить вкладку Code**: перейдите на `code`, как только машины пользователей будут соответствовать условиям из раздела [Применение настроек `code` во вкладке Code](#apply-code-settings-in-the-code-tab)
933* **Чтобы остаться на `cli`**: установите `serve_to_desktop: false` рядом с `cli` в политике, чтобы убрать предупреждение
931 934
932Каждое значение `code` или `cli` — это полный документ Claude Code `managed-settings.json`, с той же схемой, которую вы развернули бы через MDM или `/etc/claude-code/managed-settings.json`, записанный здесь в YAML. CLI применяет доставленный документ на управляемом уровне, выше пользовательских и проектных настроек, вместо серверных управляемых настроек. Поэтому он игнорирует настройки, [ограниченные источниками политик на уровне ОС](https://code.claude.com/docs/ru/server-managed-settings.md#current-limitations), такие как `policyHelper` и `wslInheritsWindowsSettings`.935#### Что помещать в `cli`
933 936
934Шлюз проверяет каждый документ против схемы настроек CLI при загрузке, поэтому неизвестный ключ верхнего уровня вызывает сбой при загрузке с ошибкой, называющей каждый нарушающий ключ. Намеренно открытые части схемы всё ещё принимают произвольные значения, потому что более новые клиенты могут распознавать записи, которые схема шлюза не распознаёт. Эти открытые ключи включают `env`, `pluginConfigs` и ключи, вложенные под `permissions`.937Каждое значение `code` или `cli` — это полный документ `managed-settings.json` Claude Code, с той же схемой, которую вы развёртывали бы через MDM или `/etc/claude-code/managed-settings.json`, но записанный здесь в формате YAML. CLI применяет доставленный документ на управляемом уровне, выше пользовательских и проектных настроек, вместо управляемых настроек сервера. Поэтому он игнорирует настройки, [доступные только из источников политик уровня ОС](https://code.claude.com/docs/ru/server-managed-settings.md#current-limitations), такие как `policyHelper` и `wslInheritsWindowsSettings`.
935 938
936Поскольку проверка использует схему, поставляемую с установленной версией шлюза, помещение ключа настроек верхнего уровня, введённого более новым выпуском Claude Code, в управляемую конфигурацию требует сначала обновления шлюза. Протестируйте новую политику на одном клиенте перед развёртыванием.939Шлюз проверяет каждый документ по схеме настроек CLI при запуске, поэтому нераспознанный ключ верхнего уровня приводит к ошибке запуска с перечислением всех некорректных ключей. Намеренно открытые части схемы по-прежнему принимают произвольные значения, поскольку более новые клиенты могут распознавать записи, которых нет в схеме шлюза. К таким открытым ключам относятся `env`, `pluginConfigs` и ключи, вложенные в `permissions`.
937 940
938Полная справка по ключам находится в [Claude Code settings](https://code.claude.com/docs/ru/settings-reference.md#all-settings). Ключи, которые операторы чаще всего используют в первую очередь:941Поскольку проверка использует схему, поставляемую с установленной версией шлюза, чтобы поместить в управляемую конфигурацию ключ настроек верхнего уровня, появившийся в более новом выпуске Claude Code, сначала нужно обновить шлюз. Проверьте новую политику на одном клиенте, прежде чем развёртывать её.
942
943Полный справочник ключей находится в разделе [Настройки Claude Code](https://code.claude.com/docs/ru/settings-reference.md#all-settings). Ключи, к которым операторы обращаются в первую очередь:
939 944
940```yaml theme={null}945```yaml theme={null}
941managed:946managed:
970 - { type: command, command: /usr/local/bin/audit-edit.sh }975 - { type: command, command: /usr/local/bin/audit-edit.sh }
971```976```
972 977
973| Ключ | Применяется | Эффект |978| Ключ | Кем применяется | Эффект |
974| - | - | - |979| - | - | - |
975| `availableModels` | Шлюз + CLI | Список разрешённых моделей. Также проверяется в `/v1/messages`, поэтому исправленный клиент не может его обойти. |980| `availableModels` | Шлюз + CLI | Список разрешённых моделей. Также проверяется на `/v1/messages`, поэтому модифицированный клиент не может его обойти. |
976| [`deniedModels`](https://code.claude.com/docs/ru/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/ru/settings-reference#availablemodelsmatch) | Шлюз + CLI | [Блокирует определённые модели или версии](https://code.claude.com/docs/ru/model-config.md#block-specific-models-or-versions), которые иначе разрешил бы `availableModels`. Заблокированная модель отклоняется с `400` на `/v1/messages` и исключается из `/v1/models`. Собственная проверка шлюза требует Claude Code v2.1.299 или новее на сервере шлюза. Проверка CLI требует v2.1.283 или новее на клиентах, а более ранние клиенты игнорируют оба ключа. |981| [`deniedModels`](https://code.claude.com/docs/ru/settings-reference#deniedmodels), [`availableModelsMatch`](https://code.claude.com/docs/ru/settings-reference#availablemodelsmatch) | Шлюз + CLI | [Блокирует отдельные модели или версии](https://code.claude.com/docs/ru/model-config.md#block-specific-models-or-versions), которые иначе разрешил бы `availableModels`. Заблокированная модель отклоняется с `400` на `/v1/messages` и не включается в `/v1/models`. Собственная проверка шлюза требует Claude Code v2.1.299 или новее на сервере шлюза. Проверка CLI требует v2.1.283 или новее на клиентах, а более ранние клиенты игнорируют оба ключа. |
977| `permissions.allow` / `.deny` | CLI | Правила инструментов и команд. Смотрите [Permissions](https://code.claude.com/docs/ru/permissions.md). |982| `permissions.allow` / `.deny` | CLI | Правила для инструментов и команд. См. [Разрешения](https://code.claude.com/docs/ru/permissions.md) и [что не сопоставляется правилом Bash](https://code.claude.com/docs/ru/permissions.md#bash-rule-limits). |
978| `permissions.disableBypassPermissionsMode` | CLI | Установите на `disable`, чтобы заблокировать [`bypassPermissions`](https://code.claude.com/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode), режим, который пропускает запросы разрешений, и флаг `--dangerously-skip-permissions` |983| `permissions.disableBypassPermissionsMode` | CLI | Установите `disable`, чтобы заблокировать [`bypassPermissions`](https://code.claude.com/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) — режим, пропускающий запросы разрешений, — и флаг `--dangerously-skip-permissions` |
979| `allowManagedPermissionRulesOnly` | CLI | Когда `true`, управляемые настройки становятся единственным источником настроек правил разрешений. Запись [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/ru/settings-reference#allowmanagedpermissionrulesonly) перечисляет каждый источник, который Claude Code затем игнорирует. |984| `allowManagedPermissionRulesOnly` | CLI | Если `true`, управляемые настройки становятся единственным источником правил разрешений. В описании [`allowManagedPermissionRulesOnly`](https://code.claude.com/docs/ru/settings-reference#allowmanagedpermissionrulesonly) перечислены все источники, которые Claude Code в этом случае игнорирует. |
980| `env` | CLI | Переменные окружения объединены в процесс CLI. Используйте для телеметрии, автоматического обновления и переопределения имён моделей. |985| `env` | CLI | Переменные окружения, объединяемые в процесс CLI. Используйте для телеметрии, автообновления и переопределения имён моделей. |
981| `hooks` | CLI | Организационные [хуки](https://code.claude.com/docs/ru/hooks.md) |986| `hooks` | CLI | [Хуки](https://code.claude.com/docs/ru/hooks.md) на уровне организации |
982| `managedMcpServers` | CLI | Удалённые MCP-серверы [предоставляемые каждому соответствующему разработчику](https://code.claude.com/docs/ru/managed-mcp.md#provide-servers-through-managed-settings) наряду с серверами, которые они добавляют сами, только `http` и `sse`. Смотрите [MCP-серверы в политике](#mcp-servers-in-a-policy). Требует Claude Code v2.1.259 или позже на сервере шлюза и на клиентах. Более ранние клиенты игнорируют ключ. |987| `managedMcpServers` | CLI | Удалённые MCP-серверы, [предоставляемые каждому подпадающему разработчику](https://code.claude.com/docs/ru/managed-mcp.md#provide-servers-through-managed-settings) наряду с серверами, которые он добавляет сам; только `http` и `sse`. См. [MCP-серверы в политике](#mcp-servers-in-a-policy). Требует Claude Code v2.1.259 или новее на сервере шлюза и на клиентах. Более ранние клиенты игнорируют ключ. |
983 988
984Поскольку эти настройки поступают по сети, CLI показывает каждому разработчику диалог одобрения безопасности перед применением настроек, указанных ниже:989Поскольку эти настройки приходят по сети, CLI показывает каждому разработчику диалоговое окно подтверждения безопасности, прежде чем применить перечисленные ниже настройки:
985 990
986* `hooks`991* `hooks`
987* Переменные `env`, требующие одобрения разработчика, такие как переменные прокси и базового URL992* переменные `env`, требующие подтверждения разработчика, например переменные прокси и базового URL
988* Настройки выполнения оболочки, такие как `apiKeyHelper` и `statusLine`993* настройки выполнения команд оболочки, такие как `apiKeyHelper` и `statusLine`
989* Настройки двоичного файла песочницы `sandbox.bwrapPath`, `sandbox.socatPath` и `sandbox.ripgrep`994* настройки бинарных файлов песочницы `sandbox.bwrapPath`, `sandbox.socatPath` и `sandbox.ripgrep`
990* Настройки песочницы, которые перехватывают трафик, внедряют учётные данные или ослабляют изоляцию, такие как `sandbox.network.tlsTerminate` и настройки портов прокси. [Диалоги одобрения безопасности](https://code.claude.com/docs/ru/server-managed-settings.md#security-approval-dialogs) перечисляют их все.995* Настройки песочницы, которые перехватывают трафик, внедряют учётные данные или ослабляют изоляцию, например `sandbox.network.tlsTerminate` и настройки портов прокси. Полный список приведён в разделе [Диалоговые окна подтверждения безопасности](https://code.claude.com/docs/ru/server-managed-settings.md#security-approval-dialogs).
991 996
992[Память одобрения](https://code.claude.com/docs/ru/server-managed-settings.md#approval-memory) охватывает, как долго длится одобрение и когда диалог появляется снова.997В разделе [Запоминание подтверждений](https://code.claude.com/docs/ru/server-managed-settings.md#approval-memory) описано, как долго действует подтверждение и когда диалоговое окно появляется снова.
993 998
994Claude Code применяет некоторые доставленные переменные `env` без показа разработчику диалога одобрения безопасности, такие как настройки выбора модели и числовые ограничения. Другие доставленные переменные могут требовать одобрения разработчика перед вступлением в силу; непустое значение прокси, базового URL или `OTEL_EXPORTER_OTLP_ENDPOINT` всегда требует. Когда доставленная переменная требует одобрения, диалог называет её.999Некоторые доставленные переменные `env`, например настройки выбора модели и числовые ограничения, Claude Code применяет без показа разработчику диалогового окна подтверждения. Другие доставленные переменные могут требовать подтверждения разработчика, прежде чем вступят в силу; непустое значение прокси, базового URL или `OTEL_EXPORTER_OTLP_ENDPOINT` требует его всегда. Когда доставленная переменная требует подтверждения, диалоговое окно её называет.
995 1000
996[Переменные окружения и диалог одобрения](https://code.claude.com/docs/ru/server-managed-settings.md#environment-variables-and-the-approval-dialog) содержит детали, включая четыре переключателя конфиденциальности, чьё доставленное значение решает, требуют ли они одобрения. До v2.1.218 Claude Code применял меньше переменных без запроса разработчика, поэтому больше доставленных переменных вызывали диалог.1001Подробности, включая четыре переключателя конфиденциальности, для которых от доставленного значения зависит, требуется ли подтверждение, приведены в разделе [Переменные окружения и диалоговое окно подтверждения](https://code.claude.com/docs/ru/server-managed-settings.md#environment-variables-and-the-approval-dialog). До v2.1.218 Claude Code применял без запроса разработчику меньше переменных, поэтому диалоговое окно вызывало больше доставленных переменных.
997 1002
998Конфигурация [телеметрии](#telemetry) шлюза отправляет `OTEL_EXPORTER_OTLP_ENDPOINT`, поэтому установка `telemetry.forward_to` вызывает диалог на каждом интерактивном клиенте. Диалог защищает машину разработчика от скомпрометированного или враждебного шлюза, а не организацию от разработчика.1003Конфигурация [телеметрии](#telemetry) шлюза передаёт `OTEL_EXPORTER_OTLP_ENDPOINT`, поэтому установка `telemetry.forward_to` вызывает диалоговое окно на каждом интерактивном клиенте. Диалоговое окно защищает машину разработчика от скомпрометированного или враждебного шлюза, а не организацию от разработчика.
999 1004
1000[Неинтерактивный запуск](https://code.claude.com/docs/ru/server-managed-settings.md#security-approval-dialogs), например `claude -p`, сессия Agent SDK или сессия во вкладке Code в Claude Desktop, не может показать диалог. Он применяет переданные настройки только для этого запуска и не запоминает их как подтверждённые, поэтому следующая интерактивная сессия разработчика всё равно покажет диалог.1005[Неинтерактивный запуск](https://code.claude.com/docs/ru/server-managed-settings.md#security-approval-dialogs), например `claude -p`, сессия Agent SDK или сессия во вкладке Code в Claude Desktop, не может показать диалоговое окно. Он применяет переданные настройки только для этого запуска и не записывает их как подтверждённые, поэтому следующая интерактивная сессия разработчика всё равно покажет диалоговое окно.
1001 1006
1002Если разработчик отклоняет, Claude Code завершает эту сессию, а не применяет политику. Когда вы отправляете новый хук или любую переменную env, которая вызывает диалог, в широкую политику, каждый соответствующий разработчик видит диалог в своих интерактивных сессиях. Работающая интерактивная сессия показывает его при следующем ежечасном опросе, в противном случае он появляется при следующем интерактивном запуске разработчика.1007Если разработчик отказывается, Claude Code завершает эту сессию, а не применяет политику. Поэтому, когда вы передаёте новый хук или любую переменную окружения, вызывающую диалоговое окно, в широкую политику, каждый подпадающий разработчик увидит диалоговое окно в своих интерактивных сессиях. Работающая интерактивная сессия показывает его при следующем ежечасном опросе, а в остальных случаях оно появляется при следующем интерактивном запуске у разработчика.
1003 1008
1004В более ранних выпусках ключ `cli` назывался `settings`, и шлюз по-прежнему принимает это написание как псевдоним. Для новых развёртываний используйте [`code`](#choose-cli-or-code).1009В более ранних выпусках ключ `cli` назывался `settings`, и шлюз по-прежнему принимает это написание как псевдоним. Для новых развёртываний используйте [`code`](#choose-cli-or-code).
1005 1010
1006#### Контекстное окно в терминальных сессиях1011#### Проверка политики перед развёртыванием
1012
1013Чтобы проверить изменение политики, запустите шлюз с временной базой данных Postgres. Шлюз подключается к Postgres и применяет миграции схемы, прежде чем проверять содержимое блоков `cli`, `code` и `desktop`. Если база данных недоступна, запуск останавливается на `could not connect to Postgres` и ничего не сообщает об их содержимом.
1007 1014
1008Терминальные сессии, в которые выполнен вход через `/login`, используют контекстное окно 1M для Opus 4.7 и более поздних версий, Sonnet 5 и более поздних версий, а также моделей Fable. ID модели не требует суффикса `[1m]`, и сессии сжимаются примерно при 967K токенов. До Claude Code v2.1.287 на машине разработчика Claude Code считал, что модели Opus и Fable имеют окно 200K, если ID модели не заканчивался на `[1m]`.1015#### Контекстное окно в сессиях терминала
1009 1016
1010Чтобы терминальные сессии вместо этого сжимались на границе 200K, задайте [окно автосжатия](https://code.claude.com/docs/ru/model-config.md#set-the-auto-compact-window) в `env` политики:1017Сессии терминала, выполненные со входом через `/login`, используют контекстное окно 1M для Opus 4.7 и новее, Sonnet 5 и новее, а также моделей Fable. ID модели не требует суффикса `[1m]`, и сессии сжимаются примерно на 967K токенов. До Claude Code v2.1.287 на машине разработчика Claude Code считал, что у моделей Opus и Fable окно 200K, если ID модели не заканчивался на `[1m]`.
1018
1019Чтобы сессии терминала вместо этого сжимались на границе 200K, задайте [окно автосжатия](https://code.claude.com/docs/ru/model-config.md#set-the-auto-compact-window) в `env` политики:
1011 1020
1012```yaml theme={null}1021```yaml theme={null}
1013managed:1022managed:
1018 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"1027 CLAUDE_CODE_AUTO_COMPACT_WINDOW: "200000"
1019```1028```
1020 1029
1021Claude Code применяет эту переменную без показа разработчику диалога одобрения. Переменная применяется ко всем моделям, включая ID моделей, заканчивающиеся на `[1m]`.1030Claude Code применяет эту переменную без показа разработчику диалогового окна подтверждения. Переменная применяется ко всем моделям, включая ID моделей, заканчивающиеся на `[1m]`.
1022 1031
1023Чтобы вместо этого отключить контекст 1M, установите [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/ru/model-config#extended-context) в том же блоке `env`. Тогда Claude Code считает, что у каждой модели окно 200K. В интерактивных сессиях каждый разработчик одобряет эту переменную в [диалоге одобрения](#what-goes-in-cli), прежде чем она вступит в силу.1032Чтобы вместо этого отключить контекст 1M, установите [`CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"`](https://code.claude.com/docs/ru/model-config#extended-context) в том же блоке `env`. Тогда Claude Code считает, что у каждой модели окно 200K. В интерактивных сессиях каждый разработчик подтверждает эту переменную в [диалоговом окне подтверждения](#what-goes-in-cli), прежде чем она вступит в силу.
1024 1033
1025#### One-hour prompt cache1034#### Часовой кэш промптов
1026 1035
1027Чтобы запрашивать часовой [TTL кэша промптов](https://code.claude.com/docs/ru/prompt-caching.md#cache-lifetime) вместо пятиминутного по умолчанию, добавьте эти ключи в существующий [блок `code`, `cli` или `settings`](#choose-cli-or-code) политики и перезапустите шлюз. Для ключей нужен Claude Code v2.1.242 или новее на сервере шлюза и на клиентах.1036Чтобы запрашивать часовой [TTL кэша промптов](https://code.claude.com/docs/ru/prompt-caching.md#cache-lifetime) вместо пятиминутного по умолчанию, добавьте эти ключи в существующий [блок `code`, `cli` или `settings`](#choose-cli-or-code) политики и перезапустите шлюз. Ключам нужен Claude Code v2.1.242 или новее на сервере шлюза и на клиентах.
1028 1037
1029`promptCacheTtl` охватывает основной диалог. `subagentPromptCacheTtl` необязателен и охватывает субагентов, рабочие процессы и фоновые запросы. В этом примере оба ключа добавляются в политику `match: {}` с ключом `cli`:1038`promptCacheTtl` охватывает основной диалог. `subagentPromptCacheTtl` необязателен и охватывает субагентов, workflows и фоновые запросы. В этом примере оба ключа добавляются в политику `match: {}` с ключом `cli`:
1030 1039
1031```yaml theme={null}1040```yaml theme={null}
1032managed:1041managed:
1039 1048
1040> [!WARNING]1049> [!WARNING]
1041>1050>
1042> Задавайте эти ключи, только если ваши upstream предлагают часовой TTL для каждой модели, которую обслуживает шлюз. Если upstream отклоняет TTL, запрос завершается ошибкой, и ни шлюз, ни Claude Code не делают повторную попытку с пятиминутным TTL. Для Amazon Bedrock проверьте [поддерживаемые модели, регионы и ограничения](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models).1051> Задавайте эти ключи, только если ваши upstream предлагают часовой TTL для каждой модели, которую обслуживает шлюз. Если upstream отклоняет TTL, запрос завершается ошибкой, и ни шлюз, ни Claude Code не повторяют попытку с пятиминутным TTL. Для Amazon Bedrock проверьте [поддерживаемые модели, регионы и ограничения](https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html#prompt-caching-models).
1043 1052
1044Чтобы проверить `promptCacheTtl`, войдите в шлюз как пользователь, подпадающий под политику, и [проверьте, какой TTL использовали ваши записи в кэш](https://code.claude.com/docs/ru/prompt-caching.md#choose-the-ttl-yourself). Передайте `--model`, чтобы повторить проверку для каждой модели, которую обслуживает шлюз.1053Чтобы проверить `promptCacheTtl`, войдите в шлюз как пользователь, подпадающий под политику, и [проверьте, какой TTL использовали ваши записи в кэш](https://code.claude.com/docs/ru/prompt-caching.md#choose-the-ttl-yourself). Передайте `--model`, чтобы повторить проверку для каждой модели, которую обслуживает шлюз.
1045 1054
1046Часовые записи в кэш [стоят дороже](https://code.claude.com/docs/ru/prompt-caching.md#cache-lifetime) пятиминутных. Чтобы [лимиты расходов](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md#how-requests-are-priced) учитывали этот повышенный тариф, нужна v2.1.286 или новее на сервере шлюза.1055Часовые записи в кэш [стоят дороже](https://code.claude.com/docs/ru/prompt-caching.md#cache-lifetime), чем пятиминутные. Чтобы [лимиты расходов](https://code.claude.com/docs/ru/claude-apps-gateway-spend-limits.md#how-requests-are-priced) учитывали этот повышенный тариф, нужна v2.1.286 или новее на сервере шлюза.
1047 1056
1048#### MCP-серверы в политике1057#### MCP-серверы в политике
1049 1058
1050Чтобы предоставить MCP-серверы клиентам Claude Code, которым соответствует политика, установите [`managedMcpServers`](https://code.claude.com/docs/ru/managed-mcp#provide-servers-through-managed-settings) в блоке `cli` этой политики. Вам нужен Claude Code v2.1.259 или позже на сервере шлюза и на клиентах.1059Чтобы предоставить MCP-серверы клиентам Claude Code, подпадающим под политику, задайте [`managedMcpServers`](https://code.claude.com/docs/ru/managed-mcp#provide-servers-through-managed-settings) в блоке `cli` этой политики. Нужен Claude Code v2.1.259 или новее на сервере шлюза и на клиентах.
1051 1060
1052Шлюз проверяет каждую запись при загрузке с [теми же правилами, которые Claude Code применяет на клиенте](https://code.claude.com/docs/ru/managed-mcp.md#what-an-entry-can-contain), и если запись не проходит проверку, шлюз отказывается запускаться и называет запись.1061Шлюз проверяет каждую запись при запуске по [тем же правилам, которые Claude Code применяет на клиенте](https://code.claude.com/docs/ru/managed-mcp.md#what-an-entry-can-contain), и если запись не проходит проверку, шлюз отказывается запускаться и называет эту запись.
1053 1062
1054Если вы напишете ссылку `${VAR}` в `gateway.yaml`, шлюз разрешит её из своего окружения при загрузке через [расширение секретов](#secret-expansion) перед запуском проверок записей, поэтому каждый соответствующий клиент получает буквальное значение и может его прочитать. [Руководство по заголовкам для предоставленных серверов](https://code.claude.com/docs/ru/managed-mcp.md#provide-servers-through-managed-settings) применяется к расширенному значению.1063Если вы пишете ссылку `${VAR}` в `gateway.yaml`, шлюз разрешает её из своего окружения при запуске через [подстановку секретов](#secret-expansion) до проверки записей, поэтому каждый подпадающий клиент получает буквальное значение и может его прочитать. [Рекомендации по заголовкам для предоставляемых серверов](https://code.claude.com/docs/ru/managed-mcp.md#provide-servers-through-managed-settings) относятся к подставленному значению.
1055 1064
1056Шлюз отклоняет написание `.mcp.json` `mcpServers` в блоке `cli`, и его ошибка загрузки называет `managedMcpServers` как ключ для использования. До v2.1.259 шлюз отклонял любое определение MCP-сервера в блоке `cli`.1065Шлюз отклоняет написание `mcpServers` из `.mcp.json` в блоке `cli`, и в его ошибке запуска в качестве нужного ключа указан `managedMcpServers`. До v2.1.259 шлюз отклонял любое определение MCP-сервера в блоке `cli`.
1057 1066
1058#### Наложение Claude Desktop1067#### Наложение для Claude Desktop
1059 1068
1060Если ваша организация также развёртывает [Claude Desktop](https://code.claude.com/docs/ru/desktop.md), один и тот же шлюз обслуживает обоих клиентов. Укажите `bootstrapUrl` в [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Claude Desktop выводит издателя OAuth из этого URL, запускает тот же вход с кодом устройства через этот шлюз и получает свою конфигурацию из ответа.1069Если ваша организация также развёртывает [Claude Desktop](https://code.claude.com/docs/ru/desktop.md), один и тот же шлюз обслуживает оба клиента. Направьте `bootstrapUrl` в [управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop на `<listen.public_url>/user/bootstrap`. Claude Desktop выводит издателя OAuth из этого URL, выполняет тот же вход по коду устройства через этот шлюз и получает свою конфигурацию из ответа.
1061 1070
1062> [!NOTE]1071> [!NOTE]
1063>1072>
1064> Требует Claude Code v2.1.203 или позже на сервере шлюза и явное согласие: `/user/bootstrap` возвращает 404, если только политика, соответствующая пользователю, не содержит ключ `desktop`. Пустой `desktop: {}` включает политику, а ключ `desktop` на базовом слое `match: {}` включает каждую политику, которая его наследует. Журнал аудита записывает каждый запрос как `desktop_bootstrap.serve` или `desktop_bootstrap.denied`.1073> Требует Claude Code v2.1.203 или новее на сервере шлюза и явного включения: `/user/bootstrap` возвращает 404, если политика, под которую подпадает пользователь, не содержит ключа `desktop`. Пустой `desktop: {}` включает политику, а ключ `desktop` в базовом слое `match: {}` включает каждую политику, которая его наследует. Журнал аудита записывает каждый запрос как `desktop_bootstrap.serve` или `desktop_bootstrap.denied`.
1065 1074
1066Если вы не развёртываете Claude Desktop, полностью исключите `desktop` из ваших политик; шлюз затем возвращает 404 из `/user/bootstrap` для каждого пользователя.1075Если вы не развёртываете Claude Desktop, вообще не указывайте `desktop` в своих политиках; тогда шлюз возвращает 404 на `/user/bootstrap` для каждого пользователя.
1067 1076
1068##### Настройки, которые шлюз выводит для Claude Desktop1077##### Настройки, которые шлюз выводит для Claude Desktop
1069 1078
1070Шлюз выводит значительную часть ответа bootstrap из блока `cli` или `code` соответствующей политики и из конфигурации шлюза верхнего уровня:1079Шлюз выводит бо́льшую часть ответа bootstrap из блока `cli` или `code` совпавшей политики и из конфигурации шлюза верхнего уровня:
1071 1080
1072* Список моделей — из `availableModels`. В список не входят модели, которые политика блокирует с помощью [`deniedModels` или `availableModelsMatch: exact`](#what-goes-in-cli). Этот фильтр требует Claude Code v2.1.299 или новее на сервере шлюза. Вариант контекста 1M для каждой модели описан в разделе [Расширенный контекст в Claude Desktop](#extended-context-in-claude-desktop)1081* Список моделей — из `availableModels`. В список не входят модели, которые политика блокирует с помощью [`deniedModels` или `availableModelsMatch: exact`](#what-goes-in-cli). Этот фильтр требует Claude Code v2.1.299 или новее на сервере шлюза. Вариант контекста 1M для каждой модели описан в разделе [Расширенный контекст в Claude Desktop](#extended-context-in-claude-desktop)
1073* Отключённые инструменты из записей `permissions.deny` с простым названием инструмента. Если вы установите `disabledBuiltinTools` в блоке `desktop` политики, шлюз обслуживает объединение вашего значения и выведённого списка, поэтому вы можете отключить больше инструментов таким образом, но не можете повторно включить инструмент, который вы отключили через `permissions.deny`1082* Отключённые инструменты — из записей `permissions.deny`, содержащих только имя инструмента. Если вы задаёте `disabledBuiltinTools` в блоке `desktop` политики, шлюз отдаёт объединение вашего значения и выведенного списка, поэтому так можно отключить больше инструментов, но нельзя снова включить инструмент, отключённый через `permissions.deny`
1074* Список разрешённых доменов для исходящего трафика — из `sandbox.network.allowedDomains`. Если вы задаёте `coworkEgressAllowedHosts` в блоке `desktop` политики, шлюз использует это значение вместо производного списка. Если выдаваемый шлюзом список разрешённых включает `*` и шлюз при этом не выдаёт [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy) Claude Desktop, Claude Desktop не включает [песочницу Bash](https://code.claude.com/docs/ru/sandboxing.md) во вкладке Code1083* Список разрешённых адресов для исходящего трафика — из `sandbox.network.allowedDomains`. Если вы задаёте `coworkEgressAllowedHosts` в блоке `desktop` политики, шлюз использует это значение вместо выведенного списка. Если список разрешённых, который отдаёт шлюз, включает `*` и шлюз при этом не отдаёт [`allowedWorkspaceFolders`](https://claude.com/docs/third-party/claude-desktop/code#applied-as-managed-policy) для Claude Desktop, Claude Desktop не включает [песочницу Bash](https://code.claude.com/docs/ru/sandboxing.md) во вкладке Code
1075* Эндпоинт OTLP, который указывает на сам шлюз, и атрибуты идентификации пользователя, выполнившего вход. Шлюз передаёт экспорты, которые он получает на этом эндпоинте, вашим назначениям `forward_to`. Он включает эндпоинт и атрибуты, когда вы устанавливаете оба [`telemetry.forward_to`](#telemetry) и `listen.public_url`.1084* Эндпоинт OTLP, указывающий на сам шлюз, и атрибуты идентичности вошедшего пользователя. Шлюз пересылает экспорты, полученные на этом эндпоинте, в ваши назначения `forward_to`. Он включает эндпоинт и атрибуты, когда вы задаёте и [`telemetry.forward_to`](#telemetry), и `listen.public_url`.
1076 1085
1077 Claude Desktop экспортирует каждый сигнал с одной кодировкой: `http/protobuf`, или `http/json`, когда вы устанавливаете `OTEL_EXPORTER_OTLP_PROTOCOL` или один из его вариантов для каждого сигнала на `http/json` в `env` политики. До Claude Code v2.1.261 на сервере шлюза ответ устанавливал `http/json` независимо, поэтому сборщик, который принимает только protobuf, отклонял экспорты Claude Desktop1086 Claude Desktop экспортирует все сигналы в одной кодировке: `http/protobuf` или `http/json`, если вы установили `OTEL_EXPORTER_OTLP_PROTOCOL` или один из его вариантов для отдельных сигналов в `http/json` в `env` политики. До Claude Code v2.1.261 на сервере шлюза ответ в любом случае задавал `http/json`, поэтому коллектор, принимающий только protobuf, отклонял экспорты Claude Desktop
1078 1087
1079Чтобы установить `disabledBuiltinTools`, `coworkEgressAllowedHosts` или собственную настройку Claude Desktop `managedMcpServers` в блоке `desktop` политики, вам нужен Claude Code v2.1.232 или позже на сервере шлюза. `managedMcpServers` Claude Desktop принимает значение массива, а не объекта.1088Чтобы задать `disabledBuiltinTools`, `coworkEgressAllowedHosts` или собственную настройку `managedMcpServers` Claude Desktop в блоке `desktop` политики, нужен Claude Code v2.1.232 или новее на сервере шлюза. `managedMcpServers` в Claude Desktop принимает значение-массив, а не объект.
1080 1089
1081Шлюз опускает ключи без эквивалента Claude Desktop, такие как `hooks` и правила разрешений для каждой области, такие как `Bash(npm *)`, из ответа bootstrap.1090Шлюз не включает в ответ bootstrap ключи, не имеющие эквивалента в Claude Desktop, например `hooks` и ограниченные правила разрешений вроде `Bash(npm *)`.
1082 1091
1083##### Применение настроек `code` во вкладке Code1092##### Применение настроек `code` во вкладке Code
1084 1093
1085Настройки Claude Code, которые политика содержит под ключом [`code`](#choose-cli-or-code), применяются во вкладке Code в Claude Desktop, когда выполняются все эти условия:1094Настройки Claude Code, которые политика содержит под ключом [`code`](#choose-cli-or-code), применяются во вкладке Code в Claude Desktop, когда выполняются все следующие условия:
1086 1095
1087* У политики также есть ключ `desktop`, причём пустой `desktop: {}` тоже считается1096* У политики также есть ключ `desktop`, причём пустой `desktop: {}` тоже считается
1088* Версия Claude Desktop — 2.9939.2 или новее1097* Claude Desktop версии 2.9939.2 или новее
1089* Управляемые настройки Claude Code на машине [указывают на этот шлюз](#client-side-managed-settings)1098* Управляемые настройки Claude Code на машине [указывают этот шлюз](#client-side-managed-settings)
1090* Эта машина обращается к шлюзу по HTTPS в частной сети1099* Эта машина обращается к шлюзу по HTTPS в частной сети
1091 1100
1092Последние два условия относятся к той машине, на которой запускается Claude Code для сессии. Для локальной сессии это собственный компьютер пользователя. Для сессии вкладки Code по SSH — удалённый хост.1101Последние два условия относятся к той машине, на которой Claude Code выполняет сессию. Для локальной сессии это собственный компьютер пользователя. Для сессии вкладки Code через SSH — удалённый хост.
1093 1102
1094Разверните [клиентские управляемые настройки](#client-side-managed-settings) на этих машинах, прежде чем переименовывать `cli` в `code`. Когда первые два условия выполнены, а любое из последних двух — нет, пользователь, которому соответствует политика, получает один из следующих результатов:1103Разверните [управляемые настройки на стороне клиента](#client-side-managed-settings) на этих машинах, прежде чем переименовывать `cli` в `code`. Когда первые два условия выполняются, а одно из последних двух — нет, пользователь, подпадающий под политику, получает один из следующих результатов:
1095 1104
1096* **По HTTPS, когда Claude Desktop включает Claude Code v2.1.296 или новее**: вкладка Code не запускается, и ответ на промпт пользователя объясняет причину1105* **По HTTPS, если Claude Desktop поставляется с Claude Code v2.1.296 или новее**: вкладка Code не запускается, а ответ на промпт пользователя объясняет причину
1097* **По HTTPS, когда Claude Desktop включает более раннюю версию**: вкладка Code запускается без ваших настроек `code`, и в сессии ничто об этом не сообщает1106* **По HTTPS, если Claude Desktop поставляется с более ранней версией**: вкладка Code запускается без ваших настроек `code`, и ничто в сессии об этом не сообщает
1098* **По обычному HTTP**: вкладка Code запускается без ваших настроек `code`, какую бы версию ни включал Claude Desktop1107* **По обычному HTTP**: вкладка Code запускается без ваших настроек `code`, независимо от версии, с которой поставляется Claude Desktop
1099 1108
1100Когда прокси перед шлюзом отвечает на `/managed/settings` собственным 404, вкладка Code также запускается без ваших настроек `code`, в том числе на машине, удовлетворяющей всем четырём условиям.1109Когда прокси перед шлюзом отвечает на `/managed/settings` собственным 404, вкладка Code также запускается без ваших настроек `code`, в том числе на машине, соответствующей всем четырём условиям.
1101 1110
1102В политике с ключом `desktop` блок `code`, содержащий настройки, отключает инструмент WebSearch в Cowork, Chat и вкладке Code. О MCP-серверах см. раздел [Где применяется `managedMcpServers`](https://code.claude.com/docs/ru/managed-mcp#where-managedmcpservers-applies).1111В политике с ключом `desktop` блок `code`, содержащий настройки, отключает инструмент WebSearch в Cowork, Chat и вкладке Code. О MCP-серверах см. [Где применяется `managedMcpServers`](https://code.claude.com/docs/ru/managed-mcp#where-managedmcpservers-applies).
1103 1112
1104##### Прямая установка настроек Claude Desktop1113##### Прямое задание настроек Claude Desktop
1105 1114
1106Добавьте опциональный блок `desktop` рядом с `cli`, чтобы установить настройки Claude Desktop напрямую. Напишите настройки из [справочника управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop как плоские имена ключей. Не указывайте ключи, которые Claude Desktop читает только из MDM или локальных файлов, такие как `bootstrapUrl`; шлюз отклоняет их при загрузке.1115Добавьте необязательный блок `desktop` рядом с `cli`, чтобы задавать настройки Claude Desktop напрямую. Указывайте настройки из [справочника управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop в виде плоских имён ключей. Не указывайте ключи, которые Claude Desktop читает только из MDM или локальных файлов, например `bootstrapUrl`; шлюз отклоняет их при запуске.
1107 1116
1108Этот пример задаёт три ключа Claude Desktop для группы `eng-contractors` наряду с её настройками `cli`:1117В этом примере для группы `eng-contractors` задаются три ключа Claude Desktop наряду с её настройками `cli`:
1109 1118
1110```yaml theme={null}1119```yaml theme={null}
1111managed:1120managed:
1120 banner: { text: "Contractor build: internal use only" }1129 banner: { text: "Contractor build: internal use only" }
1121```1130```
1122 1131
1123Каждый ключ опционален; Claude Desktop применяет свой собственный стандарт для любого ключа, который вы опустите.1132Каждый ключ необязателен; для любого опущенного ключа Claude Desktop применяет собственное значение по умолчанию.
1124 1133
1125##### Что шлюз отклоняет при загрузке1134##### Что шлюз отклоняет при запуске
1126 1135
1127Шлюз проверяет каждый блок `desktop` при загрузке против схемы конфигурации, которую использует сам Claude Desktop, поэтому ошибка появляется при запуске шлюза как ошибка, называющая ключ, а не достигает каждого подключённого рабочего стола. Шлюз не запускается, когда блок содержит:1136Шлюз проверяет каждый блок `desktop` при запуске по той же схеме конфигурации, которую использует сам Claude Desktop, поэтому ошибка проявляется при запуске шлюза в виде сообщения с именем ключа, а не доходит до каждого подключённого десктопа. Запуск шлюза завершается ошибкой, когда блок содержит:
1128 1137
1129* Неизвестный ключ1138* Неизвестный ключ
1130* Распознанный ключ, чьё значение Claude Desktop отклонил бы или молча удалил, такое как пустое значение или неправильно написанный подключ внутри вложенной записи. До v2.1.260 шлюз молча удалял неправильно написанное поле внутри вложенного объекта записи `managedMcpServers` или `orgPluginSettings` вместо отказа при загрузке.1139* Распознанный ключ, значение которого Claude Desktop отклонил бы или молча отбросил, например пустое значение или подключ с опечаткой внутри вложенной записи. До v2.1.260 шлюз молча отбрасывал поле с опечаткой внутри вложенного объекта записи `managedMcpServers` или `orgPluginSettings`, вместо того чтобы завершаться ошибкой при запуске.
1131* Ключ, который шлюз вычисляет сам: соединение вывода, список моделей и реле OTLP. Настройте их через [`upstreams`](#upstreams), [`models`](#models) и раздел [`telemetry`](#telemetry) `forward_to`.1140* Ключ, который шлюз вычисляет сам: подключение для инференса, список моделей и ретрансляция OTLP. Настраивайте их через [`upstreams`](#upstreams), [`models`](#models) и `forward_to` в разделе [`telemetry`](#telemetry).
1132* Устаревший псевдоним текущего ключа. В ошибке загрузки шлюз называет канонический ключ для написания.1141* Устаревший псевдоним текущего ключа. В ошибке запуска шлюз называет канонический ключ, который нужно указать.
1133 1142
1134Если вы используете устаревшее значение или форму записи, такую как запись `managedMcpServers` без `transport`, шлюз запускается и записывает в лог предупреждение, которое называет замену.1143Если вы используете устаревшее значение или форму записи, например запись `managedMcpServers` без `transport`, шлюз запускается и записывает в лог предупреждение с названием замены.
1135 1144
1136До v2.1.232 шлюз принимал фиксированный список из 11 ключей функциональных ворот, таких как `chatTabEnabled` и `disableAutoUpdates`, и отклонял каждый другой ключ при загрузке. До v2.1.227 шлюз также отклонял `chatTabEnabled` и `chatAdvancedFileAnalysisEnabled` при загрузке.1145До v2.1.232 шлюз принимал фиксированный список из 11 ключей-флагов функций, например `chatTabEnabled` и `disableAutoUpdates`, и отклонял все остальные ключи при запуске. До v2.1.227 шлюз также отклонял при запуске `chatTabEnabled` и `chatAdvancedFileAnalysisEnabled`.
1137 1146
1138##### Ключи, которым нужна более поздняя версия шлюза или Claude Desktop1147##### Ключи, требующие более новой версии шлюза или Claude Desktop
1139 1148
1140Шлюз проверяет блок `desktop` против схемы, поставляемой с его установленной версией, как он делает блок `cli`. Чтобы доставить настройку, введённую более новым выпуском Claude Desktop, сначала обновите шлюз. Например, `userPluginMarketplacesEnabled` и `userPluginUploadsEnabled` требуют Claude Code v2.1.260 или позже на сервере шлюза и Claude Desktop 1.37937.0 или позже на машинах членов.1149Шлюз проверяет блок `desktop` по схеме, поставляемой с его установленной версией, так же как блок `cli`. Чтобы доставить настройку, появившуюся в более новом выпуске Claude Desktop, сначала обновите шлюз. Например, `userPluginMarketplacesEnabled` и `userPluginUploadsEnabled` требуют Claude Code v2.1.260 или новее на сервере шлюза и Claude Desktop 1.37937.0 или новее на машинах участников.
1141 1150
1142`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` и `sshClientPath` требуют Claude Code v2.1.281 или позже на сервере шлюза. Так же как значение `required` `microsoftAuthBroker` и поле `continuousAccessEvaluation` записи Microsoft 365 `managedMcpServers`. Выпуски Claude Desktop, которые предшествуют значению `required`, читают его как `disabled`, поэтому установите `required` только после того, как каждый член Claude Desktop его поддерживает. [Справочник управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop перечисляет выпуск, который первым читает каждый ключ.1151`blockReadsOutsideWorkingDirectories`, `disableBypassPermissionsMode`, `configRecheckIntervalMinutes` и `sshClientPath` требуют Claude Code v2.1.281 или новее на сервере шлюза. То же относится к значению `required` для `microsoftAuthBroker` и полю `continuousAccessEvaluation` записи `managedMcpServers` для Microsoft 365. Выпуски Claude Desktop, вышедшие до появления значения `required`, читают его как `disabled`, поэтому задавайте `required` только после того, как Claude Desktop у каждого участника будет его поддерживать. В [справочнике управляемой конфигурации](https://claude.com/docs/third-party/claude-desktop/configuration) Claude Desktop указан выпуск, который первым читает каждый ключ.
1143 1152
1144Если вы установите `orgPluginSettings` в блоке `desktop` политики, шлюз обслуживает его в форме массива, которую читают Claude Desktop 1.15200.0 и позже. Более старые рабочие столы игнорируют массив и не применяют политику инструмента плагина, поэтому обновите членов до 1.15200.0 или позже перед тем, как полагаться на это.1153Если вы задаёте `orgPluginSettings` в блоке `desktop` политики, шлюз отдаёт его в форме массива, которую читает Claude Desktop 1.15200.0 и новее. Более старые десктопы игнорируют массив и не применяют никакой политики инструментов плагинов, поэтому обновите участников до 1.15200.0 или новее, прежде чем на это полагаться.
1145 1154
1146##### Как политика роли наследует базовый блок `desktop`1155##### Как ролевая политика наследует базовый блок `desktop`
1147 1156
1148Шлюз заполняет ключи, которые блок `desktop` политики не устанавливает, из блока `desktop` catch-all `match: {}`, так же как он заполняет блок `cli` политики из базового. Если вы установите `disabledBuiltinTools` или `builtinToolPolicy` как в базовом, так и в политике роли, шлюз сохраняет ограничение базового:1157Шлюз заполняет ключи, которые блок `desktop` политики не задаёт, из блока `desktop` универсальной политики `match: {}`, так же как он заполняет блок `cli` политики из базы. Если вы задаёте `disabledBuiltinTools` или `builtinToolPolicy` и в базе, и в ролевой политике, шлюз сохраняет ограничение базы:
1149 1158
1150* `disabledBuiltinTools`: шлюз использует объединение списка базового и списка политики1159* `disabledBuiltinTools`: шлюз использует объединение списка базы и списка политики
1151* `builtinToolPolicy`: если вы установите инструмент на значение, отличное от `allow`, в базовом, шлюз сохраняет это значение, даже если вы установите `allow` для того же инструмента в политике роли1160* `builtinToolPolicy`: если в базе вы задали для инструмента значение, отличное от `allow`, шлюз сохраняет это значение, даже если в ролевой политике для того же инструмента задано `allow`
1152 1161
1153Для каждого другого ключа, если вы установите его в политике роли, шлюз использует значение политики роли. Шлюз заменяет массив или вложенный объект, такой как `banner`, целиком, поэтому если вы установите `banner.text` в политике роли, шлюз удаляет `banner.backgroundColor` базового.1162Для любого другого ключа, если вы задали его в ролевой политике, шлюз использует значение ролевой политики. Массив или вложенный объект, например `banner`, шлюз заменяет целиком, поэтому если вы задали `banner.text` в ролевой политике, шлюз отбрасывает `banner.backgroundColor` из базы.
1154 1163
1155##### Когда изменение политики достигает Claude Desktop1164##### Когда изменение политики доходит до Claude Desktop
1156 1165
1157После того как вы повторно развернёте шлюз с изменённой политикой, Claude Desktop применяет большинство настроек только при следующем запуске:1166После повторного развёртывания шлюза с изменённой политикой Claude Desktop применяет большинство настроек только при следующем запуске:
1158 1167
1159* **Закрыт**: Claude Desktop получает ответ bootstrap при запуске, поэтому изменение применяется со следующего запуска1168* **Закрыт**: Claude Desktop получает ответ bootstrap при запуске, поэтому изменение применяется со следующего запуска
1160* **Открыт**: Claude Desktop по умолчанию каждые 10 минут проверяет, изменился ли ответ, и применяет несколько настроек без перезапуска. Для остальных, таких как [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled), пользователь видит карточку **Relaunch Claude Desktop** на боковой панели и сохраняет предыдущую конфигурацию, пока не перезапустит приложение. По умолчанию через 24 часа Claude Desktop показывает диалог перезапуска и перезапускается сам после 2 минут бездействия1169* **Открыт**: Claude Desktop по умолчанию каждые 10 минут проверяет, изменился ли ответ, и применяет некоторые настройки без перезапуска. Для остальных, например [`skillCreationEnabled`](https://claude.com/docs/third-party/claude-desktop/configuration#skillcreationenabled), пользователь видит карточку **Relaunch Claude Desktop** на боковой панели и сохраняет прежнюю конфигурацию, пока не перезапустит приложение. По умолчанию через 24 часа Claude Desktop показывает диалоговое окно перезапуска и перезапускается сам после 2 минут бездействия
1161 1170
1162Чтобы сократить эти 24 часа, задайте [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours) в блоке `desktop` политики. Вам нужен Claude Code v2.1.260 или позже на сервере шлюза и Claude Desktop 1.40609.0 или позже на машинах членов. При значении `0` диалог появляется, как только Claude Desktop обнаружит изменение.1171Чтобы сократить эти 24 часа, задайте [`relaunchEnforcementHours`](https://claude.com/docs/third-party/claude-desktop/configuration#relaunchenforcementhours) в блоке `desktop` политики. Нужен Claude Code v2.1.260 или новее на сервере шлюза и Claude Desktop 1.40609.0 или новее на машинах участников. При значении `0` диалоговое окно появляется сразу, как только Claude Desktop обнаруживает изменение.
1163 1172
1164#### Расширенный контекст в Claude Desktop1173#### Расширенный контекст в Claude Desktop
1165 1174
1166Если вы обслуживаете [Claude Desktop](#claude-desktop-overlay) через шлюз, его средство выбора модели предлагает вариант с контекстом 1M для каждой модели из списка, которая может работать с контекстным окном 1M. К ним относятся Claude Opus 4.6 и более поздние версии, Claude Sonnet 4.6 и более поздние версии, а также модели Fable. Этот вариант — вариант модели `[1m]`, описанный в разделе [Расширенный контекст](https://code.claude.com/docs/ru/model-config.md#extended-context). Вам нужен Claude Code v2.1.284 или позже на сервере шлюза.1175Если вы обслуживаете [Claude Desktop](#claude-desktop-overlay) через шлюз, его окно выбора модели предлагает вариант с контекстом 1M для каждой указанной модели, которая может работать с контекстным окном 1M. К ним относятся Claude Opus 4.6 и новее, Claude Sonnet 4.6 и новее, а также модели Fable. Этот вариант — это вариант модели `[1m]`, описанный в разделе [Расширенный контекст](https://code.claude.com/docs/ru/model-config.md#extended-context). Нужен Claude Code v2.1.284 или новее на сервере шлюза.
1167 1176
1168Запись [`models`](#models) не получает варианта 1M, когда:1177Запись [`models`](#models) не получает варианта 1M, когда:
1169 1178
1170* Upstream, который может обслуживать запись, сопоставляет её с моделью без поддержки 1M, включая upstream, к которому шлюз обращается только при failover1179* Upstream, способный обслуживать запись, сопоставляет её с моделью без поддержки 1M, включая upstream, к которому шлюз обращается только при отказе основного
1171* Ни её `id`, ни какое-либо из её значений `upstream_model` не называет модель Claude, например пользовательский псевдоним, направленный на ARN профиля вывода приложения1180* Ни её `id`, ни одно из значений `upstream_model` не называет модель Claude, например пользовательский псевдоним, направленный на ARN профиля инференса приложения
1172 1181
1173Чтобы изменить то, что предлагает средство выбора, используйте один из следующих способов:1182Чтобы изменить то, что предлагает окно выбора, используйте один из следующих способов:
1174 1183
1175* **Начинать пользователей с варианта 1M**: установите `modelPrefer1mContext: true` в блоке `desktop` политики. Пользователи, которые ещё не выбрали модель, начинают с варианта 1M, если он есть у первой модели в списке. Пользователи, которые уже выбрали модель, сохраняют свой выбор.1184* **Запуск пользователей на варианте 1M**: установите `modelPrefer1mContext: true` в блоке `desktop` политики. Пользователи, ещё не выбравшие модель, начинают с варианта 1M, если он есть у первой указанной модели. Пользователи, уже выбравшие модель, сохраняют свой выбор.
1176* **Предложить вариант вручную**: сделайте это, если на вашем сервере шлюза работает версия старше v2.1.284 или запись не называет модель Claude. Укажите модель в `models` дважды: один раз с обычным ID и один раз с добавленным `[1m]`, обе с одинаковой картой `upstream_model`. Claude Desktop показывает эту пару как одну модель с вариантом 1M. Шлюз обслуживает запись `[1m]` без проверки, поэтому добавляйте её только для модели, которую ваши upstream обслуживают с 1M.1185* **Ручное предложение варианта**: сделайте это, если сервер шлюза работает на версии старше v2.1.284 или запись не называет модель Claude. Укажите модель в `models` дважды: один раз с простым ID и один раз с добавленным `[1m]`, оба раза с одной и той же картой `upstream_model`. Claude Desktop показывает пару как одну модель с вариантом 1M. Шлюз отдаёт запись `[1m]` без проверки, поэтому добавляйте её только для модели, которую ваши upstream обслуживают с 1M.
1177 1186
1178Этот пример предлагает вариант вручную для пользовательского псевдонима, направленного на профиль вывода приложения, и начинает новых пользователей с него:1187В этом примере вариант вручную предлагается для пользовательского псевдонима, направленного на профиль инференса приложения, и новые пользователи запускаются на нём:
1179 1188
1180```yaml theme={null}1189```yaml theme={null}
1181models:1190models:
1195 1204
1196##### Удаление варианта 1M1205##### Удаление варианта 1M
1197 1206
1198Чтобы убрать вариант из средства выбора, установите `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"` в блоке `env` под ключом `cli` политики. Если вы также указали запись, чей `id` заканчивается на `[1m]`, шлюз всё равно её обслуживает, поэтому удалите и эту запись.1207Чтобы убрать этот вариант из окна выбора, установите `CLAUDE_CODE_DISABLE_1M_CONTEXT: "1"` в блоке `env` под ключом `cli` политики. Если вы также указали запись, `id` которой заканчивается на `[1m]`, шлюз по-прежнему её отдаёт, поэтому удалите и эту запись.
1199 1208
1200Переменная также достигает терминальных сессий разработчиков, которым соответствует политика. О том, что она там изменяет, смотрите [Расширенный контекст](https://code.claude.com/docs/ru/model-config.md#extended-context).1209Переменная также доходит до сессий терминала разработчиков, подпадающих под политику. О том, что она там меняет, см. [Расширенный контекст](https://code.claude.com/docs/ru/model-config.md#extended-context).
1201 1210
1202#### Приоритет с другими управляемыми источниками1211#### Приоритет относительно других управляемых источников
1203 1212
1204Если устройство также имеет политику, доставленную MDM, или локальный `managed-settings.json`, настройки, доставленные шлюзом, занимают первое место. [Приоритет в управляемом уровне](https://code.claude.com/docs/ru/managed-settings.md#precedence-within-the-managed-tier) на странице управляемых настроек говорит, когда применяются локальные источники, и имеет [ключи, которые Claude Code читает из каждого источника администратора](https://code.claude.com/docs/ru/managed-settings.md#keys-read-from-every-admin-source) независимо от того, какой источник он выбрал, такие как ключи блокировки песочницы, `forceRemoteSettingsRefresh` и объединение `env` для каждой переменной. [`policyHelper`](https://code.claude.com/docs/ru/settings-reference#policyhelper), настроенный в профиле MDM или файле управляемых настроек, работает только когда шлюз не доставляет настройки; запись говорит, что его выход заменяет.1213Если на устройстве также есть политика, доставленная через MDM, или локальный `managed-settings.json`, настройки, доставленные шлюзом, имеют наивысший приоритет. Раздел [Приоритет внутри управляемого уровня](https://code.claude.com/docs/ru/managed-settings.md#precedence-within-the-managed-tier) на странице управляемых настроек объясняет, когда применяются локальные источники, и содержит [ключи, которые Claude Code читает из каждого административного источника](https://code.claude.com/docs/ru/managed-settings.md#keys-read-from-every-admin-source) независимо от того, какой источник он выбрал, например ключи блокировки песочницы, `forceRemoteSettingsRefresh` и объединение `env` по отдельным переменным. [`policyHelper`](https://code.claude.com/docs/ru/settings-reference#policyhelper), настроенный в профиле MDM или файле управляемых настроек, выполняется, только когда шлюз не доставляет никаких настроек; в его описании указано, что заменяет его вывод.
1205 1214
1206Хосты встраивания, такие как [Claude Desktop](https://code.claude.com/docs/ru/desktop.md), могут предоставлять политику через опцию SDK `managedSettings`. [Родительские настройки от хостов встраивания](https://code.claude.com/docs/ru/managed-settings.md#parent-settings-from-embedding-hosts) говорит, когда Claude Code применяет это, и [Ограничение родительских настроек](https://code.claude.com/docs/ru/claude-apps-gateway#restrict-parent-settings) перечисляет, какие настройки в направлении разрешения всё ещё применяются без блокировок `allowManaged*Only`.1215Встраивающие хосты, такие как [Claude Desktop](https://code.claude.com/docs/ru/desktop.md), могут передавать политику через параметр SDK `managedSettings`. Раздел [Родительские настройки от встраивающих хостов](https://code.claude.com/docs/ru/managed-settings.md#parent-settings-from-embedding-hosts) объясняет, когда Claude Code её применяет, а в разделе [Ограничение родительских настроек](https://code.claude.com/docs/ru/claude-apps-gateway#restrict-parent-settings) перечислено, какие разрешающие настройки по-прежнему применяются без блокировок `allowManaged*Only`.
1207 1216
1208Политики шлюза применяются к каждому вызову Claude Code на машине, включая неинтерактивные запуски `claude -p` и сессии, порождённые Agent SDK. Если шлюз недоступен при запуске, сессии, в которые выполнен вход, завершаются с ошибкой, а не работают без своей политики.1217Политики шлюза применяются к каждому вызову Claude Code на машине, включая неинтерактивные запуски `claude -p` и сессии, порождённые Agent SDK. Если шлюз недоступен при запуске, сессии с выполненным входом завершаются с ошибкой, а не работают без своей политики.
1209 1218
1210### `telemetry`1219### `telemetry`
1211 1220
1212CLI отправляет метрики, логи и, когда включено, трассировки на шлюз, который передаёт их дословно каждому настроенному назначению. Экспорты используют OpenTelemetry Protocol (OTLP) по HTTP. Чтобы пропустить реле и заставить сессии экспортировать прямо на ваш сборщик, [назовите сборщик в политике](#export-directly-to-your-collector). Смотрите [Monitoring usage](https://code.claude.com/docs/ru/monitoring-usage.md) для метрик и событий, которые CLI излучает.1221CLI отправляет метрики, логи и, если включено, трассировки на шлюз, который дословно пересылает их в каждое настроенное назначение. Экспорт использует OpenTelemetry Protocol (OTLP) поверх HTTP. Чтобы обойти ретрансляцию и экспортировать данные сессий напрямую в ваш коллектор, [укажите коллектор в политике](#export-directly-to-your-collector). Метрики и события, которые генерирует CLI, описаны в разделе [Мониторинг использования](https://code.claude.com/docs/ru/monitoring-usage.md).
1213 1222
1214В сессиях, вход в которые выполнен через `/login`, CLI помечает каждый экспорт идентификационными данными аутентифицированного пользователя, считанными из JWT, выданного шлюзом: атрибутами `user.id`, `user.email` и `user.groups`. Поэтому атрибуция затрат и использования по разработчикам работает без какой-либо настройки на стороне разработчика. События, которые Claude Code записывает до входа разработчика, [не несут этих данных](https://code.claude.com/docs/ru/monitoring-usage.md#standard-attributes). О том, какой атрибут отражает изменение групп разработчика, см. [Изменение групп во время открытой сессии](#group-changes-during-an-open-session).1223В сессиях с выполненным входом через `/login` CLI помечает каждый экспорт идентичностью аутентифицированного пользователя, считанной из JWT, выданного шлюзом: атрибутами `user.id`, `user.email` и `user.groups`. Поэтому учёт затрат и использования по разработчикам работает без какой-либо настройки на стороне разработчика. События, которые Claude Code записывает в лог до входа разработчика, [не содержат этой идентичности](https://code.claude.com/docs/ru/monitoring-usage.md#standard-attributes). О том, какой атрибут отражает изменение групп разработчика, см. [Изменение групп во время открытой сессии](#group-changes-during-an-open-session).
1215 1224
1216[Claude Desktop](#claude-desktop-overlay) и сессии Cowork, в которые выполнен вход через шлюз, штампуют свою телеметрию с `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом на `user.email` или `user.groups`. `user.groups` — это список групп IdP, разделённый запятыми.1225Сессии [Claude Desktop](#claude-desktop-overlay) и Cowork с выполненным входом через шлюз помечают свою телеметрию атрибутами `user.email` и `user.groups` наряду с `enduser.id`, поэтому вы можете охватить использование терминала, Desktop и Cowork одним запросом по `user.email` или `user.groups`. `user.groups` — список групп IdP, разделённый запятыми.
1217 1226
1218Телеметрия Desktop и Cowork также несёт `enduser.sub`, claim `sub`, который выдаёт ваш поставщик идентификации для пользователя, который остаётся одинаковым, когда электронная почта пользователя изменяется. Терминальные сессии штампуют то же значение под `user.id`, поэтому запрос, который сопоставляет `enduser.sub` с терминальным `user.id`, охватывает использование одного пользователя в терминале, Desktop и Cowork вместе. На экспортах Desktop и Cowork `user.id` — это анонимный идентификатор, а не субъект.1227Телеметрия Desktop и Cowork также содержит `enduser.sub` — claim `sub`, который ваш провайдер идентификации выдаёт пользователю и который не меняется при смене email пользователя. Сессии терминала помечают то же значение как `user.id`, поэтому запрос, сопоставляющий `enduser.sub` с `user.id` терминала, охватывает использование терминала, Desktop и Cowork одним пользователем вместе. В экспортах Desktop и Cowork `user.id` — анонимный идентификатор, а не субъект.
1219 1228
1220Как и все данные OpenTelemetry из Claude Code, эти атрибуты идут только на назначения, которые настраивает ваша организация, никогда на Anthropic.1229Как и все данные OpenTelemetry из Claude Code, эти атрибуты отправляются только в назначения, настроенные вашей организацией, и никогда не отправляются в Anthropic.
1221 1230
1222Если список групп пользователя длиннее 255 символов после процентного кодирования, или имя группы содержит запятую или знак равенства, шлюз не включает `user.groups` в телеметрию Desktop и Cowork этого пользователя, а не усекает его. Терминальные сессии этого пользователя всё ещё несут полный список.1231Если список групп пользователя длиннее 255 символов после процентного кодирования или имя группы содержит запятую или знак равенства, шлюз не включает `user.groups` в телеметрию Desktop и Cowork этого пользователя, а не обрезает список. Сессии терминала этого пользователя по-прежнему содержат полный список.
1223 1232
1224Шлюз не включает `enduser.sub`, когда субъект длиннее 255 символов после процентного кодирования, или содержит пробел, символ вне печатного ASCII, или один из `,` `;` `=` `\` `"` `%`. Телеметрия Desktop и Cowork этого пользователя сохраняет свои другие атрибуты.1233Шлюз не включает `enduser.sub`, если субъект длиннее 255 символов после процентного кодирования или содержит пробел, символ вне печатаемого ASCII или один из символов `,` `;` `=` `\` `"` `%`. Телеметрия Desktop и Cowork этого пользователя сохраняет остальные атрибуты.
1225 1234
1226Вам нужен Claude Code v2.1.265 или позже на сервере шлюза для `user.email` и `user.groups` на телеметрии Desktop и Cowork, и Claude Desktop 1.24012 или позже на машине каждого разработчика для `user.groups`.1235Для `user.email` и `user.groups` в телеметрии Desktop и Cowork нужен Claude Code v2.1.265 или новее на сервере шлюза, а для `user.groups` — Claude Desktop 1.24012 или новее на машине каждого разработчика.
1227 1236
1228Вам нужен Claude Code v2.1.274 или позже на сервере шлюза для `enduser.sub`.1237Для `enduser.sub` нужен Claude Code v2.1.274 или новее на сервере шлюза.
1229 1238
1230```yaml theme={null}1239```yaml theme={null}
1231telemetry:1240telemetry:
1244 1253
1245> [!WARNING]1254> [!WARNING]
1246>1255>
1247> Каждое назначение согласует `metrics`, `logs` и `traces` независимо, и по умолчанию только метрики. Сигналы отличаются по чувствительности:1256> Каждое назначение независимо включает `metrics`, `logs` и `traces`, а по умолчанию — только метрики. Сигналы различаются по чувствительности:
1248>1257>
1249> * **Metrics**: совокупные счётчики, такие как количество токенов, количество запросов и задержка1258> * **Метрики**: агрегированные счётчики, такие как количество токенов, количество запросов и задержка
1250> * **Logs и traces**: могут нести полные команды Bash, входные данные инструмента и пути файлов, охватывая всё, что делает Claude Code на машине разработчика1259> * **Логи и трассировки**: могут содержать полные команды Bash, входные данные инструментов и пути к файлам, охватывая всё, что Claude Code делает на машине разработчика
1251>1260>
1252> Включайте логи и трассировки только на назначениях с элементами управления доступом и политикой хранения, которые данные оправдывают.1261> Включайте логи и трассировки только для назначений с теми средствами контроля доступа и политикой хранения, которых требуют эти данные.
1253 1262
1254Каждый URL `forward_to` должен использовать `https://`, с одним исключением для сборщика на собственном интерфейсе обратной связи шлюза:1263Каждый URL `forward_to` должен использовать `https://`, за одним исключением — для коллектора на собственном loopback-интерфейсе шлюза:
1255 1264
1256* `http://localhost:<port>` проходит проверку конфигурации, но [защита SSRF](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#threat-model-summary) блокирует каждый экспорт с `ECONNREFUSED_SSRF`, если вы не установите `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` в окружении шлюза1265* `http://localhost:<port>` проходит проверку конфигурации, но [защита от SSRF](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#threat-model-summary) блокирует каждый экспорт с `ECONNREFUSED_SSRF`, если вы не установите `CLAUDE_GATEWAY_ALLOW_LOOPBACK=1` в окружении шлюза
1257* `http://127.0.0.1:<port>` или `http://[::1]:<port>` не запускается, если эта переменная не установлена1266* `http://127.0.0.1:<port>` или `http://[::1]:<port>` приводят к ошибке запуска, если эта переменная не установлена
1258 1267
1259Для сборщика в кластере выставьте его по HTTPS на его собственный внутренний адрес, или запустите его как sidecar с установленной переменной.1268Для коллектора внутри кластера откройте к нему доступ по HTTPS по его собственному внутреннему адресу или запустите его как sidecar с установленной переменной.
1260 1269
1261Когда установлен `HTTPS_PROXY`, шлюз отправляет экспорты через этот прокси.1270Когда задан `HTTPS_PROXY`, шлюз отправляет экспорты через этот прокси.
1262 1271
1263Чтобы достичь внутреннего сборщика напрямую, добавьте его в `NO_PROXY` по имени хоста или по домену с ведущей точкой, такой как `.internal.example.com`, что требует Claude Code v2.1.277 или позже на сервере шлюза. Убедитесь, что шлюз может достичь сборщика без прокси. Запись без ведущей точки соответствует только этому точному имени, а не именам под ним. Диапазоны CIDR не соответствуют.1272Чтобы обращаться к внутреннему коллектору напрямую, добавьте его в `NO_PROXY` по имени хоста или по домену с начальной точкой, например `.internal.example.com`, что требует Claude Code v2.1.277 или новее на сервере шлюза. Убедитесь, что шлюз может достучаться до коллектора без прокси. Запись без начальной точки совпадает только с этим точным именем, а не с именами под ним. Диапазоны CIDR не сопоставляются.
1264 1273
1265С включённым [прокси-только исходящим соединением](#proxy-only-egress), разрешите сборщик в прокси вместо этого, так как любая запись `NO_PROXY` отключает прокси-только исходящее соединение.1274При включённом [исходящем трафике только через прокси](#proxy-only-egress) вместо этого разрешите коллектор в прокси, поскольку любая запись `NO_PROXY` отключает режим исходящего трафика только через прокси.
1266 1275
1267Телеметрия отключена в CLI по умолчанию. Когда вы устанавливаете оба `telemetry.forward_to` и `listen.public_url`, шлюз включает её для подключённых клиентов, отправляя шесть переменных окружения через `/managed/settings`:1276По умолчанию телеметрия в CLI отключена. Когда вы задаёте и `telemetry.forward_to`, и `listen.public_url`, шлюз включает её для подключённых клиентов, передавая шесть переменных окружения через `/managed/settings`:
1268 1277
1269* `CLAUDE_CODE_ENABLE_TELEMETRY=1`1278* `CLAUDE_CODE_ENABLE_TELEMETRY=1`
1270* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` и `OTEL_TRACES_EXPORTER`, каждый установлен на `otlp`, если хотя бы одно назначение `forward_to` включает этот сигнал, и на `none` в противном случае1279* `OTEL_METRICS_EXPORTER`, `OTEL_LOGS_EXPORTER` и `OTEL_TRACES_EXPORTER`, каждая из которых имеет значение `otlp`, если хотя бы одно назначение `forward_to` включает этот сигнал, и `none` в противном случае
1271* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`1280* `OTEL_EXPORTER_OTLP_ENDPOINT=<public_url>`
1272* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`1281* `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`
1273 1282
1274Когда вы [добавляете свои собственные метки](#add-your-own-labels), шлюз также отправляет `OTEL_RESOURCE_ATTRIBUTES`.1283Когда вы [добавляете собственные метки](#add-your-own-labels), шлюз также передаёт `OTEL_RESOURCE_ATTRIBUTES`.
1275 1284
1276До Claude Code v2.1.265 на сервере шлюза шлюз отправлял все три селектора экспортера как `otlp`, включая для сигналов, которые ни одно назначение не включило.1285До Claude Code v2.1.265 на сервере шлюза шлюз передавал все три селектора экспортёров со значением `otlp`, в том числе для сигналов, которые не включало ни одно назначение.
1277 1286
1278Отправленный эндпоинт строится из публичного URL, поэтому метрики и логи не требуют конфигурации OTEL от разработчиков или политик.1287Передаваемый эндпоинт строится из публичного URL, поэтому метрики и логи не требуют настройки OTEL ни от разработчиков, ни в политиках.
1279 1288
1280Разработчики, выполнившие вход через `/login`, не могут перенаправить экспорты с собственной конфигурацией OTEL:1289Разработчики, выполнившие вход через `/login`, не могут перенаправить экспорт с помощью собственной конфигурации OTEL:
1281 1290
1282* **Локально установленные переменные**: Claude Code применяет отправленные переменные на управляемом уровне, поэтому каждая переопределяет значение, которое разработчик устанавливает для неё локально.1291* **Локально заданные переменные**: Claude Code применяет переданные переменные на управляемом уровне, поэтому каждая из них переопределяет значение, которое разработчик задаёт для неё локально.
1283* **Локально настроенные эндпоинты**: с включённым экспортом OTLP/HTTP CLI игнорирует любой локально настроенный эндпоинт, независимо от того, отправил ли шлюз переменные телеметрии. Его экспорты идут на шлюз, если политика не [называет ваш сборщик эндпоинтом](#export-directly-to-your-collector).1292* **Локально настроенные эндпоинты**: при включённом экспорте OTLP/HTTP CLI игнорирует любой локально настроенный эндпоинт, независимо от того, передал ли шлюз переменные телеметрии. Его экспорт идёт на шлюз, если политика не [указывает ваш коллектор в качестве эндпоинта](#export-directly-to-your-collector).
1284 1293
1285Без назначения `forward_to` для сигнала шлюз принимает и отбрасывает его. Если разработчики уже экспортируют телеметрию Claude Code на один из ваших сборщиков, добавьте его как назначение `forward_to`, с включёнными логами или трассировками, если они их экспортируют, поэтому он продолжает получать их данные после входа. Чтобы пропустить реле вместо этого, [назовите сборщик в политике](#export-directly-to-your-collector).1294Если для сигнала нет назначения `forward_to`, шлюз принимает и отбрасывает его. Если разработчики уже экспортируют телеметрию Claude Code в один из ваших коллекторов, добавьте его как назначение `forward_to`, включив логи или трассировки, если они их экспортируют, чтобы он продолжал получать их данные после входа. Чтобы вместо этого обойти ретрансляцию, [укажите коллектор в политике](#export-directly-to-your-collector).
1286 1295
1287[Traces](https://code.claude.com/docs/ru/monitoring-usage.md#traces-beta) также требуют `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` на каждом клиенте. Установите его в блоке `env` управляемой политики, так как шлюз его не отправляет. Разработчики одобряют его в том же [диалоге одобрения безопасности](#managed), который уже вызывает отправленный эндпоинт.1296[Трассировки](https://code.claude.com/docs/ru/monitoring-usage.md#traces-beta) также требуют `CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1` на каждом клиенте. Задайте её в блоке `env` управляемой политики, поскольку шлюз её не передаёт. Разработчики подтверждают её в том же [диалоговом окне подтверждения безопасности](#managed), которое уже вызывает переданный эндпоинт.
1288 1297
1289Установите его на `1` только в политиках, чьи группы вы хотите отследить. Политика, которая его не устанавливает, наследует значение из вашей политики catch-all `match: {}`, если эта политика устанавливает одно, согласно [правилам объединения](#managed). Чтобы помешать клиентам группы отправлять трассировки, даже когда разработчик устанавливает переменную локально, установите её на `0` в политике этой группы.1298Устанавливайте её в `1` только в тех политиках, группы которых вы хотите трассировать. Политика, которая её не задаёт, наследует значение от вашей универсальной политики `match: {}`, если та его задаёт, согласно [правилам объединения](#managed). Чтобы клиенты группы не отправляли трассировки, даже если разработчик задаёт переменную локально, установите её в `0` в политике этой группы.
1290 1299
1291Оба кодирования OTLP protobuf и JSON передаются, и любой совместимый с OpenTelemetry бэкенд работает как назначение.1300Пересылаются обе кодировки OTLP — protobuf и JSON, и в качестве назначения подходит любой бэкенд, совместимый с OpenTelemetry.
1292 1301
1293#### Отправка кумулятивных метрик1302#### Отправка кумулятивных метрик
1294 1303
1295Если ваш коллектор принимает только кумулятивные метрики, задайте [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/ru/monitoring-usage#common-configuration-variables) равным `cumulative`. По умолчанию Claude Code отправляет дельта-метрики, а шлюз передаёт их без преобразования. Задайте переменную там, где её читает каждый тип сессий:1304Если ваш коллектор принимает только кумулятивные метрики, установите [`OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE`](https://code.claude.com/docs/ru/monitoring-usage#common-configuration-variables) в `cumulative`. По умолчанию Claude Code отправляет дельта-метрики, а шлюз пересылает их без преобразования. Задайте переменную там, где её читает каждый вид сессий:
1296 1305
1297* **Терминальные сессии**: в блоке `env` под [ключом `cli` или `code`](#choose-cli-or-code) политики1306* **Сессии терминала**: в блоке `env` под [ключом `cli` или `code`](#choose-cli-or-code) политики
1298* **Сессии Cowork, которые [выполняются на машине пользователя](https://code.claude.com/docs/ru/managed-settings.md#where-and-when-a-policy-applies)**: в блоке `env` [клиентских управляемых настроек](#client-side-managed-settings) на этой машине1307* **Сессии Cowork, которые [выполняются на машине пользователя](https://code.claude.com/docs/ru/managed-settings.md#where-and-when-a-policy-applies)**: в блоке `env` [управляемых настроек на стороне клиента](#client-side-managed-settings) на этой машине
1299* **Сессии вкладки Code под политикой `code`**: в блоке `env` политики, когда выполнены [условия применения настроек `code`](#apply-code-settings-in-the-code-tab)1308* **Сессии вкладки Code под политикой `code`**: в блоке `env` политики, как только вы выполните [условия применения настроек `code`](#apply-code-settings-in-the-code-tab)
1300* **Сессии вкладки Code под политикой `cli`**: в блоке `env` клиентских управляемых настроек на машине, на которой выполняется сессия. При работе через SSH это удалённый хост.1309* **Сессии вкладки Code под политикой `cli`**: в блоке `env` управляемых настроек на стороне клиента на машине, которая выполняет сессию. При работе через SSH это удалённый хост.
1301 1310
1302Если вы добавляете переменную в управляемые настройки машины, также задайте [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/ru/claude-apps-gateway#set-the-opt-in) в источнике с наивысшим приоритетом на этой машине. Без этого сессии Cowork и сессии вкладки Code под политикой `cli` работают без списка разрешённых доменов исходящего трафика и другой политики, которую Claude Desktop передаёт им как родительские настройки.1311Если вы добавляете переменную в управляемые настройки машины, также установите [`parentSettingsBehavior: "merge"`](https://code.claude.com/docs/ru/claude-apps-gateway#set-the-opt-in) в источнике с наивысшим приоритетом на этой машине. Без этого сессии Cowork и сессии вкладки Code под политикой `cli` работают без списка разрешённых адресов для исходящего трафика и других политик, которые Claude Desktop передаёт им как родительские настройки.
1303 1312
1304#### Добавьте свои собственные метки1313#### Добавление собственных меток
1305 1314
1306Чтобы поместить фиксированные метки, такие как `service.namespace` или `deployment.environment.name`, на телеметрию сессий, в которые выполнен вход через шлюз, установите `telemetry.resource_attributes`. Каждая метка — это атрибут ресурса OpenTelemetry, и каждое назначение получает одинаковые метки.1315Чтобы добавить фиксированные метки, например `service.namespace` или `deployment.environment.name`, к телеметрии сессий с выполненным входом через шлюз, задайте `telemetry.resource_attributes`. Каждая метка — это атрибут ресурса OpenTelemetry, и каждое назначение получает одни и те же метки.
1307 1316
1308Сессии получают метки только когда вы также устанавливаете `telemetry.forward_to` и `listen.public_url`. Этот пример добавляет две метки:1317Сессии получают метки, только если вы также задали `telemetry.forward_to` и `listen.public_url`. В этом примере добавляются две метки:
1309 1318
1310```yaml theme={null}1319```yaml theme={null}
1311telemetry:1320telemetry:
1316 deployment.environment.name: prod1325 deployment.environment.name: prod
1317```1326```
1318 1327
1319Шлюз отказывается запускаться, когда метка нарушает одно из этих правил, и ошибка запуска называет метку:1328Шлюз отказывается запускаться, если метка нарушает одно из следующих правил, и ошибка запуска называет эту метку:
1320 1329
1321* Имена используют только буквы, цифры, `.`, `_` и `-`1330* Имена содержат только буквы, цифры, `.`, `_` и `-`
1322* Имена не зарезервированы. Сравниваемые в любом регистре букв, зарезервированные имена — это всё, что начинается с `user.`, `enduser.` или `identity.`, плюс `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version` и `wsl.version`1331* Имена не являются зарезервированными. Без учёта регистра зарезервированы все имена, начинающиеся с `user.`, `enduser.` или `identity.`, а также `service.name`, `service.version`, `claude.deployment_mode`, `host.arch`, `os.type`, `os.version` и `wsl.version`
1323* Значения — это непустой печатный ASCII без пробела и ни один из `, ; = \ " %`1332* Значения — непустой печатаемый ASCII без пробелов и без символов `, ; = \ " %`
1324* Значения не более 255 символов, как шлюз их считает после процентного кодирования, поэтому `/`, `:` и `@` каждый считаются как три1333* Значения содержат не более 255 символов в подсчёте шлюза после процентного кодирования, поэтому `/`, `:` и `@` считаются за три символа каждый
1325* Значения — это текст, поэтому заключайте в кавычки число, `true` или `false`1334* Значения являются текстом, поэтому заключайте в кавычки числа, `true` или `false`
1326 1335
1327Вам нужен Claude Code v2.1.281 или позже на сервере шлюза, чтобы установить `telemetry.resource_attributes`. Более ранний шлюз отказывается запускаться, когда находит ключ. Обновите каждую реплику перед добавлением ключа и удалите ключ перед откатом на более раннюю версию.1336Чтобы задать `telemetry.resource_attributes`, нужен Claude Code v2.1.281 или новее на сервере шлюза. Более ранний шлюз отказывается запускаться, обнаружив этот ключ. Обновите все реплики, прежде чем добавлять ключ, и удалите ключ, прежде чем откатываться на более раннюю версию.
1328 1337
1329Терминальные сессии, в которые выполнен вход через `/login`, получают метки как `OTEL_RESOURCE_ATTRIBUTES`, отправленные с другими [переменными телеметрии](#telemetry). Если вы установите `OTEL_RESOURCE_ATTRIBUTES` в блоке `env` политики, терминальные сессии, которым соответствует эта политика, получают это значение вместо меток. Claude Desktop получает метки от шлюза наряду с `user.email` и другими атрибутами идентификации.1338Сессии терминала с выполненным входом через `/login` получают метки в виде `OTEL_RESOURCE_ATTRIBUTES`, передаваемой вместе с другими [переменными телеметрии](#telemetry). Если вы задаёте `OTEL_RESOURCE_ATTRIBUTES` в блоке `env` политики, сессии терминала, подпадающие под эту политику, получают это значение вместо меток. Claude Desktop получает метки от шлюза вместе с `user.email` и другими атрибутами идентичности.
1330 1339
1331Claude Code также копирует каждую метку на каждую точку данных метрики, поэтому вы можете фильтровать метрики по ней в бэкенде, который не индексирует атрибуты ресурса. Чтобы отключить эту копию, смотрите [Metrics cardinality control](https://code.claude.com/docs/ru/monitoring-usage.md#metrics-cardinality-control).1340Claude Code также копирует каждую метку в каждую точку данных метрики, чтобы вы могли фильтровать по ней метрики в бэкенде, который не индексирует атрибуты ресурса. Чтобы отключить это копирование, см. [Управление кардинальностью метрик](https://code.claude.com/docs/ru/monitoring-usage.md#metrics-cardinality-control).
1332 1341
1333#### Изменение групп во время открытой сессии1342#### Изменение групп во время открытой сессии
1334 1343
1335Сессии терминала помещают `user.groups` в ресурс OTLP и ещё раз в каждую точку данных метрики и каждое событие. Если группы разработчика меняются во время открытой сессии, точки данных и события для использования после следующего [тихого обновления](#session) несут новые группы. Ресурс сохраняет старые группы, пока разработчик не перезапустит Claude Code, поэтому группируйте по атрибуту точки данных или события.1344Сессии терминала помещают `user.groups` в ресурс OTLP и повторно в каждую точку данных метрики и каждое событие. Если группы разработчика меняются, пока сессия открыта, точки данных и события для использования после следующего [фонового обновления](#session) содержат новые группы. Ресурс сохраняет старые группы, пока разработчик не перезапустит Claude Code, поэтому группируйте по атрибуту в точке данных или событии.
1336 1345
1337Если вы включите `resource_to_telemetry_conversion` в экспортёре Prometheus remote write коллектора OpenTelemetry, экспортёр заменяет `user.groups` каждой точки данных значением из ресурса, поэтому каждая точка данных показывает старые группы. Чтобы сохранить значение точки данных, удалите `user.groups` из ресурса перед этим экспортёром.1346Если вы включаете `resource_to_telemetry_conversion` в экспортёре Prometheus remote write в OpenTelemetry Collector, экспортёр заменяет `user.groups` каждой точки данных значением из ресурса, поэтому каждая точка данных показывает старые группы. Чтобы сохранить значение точки данных, удалите `user.groups` из ресурса до этого экспортёра.
1338 1347
1339Этот процессор `resource` коллектора OpenTelemetry удаляет атрибут в пайплайнах, в которых он указан:1348Этот процессор `resource` OpenTelemetry Collector удаляет атрибут в конвейерах, где он указан:
1340 1349
1341```yaml theme={null}1350```yaml theme={null}
1342processors:1351processors:
1346 action: delete1355 action: delete
1347```1356```
1348 1357
1349После добавления `resource/drop-user-groups` в `processors` пайплайна метрик каждый ряд несёт метку `user_groups` из собственной точки данных.1358После добавления `resource/drop-user-groups` в `processors` конвейера метрик каждый ряд содержит метку `user_groups` из собственной точки данных.
1350 1359
1351#### Экспорт прямо на ваш сборщик1360#### Экспорт напрямую в ваш коллектор
1352 1361
1353Чтобы сессии, в которые выполнен вход через `/login`, отправляли телеметрию прямо на ваш сборщик вместо реле, установите `OTEL_EXPORTER_OTLP_ENDPOINT` на базовый URL `https://` вашего сборщика в блоке `env` [управляемой политики](#managed). Claude Code добавляет `/v1/metrics`, `/v1/logs` или `/v1/traces` к URL, который вы устанавливаете, такой как `https://otel-collector.example.com:4318`, и экспортирует каждый сигнал туда по OTLP/HTTP. Требует Claude Code v2.1.265 или позже на каждой машине разработчика. Более ранние клиенты экспортируют через реле.1362Чтобы сессии, в которые выполнен вход через `/login`, отправляли телеметрию напрямую в ваш коллектор, а не через ретранслятор, задайте `OTEL_EXPORTER_OTLP_ENDPOINT` как базовый URL коллектора с `https://` в блоке `env` [управляемой политики](#managed). Claude Code добавляет `/v1/metrics`, `/v1/logs` или `/v1/traces` к заданному вами URL, например `https://otel-collector.example.com:4318`, и экспортирует туда каждый сигнал по OTLP/HTTP. Требуется Claude Code v2.1.265 или новее на машине каждого разработчика. Более ранние клиенты экспортируют через ретранслятор.
1354 1363
1355Чтобы аутентифицироваться на сборщике, установите `OTEL_EXPORTER_OTLP_HEADERS` в том же блоке `env`. Сессии никогда не отправляют токен сессии шлюза разработчика на сборщик, названный таким образом.1364Для аутентификации в коллекторе задайте `OTEL_EXPORTER_OTLP_HEADERS` в том же блоке `env`. Сессии никогда не отправляют токен сессии шлюза разработчика в коллектор, указанный таким образом.
1356 1365
1357Когда вы добавляете или изменяете этот эндпоинт в политике, Claude Code просит каждого разработчика одобрить его в [диалоге одобрения безопасности](#managed) перед применением в интерактивной сессии.1366Когда вы добавляете или изменяете этот эндпоинт в политике, Claude Code просит каждого разработчика подтвердить его в [диалоге подтверждения безопасности](#managed), прежде чем применить его в интерактивной сессии.
1358 1367
1359Claude Code проверяет эндпоинт перед экспортом сигнала напрямую и сохраняет этот сигнал на реле, когда проверка не удаётся. Проверки включают:1368Claude Code проверяет эндпоинт перед тем, как экспортировать сигнал напрямую, и оставляет этот сигнал на ретрансляторе, если проверка не пройдена. Проверки включают:
1360 1369
1361* Эндпоинт поступает от самого шлюза. Если вы установите ту же переменную в профиле MDM или локальном `managed-settings.json`, экспорты остаются на реле.1370* Эндпоинт поступает от самого шлюза. Если вы задаёте ту же переменную в профиле MDM или в локальном `managed-settings.json`, экспорт остаётся на ретрансляторе.
1362* URL использует `https://`, или `http://` на адрес обратной связи1371* URL использует `https://` или `http://` к loopback-адресу
1363* URL разрешается на путь, заканчивающийся на `/v1/<signal>`, без запроса или фрагмента. Claude Code формирует этот путь сам из общей переменной. Он использует переменную для каждого сигнала, такую как `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, как написано, поэтому включите полный путь туда.1372* URL разрешается в путь, заканчивающийся на `/v1/<signal>`, без строки запроса и фрагмента. Claude Code сам строит этот путь из общей переменной. Переменную для отдельного сигнала, такую как `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`, он использует как есть, поэтому указывайте в ней полный путь.
1364* URL не является собственным хостом шлюза. Эндпоинт, адресованный шлюзу, сохраняет путь реле и его токен сессии.1373* URL не является собственным хостом шлюза. Эндпоинт, адресованный шлюзу, сохраняет путь через ретранслятор и его токен сессии.
1365* Ни вы, ни разработчик не настроили [`otelHeadersHelper`](https://code.claude.com/docs/ru/settings-reference#otelheadershelper) ни в каком источнике настроек. С настроенным помощником каждый сигнал остаётся на реле.1374* Ни вы, ни разработчик не настроили [`otelHeadersHelper`](https://code.claude.com/docs/ru/settings-reference#otelheadershelper) ни в одном источнике настроек. Если helper настроен, все сигналы остаются на ретрансляторе.
1366 1375
1367Эндпоинт, который вы называете, изменяет только то, куда идут экспорты. Вы всё ещё выбираете, какие сигналы экспортируются вообще, с селекторами `OTEL_*_EXPORTER`.1376Указанный вами эндпоинт меняет только то, куда направляется экспорт. Какие сигналы вообще экспортируются, вы по-прежнему выбираете с помощью селекторов `OTEL_*_EXPORTER`.
1368 1377
1369Эндпоинт сам по себе не включает экспорт, поэтому также установите переменные, которые это делают, если шлюз их уже не отправляет:1378Сам по себе эндпоинт не включает экспорт, поэтому также задайте переменные, которые это делают, если шлюз ещё не передаёт их:
1370 1379
1371* Если шлюз уже [отправляет переменные телеметрии](#telemetry), они охватывают включение, селекторы и протокол, и ваш явный эндпоинт переопределяет отправленное значение `<public_url>`. Установите селектор `OTEL_*_EXPORTER` на `otlp` сами только для сигнала, который ни одно назначение `forward_to` не включает.1380* Если шлюз уже [передаёт переменные телеметрии](#telemetry), они покрывают включение, селекторы и протокол, а ваш явно заданный эндпоинт переопределяет переданное значение `<public_url>`. Устанавливайте селектор `OTEL_*_EXPORTER` в `otlp` самостоятельно только для сигнала, который не включает ни одно назначение `forward_to`.
1372* Если нет, также установите `CLAUDE_CODE_ENABLE_TELEMETRY=1`, селекторы `OTEL_*_EXPORTER` и `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.1381* Если нет, также задайте `CLAUDE_CODE_ENABLE_TELEMETRY=1`, селекторы `OTEL_*_EXPORTER` и `OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf`.
1373 1382
1374Когда разработчик выходит, или входит на другой шлюз, экспорты на сборщик останавливаются и Claude Code удаляет каждый оставшийся пакет, а не отправляет его.1383Когда разработчик выходит из системы или входит в другой шлюз, экспорт в коллектор прекращается, и Claude Code отбрасывает каждый оставшийся пакет вместо его отправки.
1375 1384
1376#### Когда назначение не удаётся1385#### Когда назначение недоступно
1377 1386
1378Шлюз не буферизирует, не повторяет и не хранит телеметрию, поэтому он удаляет экспорт, который не достигает назначения, а не доставляет его поздно. Каждое назначение успешно или не удаётся само по себе, и экспортирующий клиент получает ответ об успехе в любом случае, поэтому неудачная доставка появляется только в логе шлюза.1387Шлюз не буферизует, не выполняет повторных попыток и не хранит телеметрию, поэтому он отбрасывает экспорт, который не достиг назначения, а не доставляет его с опозданием. Каждое назначение завершается успехом или неудачей независимо, и экспортирующий клиент в любом случае получает успешный ответ, поэтому неудачная доставка видна только в логе шлюза.
1379 1388
1380После пяти последовательных неудачных доставок на назначение шлюз приостанавливает пересылку на него на 30-секундные интервалы, записывая в лог каждую паузу, пока доставка не удаётся. Любой ответ об ошибке, таймаут или ошибка соединения считаются неудачной доставкой, кроме `400`, `413`, `415`, `422` и `431`, которые означают, что сборщик отклонил полезную нагрузку этого экспорта как неправильно сформированную или слишком большую.1389После пяти последовательных неудачных доставок в назначение шлюз приостанавливает пересылку в него периодами по 30 секунд, записывая каждую паузу в лог, пока доставка не завершится успешно. Неудачной доставкой считается любой ответ с ошибкой, таймаут или ошибка соединения, кроме `400`, `413`, `415`, `422` и `431`, которые означают, что коллектор отклонил данные этого экспорта как некорректные или слишком большие.
1381 1390
1382Отклонённая полезная нагрузка ни продвигает, ни сбрасывает счётчик отказов: шлюз продолжает пересылку на назначение и записывает в лог предупреждение, называющее его и статус, при первом отказе назначения и каждом сотом после.1391Отклонённые данные не увеличивают и не сбрасывают счётчик неудач: шлюз продолжает пересылку в назначение и записывает в лог предупреждение с указанием назначения и статуса при первом отклонении этим назначением и при каждом сотом после него.
1383 1392
1384### Настройка HTTP1393### Настройка HTTP
1385 1394
1386Четыре опциональных блока верхнего уровня, `access_control`, `limits`, `timeouts` и `rate_limits`, настраивают HTTP поверхность. Значения по умолчанию подходят для большинства развёртываний.1395Четыре необязательных блока верхнего уровня, `access_control`, `limits`, `timeouts` и `rate_limits`, настраивают HTTP-интерфейс. Значения по умолчанию подходят для большинства развёртываний.
1387 1396
1388| Блок | Ключ | По умолчанию | Описание |1397| Блок | Ключ | По умолчанию | Описание |
1389| - | - | - | - |1398| - | - | - | - |
1390| `access_control` | `allow_cidrs` / `deny_cidrs` | пусто | Входящий IP разрешить/запретить по адресу клиента, после разрешения `trusted_proxies`. `deny_cidrs` проверяется первым; клиент, которому он соответствует, отклоняется, даже если `allow_cidrs` также соответствует. Если `allow_cidrs` не пусто, шлюз по умолчанию отклоняет. `/healthz` и `/readyz` исключены из `allow_cidrs`. Когда доверенный прокси отправляет запись `X-Forwarded-For`, которая не является IP адресом, реальный клиент неизвестен и шлюз один раз записывает в лог предупреждение, называя, что проверить. Где применяется либо список, он отклоняет запрос с `403` и причиной аудита `xff_unparseable`. Где ни один не применяется, он обслуживает запрос и использует собственный адрес прокси как IP клиента для ограничений частоты запросов на IP и аудита. |1399| `access_control` | `allow_cidrs` / `deny_cidrs` | пусто | Разрешение/запрет входящих IP по адресу клиента после разрешения `trusted_proxies`. `deny_cidrs` проверяется первым; клиент, совпавший с ним, отклоняется, даже если совпадает и с `allow_cidrs`. Если `allow_cidrs` не пуст, шлюз по умолчанию запрещает доступ. `/healthz` и `/readyz` освобождены от `allow_cidrs`. Когда доверенный прокси отправляет в `X-Forwarded-For` запись, не являющуюся IP-адресом, реальный клиент неизвестен, и шлюз один раз записывает в лог предупреждение с указанием того, что нужно проверить. Если к запросу применяется любой из списков, шлюз отклоняет его с `403` и причиной аудита `xff_unparseable`. Если не применяется ни один, шлюз обслуживает запрос и использует собственный адрес прокси как IP клиента для ограничений частоты запросов по IP и аудита. |
1391| `limits` | `max_request_bytes` | 32 MiB | Максимальный размер входящего тела запроса; запросы большего размера получают `413` перед буферизацией тела. Поднимите для больших запросов файлов или изображений. |1400| `limits` | `max_request_bytes` | 32 MiB | Максимальный размер тела входящего запроса; слишком большие запросы получают `413` до буферизации тела. Увеличьте для запросов с большими файлами или изображениями. |
1392| `limits` | `max_request_header_bytes` | не установлено | Снижает установленный в шлюзе лимит в 256 KiB на общий размер заголовков запроса. Запрос сверх лимита возвращает `431`, а значение выше 256 KiB ни на что не влияет. Если разработчики получают `431` после входа, смотрите [Слишком большие заголовки запроса после входа](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in). |1401| `limits` | `max_request_header_bytes` | не задано | Снижает установленный в шлюзе лимит 256 KiB на общий размер заголовков запроса. Запрос сверх лимита возвращает `431`, а значение выше 256 KiB не действует. Если разработчики получают `431` после входа, см. [Слишком большие заголовки запроса после входа](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#request-headers-too-large-after-sign-in). |
1393| `limits` | `max_url_length` | не установлено | Когда установлено, слишком длинный URL возвращает `414` |1402| `limits` | `max_url_length` | не задано | Если задано, слишком длинный URL возвращает `414` |
1394| `timeouts` | `upstream_ttfb_ms` | 120000 | Максимальное ожидание заголовков ответа upstream (время до первого байта). Тело ответа затем передаётся потоком без ограничения по общему времени. Применяется к прямому пути upstream Anthropic; на каждом другом поставщике шлюз ждёт до одного часа, пока ответ не начнётся. |1403| `timeouts` | `upstream_ttfb_ms` | 120000 | Максимальное время ожидания заголовков ответа вышестоящего сервера (время до первого байта). Затем тело ответа передаётся потоком без ограничения по общему времени. Применяется к прямому пути к вышестоящему серверу Anthropic; для всех остальных провайдеров шлюз ждёт начала ответа до одного часа. |
1395| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Ограничение частоты запросов на IP для неаутентифицированного эндпоинта авторизации устройства. Поднимите для большой организации за общим исходящим IP или NAT. [Large rollouts](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#large-rollouts) показывает, как подобрать его размер. Эти ограничения применяются только к потоку входа с кодом устройства, а не к выводу `/v1/messages`. Смотрите [User-code brute-force resistance](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#user-code-brute-force-resistance). |1404| `rate_limits` | `device_authorization.max` / `.window_seconds` | 30 / 600 | Ограничение частоты запросов по IP для неаутентифицированного эндпоинта авторизации устройства. Увеличьте для крупной организации за общим исходящим IP или NAT. В разделе [Крупные развёртывания](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#large-rollouts) показано, как подобрать значение. Эти лимиты применяются только к процессу входа с device grant, а не к инференсу `/v1/messages`. См. [Устойчивость пользовательского кода к перебору](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#user-code-brute-force-resistance). |
1396| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Ограничение частоты запросов на IP для отправок `user_code` в `/device`. Это то, что не даёт кому-либо угадать код другого разработчика. [Large rollouts](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#large-rollouts) показывает, как далеко его поднять. |1405| `rate_limits` | `device_verify.max` / `.window_seconds` | 10 / 600 | Ограничение частоты запросов по IP для отправки `user_code` на `/device`. Именно оно не даёт кому-либо подобрать код другого разработчика. В разделе [Крупные развёртывания](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#large-rollouts) показано, насколько его увеличить. |
1397 1406
1398Если вы оставите оба списка `access_control` пустыми, что является значением по умолчанию, шлюз обслуживает любой адрес клиента, поэтому только ваша сеть ограничивает, кто может его достичь. Это важно, потому что шлюз может отправлять [управляемые настройки](#managed), которые запускают команды на машинах разработчиков.1407Если оставить оба списка `access_control` пустыми, как по умолчанию, шлюз обслуживает любой адрес клиента, поэтому ограничивать круг тех, кто может к нему обратиться, будет только ваша сеть. Это важно, поскольку шлюз может передавать [управляемые настройки](#managed), которые выполняют команды на машинах разработчиков.
1399 1408
1400Пока `allow_cidrs` пусто, шлюз предупреждает в двух местах, не изменяя, как он отвечает на любой запрос:1409Пока `allow_cidrs` пуст, шлюз выдаёт предупреждения в двух местах, не меняя того, как он отвечает на запросы:
1401 1410
1402* **При загрузке**: предупреждение в операционном логе рекомендует разрешить только частные диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` и `fc00::/7`, плюс любые другие внутренние диапазоны, из которых ваши разработчики подключаются. Если вы привязываете шлюз к адресу обратной связи и не устанавливаете ни `trusted_proxies`, ни `public_url`, как при локальной разработке, предупреждение не появляется.1411* **При запуске**: предупреждение в операционном логе рекомендует разрешить только частные диапазоны `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`, `100.64.0.0/10`, `127.0.0.0/8`, `::1/128` и `fc00::/7`, а также любые другие внутренние диапазоны, из которых подключаются ваши разработчики. Если вы привязываете шлюз к loopback-адресу и не задаёте ни `trusted_proxies`, ни `public_url`, как при локальной разработке, предупреждение не появляется.
1403* **При выполнении**: первый раз, когда запрос поступает с адреса вне этих частных диапазонов, шлюз записывает в лог предупреждение и излучает событие аудита [`access.public_client`](https://code.claude.com/docs/ru/claude-apps-gateway-deploy#logs), несущее IP клиента. Оба срабатывают один раз на процесс. Адреса link-local, `169.254.0.0/16` и `fe80::/10`, не считаются публичными. Шлюз отвечает на `/healthz` и `/readyz` перед этой проверкой, поэтому проверки здоровья из публичных диапазонов не вызывают её.1412* **Во время работы**: когда впервые поступает запрос с адреса вне этих частных диапазонов, шлюз записывает в лог предупреждение и генерирует [событие аудита `access.public_client`](https://code.claude.com/docs/ru/claude-apps-gateway-deploy#logs) с IP клиента. Оба срабатывают один раз за процесс. Link-local адреса, `169.254.0.0/16` и `fe80::/10`, не считаются публичными. Шлюз отвечает на `/healthz` и `/readyz` до выполнения этой проверки, поэтому проверки работоспособности из публичных диапазонов её не вызывают.
1404 1413
1405Оба сигнала используют адрес клиента, как его разрешает шлюз. Если балансировщик нагрузки, переадресация портов или туннель передают трафик и не указаны в `listen.trusted_proxies`, шлюз видит адрес реле, который обычно частный, поэтому ни предупреждение при выполнении, ни частный список разрешённых адресов не ловит трафик, передаваемый через него.1414Оба сигнала используют адрес клиента в том виде, в каком его определяет шлюз. Если балансировщик нагрузки, проброс портов или туннель ретранслирует трафик и не указан в `listen.trusted_proxies`, шлюз видит адрес ретранслятора, который обычно является частным, поэтому ни предупреждение во время работы, ни список разрешённых частных адресов не отлавливают трафик, ретранслируемый через него.
1406 1415
1407За таким фронтендом сначала установите [`listen.trusted_proxies`](#listen), чтобы шлюз видел реальные адреса клиентов, и в любом случае держите шлюз и всё перед ним недоступными из публичного интернета.1416За таким фронтендом сначала задайте [`listen.trusted_proxies`](#listen), чтобы шлюз видел реальные адреса клиентов, и в любом случае сделайте шлюз и всё, что находится перед ним, недоступными из публичного интернета.
1408 1417
1409### `load_test_mode`1418### `load_test_mode`
1410 1419
1411Блок `load_test_mode` позволяет провести нагрузочное тестирование шлюза без вызова поставщика модели. Пока он включён, шлюз формирует и подписывает каждый запрос поставщика как обычно, отбрасывает его вместо отправки и передаёт потоком заготовленный ответ обратно через свой обычный путь ответа. Ответ — это текст-заполнитель, который начинается с предложения, сообщающего, что он заготовленный.1420Блок `load_test_mode` позволяет провести нагрузочное тестирование шлюза без обращения к провайдеру модели. Пока режим включён, шлюз, как обычно, формирует и подписывает каждый запрос к провайдеру, но отбрасывает его вместо отправки и передаёт потоком заготовленный ответ по своему обычному пути ответа. Ответ представляет собой текст-заполнитель, начинающийся с предложения о том, что он заготовлен.
1412 1421
1413Требует Claude Code v2.1.282 или позже на сервере шлюза. Более ранний шлюз отказывается запускаться, когда находит ключ. Обновите каждую реплику перед добавлением блока и удалите блок перед откатом.1422Требуется Claude Code v2.1.282 или новее на сервере шлюза. Более ранний шлюз отказывается запускаться, обнаружив этот ключ. Обновите все реплики перед добавлением блока и удалите блок перед откатом.
1414 1423
1415Пример ниже включает режим со значениями по умолчанию: ответ примерно из 750 токенов текста, передаваемый потоком в течение примерно 10 секунд:1424Пример ниже включает режим со значениями по умолчанию — ответом примерно из 750 токенов текста, передаваемым потоком около 10 секунд:
1416 1425
1417```yaml theme={null}1426```yaml theme={null}
1418load_test_mode:1427load_test_mode:
1421 reply_seconds: 9.5 # how long a streamed reply takes1430 reply_seconds: 9.5 # how long a streamed reply takes
1422```1431```
1423 1432
1424| Поле | Обязательно | Описание |1433| Поле | Обязательное | Описание |
1425| - | - | - |1434| - | - | - |
1426| `enabled` | Да | `true` включает режим. `false` сохраняет ваши числа в файле с выключенным режимом. Шлюз отказывается запускаться, если блок присутствует без него. |1435| `enabled` | Да | `true` включает режим. `false` сохраняет ваши значения в файле при выключенном режиме. Шлюз отказывается запускаться, если блок присутствует без этого поля. |
1427| `reply_tokens` | Нет | По умолчанию `750`. Примерно сколько токенов текста несёт каждый заготовленный ответ, целое число от 1 до 100000. |1436| `reply_tokens` | Нет | По умолчанию `750`. Примерное количество токенов текста в каждом заготовленном ответе, целое число от 1 до 100000. |
1428| `reply_seconds` | Нет | По умолчанию `9.5`. Как долго передаётся потоковый ответ, от 0 до 600. `0` отправляет весь ответ сразу. Ответ на запрос без потока всегда приходит сразу. |1437| `reply_seconds` | Нет | По умолчанию `9.5`. Сколько времени занимает потоковый ответ, от 0 до 600. `0` отправляет весь ответ сразу. Ответ на непотоковый запрос всегда возвращается сразу. |
1429 1438
1430Нагрузочное тестирование в этом режиме охватывает шлюз, ваш Postgres и всё перед шлюзом. Оно не охватывает ограничения, скорость или сетевой путь поставщика.1439Нагрузочный тест в этом режиме охватывает шлюз, ваш Postgres и всё, что находится перед шлюзом. Он не охватывает лимиты провайдера, его скорость и сетевой путь к нему.
1431 1440
1432Никакой запрос модели не отправляется поставщику, поэтому CPU реплики на запрос — это оценка, и она ниже, чем в продакшене, где трафик к поставщику также шифруется. Подтвердите количество реплик небольшим пилотом с реальным поставщиком. До v2.1.283 оценка намного ниже.1441Запросы к модели не отправляются провайдеру, поэтому загрузка CPU реплики на запрос является оценочной и оказывается ниже, чем в продакшене, где трафик к провайдеру ещё и шифруется. Подтвердите количество реплик небольшим пилотом с реальным провайдером. До v2.1.283 оценка оказывается значительно ниже.
1433 1442
1434Пока режим включён, запрос может нести заголовок `x-load-test-user`, содержащий целое число до семи цифр. Шлюз считает каждое число отдельным разработчиком, с электронной почтой и группами разработчика, чей токен пришёл с запросом.1443Пока режим включён, запрос может содержать заголовок `x-load-test-user` с целым числом длиной до семи цифр. Шлюз считает каждое число отдельным разработчиком с адресом электронной почты и группами того разработчика, чей токен пришёл с запросом.
1435 1444
1436Дайте развёртыванию нагрузочного тестирования свою собственную пустую базу данных, потому что шлюз отказывается запускаться с включённым режимом с базой данных, в которой какой-либо разработчик уже что-либо потратил.1445Выделите развёртыванию для нагрузочного тестирования собственную пустую базу данных, поскольку шлюз отказывается запускаться с включённым режимом на базе данных, в которой какой-либо разработчик уже что-то потратил.
1437 1446
1438> [!WARNING]1447> [!WARNING]
1439>1448>
1440> Никогда не включайте это для шлюза, который используют разработчики. Каждый запрос получает заготовленный ответ и ни одна модель не вызывается. Шлюз записывает в лог предупреждение `load_test_mode is on` при загрузке и помечает каждое [событие аудита](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#logs) `inference` с `load_test: true`, пока режим включён.1449> Никогда не включайте этот режим для шлюза, которым пользуются разработчики. Каждый запрос получает заготовленный ответ, и модель не вызывается. Пока режим включён, шлюз записывает в лог предупреждение `load_test_mode is on` при запуске и помечает каждое [событие аудита](https://code.claude.com/docs/ru/claude-apps-gateway-deploy.md#logs) `inference` значением `load_test: true`.
1441 1450
1442## Полный пример1451## Полный пример
1443 1452
1589 # Политика contractors наследует этот ключ.1598 # Политика contractors наследует этот ключ.
1590 enforceAvailableModels: true1599 enforceAvailableModels: true
1591 permissions:1600 permissions:
1592 allow: [Read, Grep, Bash, Edit]1601 allow: [Read, Grep, Edit]
1593 deny: ["WebFetch"]1602 deny: ["WebFetch"]
1594 env: { HTTP_PROXY: http://proxy.example.com:8080 }1603 env: { HTTP_PROXY: http://proxy.example.com:8080 }
1595 1604