SpyBara
Go Premium

Documentation 2026-10-06 23:59 UTC to 2026-10-07 04:58 UTC

17 files changed +61 −43. View all changes and history on the product overview
2026
Wed 7 04:58 Tue 6 23:59 Mon 5 23:58 Sun 4 23:58 Sat 3 23:57 Fri 2 22:59 Thu 1 23:59
Details

1337| `mcpServer` | `{ name: string; source: string }` | Для инструмента `mcp__*`, MCP сервер, который его обслуживает, и откуда определение этого сервера пришло, с полями [`McpServerProvenance`](#mcpserverprovenance). Отсутствует для других инструментов. Требует Agent SDK v0.3.274 или позже |1337| `mcpServer` | `{ name: string; source: string }` | Для инструмента `mcp__*`, MCP сервер, который его обслуживает, и откуда определение этого сервера пришло, с полями [`McpServerProvenance`](#mcpserverprovenance). Отсутствует для других инструментов. Требует Agent SDK v0.3.274 или позже |

1338| `decisionReason` | `string` | Объясняет, почему был вызван этот запрос разрешения |1338| `decisionReason` | `string` | Объясняет, почему был вызван этот запрос разрешения |

1339| `defaultToNo` | `boolean` | Когда `true`, одиночный случайный нажатие клавиши не должно одобрить этот запрос: откройте вашу подсказку на его опции отклонения, не предварительно выбирайте одобрение и не предлагайте ярлык одобрения одной клавишей. Требует Agent SDK v0.3.268 или позже |1339| `defaultToNo` | `boolean` | Когда `true`, одиночный случайный нажатие клавиши не должно одобрить этот запрос: откройте вашу подсказку на его опции отклонения, не предварительно выбирайте одобрение и не предлагайте ярлык одобрения одной клавишей. Требует Agent SDK v0.3.268 или позже |

1340| `suppressAlwaysAllowRule` | `boolean` | Когда `true`, не предлагайте постоянный выбор всегда разрешить для этого запроса, потому что правило, которое он напишет, предоставляет больше, чем действие самого запроса. Требует Agent SDK v0.3.268 или позже |1340| `suppressAlwaysAllowRule` | `boolean` | Если `true`, не предлагайте для этого запроса постоянный вариант «всегда разрешать». Требуется Agent SDK v0.3.268 или новее |

1341| `toolUseID` | `string` | Уникальный идентификатор для этого конкретного вызова инструмента в сообщении помощника |1341| `toolUseID` | `string` | Уникальный идентификатор для этого конкретного вызова инструмента в сообщении помощника |

1342| `agentID` | `string` | Если работает в подагенте, ID подагента |1342| `agentID` | `string` | Если работает в подагенте, ID подагента |

1343| `requestId` | `string` | `request_id` оболочки `control_request`. `control_response`, которую ваше приложение отправляет вне SDK, такую как подписанный HTTP POST, должна повторить это значение, чтобы процесс Claude Code мог сопоставить ответ с запросом |1343| `requestId` | `string` | `request_id` оболочки `control_request`. `control_response`, которую ваше приложение отправляет вне SDK, такую как подписанный HTTP POST, должна повторить это значение, чтобы процесс Claude Code мог сопоставить ответ с запросом |

agent-view.md +1 −0

Details

819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Удалить сессию, удаление которой было отклонено из-за неотправленных коммитов, отбросив worktree вместе с его веткой и коммитами. Передайте точное значение, которое вывело отклонение; см. [Что удаляет удаление сессии](#what-deleting-a-session-removes). Требуется v2.1.260 или позже |819| `claude rm <id> --discard-unpushed <commit>@<worktree-id>` | Удалить сессию, удаление которой было отклонено из-за неотправленных коммитов, отбросив worktree вместе с его веткой и коммитами. Передайте точное значение, которое вывело отклонение; см. [Что удаляет удаление сессии](#what-deleting-a-session-removes). Требуется v2.1.260 или позже |

820| `claude rm <id> --force-remove-worktree <worktree-id>` | Удалить сессию, удаление которой было отклонено, потому что git или хук `WorktreeRemove` не смогли удалить её worktree, удалив каталог worktree в любом случае и оставив его ветку в репозитории. Передайте точное значение, которое вывело отклонение; см. [Что удаляет удаление сессии](#what-deleting-a-session-removes). Требуется v2.1.268 или позже |820| `claude rm <id> --force-remove-worktree <worktree-id>` | Удалить сессию, удаление которой было отклонено, потому что git или хук `WorktreeRemove` не смогли удалить её worktree, удалив каталог worktree в любом случае и оставив его ветку в репозитории. Передайте точное значение, которое вывело отклонение; см. [Что удаляет удаление сессии](#what-deleting-a-session-removes). Требуется v2.1.268 или позже |

821| `claude daemon status` | Вывести состояние [supervisor](#the-supervisor-process), версию, каталог сокета и количество рабочих процессов |821| `claude daemon status` | Вывести состояние [supervisor](#the-supervisor-process), версию, каталог сокета и количество рабочих процессов |

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

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

823 824 

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

Details

75| - | - |75| - | - |

76| Claude Code v2.1.195 или позже | Подкоманда `claude gateway` и поток входа шлюза поставляются в v2.1.195. Более ранние общедоступные сборки их не включают. Как машина, запускающая сервер шлюза, так и машина каждого разработчика должны быть на v2.1.195 или позже; запустите `claude update`, чтобы получить последний выпуск. [Claude Platform on AWS upstream](/docs/ru/claude-apps-gateway-config#claude-platform-on-aws) требует Claude Code v2.1.198 или позже на сервере шлюза. |76| Claude Code v2.1.195 или позже | Подкоманда `claude gateway` и поток входа шлюза поставляются в v2.1.195. Более ранние общедоступные сборки их не включают. Как машина, запускающая сервер шлюза, так и машина каждого разработчика должны быть на v2.1.195 или позже; запустите `claude update`, чтобы получить последний выпуск. [Claude Platform on AWS upstream](/docs/ru/claude-apps-gateway-config#claude-platform-on-aws) требует Claude Code v2.1.198 или позже на сервере шлюза. |

77| Поставщик удостоверений OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak или Dex, или любой другой совместимый с OIDC IdP, такой как PingFederate. Шлюз запускает стандартное обнаружение OIDC и поток кода авторизации против него. SAML и LDAP не поддерживаются. |77| Поставщик удостоверений OpenID Connect (OIDC) | Okta, Microsoft Entra ID, Google Workspace, Keycloak или Dex, или любой другой совместимый с OIDC IdP, такой как PingFederate. Шлюз запускает стандартное обнаружение OIDC и поток кода авторизации против него. SAML и LDAP не поддерживаются. |

78| PostgreSQL 14 или позже | Поддерживает поток входа устройства, где обратный вызов браузера пишет, а опрашивающий CLI читает, плюс счётчики ограничения скорости. Любой управляемый Postgres работает, включая самый маленький уровень. Без настроенных ограничений расходов шлюз хранит несколько КБ краткосрочного состояния аутентификации; с [ограничениями расходов](/docs/ru/claude-apps-gateway-spend-limits) он также содержит долговечные таблицы расходов, аудита и идентификации, которые должны быть скопированы. TLS через `?sslmode=require` рекомендуется. |78| PostgreSQL 11 или позже | Обеспечивает работу потока входа устройства и счётчиков ограничения частоты запросов. Подойдёт управляемый сервис PostgreSQL, включая самый маленький уровень; см. [какие базы данных поддерживаются](/docs/ru/claude-apps-gateway-deploy#postgres). С [ограничениями расходов](/docs/ru/claude-apps-gateway-spend-limits) он также содержит долговечные таблицы расходов, аудита и идентификации, для которых следует создавать резервные копии. TLS через `?sslmode=require` рекомендуется. PostgreSQL 11, 12 и 13 требуют Claude Code v2.1.290 или позже на сервере шлюза. Проект PostgreSQL больше не поддерживает эти версии, поэтому по возможности используйте более новую. |

79| Вышестоящий уровень модели | Учётные данные Amazon Bedrock, учётные данные Claude Platform on AWS, учётные данные Google Cloud, ресурс Microsoft Foundry или ключ API Anthropic. Поддерживаются несколько вышестоящих уровней с отказоустойчивостью. |79| Вышестоящий уровень модели | Учётные данные Amazon Bedrock, учётные данные Claude Platform on AWS, учётные данные Google Cloud, ресурс Microsoft Foundry или ключ API Anthropic. Поддерживаются несколько вышестоящих уровней с отказоустойчивостью. |

80| HTTPS | Шлюз должен быть доступен по `https://` с ноутбуков разработчиков и из любого браузера, используемого для входа; шлюз служит страницей проверки устройства на том же слушателе. Либо предоставьте сертификат TLS через `listen.tls`, либо запустите позади завершающего TLS входа, и установите `listen.public_url` на внешнее происхождение в обоих случаях. При `/login` Claude Code принимает простое происхождение `http://` только когда хост шлюза является loopback: `localhost`, `127.0.0.1` или `::1`. |80| HTTPS | Шлюз должен быть доступен по `https://` с ноутбуков разработчиков и из любого браузера, используемого для входа; шлюз служит страницей проверки устройства на том же слушателе. Либо предоставьте сертификат TLS через `listen.tls`, либо запустите позади завершающего TLS входа, и установите `listen.public_url` на внешнее происхождение в обоих случаях. При `/login` Claude Code принимает простое происхождение `http://` только когда хост шлюза является loopback: `localhost`, `127.0.0.1` или `::1`. |

81| Адрес частной сети | При `/login` Claude Code требует, чтобы имя хоста или IP-адрес шлюза разрешались только в частные адреса: RFC 1918, link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7` или loopback. Для шлюза, который вы размещаете, любой общедоступный адрес вне блока, который вы объявляете, отклоняется; см. [модель угроз](/docs/ru/claude-apps-gateway-deploy#threat-model-summary) в руководстве развёртывания. Если машины разработчиков маршрутизируют HTTPS через корпоративный прокси, вход также требует, чтобы хост прокси разрешался в частные адреса; если это не так, добавьте хост шлюза в `NO_PROXY`, чтобы CLI подключался напрямую. Если ваша внутренняя сеть пронумерована из общедоступного пространства IPv4, которым владеет ваша организация, [объявите эти блоки](#allow-a-gateway-on-public-address-space-you-own), чтобы `/login` принял шлюз там. |81| Адрес частной сети | При `/login` Claude Code требует, чтобы имя хоста или IP-адрес шлюза разрешались только в частные адреса: RFC 1918, link-local, CGNAT `100.64.0.0/10`, IPv6 ULA `fc00::/7` или loopback. Для шлюза, который вы размещаете, любой общедоступный адрес вне блока, который вы объявляете, отклоняется; см. [модель угроз](/docs/ru/claude-apps-gateway-deploy#threat-model-summary) в руководстве развёртывания. Если машины разработчиков маршрутизируют HTTPS через корпоративный прокси, вход также требует, чтобы хост прокси разрешался в частные адреса; если это не так, добавьте хост шлюза в `NO_PROXY`, чтобы CLI подключался напрямую. Если ваша внутренняя сеть пронумерована из общедоступного пространства IPv4, которым владеет ваша организация, [объявите эти блоки](#allow-a-gateway-on-public-address-space-you-own), чтобы `/login` принял шлюз там. |


91 </Step>91 </Step>

92 92 

93 <Step title="Подготовьте базу данных PostgreSQL">93 <Step title="Подготовьте базу данных PostgreSQL">

94 Любой Postgres 14 или позже работает, включая самый маленький управляемый уровень. Шлюз запускает свои собственные миграции схемы при загрузке, поэтому пользователю базы данных нужны права для создания и изменения таблиц; см. [`store`](/docs/ru/claude-apps-gateway-config#store).94 Используйте PostgreSQL 11 или позже. Самого маленького управляемого уровня достаточно. Шлюз запускает свои собственные миграции схемы при загрузке, поэтому роли базы данных нужны права для создания и изменения таблиц; см. [`store`](/docs/ru/claude-apps-gateway-config#store).

95 </Step>95 </Step>

96 96 

97 <Step title="Напишите gateway.yaml">97 <Step title="Напишите gateway.yaml">

Details

158Шлюз читает ключ и сертификат один раз при загрузке, поэтому изменённый файл вступает в силу только после перезапуска. Выполняйте ротацию в таком порядке, чтобы ни один запрос токена не предъявлял сертификат, которого нет у IdP:158Шлюз читает ключ и сертификат один раз при загрузке, поэтому изменённый файл вступает в силу только после перезапуска. Выполняйте ротацию в таком порядке, чтобы ни один запрос токена не предъявлял сертификат, которого нет у IdP:

159 159 

1601. Загрузите новый сертификат в IdP в дополнение к старому.1601. Загрузите новый сертификат в IdP в дополнение к старому.

1612. Замените файлы ключа и сертификата, которые загружает `gateway.yaml`, затем перезапустите шлюз.1612. Замените файлы ключа и сертификата, которые загружает `gateway.yaml`, затем перезапустите шлюз. Если вы запускаете несколько реплик, подойдёт [последовательный перезапуск](/docs/ru/claude-apps-gateway-deploy#upgrades), потому что у IdP есть оба сертификата, пока вы не удалите старый.

1623. Удалите старый сертификат из IdP.1623. После перезапуска всех реплик удалите старый сертификат из IdP.

163 163 

164<h4 id="idp-requests-through-a-forward-proxy">164<h4 id="idp-requests-through-a-forward-proxy">

165 Запросы к IdP через прямой прокси165 Запросы к IdP через прямой прокси


227 227 

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

229| - | - | - |229| - | - | - |

230| `postgres_url` | Да | URL `postgres://` или `postgresql://`. Обязателен: точке встречи грантов устройств, куда пишет обратный вызов браузера и откуда читает опрашивающий CLI, нужно состояние, общее для реплик. Шлюз сам выполняет миграции схемы при загрузке и при обновлении, поэтому роли нужны права на создание и изменение таблиц в целевой схеме. См. [Обновления](/docs/ru/claude-apps-gateway-deploy#upgrades) и [Postgres](/docs/ru/claude-apps-gateway-deploy#postgres). |230| `postgres_url` | Да | URL `postgres://` или `postgresql://` с одним хостом, а не списком хостов через запятую. Шлюз сам выполняет миграции схемы при загрузке и при обновлении, поэтому роли нужны права на создание и изменение таблиц в целевой схеме. См. [Обновления](/docs/ru/claude-apps-gateway-deploy#upgrades) и [Postgres](/docs/ru/claude-apps-gateway-deploy#postgres). |

231| `username` | Нет | Переопределяет пользователя в `postgres_url` |231| `username` | Нет | Переопределяет пользователя в `postgres_url` |

232| `password` | Нет | Учётные данные базы данных. Задавайте их здесь, а не в `postgres_url`, чтобы учётные данные не попадали в URL. Принимает любые символы и имеет приоритет над учётными данными из URL. |232| `password` | Нет | Учётные данные базы данных. Задавайте их здесь, а не в `postgres_url`, чтобы учётные данные не попадали в URL. Принимает любые символы и имеет приоритет над учётными данными из URL. |

233| `max_connections` | Нет | Размер пула соединений Postgres на реплику. По умолчанию `5` — консервативное значение, подходящее для общих баз данных. При включённых [лимитах расходов](#admin) горячий путь выполняет несколько операций на каждый запрос инференса, поэтому увеличьте значение для выделенной базы данных под нагрузкой и следите, чтобы число реплик × это значение было меньше `max_connections` базы данных. |233| `max_connections` | Нет | Размер пула соединений Postgres на реплику. По умолчанию `5` — консервативное значение, подходящее для общих баз данных. При включённых [лимитах расходов](#admin) горячий путь выполняет несколько операций на каждый запрос инференса, поэтому увеличьте значение для выделенной базы данных под нагрузкой и следите, чтобы число реплик × это значение было меньше `max_connections` базы данных. |

Details

249 Postgres249 Postgres

250</h3>250</h3>

251 251 

252Шлюз хранит своё состояние в базе данных PostgreSQL:

253 

254* **База данных**: сам PostgreSQL, размещённый самостоятельно или управляемый, [минимальной версии](/docs/ru/claude-apps-gateway#prerequisites) или новее. Базы данных, которые лишь реализуют протокол Postgres, например распределённые SQL-базы данных, не поддерживаются.

255* **Адрес**: `store.postgres_url` принимает один хост. Если у базы данных несколько узлов, используйте адрес, стоящий перед ними, например эндпоинт вашего управляемого сервиса, балансировщик нагрузки или виртуальный IP. Установите [период благодати готовности](#readiness-grace-period) длиннее, чем занимает переключение при отказе.

256 

252Шлюз содержит пять таблиц данных плюс таблицу `_migrations`, все созданные его миграциями при загрузке:257Шлюз содержит пять таблиц данных плюс таблицу `_migrations`, все созданные его миграциями при загрузке:

253 258 

254| Таблица | Содержимое | Удержание |259| Таблица | Содержимое | Удержание |


396| CLI `/login`: `Could not resolve the configured HTTP proxy` | Имя хоста в `HTTPS_PROXY` или `HTTP_PROXY` не разрешается с машины разработчика, обычно потому что она не подключена к корпоративной сети | Попросите разработчика подключиться к вашей сети или VPN и повторить попытку, или исправьте URL прокси |401| CLI `/login`: `Could not resolve the configured HTTP proxy` | Имя хоста в `HTTPS_PROXY` или `HTTP_PROXY` не разрешается с машины разработчика, обычно потому что она не подключена к корпоративной сети | Попросите разработчика подключиться к вашей сети или VPN и повторить попытку, или исправьте URL прокси |

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

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

404| Загрузка выходит: `store.postgres_url in <path> is not a URL the gateway can read` или, в версиях до v2.1.290, просто `Invalid URL` или `URI error` | URL не удаётся разобрать, например потому что в нём указано более одного хоста или пароль содержит незакодированные `/`, `?`, `#` или `%` | Укажите [один хост](#postgres) и перенесите пароль в [`store.password`](/docs/ru/claude-apps-gateway-config#store) |

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

400| Загрузка выходит с ошибкой обнаружения OIDC после `config.load` | `oidc.issuer` недоступен или цепочке TLS нет доверия | Проверьте, что издатель доступен из pod и обслуживает `/.well-known/openid-configuration`. Установите `ca_cert_pem` для приватной PKI. Если pod достигает IdP только через forward proxy, установите [`oidc.use_proxy: true`](/docs/ru/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); на версиях до v2.1.227 вместо этого предоставьте pod прямой маршрут к каждому эндпоинту IdP. Если pod также не может разрешить имя хоста IdP или прокси отказывает в `CONNECT` на IP-адрес, см. [Proxy-only egress](/docs/ru/claude-apps-gateway-config#proxy-only-egress), что требует v2.1.277 или позже. |406| Загрузка выходит с ошибкой обнаружения OIDC после `config.load` | `oidc.issuer` недоступен или цепочке TLS нет доверия | Проверьте, что издатель доступен из pod и обслуживает `/.well-known/openid-configuration`. Установите `ca_cert_pem` для приватной PKI. Если pod достигает IdP только через forward proxy, установите [`oidc.use_proxy: true`](/docs/ru/claude-apps-gateway-config#idp-requests-through-a-forward-proxy); на версиях до v2.1.227 вместо этого предоставьте pod прямой маршрут к каждому эндпоинту IdP. Если pod также не может разрешить имя хоста IdP или прокси отказывает в `CONNECT` на IP-адрес, см. [Proxy-only egress](/docs/ru/claude-apps-gateway-config#proxy-only-egress), что требует v2.1.277 или позже. |

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

402| Лог: `could not connect to Postgres at boot, attempt 1 of 3` | База данных ещё не была доступна, когда шлюз запустился, например на холодном экземпляре, чья сеть всё ещё поднимается | Если шлюз затем завершает загрузку, никаких действий не требуется. Когда база данных недоступна, шлюз пытается подключиться три раза, с интервалом в две секунды, перед выходом. Если он выходит с `could not connect to Postgres`, проверьте `store.postgres_url` и сетевой путь к базе данных. Если попытки завершаются по таймауту, а не отклоняются, поднимите [`store.connect_timeout_seconds`](/docs/ru/claude-apps-gateway-config#store), чтобы дать каждой больше времени. |408| Лог: `could not connect to Postgres at boot, attempt 1 of 3` | База данных ещё не была доступна, когда шлюз запустился, например на холодном экземпляре, чья сеть всё ещё поднимается | Если шлюз затем завершает загрузку, никаких действий не требуется. Когда база данных недоступна, шлюз пытается подключиться три раза, с интервалом в две секунды, перед выходом. Если он выходит с `could not connect to Postgres`, проверьте `store.postgres_url`, в том числе что в нём указан один хост, и сетевой путь к базе данных. Если попытки завершаются по таймауту, а не отклоняются, поднимите [`store.connect_timeout_seconds`](/docs/ru/claude-apps-gateway-config#store), чтобы дать каждой больше времени. |

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

404| Лог: `token exchange failed request_id=<id>: id_token missing email claim` | IdP не включает `email` в id\_token по умолчанию. Это отклонение срабатывает только когда установлен `allowed_email_domains`; без него отсутствующий email создаёт сессию без email | Настройте IdP для выдачи `email` в id\_token. Okta: добавьте `email` к утверждениям ID-токена пользовательского сервера авторизации. Entra: добавьте `email` как опциональное утверждение в регистрации приложения. PingFederate: включите политику OpenID Connect, которая выдаёт `email`. Если IdP обслуживает `email` из эндпоинта userinfo, но не включает его в id\_token, как, например, сервер авторизации организации Okta, установите `oidc.userinfo_fallback: true`. |410| Лог: `token exchange failed request_id=<id>: id_token missing email claim` | IdP не включает `email` в id\_token по умолчанию. Это отклонение срабатывает только когда установлен `allowed_email_domains`; без него отсутствующий email создаёт сессию без email | Настройте IdP для выдачи `email` в id\_token. Okta: добавьте `email` к утверждениям ID-токена пользовательского сервера авторизации. Entra: добавьте `email` как опциональное утверждение в регистрации приложения. PingFederate: включите политику OpenID Connect, которая выдаёт `email`. Если IdP обслуживает `email` из эндпоинта userinfo, но не включает его в id\_token, как, например, сервер авторизации организации Okta, установите `oidc.userinfo_fallback: true`. |

405| Лог: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, и разработчики видят `Cloud gateway session expired` каждые `session.ttl_hours` | IdP принял refresh token, но не вернул вместе с ним id\_token, поэтому шлюз запросил утверждения пользователя у эндпоинта userinfo IdP. IdP отклонил там обновлённый access token. Шлюз отвечает `temporarily_unavailable`, поэтому Claude Code сохраняет refresh token, но не может обновить сессию. Версии шлюза до v2.1.260 логируют ту же строку без деталей `(at …)`. | Установите [`oidc.scope_on_refresh: true`](/docs/ru/claude-apps-gateway-config#oidc), доступно в шлюзе v2.1.260 или позже, чтобы запрос refresh снова запрашивал `openid`. Некоторые IdP, такие как Okta, возвращают id\_token при refresh только при явном запросе. На PingFederate вместо этого включите **Return ID Token On Refresh Grant** в разделе **Applications > OAuth > OpenID Connect Policy Management**. Ключ не изменяет поведение PingFederate. Для других IdP, которые всё ещё его опускают, проверьте, принимает ли эндпоинт userinfo access tokens, выданные при refresh. В качестве временного решения поднимите [`session.ttl_hours`](/docs/ru/claude-apps-gateway-config#session). См. [Identity provider setup](#identity-provider-setup) о компромиссе при deprovisioning. |411| Лог: `refresh failed request_id=<id>: invalid_token (…) (at userinfo_no_id_token, …)`, и разработчики видят `Cloud gateway session expired` каждые `session.ttl_hours` | IdP принял refresh token, но не вернул вместе с ним id\_token, поэтому шлюз запросил утверждения пользователя у эндпоинта userinfo IdP. IdP отклонил там обновлённый access token. Шлюз отвечает `temporarily_unavailable`, поэтому Claude Code сохраняет refresh token, но не может обновить сессию. Версии шлюза до v2.1.260 логируют ту же строку без деталей `(at …)`. | Установите [`oidc.scope_on_refresh: true`](/docs/ru/claude-apps-gateway-config#oidc), доступно в шлюзе v2.1.260 или позже, чтобы запрос refresh снова запрашивал `openid`. Некоторые IdP, такие как Okta, возвращают id\_token при refresh только при явном запросе. На PingFederate вместо этого включите **Return ID Token On Refresh Grant** в разделе **Applications > OAuth > OpenID Connect Policy Management**. Ключ не изменяет поведение PingFederate. Для других IdP, которые всё ещё его опускают, проверьте, принимает ли эндпоинт userinfo access tokens, выданные при refresh. В качестве временного решения поднимите [`session.ttl_hours`](/docs/ru/claude-apps-gateway-config#session). См. [Identity provider setup](#identity-provider-setup) о компромиссе при deprovisioning. |

Details

161 --policy-name read-gateway-secrets --policy-document file://secrets-read.json161 --policy-name read-gateway-secrets --policy-document file://secrets-read.json

162 ```162 ```

163 163 

164 Политика называет один ARN на секрет, а не простой подстановочный знак `gateway-*`, который в общей учётной записи также совпадал бы с несвязанными секретами; конечный `-??????` совпадает ровно с случайным суффиксом из шести символов, который Secrets Manager добавляет к ARN каждого секрета. Конечный `-*` был бы простым глобусом префикса и также совпадал бы с более длинными именами, такими как `gateway-postgres-url-prod`.164 Политика называет один ARN на секрет, а не простой подстановочный знак `gateway-*`, который в общей учётной записи также совпадал бы с несвязанными секретами; конечный `-??????` совпадает ровно с случайным суффиксом из шести символов, который Secrets Manager добавляет к ARN каждого секрета. Конечный `-*` был бы простым глобом префикса и также совпадал бы с более длинными именами, такими как `gateway-postgres-url-prod`.

165 165 

166 Политика IAM предоставляет gateway разрешение на вызов Bedrock, и Bedrock включает доступ к модели по умолчанию в коммерческих регионах. Оставшиеся ворота на уровне учётной записи — это одноразовая форма использования Anthropic: если никто в вашей учётной записи её не отправил, откройте [консоль Amazon Bedrock](https://console.aws.amazon.com/bedrock/), выберите модель Anthropic из каталога моделей и заполните форму. Доступ предоставляется сразу после отправки; см. [Claude Code на Amazon Bedrock](/docs/ru/amazon-bedrock#1-submit-use-case-details) для формы AWS Organizations и разрешений IAM, которые нужны отправителю.166 Политика IAM предоставляет gateway разрешение на вызов Bedrock, и Bedrock включает доступ к модели по умолчанию в коммерческих регионах. Оставшиеся ворота на уровне учётной записи — это одноразовая форма использования Anthropic: если никто в вашей учётной записи её не отправил, откройте [консоль Amazon Bedrock](https://console.aws.amazon.com/bedrock/), выберите модель Anthropic из каталога моделей и заполните форму. Доступ предоставляется сразу после отправки; см. [Claude Code на Amazon Bedrock](/docs/ru/amazon-bedrock#1-submit-use-case-details) для формы AWS Organizations и разрешений IAM, которые нужны отправителю.

167 167 


169 </Step>169 </Step>

170 170 

171 <Step title="Подготовьте Amazon RDS для PostgreSQL">171 <Step title="Подготовьте Amazon RDS для PostgreSQL">

172 Экземпляр работает в приватных подсетях без публичного адреса и с включённым шифрованием хранилища. Версия движка закреплена на Postgres 16, что удовлетворяет поддерживаемому минимуму gateway PostgreSQL 14 и гарантирует, что семейство группы параметров ниже совпадает с экземпляром.172 Экземпляр работает на Postgres 16 в приватных подсетях без публичного адреса и с включённым шифрованием хранилища.

173 173 

174 Сначала создайте группу подсетей, которая размещает базу данных в приватных подсетях, и группу параметров с `rds.force_ssl=1`, чтобы сервер отклонял открытые соединения. Версия движка закреплена один раз, потому что семейство группы параметров должно совпадать с основной версией движка, которую запускает экземпляр:174 Сначала создайте группу подсетей, которая размещает базу данных в приватных подсетях, и группу параметров с `rds.force_ssl=1`, чтобы сервер отклонял открытые соединения. Версия движка закреплена один раз, потому что семейство группы параметров должно совпадать с основной версией движка, которую запускает экземпляр:

175 175 


203 203 

204 Буквальный аргумент `--master-user-password` виден в таблице процессов и в журналах аудита/EDR во время выполнения команды, то же самое воздействие, которое охватывает примечание шага секретов. На общем или контролируемом хосте передайте пароль через `--cli-input-json` из файла `0600` вместо этого, так же как это делает `setup.sh` пакета.204 Буквальный аргумент `--master-user-password` виден в таблице процессов и в журналах аудита/EDR во время выполнения команды, то же самое воздействие, которое охватывает примечание шага секретов. На общем или контролируемом хосте передайте пароль через `--cli-input-json` из файла `0600` вместо этого, так же как это делает `setup.sh` пакета.

205 205 

206 Дождитесь, пока экземпляр запустится, что может занять несколько минут, затем прочитайте его приватную конечную точку и соберите строку подключения, которую будет использовать gateway:206 Дождитесь, пока экземпляр запустится, что может занять несколько минут, затем прочитайте его приватный эндпоинт и соберите строку подключения, которую будет использовать gateway:

207 207 

208 ```bash theme={null}208 ```bash theme={null}

209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db209 aws rds wait db-instance-available --db-instance-identifier claude-gateway-db


214 214 

215 `sslmode=verify-full` заставляет gateway проверять цепь сертификата сервера RDS и имя хоста, а не только шифровать. Якорь доверия — это [пакет сертификатов AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), который шаг сборки образа ниже копирует в `/etc/claude/rds-global-bundle.pem` и доверяет через `NODE_EXTRA_CA_CERTS`. Не добавляйте параметр `sslrootcert=` в стиле libpq к URL: драйвер gateway читает только `sslmode` из строки запроса и передал бы `sslrootcert` Postgres как параметр запуска, который сервер отклоняет.215 `sslmode=verify-full` заставляет gateway проверять цепь сертификата сервера RDS и имя хоста, а не только шифровать. Якорь доверия — это [пакет сертификатов AWS RDS](https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem), который шаг сборки образа ниже копирует в `/etc/claude/rds-global-bundle.pem` и доверяет через `NODE_EXTRA_CA_CERTS`. Не добавляйте параметр `sslrootcert=` в стиле libpq к URL: драйвер gateway читает только `sslmode` из строки запроса и передал бы `sslrootcert` Postgres как параметр запуска, который сервер отклоняет.

216 216 

217 Сервис ECS или поды EKS должны работать в этом VPC, чтобы они могли достичь приватной конечной точки экземпляра, и группа безопасности `claude-gateway-db` допускает только группу безопасности gateway.217 Сервис ECS или поды EKS должны работать в этом VPC, чтобы они могли достичь приватного эндпоинта экземпляра, и группа безопасности `claude-gateway-db` допускает только группу безопасности gateway.

218 </Step>218 </Step>

219 219 

220 <Step title="Напишите gateway.yaml">220 <Step title="Напишите gateway.yaml">


223 Два поля `listen` описывают, что находится перед gateway:223 Два поля `listen` описывают, что находится перед gateway:

224 224 

225 * `public_url`: внешний источник `https://`, требуется для любого привязывания, отличного от loopback; см. [справочник `listen`](/docs/ru/claude-apps-gateway-config#listen). Gateway строит `redirect_uri` IdP и его документ обнаружения только из этого значения, никогда из заголовков `X-Forwarded-*`.225 * `public_url`: внешний источник `https://`, требуется для любого привязывания, отличного от loopback; см. [справочник `listen`](/docs/ru/claude-apps-gateway-config#listen). Gateway строит `redirect_uri` IdP и его документ обнаружения только из этого значения, никогда из заголовков `X-Forwarded-*`.

226 * `trusted_proxies`: диапазоны источников фронтенда. Gateway соблюдает `X-Forwarded-For` только когда TCP-пир находится в этом списке, затем проходит цепь мимо доверенных переходов, поэтому ограничения скорости входа на IP и события аудита записывают IP разработчиков вместо load balancer.226 * `trusted_proxies`: диапазоны источников фронтенда. Gateway соблюдает `X-Forwarded-For` только когда TCP-пир находится в этом списке, затем проходит цепь мимо доверенных переходов, поэтому ограничения частоты запросов на вход по IP и события аудита записывают IP разработчиков вместо load balancer.

227 227 

228 На обоих треках фронтенд — это внутренний ALB, создан ли он напрямую или AWS Load Balancer Controller, и узлы ALB берут адреса из подсетей, к которым он присоединён, поэтому установите `trusted_proxies` на CIDR этих подсетей. Это доверяет каждому хосту в этих подсетях как прокси. Не допускайте, чтобы источник входа ALB, ваша корпоративная CIDR, перекрывался с ними, и не делитесь подсетями с ненадёжными рабочими нагрузками, которые могли бы подделать IP клиентов через `X-Forwarded-For`.228 На обоих треках фронтенд — это внутренний ALB, создан ли он напрямую или AWS Load Balancer Controller, и узлы ALB берут адреса из подсетей, к которым он присоединён, поэтому установите `trusted_proxies` на CIDR этих подсетей. Это доверяет каждому хосту в этих подсетях как прокси. Не допускайте, чтобы источник входа ALB, ваша корпоративная CIDR, перекрывался с ними, и не делитесь подсетями с ненадёжными рабочими нагрузками, которые могли бы подделать IP клиентов через `X-Forwarded-For`.

229 229 

230 Атрибут сохранения клиентского порта ALB, `routing.http.xff_client_port.enabled`, может остаться в любом параметре: с ним включённым, ALB записывает клиента как `203.0.113.7:54321` или `[2001:db8::1]:54321`, и gateway читает оба с опущенным портом.230 Атрибут сохранения клиентского порта ALB, `routing.http.xff_client_port.enabled`, может остаться в любой настройке: с ним включённым, ALB записывает клиента как `203.0.113.7:54321` или `[2001:db8::1]:54321`, и gateway читает оба с опущенным портом.

231 231 

232 ```yaml gateway.yaml theme={null}232 ```yaml gateway.yaml theme={null}

233 listen:233 listen:


244 # Сервер авторизации организации Okta возвращает тонкий id_token, который опускает244 # Сервер авторизации организации Okta возвращает тонкий id_token, который опускает

245 # email и groups; gateway заполняет их из /userinfo.245 # email и groups; gateway заполняет их из /userinfo.

246 userinfo_fallback: true246 userinfo_fallback: true

247 # Okta выдаёт groups только когда запрашивается область `groups` и247 # Okta выдаёт groups только когда запрашивается scope `groups` и

248 # фильтр утверждения groups приложения их позволяет.248 # фильтр утверждения groups приложения их позволяет.

249 scopes: [openid, profile, email, offline_access, groups]249 scopes: [openid, profile, email, offline_access, groups]

250 250 


267 ```267 ```

268 268 

269 <Note>269 <Note>

270 Только блок `oidc` специфичен для Okta. Чтобы использовать Microsoft Entra ID вместо этого, установите `issuer` на `https://login.microsoftonline.com/<tenant-id>/v2.0`, удалите `userinfo_fallback` и область `groups`, и обратите внимание, что Entra выдаёт Object ID группы, а не имена, поэтому [`managed.policies`](/docs/ru/claude-apps-gateway-config#managed) должны совпадать на GUID, или на App Roles с `oidc.groups_claim: roles`. См. [Настройка поставщика идентификации](/docs/ru/claude-apps-gateway-deploy#identity-provider-setup).270 Только блок `oidc` специфичен для Okta. Чтобы использовать Microsoft Entra ID вместо этого, установите `issuer` на `https://login.microsoftonline.com/<tenant-id>/v2.0`, удалите `userinfo_fallback` и scope `groups`, и обратите внимание, что Entra выдаёт Object ID группы, а не имена, поэтому [`managed.policies`](/docs/ru/claude-apps-gateway-config#managed) должны совпадать на GUID, или на App Roles с `oidc.groups_claim: roles`. См. [Настройка поставщика идентификации](/docs/ru/claude-apps-gateway-deploy#identity-provider-setup).

271 </Note>271 </Note>

272 </Step>272 </Step>

273 273 


289 Буквальные аргументы `--secret-string` видны в таблице процессов и в журналах аудита/EDR во время выполнения каждой команды. На общем или контролируемом хосте поместите значение в файл `0600` и передайте `--secret-string file://<path>` вместо этого. `setup.sh` пакета держит значения секретов вне argv процесса так же, передавая временные файлы `0600` в `--cli-input-json`.289 Буквальные аргументы `--secret-string` видны в таблице процессов и в журналах аудита/EDR во время выполнения каждой команды. На общем или контролируемом хосте поместите значение в файл `0600` и передайте `--secret-string file://<path>` вместо этого. `setup.sh` пакета держит значения секретов вне argv процесса так же, передавая временные файлы `0600` в `--cli-input-json`.

290 </Note>290 </Note>

291 291 

292 В отличие от секретов, сам `gateway.yaml` не содержит значений секретов, потому что каждое учётное данные разрешается при загрузке через [`${VAR}` или `${file:...}` расширение](/docs/ru/claude-apps-gateway-config#secret-expansion). Как всё достигает контейнера, отличается по треку:292 В отличие от секретов, сам `gateway.yaml` не содержит значений секретов, потому что все учётные данные разрешаются при загрузке через [`${VAR}` или `${file:...}` расширение](/docs/ru/claude-apps-gateway-config#secret-expansion). Как всё достигает контейнера, отличается по треку:

293 293 

294 * На ECS, сборка следующего шага копирует `gateway.yaml` в образ в `/etc/claude/gateway.yaml`, и определение задачи внедряет три секрета как переменные окружения через его поле `secrets`, поэтому YAML ссылается на `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` и `${GATEWAY_POSTGRES_URL}`.294 * На ECS, сборка следующего шага копирует `gateway.yaml` в образ в `/etc/claude/gateway.yaml`, и определение задачи внедряет три секрета как переменные окружения через его поле `secrets`, поэтому YAML ссылается на `${GATEWAY_JWT_SECRET}`, `${OIDC_CLIENT_SECRET}` и `${GATEWAY_POSTGRES_URL}`.

295 * На EKS, смонтируйте `gateway.yaml` из ConfigMap и секреты как файлы в `/secrets`, на которые ссылаются как `${file:/secrets/...}`. Получите Kubernetes Secrets из Secrets Manager с External Secrets Operator или поставщиком AWS драйвера Secrets Store CSI, или создайте их напрямую с помощью `kubectl`.295 * На EKS, смонтируйте `gateway.yaml` из ConfigMap и секреты как файлы в `/secrets`, на которые ссылаются как `${file:/secrets/...}`. Получите Kubernetes Secrets из Secrets Manager с External Secrets Operator или поставщиком AWS драйвера Secrets Store CSI, или создайте их напрямую с помощью `kubectl`.


298 <Step title="Соберите и отправьте образ в Amazon ECR">298 <Step title="Соберите и отправьте образ в Amazon ECR">

299 Соберите образ согласно [требованиям образа контейнера](/docs/ru/claude-apps-gateway-deploy#container-image), разместив двоичный файл `linux-x64` glibc в `./claude` в контексте сборки. Напишите свой собственный Dockerfile согласно этим требованиям или начните с [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) пакета, который копирует заполненный `gateway.yaml` из предыдущих шагов в образ в `/etc/claude/gateway.yaml`. На ECS эта встроенная копия — это то, как конфигурация достигает контейнера, поэтому сборка идёт после написания файла. Трек EKS вместо этого монтирует `gateway.yaml` из ConfigMap при развёртывании, поэтому встроенная копия там не используется.299 Соберите образ согласно [требованиям образа контейнера](/docs/ru/claude-apps-gateway-deploy#container-image), разместив двоичный файл `linux-x64` glibc в `./claude` в контексте сборки. Напишите свой собственный Dockerfile согласно этим требованиям или начните с [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/examples/gateway/aws/Dockerfile) пакета, который копирует заполненный `gateway.yaml` из предыдущих шагов в образ в `/etc/claude/gateway.yaml`. На ECS эта встроенная копия — это то, как конфигурация достигает контейнера, поэтому сборка идёт после написания файла. Трек EKS вместо этого монтирует `gateway.yaml` из ConfigMap при развёртывании, поэтому встроенная копия там не используется.

300 300 

301 Образ также содержит пакет сертификатов AWS RDS как якорь доверия для `sslmode=verify-full` строки подключения, поэтому загрузите его в контекст сборки сначала. AWS ротирует пакет (новые региональные CA добавляются), поэтому загружайте его при каждой сборке, а не закрепляйте контрольную сумму или фиксируйте её:301 Образ также содержит пакет сертификатов AWS RDS как якорь доверия для `sslmode=verify-full` строки подключения, поэтому загрузите его в контекст сборки сначала. AWS ротирует пакет (новые региональные CA добавляются), поэтому загружайте его при каждой сборке, а не закрепляйте контрольную сумму или фиксируйте его:

302 302 

303 ```bash theme={null}303 ```bash theme={null}

304 curl -fL --proto '=https' -o rds-global-bundle.pem \304 curl -fL --proto '=https' -o rds-global-bundle.pem \

305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem305 https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

306 ```306 ```

307 307 

308 Требования образа контейнера не охватывают пакет, поэтому если вы напишете свой собственный Dockerfile, добавьте две строки, которые копируют и доверяют ему; `Dockerfile` пакета уже включает оба:308 Требования образа контейнера не охватывают пакет, поэтому если вы напишете свой собственный Dockerfile, добавьте две строки, которые копируют и доверяют ему; `Dockerfile` пакета уже включает обе:

309 309 

310 ```dockerfile theme={null}310 ```dockerfile theme={null}

311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem311 COPY rds-global-bundle.pem /etc/claude/rds-global-bundle.pem

312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem312 ENV NODE_EXTRA_CA_CERTS=/etc/claude/rds-global-bundle.pem

313 ```313 ```

314 314 

315 Создайте репозиторий ECR и подпишите Docker в него. Неизменяемые теги означают, что тег `<version>`, который закрепляет шаг развёртывания, не может позже молча переуказываться на другой образ:315 Создайте репозиторий ECR и выполните вход Docker в него. Неизменяемые теги означают, что тег `<version>`, который закрепляет шаг развёртывания, не может позже молча переуказываться на другой образ:

316 316 

317 ```bash theme={null}317 ```bash theme={null}

318 aws ecr create-repository --repository-name claude-gateway \318 aws ecr create-repository --repository-name claude-gateway \


401 401 

402 Добавьте слушатель HTTPS. `--ssl-policy` закрепляет современный минимум TLS, так как его опущение возвращается к устаревшему значению по умолчанию `ELBSecurityPolicy-2016-08`, которое всё ещё принимает TLS 1.0/1.1.402 Добавьте слушатель HTTPS. `--ssl-policy` закрепляет современный минимум TLS, так как его опущение возвращается к устаревшему значению по умолчанию `ELBSecurityPolicy-2016-08`, которое всё ещё принимает TLS 1.0/1.1.

403 403 

404 ALB закрывает соединение после 60 секунд без данных по умолчанию. Keepalive пинги gateway держат потоки внутри этого значения по умолчанию, поэтому повышение времени ожидания добавляет запас выше кадра пинга; строка [Troubleshooting](#troubleshooting) на разорванных потоках охватывает механизм и более старые gateway. Команды ниже добавляют слушатель и повышают время ожидания:404 ALB закрывает соединение после 60 секунд без данных по умолчанию. Keepalive пинги gateway держат потоки внутри этого значения по умолчанию, поэтому повышение таймаута добавляет запас выше частоты пингов; строка [Устранение неполадок](#troubleshooting) о разорванных потоках охватывает механизм и более старые gateway. Команды ниже добавляют слушатель и повышают таймаут:

405 405 

406 ```bash theme={null}406 ```bash theme={null}

407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \407 aws elbv2 create-listener --load-balancer-arn "$ALB_ARN" \


414 --attributes Key=idle_timeout.timeout_seconds,Value=3600414 --attributes Key=idle_timeout.timeout_seconds,Value=3600

415 ```415 ```

416 416 

417 Создайте сервис. Выключатель развёртывания откатывает развёртывание, чьи задачи продолжают отказывать, из-за плохого образа или неустойчивой конфигурации, обратно к последнему стабильному состоянию вместо перезапуска отказывающих задач вечно:417 Создайте сервис. Выключатель развёртывания откатывает развёртывание, чьи задачи продолжают отказывать, из-за плохого образа или незагружаемой конфигурации, обратно к последнему стабильному состоянию вместо перезапуска отказывающих задач вечно:

418 418 

419 ```bash theme={null}419 ```bash theme={null}

420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \420 aws ecs create-service --cluster claude-gateway --service-name claude-gateway \


425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"425 --load-balancers "targetGroupArn=$TG_ARN,containerName=gateway,containerPort=8080"

426 ```426 ```

427 427 

428 Период благодати в 60 секунд даёт холодной задаче время на извлечение образа, подключение к хранилищу и ответ на первую проверку здоровья перед тем, как ECS начнёт считать отказы против развёртывания. Проверка здоровья целевой группы на `GET /readyz` проверяет, что хранилище доступно, поэтому задача, которая не может достичь Postgres, никогда не входит в ротацию. Чтобы держать задачи проходящими проверку через короткий сбой базы данных, такой как отказ RDS, установите `store.readiness_grace_seconds`, как описано в [Поведение при сбое](/docs/ru/claude-apps-gateway-deploy#outage-behavior), которое также охватывает альтернативу `/healthz`.428 Период благодати в 60 секунд даёт холодной задаче время на извлечение образа, подключение к хранилищу и ответ на первую проверку здоровья перед тем, как ECS начнёт считать отказы против развёртывания.

429 429 

430 Задачи работают в приватных подсетях без публичного IP, поэтому весь исходящий трафик (в Bedrock, ваш IdP, Secrets Manager, ECR и CloudWatch Logs) проходит через NAT gateway. Чтобы держать трафик Bedrock вне публичного пути, создайте интерфейсную конечную точку VPC `bedrock-runtime` и укажите `base_url` upstream на неё, как показано в [справочнике upstream Bedrock](/docs/ru/claude-apps-gateway-config#amazon-bedrock); IdP всё ещё нуждается в исходящем доступе в интернет.430 Проверка здоровья целевой группы на `GET /readyz` проверяет, что хранилище доступно, поэтому задача, которая не может достичь Postgres, никогда не входит в ротацию. Чтобы держать задачи проходящими проверку через короткий сбой базы данных, такой как отказ RDS, установите `store.readiness_grace_seconds`, как описано в [Поведение при сбое](/docs/ru/claude-apps-gateway-deploy#outage-behavior), которое также охватывает альтернативу `/healthz`.

431 

432 Задачи работают в приватных подсетях без публичного IP, поэтому весь исходящий трафик (в Bedrock, ваш IdP, Secrets Manager, ECR и CloudWatch Logs) проходит через NAT gateway. Чтобы держать трафик Bedrock вне публичного пути, создайте интерфейсный эндпоинт VPC `bedrock-runtime` и укажите `base_url` upstream на него, как показано в [справочнике upstream Bedrock](/docs/ru/claude-apps-gateway-config#amazon-bedrock); IdP всё ещё нуждается в исходящем доступе в интернет.

431 433 

432 Завершите, дав разработчикам приватно разрешаемое имя хоста: в приватной зоне Route 53 создайте псевдоним внутреннего имени DNS gateway на ALB и установите `listen.public_url` на это имя хоста. Собственное имя `*.elb.amazonaws.com` ALB разрешается на приватные адреса на внутреннем ALB, но оно не может нести ваш сертификат ACM, поэтому используйте своё имя.434 Завершите, дав разработчикам приватно разрешаемое имя хоста: в приватной зоне Route 53 создайте псевдоним внутреннего имени DNS gateway на ALB и установите `listen.public_url` на это имя хоста. Собственное имя `*.elb.amazonaws.com` ALB разрешается на приватные адреса на внутреннем ALB, но оно не может нести ваш сертификат ACM, поэтому используйте своё имя.

433 435 

434 Обновите URI перенаправления авторизованного клиента OAuth на `<public_url>/oauth/callback` перед первым входом. После изменения `public_url`, пересоберите и отправьте образ под новым тегом, зарегистрируйте новую редакцию определения задачи и переразвёртывайте. На ECS параметр живёт в встроенном `gateway.yaml` образа, и gateway строит свой публичный источник только из этого параметра, игнорируя `X-Forwarded-Host` и `X-Forwarded-Proto`. `X-Forwarded-For` соблюдается для IP клиентов только когда установлен `listen.trusted_proxies`.436 Обновите URI перенаправления авторизованного клиента OAuth на `<public_url>/oauth/callback` перед первым входом. После изменения `public_url`, пересоберите и отправьте образ под новым тегом, зарегистрируйте новую редакцию определения задачи и переразвёртывайте. На ECS настройка живёт во встроенном `gateway.yaml` образа, и gateway строит свой публичный источник только из этой настройки, игнорируя `X-Forwarded-Host` и `X-Forwarded-Proto`. `X-Forwarded-For` соблюдается для IP клиентов только когда установлен `listen.trusted_proxies`.

435 </Tab>437 </Tab>

436 438 

437 <Tab title="EKS">439 <Tab title="EKS">

438 Этот трек нуждается в установленных `kubectl` и `eksctl` локально, и существующем кластере EKS с поставщиком IAM OIDC и установленным AWS Load Balancer Controller. Кластер должен быть на `$VPC_ID`, чтобы поды могли достичь приватной конечной точки RDS, и группа безопасности `claude-gateway-db` должна допускать группу безопасности пода или узла кластера вместо `$GW_SG`.440 Этот трек нуждается в установленных `kubectl` и `eksctl` локально, и существующем кластере EKS с поставщиком IAM OIDC и установленным AWS Load Balancer Controller. Кластер должен быть на `$VPC_ID`, чтобы поды могли достичь приватного эндпоинта RDS, и группа безопасности `claude-gateway-db` должна допускать группу безопасности пода или узла кластера вместо `$GW_SG`.

439 441 

440 На EKS gateway получает свои учётные данные Bedrock через IRSA, а не роли ECS. Политика доверия `ecs-tasks.amazonaws.com` из шага IAM не применяется здесь; IRSA нуждается в роли, чья политика доверия федерирует на поставщика OIDC кластера, ограниченном `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` создаёт эту роль, присоединяет политики и аннотирует учётную запись сервиса Kubernetes с ARN роли в один шаг. Превратите два документа политики из шага IAM в управляемые политики, которые он может присоединить:442 На EKS gateway получает свои учётные данные Bedrock через IRSA, а не роли ECS. Политика доверия `ecs-tasks.amazonaws.com` из шага IAM не применяется здесь; IRSA нуждается в роли, чья политика доверия федерирует на поставщика OIDC кластера, ограниченной `system:serviceaccount:claude-gateway:gateway`. `eksctl create iamserviceaccount` создаёт эту роль, присоединяет политики и аннотирует учётную запись сервиса Kubernetes с ARN роли в один шаг. Превратите два документа политики из шага IAM в управляемые политики, которые он может присоединить:

441 443 

442 ```bash theme={null}444 ```bash theme={null}

443 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \445 BEDROCK_POLICY_ARN="$(aws iam create-policy --policy-name claude-gateway-bedrock-invoke \


464 Для фронтенда, Ingress, управляемый AWS Load Balancer Controller, предусматривает внутренний ALB. Аннотируйте его с:466 Для фронтенда, Ingress, управляемый AWS Load Balancer Controller, предусматривает внутренний ALB. Аннотируйте его с:

465 467 

466 * `alb.ingress.kubernetes.io/scheme: internal` и `alb.ingress.kubernetes.io/target-type: ip`468 * `alb.ingress.kubernetes.io/scheme: internal` и `alb.ingress.kubernetes.io/target-type: ip`

467 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, поэтому записи AAAA общественного диапазона не публикуются для проверки приватной сети `/login` [private-network check](/docs/ru/claude-apps-gateway#prerequisites) отклонить469 * `alb.ingress.kubernetes.io/ip-address-type: ipv4`, чтобы не публиковались записи AAAA общественного диапазона, которые [проверка приватной сети](/docs/ru/claude-apps-gateway#prerequisites) `/login` отклонила бы

468 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, поэтому контроллер-управляемая группа безопасности фронтенда допускает только вашу корпоративную сеть вместо значения по умолчанию `0.0.0.0/0`470 * `alb.ingress.kubernetes.io/inbound-cidrs: <your-corporate-cidr>`, поэтому контроллер-управляемая группа безопасности фронтенда допускает только вашу корпоративную сеть вместо значения по умолчанию `0.0.0.0/0`

469 * `alb.ingress.kubernetes.io/certificate-arn` с сертификатом ACM471 * `alb.ingress.kubernetes.io/certificate-arn` с сертификатом ACM

470 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, поэтому слушатель не возвращается к устаревшей политике по умолчанию, которая принимает TLS 1.0 и 1.1472 * `alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-TLS13-1-2-2021-06`, поэтому слушатель не возвращается к устаревшей политике по умолчанию, которая принимает TLS 1.0 и 1.1

471 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, запас выше keepalive потоков gateway; см. [Troubleshooting](#troubleshooting)473 * `alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=3600`, запас выше keepalive потоковой передачи gateway; см. [Устранение неполадок](#troubleshooting)

472 474 

473 С IRSA, AWS SDK читает спроецированный токен учётной записи сервиса и обменивает его с AWS STS, поэтому под никогда не нуждается в сервисе метаданных экземпляра EC2; NetworkPolicy исходящего трафика может блокировать `169.254.169.254` для подов gateway. Проблема с лимитом переходов узла в [Troubleshooting](#troubleshooting) ниже применяется только к кластерам, которые пропускают IRSA и полагаются на роли экземпляра узла.475 С IRSA, AWS SDK читает спроецированный токен учётной записи сервиса и обменивает его с AWS STS, поэтому под никогда не нуждается в сервисе метаданных экземпляра EC2; NetworkPolicy исходящего трафика может блокировать `169.254.169.254` для подов gateway. Проблема с лимитом переходов узла в разделе [Устранение неполадок](#troubleshooting) ниже применяется только к кластерам, которые пропускают IRSA и полагаются на роли экземпляра узла.

474 </Tab>476 </Tab>

475 </Tabs>477 </Tabs>

476 </Step>478 </Step>

477 479 

478 <Step title="Отправьте URL gateway на машины разработчиков">480 <Step title="Отправьте URL gateway на машины разработчиков">

479 Gateway теперь работает, но разработчики не могут достичь его из `/login` до тех пор, пока URL gateway не будет на их машинах. Установите `forceLoginMethod` и `forceLoginGatewayUrl` в [файле управляемых параметров](/docs/ru/claude-apps-gateway#set-the-gateway-url), который вы развёртываете на каждом устройстве через MDM. Нет опции gateway в средстве выбора входа для разработчика, чтобы выбрать вручную.481 Gateway теперь работает, но разработчики не могут достичь его из `/login` до тех пор, пока URL gateway не будет на их машинах. Установите `forceLoginMethod` и `forceLoginGatewayUrl` в [файле управляемых настроек](/docs/ru/claude-apps-gateway#set-the-gateway-url), который вы развёртываете на каждом устройстве через MDM. Нет опции gateway в средстве выбора входа для разработчика, чтобы выбрать вручную.

480 </Step>482 </Step>

481</Steps>483</Steps>

482 484 

Details

442`claude --cloud` и `claude --teleport` требуют входа с аккаунтом claude.ai. Если вы аутентифицируетесь с помощью API-ключа или ваши сохранённые данные аккаунта устарели, вы увидите одно из следующего:442`claude --cloud` и `claude --teleport` требуют входа с аккаунтом claude.ai. Если вы аутентифицируетесь с помощью API-ключа или ваши сохранённые данные аккаунта устарели, вы увидите одно из следующего:

443 443 

444* `Unable to get organization UUID`444* `Unable to get organization UUID`

445* Сообщение о том, что аутентификации с помощью API-ключа недостаточно445* ``Cloud sessions need a claude.ai sign-in. Run `claude auth login` (or /login in a local session), then try again.``

446* `Error loading Claude Code sessions` в окне выбора сессии, если вы запускаете `claude --teleport` без ID сессии446* `Error loading Claude Code sessions` в окне выбора сессии, если вы запускаете `claude --teleport` без ID сессии

447 447 

448Запустите `/login` для входа с вашим аккаунтом claude.ai, затем повторите команду. Если вместо этого в ошибке указан ваш поставщик, см. [таблицу ошибок](#errors-when-sending-to-a-cloud-session): облачные сессии недоступны через сторонних поставщиков.448Запустите [`claude auth login`](/docs/ru/cli-reference#cli-commands) в оболочке, чтобы войти с вашим аккаунтом claude.ai, затем повторите команду. Внутри запущенной сессии то же самое делает `/login`. Если вместо этого в ошибке указан ваш поставщик, см. [таблицу ошибок](#errors-when-sending-to-a-cloud-session): облачные сессии недоступны через сторонних поставщиков.

449 

450В версиях с v2.1.274 по v2.1.289 сообщение о входе было таким: `Claude Code cloud sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.`

449 451 

450<h3 id="remote-control-session-expired-or-access-denied">452<h3 id="remote-control-session-expired-or-access-denied">

451 Remote Control session expired or access denied453 Remote Control session expired or access denied

Details

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

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

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

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

35| `claude daemon run` | Запустить [супервизор](/docs/ru/agent-view#the-supervisor-process) фоновых сессий на переднем плане этого терминала с выводом его лога | `claude daemon run` |

34| `claude daemon status` | Вывести состояние [супервизора](/docs/ru/agent-view#the-supervisor-process) фоновых сессий, версию, каталог сокетов и количество рабочих процессов для диагностики. Завершается с кодом 1, если супервизор не запущен | `claude daemon status` |36| `claude daemon status` | Вывести состояние [супервизора](/docs/ru/agent-view#the-supervisor-process) фоновых сессий, версию, каталог сокетов и количество рабочих процессов для диагностики. Завершается с кодом 1, если супервизор не запущен | `claude daemon status` |

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

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

Details

92* Сохранить снимок экрана с помощью **Cmd+S** или запись экрана с помощью **Cmd+R**, используя кнопки захвата панели или сочетания клавиш; файлы сохраняются на ваш Desktop92* Сохранить снимок экрана с помощью **Cmd+S** или запись экрана с помощью **Cmd+R**, используя кнопки захвата панели или сочетания клавиш; файлы сохраняются на ваш Desktop

93* Остановить трансляцию устройства без его выключения, нажав **Detach simulator**, что вернёт панель в состояние **Attach simulator**93* Остановить трансляцию устройства без его выключения, нажав **Detach simulator**, что вернёт панель в состояние **Attach simulator**

94 94 

95Чтобы настроить видеопоток от симулятора, откройте меню **Display** панели. Снизьте **Frame rate** или **Resolution**, если панель перегружает ваш Mac. Обе настройки изменяют способ отображения устройства панелью, а не способ работы приложения.95Если на панели отображается меню **Display**, используйте его, чтобы настроить видеопоток от симулятора. Снизьте **Frame rate** или **Resolution**, если панель перегружает ваш Mac. Обе настройки изменяют способ отображения устройства панелью, а не способ работы приложения.

96 96 

97Вы и Claude управляете одним и тем же устройством, поэтому ваши касания изменяют состояние приложения, которое видит Claude. Чтобы Claude проверил конкретный экран, перейдите к нему, касаясь, затем попросите. Пока Claude управляет устройством, панель показывает значок **Claude is using this device** над экраном; воздержитесь от касания до тех пор, пока значок не исчезнет, чтобы результат отражал приложение, а не ваш ввод.97Вы и Claude управляете одним и тем же устройством, поэтому ваши касания изменяют состояние приложения, которое видит Claude. Чтобы Claude проверил конкретный экран, перейдите к нему, касаясь, затем попросите. Пока Claude управляет устройством, панель показывает значок **Claude is using this device** над экраном; воздержитесь от касания до тех пор, пока значок не исчезнет, чтобы результат отражал приложение, а не ваш ввод.

98 98 

env-vars.md +1 −0

Details

354| `CLAUDE_CODE_PERFORCE_MODE` | Установите `1`, чтобы включить защиту от записи с учётом Perforce. Если переменная задана, Edit, Write и NotebookEdit завершаются неудачей с подсказкой `p4 edit <file>`, когда у целевого файла отсутствует бит записи для владельца, который Perforce снимает у синхронизированных файлов, пока `p4 edit` не откроет их. Это не позволяет Claude Code обходить отслеживание изменений Perforce |354| `CLAUDE_CODE_PERFORCE_MODE` | Установите `1`, чтобы включить защиту от записи с учётом Perforce. Если переменная задана, Edit, Write и NotebookEdit завершаются неудачей с подсказкой `p4 edit <file>`, когда у целевого файла отсутствует бит записи для владельца, который Perforce снимает у синхронизированных файлов, пока `p4 edit` не откроет их. Это не позволяет Claude Code обходить отслеживание изменений Perforce |

355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Переопределяет корневой каталог плагинов. Несмотря на название, задаёт родительский каталог, а не сам кэш: маркетплейсы и кэш плагинов находятся в подкаталогах по этому пути. По умолчанию `~/.claude/plugins` |355| `CLAUDE_CODE_PLUGIN_CACHE_DIR` | Переопределяет корневой каталог плагинов. Несмотря на название, задаёт родительский каталог, а не сам кэш: маркетплейсы и кэш плагинов находятся в подкаталогах по этому пути. По умолчанию `~/.claude/plugins` |

356| `CLAUDE_CODE_PLUGIN_DIRS` | Каталоги плагинов для загрузки в сессию; каждый загружается так же, как его загружает флаг [`--plugin-dir`](/docs/ru/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Разделяйте несколько путей символом `:` в Unix или `;` в Windows. Указывайте каждый путь как абсолютный или начинайте его с `~`, поскольку Claude Code пропускает относительные пути. Требуется Claude Code v2.1.280 или новее. См. [Загрузка плагина для одной сессии](/docs/ru/plugins/create#load-a-directory-or-archive-for-one-session) |356| `CLAUDE_CODE_PLUGIN_DIRS` | Каталоги плагинов для загрузки в сессию; каждый загружается так же, как его загружает флаг [`--plugin-dir`](/docs/ru/plugins/cli-reference#flags-that-load-a-plugin-for-one-session). Разделяйте несколько путей символом `:` в Unix или `;` в Windows. Указывайте каждый путь как абсолютный или начинайте его с `~`, поскольку Claude Code пропускает относительные пути. Требуется Claude Code v2.1.280 или новее. См. [Загрузка плагина для одной сессии](/docs/ru/plugins/create#load-a-directory-or-archive-for-one-session) |

357| `CLAUDE_CODE_PLUGIN_DIR_WATCH` | Управляет тем, перезагружает ли Claude Code [мод](/docs/ru/plugins/mods/overview) при изменении файлов мода. Перезагрузка применяется к моду, который вы загружаете из каталога с помощью `--plugin-dir`, и по умолчанию включена в интерактивных сессиях. Установите `1`, чтобы включить её также в неинтерактивных сессиях, или `0`, чтобы отключить её во всех сессиях. Требуется Claude Code v2.1.287 или новее. См. [настройки и переменные окружения мода](/docs/ru/plugins/mods/reference#settings-and-environment-variables) |

357| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Таймаут в миллисекундах для клонирования или обновления маркетплейса плагинов (по умолчанию: 120000). Увеличьте это значение для больших репозиториев или медленных сетевых подключений. См. [Git clone timed out](/docs/ru/plugins/troubleshooting#git-clone-timed-out-after-120s) |358| `CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS` | Таймаут в миллисекундах для клонирования или обновления маркетплейса плагинов (по умолчанию: 120000). Увеличьте это значение для больших репозиториев или медленных сетевых подключений. См. [Git clone timed out](/docs/ru/plugins/troubleshooting#git-clone-timed-out-after-120s) |

358| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Установите `1`, чтобы пропустить попытку повторного клонирования и продолжить использовать существующую копию маркетплейса, когда при обновлении маркетплейса не удаётся связаться с удалённым репозиторием или пройти аутентификацию. Полезно в автономных или изолированных средах, где повторное клонирование завершилось бы такой же ошибкой. См. [Обновления маркетплейса не выполняются в автономных средах](/docs/ru/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |359| `CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE` | Установите `1`, чтобы пропустить попытку повторного клонирования и продолжить использовать существующую копию маркетплейса, когда при обновлении маркетплейса не удаётся связаться с удалённым репозиторием или пройти аутентификацию. Полезно в автономных или изолированных средах, где повторное клонирование завершилось бы такой же ошибкой. См. [Обновления маркетплейса не выполняются в автономных средах](/docs/ru/plugins/troubleshooting#marketplace-updates-keep-failing-offline) |

359| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Установите `1`, чтобы клонировать источники GitHub в сокращённой форме `owner/repo` по HTTPS вместо SSH. Применяется к установке и обновлению плагинов, а также к `/plugin marketplace add` и `update`. Полезно в CI-раннерах, контейнерах или любых средах без настроенного SSH-ключа для `github.com` |360| `CLAUDE_CODE_PLUGIN_PREFER_HTTPS` | Установите `1`, чтобы клонировать источники GitHub в сокращённой форме `owner/repo` по HTTPS вместо SSH. Применяется к установке и обновлению плагинов, а также к `/plugin marketplace add` и `update`. Полезно в CI-раннерах, контейнерах или любых средах без настроенного SSH-ключа для `github.com` |

errors.md +1 −0

Details

197| `Cloud sessions cannot be created from a --restricted session` | [Command-line errors](#cloud-sessions-cannot-be-created-from-a-restricted-session) |197| `Cloud sessions cannot be created from a --restricted session` | [Command-line errors](#cloud-sessions-cannot-be-created-from-a-restricted-session) |

198| `Cloud sessions are disabled by your organization's policy` | [Command-line errors](#cloud-sessions-are-disabled-by-your-organizations-policy) |198| `Cloud sessions are disabled by your organization's policy` | [Command-line errors](#cloud-sessions-are-disabled-by-your-organizations-policy) |

199| `Couldn't verify your organization's policy for cloud sessions` | [Command-line errors](#cloud-sessions-are-disabled-by-your-organizations-policy) |199| `Couldn't verify your organization's policy for cloud sessions` | [Command-line errors](#cloud-sessions-are-disabled-by-your-organizations-policy) |

200| `Cloud sessions need a claude.ai sign-in` | [Unable to get organization UUID](/docs/ru/claude-code-on-the-web#unable-to-get-organization-uuid) |

200| `Error: --json-schema is not a valid JSON Schema` | [Command-line errors](#the-json-schema-value-is-not-a-valid-json-schema) |201| `Error: --json-schema is not a valid JSON Schema` | [Command-line errors](#the-json-schema-value-is-not-a-valid-json-schema) |

201| `Error: Invalid --agents configuration:` | [Command-line errors](#invalid-agents-configuration) |202| `Error: Invalid --agents configuration:` | [Command-line errors](#invalid-agents-configuration) |

202| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Command-line errors](#invalid-agents-configuration) |203| `Error: --agents takes a JSON object, or a file path only with --print (-p)` | [Command-line errors](#invalid-agents-configuration) |

Details

733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.733You are a security reviewer. Read the changed files and report injection, authentication, and secrets-handling risks.

734```734```

735 735 

736Этот агент назван `my-plugin:security-reviewer`, и пользователь может [вызвать его явно](/docs/ru/sub-agents#invoke-subagents-explicitly) с помощью `@agent-my-plugin:security-reviewer`. Форма имени — `<plugin>:<name>`, где `<name>` берётся из frontmatter или из имени файла, когда его нет.736Этот агент называется `my-plugin:security-reviewer`, и пользователь может [вызвать его явно](/docs/ru/sub-agents#invoke-subagents-explicitly) с помощью `@agent-my-plugin:security-reviewer`. Форма имени — `<plugin>:<name>`, где `<name>` берётся из поля `name` во frontmatter или из имени файла, если это поле отсутствует.

737 737 

738Ключ `agents` манифеста заменяет сканирование `agents/`.738Ключ `agents` манифеста заменяет сканирование `agents/`.

739 739 

Details

563Многие панели — это текстовое поле со списком под ним. Пример в этом разделе — панель заметок: вы вводите заметку и нажимаете Enter, чтобы добавить ее, и каждая заметка имеет кнопку `x`, которая удаляет ее. С двумя добавленными заметками терминал рисует панель таким образом:563Многие панели — это текстовое поле со списком под ним. Пример в этом разделе — панель заметок: вы вводите заметку и нажимаете Enter, чтобы добавить ее, и каждая заметка имеет кнопку `x`, которая удаляет ее. С двумя добавленными заметками терминал рисует панель таким образом:

564 564 

565```text theme={null}565```text theme={null}

566╭──────────────────────────────────────────────────────────╮566╭────────────────────────────────────────────────────────✕─╮

567│ Note: Type a note and press Enter ⏎ add ✕ │567│ Note: Type a note and press Enter ⏎ add │

568│ x buy milk │568│ x buy milk │

569│ x call bob │569│ x call bob │

570╰──────────────────────────────────────────────────────────╯570╰──────────────────────────────────────────────────────────╯

571```571```

572 572 

573`✕` на верхней границе — это собственная отметка Claude Code для закрытия панели.

574 

573Пример использует следующие техники:575Пример использует следующие техники:

574 576 

575* **Получение введенного текста**: `Input` вызывает `onSubmit(value)` с текстом поля, когда пользователь нажимает Enter, и `onInput(value)` при каждом изменении577* **Получение введенного текста**: `Input` вызывает `onSubmit(value)` с текстом поля, когда пользователь нажимает Enter, и `onInput(value)` при каждом изменении

Details

242Чтобы подогнать дерево под точку отрисовки, читайте в хуке следующие пропсы:242Чтобы подогнать дерево под точку отрисовки, читайте в хуке следующие пропсы:

243 243 

244* **Ширина `Pane` или полосы**: рисуйте по `e.props.bodyColumns`244* **Ширина `Pane` или полосы**: рисуйте по `e.props.bodyColumns`

245* **Высота `Pane` рядом с транскриптом**: когда `e.props.placement` равно `'dock'`, `e.props.scroll.bodyRows` — это число строк панели245* **Высота `Pane` рядом с транскриптом**: когда `e.props.placement` равно `'dock'`, `e.props.scroll.bodyRows` — это число строк, которые панель отводит под ваше дерево

246* **Высота `Pane` над промптом**: когда `e.props.placement` равно `'inline'`, панель растёт вместе с вашим деревом до предела, а `bodyRows` — это этот предел. [Поле `rows` в `$.ui.open`](/docs/ru/plugins/mods/interface#open-a-pane-at-the-right-time) запрашивает другой предел.246* **Высота `Pane` над промптом**: когда `e.props.placement` равно `'inline'`, панель растёт вместе с вашим деревом до предела, а `bodyRows` — это этот предел. [Поле `rows` в `$.ui.open`](/docs/ru/plugins/mods/interface#open-a-pane-at-the-right-time) запрашивает другой предел.

247 247 

248Дерево, которое выше панели, прокручивается целиком.248Дерево, которое выше панели, прокручивается целиком.

Details

15<Note>15<Note>

16 Эти случаи рассматриваются на других страницах:16 Эти случаи рассматриваются на других страницах:

17 17 

18 * **Почему области видимости, кэш и приоритет ведут себя так, как они себя ведут**: прочитайте [Справочник по загрузке плагинов](/docs/ru/plugins/loading)18 * **Почему области действия, кэш и приоритет ведут себя так, как они себя ведут**: прочитайте [Справочник по загрузке плагинов](/docs/ru/plugins/loading)

19 * **Поиск флага, поля или команды**: используйте [справочник команд плагинов](/docs/ru/plugins/cli-reference), [справочник манифеста](/docs/ru/plugins/manifest-reference) или [справочник маркетплейса](/docs/ru/plugins/marketplace-reference)19 * **Поиск флага, поля или команды**: используйте [справочник команд плагинов](/docs/ru/plugins/cli-reference), [справочник манифеста](/docs/ru/plugins/manifest-reference) или [справочник маркетплейса](/docs/ru/plugins/marketplace-reference)

20 * **Сообщение `hooks module not loaded` или `hooks module did not load`**: плагин является [модом](/docs/ru/plugins/mods/overview), поэтому прочитайте [Мод не загружается](/docs/ru/plugins/mods/troubleshoot#the-mod-doesn’t-load)

20</Note>21</Note>

21 22 

22Найдите точное сообщение, которое вы видели. Каждое сообщение указано под этапом, который его создаёт, что не всегда совпадает с командой, которую вы запустили. Например, установка может завершиться ошибкой, потому что маркетплейс отсутствует, поэтому это сообщение находится в разделе [Добавить маркетплейс](#add-a-marketplace).23Найдите точное сообщение, которое вы видели. Каждое сообщение указано под этапом, который его создаёт, что не всегда совпадает с командой, которую вы запустили. Например, установка может завершиться ошибкой, потому что маркетплейс отсутствует, поэтому это сообщение находится в разделе [Добавить маркетплейс](#add-a-marketplace).

sessions.md +3 −3

Details

83* Терминал: `claude --continue`, `claude --resume <session-id>` или `claude --resume <name>`, когда имя соответствует одному сеансу, без `-p`. Claude Code восстанавливает режим разрешений, в котором находился сеанс, за исключением случаев в таблице. Передайте `--permission-mode` или `--dangerously-skip-permissions`, чтобы переопределить восстановленный режим.83* Терминал: `claude --continue`, `claude --resume <session-id>` или `claude --resume <name>`, когда имя соответствует одному сеансу, без `-p`. Claude Code восстанавливает режим разрешений, в котором находился сеанс, за исключением случаев в таблице. Передайте `--permission-mode` или `--dangerously-skip-permissions`, чтобы переопределить восстановленный режим.

84* Неинтерактивный: `claude -p --resume` или `claude -p --continue`. Claude Code запускает выполнение в режиме разрешений, в котором запустился бы новый запуск `claude -p`, за исключением того, что сеанс, который завершился в режиме Plan Mode, возобновляется в режиме Plan Mode при [условиях ниже](#resume-in-plan-mode-with-p).84* Неинтерактивный: `claude -p --resume` или `claude -p --continue`. Claude Code запускает выполнение в режиме разрешений, в котором запустился бы новый запуск `claude -p`, за исключением того, что сеанс, который завершился в режиме Plan Mode, возобновляется в режиме Plan Mode при [условиях ниже](#resume-in-plan-mode-with-p).

85* VS Code: панель диалога расширения. Таблица охватывает только диалог, который завершился в режиме Plan Mode; для остального см. [возобновление прошлых диалогов](/docs/ru/vs-code#resume-past-conversations).85* VS Code: панель диалога расширения. Таблица охватывает только диалог, который завершился в режиме Plan Mode; для остального см. [возобновление прошлых диалогов](/docs/ru/vs-code#resume-past-conversations).

86* Средство выбора сеансов при запуске: сеанс, который вы выбираете из [средства выбора сеансов](#use-the-session-picker), независимо от того, открыли ли вы его с помощью `claude --resume` отдельно, `claude --from-pr` или имени, которое соответствует более чем одному сеансу. Claude Code не восстанавливает сохранённый режим разрешений. Он запускает сеанс в режиме разрешений, в котором он запустил бы новый сеанс из той же командной строки.86* Средство выбора сессий при запуске: сессия, которую вы выбираете в [средстве выбора сессий](#use-the-session-picker), независимо от того, открыли ли вы его с помощью одного `claude --resume`, `claude --from-pr` или имени, соответствующего нескольким сессиям. Claude Code запускает сессию в том режиме разрешений, в котором запустил бы новую сессию из той же командной строки, за исключением того, что сессия, завершившаяся в режиме планирования, возобновляется в режиме планирования, если вы не передали `--permission-mode`, `--dangerously-skip-permissions` или `--fork-session`. Никакой другой сохранённый режим разрешений не восстанавливается.

87* `/resume` внутри сеанса, с аргументом или без: Claude Code не восстанавливает сохранённый режим разрешений. Диалог, на который вы переключаетесь, продолжается в режиме разрешений, в котором находится ваш текущий сеанс.87* `/resume` внутри сессии, с аргументом или без: диалог, на который вы переключаетесь, продолжается в режиме разрешений вашей текущей сессии, за исключением того, что диалог, завершившийся в режиме планирования, возобновляется в режиме планирования, даже если вы запустили Claude Code с `--permission-mode` или `--dangerously-skip-permissions`. Если этот диалог уже открывался ранее в текущем запуске Claude Code, например диалог, с которого вы начали, или диалог, который вы покинули с помощью `/clear` или `/resume`, он вместо этого продолжается в вашем текущем режиме разрешений.

88 88 

89Восстановление режима Plan Mode на неинтерактивном пути и пути VS Code требует Claude Code v2.1.246 или более поздней версии. Каждая строка называет режим разрешений, в котором завершился сеанс, какой из путей терминала, неинтерактивного и VS Code вы его возобновляете, и режим разрешений, в котором Claude Code запускает возобновлённый сеанс.89Восстановление режима Plan Mode на неинтерактивном пути и пути VS Code требует Claude Code v2.1.246 или более поздней версии. Каждая строка называет режим разрешений, в котором завершился сеанс, какой из путей терминала, неинтерактивного и VS Code вы его возобновляете, и режим разрешений, в котором Claude Code запускает возобновлённый сеанс.

90 90 

91| Сеанс завершился в | Как вы возобновляете | Режим разрешений после возобновления |91| Сеанс завершился в | Как вы возобновляете | Режим разрешений после возобновления |

92| :- | :- | :- |92| :- | :- | :- |

93| `bypassPermissions` | Терминал | Режим разрешений, в котором запустился бы новый сеанс. Чтобы [пропустить разрешения](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) снова, включите его при запуске с одним из его флагов запуска или `permissions.defaultMode: "bypassPermissions"` в [пользовательских, `--settings` или управляемых параметрах](/docs/ru/settings-reference#permissions-defaultmode) |93| `bypassPermissions` | Терминал | Режим разрешений, в котором запустился бы новый сеанс. Чтобы [пропустить разрешения](/docs/ru/permission-modes#skip-all-checks-with-bypasspermissions-mode) снова, включите его при запуске с одним из его флагов запуска или `permissions.defaultMode: "bypassPermissions"` в [пользовательских, `--settings` или управляемых параметрах](/docs/ru/settings-reference#permissions-defaultmode) |

94| `plan` | Терминал | Режим разрешений, в котором запустился бы новый сеанс |94| `plan` | Терминал | Режим планирования. С `--fork-session` — режим разрешений, в котором запустилась бы новая сессия |

95| `auto` | Терминал | `auto`, только когда ваша учётная запись всё ещё соответствует [требованиям режима auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) |95| `auto` | Терминал | `auto`, только когда ваша учётная запись всё ещё соответствует [требованиям режима auto](/docs/ru/permission-modes#eliminate-prompts-with-auto-mode) |

96| Manual | Терминал | Manual, когда новый сеанс запустился бы в режиме auto из [встроенного значения по умолчанию](/docs/ru/permission-modes#which-mode-a-session-starts-in). Когда `defaultMode` из файла параметров [вступает в силу](/docs/ru/permission-modes#which-mode-a-session-starts-in), Claude Code запускает возобновлённый сеанс в этом режиме вместо этого |96| Manual | Терминал | Manual, когда новый сеанс запустился бы в режиме auto из [встроенного значения по умолчанию](/docs/ru/permission-modes#which-mode-a-session-starts-in). Когда `defaultMode` из файла параметров [вступает в силу](/docs/ru/permission-modes#which-mode-a-session-starts-in), Claude Code запускает возобновлённый сеанс в этом режиме вместо этого |

97| `plan` | Неинтерактивный, при [условиях ниже](#resume-in-plan-mode-with-p) | Режим Plan Mode |97| `plan` | Неинтерактивный, при [условиях ниже](#resume-in-plan-mode-with-p) | Режим Plan Mode |

sub-agents.md +2 −2

Details

310 310 

311| Field | Требуется | Description |311| Field | Требуется | Description |

312| :- | :- | :- |312| :- | :- | :- |

313| `name` | Да | Уникальный идентификатор, такой как `code-reviewer` или `reviewer-v2`. [Hooks](/docs/ru/hooks#subagentstart) получают это значение как `agent_type`. Имя файла не должно совпадать. Имена не могут содержать `:`, который зарезервирован для [plugin-scoped identifiers](/docs/ru/plugins/overview) таких как `my-plugin:reviewer`. Claude Code не загружает файл, чьё имя содержит один, и регистрирует ошибку в журнал отладки. До версии 2.1.218 такие имена были приняты |313| `name` | Да | Уникальный идентификатор длиной не более 256 символов, например `code-reviewer` или `reviewer-v2`. [Хуки](/docs/ru/hooks#subagentstart) получают это значение как `agent_type`. Имя файла не обязано совпадать. Имена не могут содержать `:`, который зарезервирован для [идентификаторов с областью действия плагина](/docs/ru/plugins/overview), таких как `my-plugin:reviewer` |

314| `description` | Да | Когда Claude должен делегировать этому subagent |314| `description` | Да | Когда Claude должен делегировать этому subagent |

315| `tools` | Нет | [Инструменты](#available-tools), которые может использовать subagent, как строка, разделённая запятыми, такая как `Read, Grep, Bash` или список YAML. Наследует каждый инструмент, доступный для subagents, если опущено. Если ни один элемент в списке не разрешается в инструмент, subagent обычно [не запускается](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) с ошибкой, называющей элементы. Чтобы предварительно загрузить Skills в контекст, используйте поле `skills` вместо перечисления `Skill` здесь |315| `tools` | Нет | [Инструменты](#available-tools), которые может использовать subagent, как строка, разделённая запятыми, такая как `Read, Grep, Bash` или список YAML. Наследует каждый инструмент, доступный для subagents, если опущено. Если ни один элемент в списке не разрешается в инструмент, subagent обычно [не запускается](/docs/ru/errors#agent-would-be-spawned-with-zero-tools) с ошибкой, называющей элементы. Чтобы предварительно загрузить Skills в контекст, используйте поле `skills` вместо перечисления `Skill` здесь |

316| `disallowedTools` | Нет | Инструменты для запрета, удалённые из унаследованного или указанного списка. Тот же формат, что и `tools`. Запись со спецификатором, такая как `Bash(git push *)`, по-прежнему [удаляет весь инструмент](#available-tools) |316| `disallowedTools` | Нет | Инструменты для запрета, удалённые из унаследованного или указанного списка. Тот же формат, что и `tools`. Запись со спецификатором, такая как `Bash(git push *)`, по-прежнему [удаляет весь инструмент](#available-tools) |


348 348 

349* **Нет `name`**: Claude Code рассматривает файл как документацию, хранящуюся рядом с вашими агентами.349* **Нет `name`**: Claude Code рассматривает файл как документацию, хранящуюся рядом с вашими агентами.

350* **Открывающий `---`, который не является первой строкой файла**: Claude Code читает файл как не имеющий frontmatter и рассматривает его как документацию.350* **Открывающий `---`, который не является первой строкой файла**: Claude Code читает файл как не имеющий frontmatter и рассматривает его как документацию.

351* **`name`, который начинается с `-` или содержит `:`**: Claude Code пропускает файл и записывает ошибку в журнал отладки. См. строку `name` в таблице выше.351* **`name` начинается с `-`, содержит `:` или длиннее 256 символов**: Claude Code пропускает файл и записывает ошибку в лог отладки.

352* **`name`, но нет `description`**: Claude Code пропускает файл и записывает причину в журнал отладки.352* **`name`, но нет `description`**: Claude Code пропускает файл и записывает причину в журнал отладки.

353* **YAML, который не парсится**: Claude Code не читает никакие поля из файла, пропускает его и записывает ошибку парсинга в журнал отладки.353* **YAML, который не парсится**: Claude Code не читает никакие поля из файла, пропускает его и записывает ошибку парсинга в журнал отладки.

354 354