# Вход на сайте
[Home](/ru/ai)
[Catalog](/ru/ai/catalog)
OAuth, вход с устройства и соответствующие команды CLI.
## Pages
[Главная](/ru/ai/docs)
### Быстрый старт
[Быстрый старт](/ru/ai/docs/quickstart)
[Для человека](/ru/ai/docs/quickstart/human)
[Для ИИ-агента](/ru/ai/docs/quickstart/agent)
[Харнессы](/ru/ai/docs/harnesses)
[Понятия](/ru/ai/docs/concepts)
[Каталог](/ru/ai/docs/catalog)
### CLI
[CLI](/ru/ai/docs/cli)
[Карта команд](/ru/ai/docs/cli/commands)
[Наблюдение](/ru/ai/docs/cli/observe)
[Конфигурация](/ru/ai/docs/cli/config)
[Телеметрия](/ru/ai/docs/cli/telemetry)
[Устройство](/ru/ai/docs/cli/device)
[Паспорта](/ru/ai/docs/cli/passport)
[Вход](/ru/ai/docs/cli/auth)
[Согласие](/ru/ai/docs/cli/consent)
[Проект](/ru/ai/docs/cli/project)
[Toolchain](/ru/ai/docs/cli/toolchain)
[Harness](/ru/ai/docs/cli/harness)
[Agent Skill CLI](/ru/ai/docs/cli/skill)
[Реестр](/ru/ai/docs/cli/registry)
#### Компонент
[Обзор](/ru/ai/docs/cli/component)
[Обнаружение](/ru/ai/docs/cli/component-discover)
[Паспорт](/ru/ai/docs/cli/component-passport)
[Источник](/ru/ai/docs/cli/component-source)
[Публикация](/ru/ai/docs/cli/component-publish)
[Выбор](/ru/ai/docs/cli/select)
[Установка](/ru/ai/docs/cli/install)
[Target](/ru/ai/docs/cli/target)
[Setup](/ru/ai/docs/cli/setup)
[Provider](/ru/ai/docs/cli/provider)
[Синхронизация](/ru/ai/docs/cli/sync)
[Доступ](/ru/ai/docs/cli/grant)
[Жалобы](/ru/ai/docs/cli/report)
[Owner](/ru/ai/docs/cli/owner)
[Publication](/ru/ai/docs/cli/publication)
[Eval](/ru/ai/docs/cli/eval)
### Веб
[Веб](/ru/ai/docs/web)
[Главная](/ru/ai/docs/web/home)
[Каталог](/ru/ai/docs/web/catalog)
[Карточка компонента](/ru/ai/docs/web/catalog-component)
[Карточка сетапа](/ru/ai/docs/web/catalog-setup)
[Региональные сервисы](/ru/ai/docs/web/services)
[Издатели](/ru/ai/docs/web/publishers)
[Content](/ru/ai/docs/web/content)
[Эта документация](/ru/ai/docs/web/docs)
[Контакт](/ru/ai/docs/web/contact)
[Правовые документы](/ru/ai/docs/web/legal)
[Вход](/ru/ai/docs/web/login)
[Аккаунт](/ru/ai/docs/web/account)
[Профиль](/ru/ai/docs/web/profile)
[Устройства](/ru/ai/docs/web/devices)
[Объекты](/ru/ai/docs/web/objects)
[Доступ](/ru/ai/docs/web/access)
[Жалобы](/ru/ai/docs/web/reports)
[Лайки](/ru/ai/docs/web/likes)
[Онбординг](/ru/ai/docs/web/onboarding)
[Публикация](/ru/ai/docs/web/publications)
### Компоненты
[Компоненты](/ru/ai/docs/components)
[instruction](/ru/ai/docs/components/instruction)
[skill](/ru/ai/docs/components/skill)
[mcp](/ru/ai/docs/components/mcp)
[hook](/ru/ai/docs/components/hook)
[command](/ru/ai/docs/components/command)
[agent](/ru/ai/docs/components/agent)
[plugin](/ru/ai/docs/components/plugin)
[setting](/ru/ai/docs/components/setting)
[Сетапы](/ru/ai/docs/setups)
### Публикация
[Публикация](/ru/ai/docs/publishing)
[Авторство](/ru/ai/docs/publishing/authoring)
### Доверие и безопасность
[Обзор](/ru/ai/docs/trust-and-safety)
[Проверки безопасности](/ru/ai/docs/security-checks)
[Диагностика](/ru/ai/docs/troubleshooting)
[cli](/ru/ai/docs/components/cli)
## Content
# Вход на сайте
Вход создаёт браузерную сессию в защищённой HttpOnly cookie.
Провайдеры — Google и GitHub. Поля пароля и magic-link email нет.
Второй путь привязывает **CLI-устройство** к тому же аккаунту: CLI
печатает код пользователя, вы одобряете его на сайте, CLI завершает.
## URL и кто их видит
| Проекция | URL | Кому видно |
| --- | --- | --- |
| Human | `/{locale}/login` | всем |
| Machine | `/{locale}/ai/login` | всем |
| Одобрение устройства | `/{locale}/device-login` | после входа, чтобы одобрить |
| Устройства (та же форма) | `/{locale}/devices` | после входа |
`returnTo` должен начинаться с `/`. Всё остальное игнорируется, и
посадка по умолчанию — `/{locale}/account`. Защищённые страницы
отправляют сюда с `returnTo`, равным пути, который они хотели.
`reason=session_expired` показывает **Сессия истекла. Войдите
снова.** `status=error|cancel|conflict` соответствует Ошибка входа,
Вход отменён или сообщению, что идентичность уже привязана.
`/login` может открыть кто угодно. `/device-login` без сессии
показывает **Сначала войдите, затем подтвердите код устройства.** и
кнопку назад ко входу, сохраняя `user_code`.
## Для чего этот экран
Вход нужен, чтобы:
- начать OAuth Google или GitHub для браузера;
- восстановиться после истекшей cookie;
- скопировать команду входа CLI для устройства.
`/device-login` или [Устройства](devices.md) нужны, чтобы ввести код,
который напечатал CLI. [Онбординг](onboarding.md) — если аккаунт новый
и всё ещё `onboarding_pending`.
Вход **не**:
- сливает два существующих аккаунта (конфликт — отказ);
- создаёт локальную идентичность устройства (`device init` только в
CLI);
- хранит токен провайдера в localStorage;
- входит в харнесс (сессии Claude Code / Codex / Grok Build не
связаны).
## Что на экране
| Элемент | Подпись | Эффект |
| --- | --- | --- |
| Заголовок | Вход | — |
| Подзаголовок | Войдите через поддерживаемого провайдера. Сессия хранится в защищённой HttpOnly cookie. | — |
| Google | Войти через Google | `/v1/auth/google/login?client=web&return_to=…` |
| GitHub | Войти через GitHub | `/v1/auth/github/login?client=web&return_to=…` |
| Копия CLI | Войти с устройства через CLI | `ai-stp task start --intent account --idempotency-key account-session-01 --json` |
В mock/e2e кнопки POST в mock-действие вместо API. `?debug=1` с
моками добавляет дополнительные симуляторы ошибки/отмены. Этот гейт
не часть production.
OAuth — same-origin `/v1/auth/…` (в разработке переписывается на API).
Callback ставит session cookie. Step-up привязка **второго**
провайдера к существующему аккаунту — `/v1/auth/link/{provider}` из
[Аккаунта](account.md), не эта страница.
### Код устройства
Поля `/device-login`:
| Поле | Подпись |
| --- | --- |
| Код пользователя | Код пользователя |
| Отправка | Подтвердить устройство |
Ошибки: unknown (введите заново), expired (продолжите ту же account-задачу),
resolved (уже использован), csrf (перезагрузите), failed
(повторите). Успех: **Устройство подтверждено** — вернитесь в CLI;
опрос должен завершиться.
Human / Machine: machine-вход — заголовок, подзаголовок, повседневный
account start как блок кода и ссылка на каталог.
## Соответствующие команды CLI
Повседневный вход — intent `account`:
```bash
ai-stp task start --intent account --idempotency-key account-session-01 --json
```
Expert leaves (`auth login` / `complete` / `logout`) — если незавершённый
device code уже есть:
```text
ai-stp auth login --provider github --json
ai-stp auth login --provider google --json
ai-stp auth complete --json
ai-stp auth status --json
ai-stp auth logout --json
ai-stp link web --json
```
`--provider` обязателен и закрыт значениями `github` и `google`.
`auth login` начинает поток и печатает код для одобрения.
`auth complete` завершает, когда вы одобрили. `auth status` сообщает
local-only, authenticated, expired или revoked. `auth logout`
завершает облачную сессию и сохраняет локальные данные. `link web`
печатает канонический URL сайта.
Команды `ai-stp auth device` нет. Сайт копирует account start, не
выдуманный leaf. Следуйте CLI.
Идентичность устройства на машине отдельна:
```bash
ai-stp device init --json
ai-stp device show --json
```
`device init` не входит. `auth login` не создаёт устройство. Обычно
нужны оба, в этом порядке, на новой установке.
## Тупики
| Что видно | Что это значит | Что делать |
| --- | --- | --- |
| Ошибка входа | ошибка OAuth | повторите того же провайдера |
| Вход отменён | вы прервали у провайдера | повторите или выберите другого |
| Эта идентичность уже привязана к другому аккаунту | слияние отказано | используйте аккаунт, которому она уже принадлежит |
| Сессия истекла | устаревшая cookie | войти; `returnTo` сохранён |
| Нужен вход на device-login | нет браузерной сессии | войдите, код сохраняется |
| Неизвестный код | опечатка | введите заново; не добавляйте пробелы |
| Код истёк / уже использован | продолжите ту же account-задачу | `ai-stp task start --intent account --idempotency-key account-session-01 --json` |
| Отправили на онбординг | новый аккаунт | примите две редакции |
| Конфликт при привязке | этот Google/GitHub на другом аккаунте | сначала отвяжите там; слияния нет |
Никогда не кладите код пользователя в тикет, скриншот публичного
issue или паспорт.
## Связанные страницы
- [Аккаунт](account.md) — после успешного входа в браузере.
- [Устройства](devices.md) — список плюс та же форма одобрения.
- [Онбординг](onboarding.md) — первое правовое принятие.
- [Главная](home.md) — Войти с лендинга.
- [Вход CLI](../cli/auth.md) — конверты тех же команд.
- [Устройство](../cli/device.md) — локальная идентичность.
- [Быстрый старт для человека](../quickstart/human.md) — локальная работа без аккаунта.
??? question "Нужен ли Вход, чтобы читать каталог?"
Нет. Анонимные чтения каталога работают в браузере и как
`ai-stp registry search --json`. Вход нужен для лайков, жалоб,
устройств, объектов, грантов и confirm публикации.