# Устройство
[Home](/ru/ai)
[Catalog](/ru/ai/catalog)
Создать, посмотреть и сбросить идентичность устройства этой установки, не трогая локальные данные.
## 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
# Устройство
Идентичность устройства — локальная идентичность этой установки. Её
создают офлайн, до любого аккаунта, и она остаётся здесь, даже если
вы никогда не войдёте. Закрытый ключ доказывает, с какого устройства
пришло позднее событие синхронизации или attestation.
Это не паспорт устройства и не облачная сессия. Паспорт описывает
окружение. Сессии может не быть вовсе. Если сложить эти три вещи в
одну, «ещё нет аккаунта» и «ещё нет идентичности устройства»
выглядели бы одинаково, а следующие шаги у них разные.
## Команды
| Команда | Mutability | Confirmation | Когда |
| --- | --- | --- | --- |
| `ai-stp device init` | `apply` | `none` | создать идентичность этой установки или вернуть существующую |
| `ai-stp device show` | `read` | `none` | показать идентичность устройства и где хранится ключ |
| `ai-stp device reset` | `destructive` | `explicit_flag` | вывести эту идентичность из строя и создать новую |
`device init` идемпотентен: второй запуск возвращает идентичность,
которую сделал первый. `device show` ничего не создаёт. `device reset`
— другая команда. Она destructive, требует `--confirm` и не является
способом повторить `doctor`.
## Типичный путь
```bash
ai-stp device init --json
ai-stp device show --json
```
Для локальной работы аккаунт не нужен. Нужна эта идентичность и затем
паспорт разработчика. См. [Паспорта](passport.md).
Закрытый ключ живёт в секретном хранилище операционной системы. Если
хранилище недоступно, CLI говорит, что отступил к файлу, и не скрывает
этот факт. `credential_store` тогда `file`, а не `os_keyring`, а
`credential_store_detail` называет почему.
Не запускайте `device reset` потому, что `doctor` сообщил, что
идентичности нет. Исправление «никогда не создавали» — `device init`.
Reset — чтобы вывести из строя ключ, который эта машина больше не
должна держать.
## `device init`
Создать идентичность этой установки или вернуть существующую.
```bash
ai-stp device init --json
```
Первому запуску не нужны `sudo` и аккаунт. Если идентичность уже есть,
команда возвращает её. Ключ она не ротирует. Устройство на платформе
она не регистрирует — это происходит при [Входе](auth.md).
Если секретное хранилище не может держать ключ, конверт всё равно
успешен, и предупреждение говорит об этом. Читайте `warnings`. Не
считайте откат к файлу молчаливым.
## `device show`
Показать идентичность устройства и где хранится ключ.
```bash
ai-stp device show --json
```
Это чтение. Если идентичности нет, команда отказывает с
`AI_STP_NOT_FOUND`, а `next_actions` называет `device init`. Наблюдение
не должно создавать состояние.
Закрытого ключа в конверте нет и напечатать его нельзя по построению.
Видно публичный материал: идентификатор, открытый ключ, отпечаток и
место, где хранится секрет.
## `device reset`
Вывести эту идентичность устройства из строя и создать новую.
```bash
ai-stp device reset --confirm --json
```
`--confirm` обязателен. Без него команда отказывает с
`AI_STP_USER_DECISION_REQUIRED`. Это решение, а не сломанный флаг.
Выведенный из строя закрытый ключ уничтожается и не восстанавливается.
Выведенный `device_id` запоминается, чтобы он не вернулся. Локальные
данные — реестр, паспорта, кэшированные байты каталога, индексы
проектов — не трогаются. «Не тронуты» не значит «обратимо»: любой
облачный аккаунт, который доверял старому ключу, должен одобрить
новый, то есть нужен новый вход.
Reset — это не:
- повтор `device init`;
- способ «починить» `doctor`;
- выход из сессии (см. `auth logout`);
- заводской сброс установки.
После reset в `retired_device_ids` новой идентичности есть старый
идентификатор. Облачный доступ сам не возобновляется. Нужен новый
вход, и аккаунт должен одобрить новый ключ. Локальные паспорта, реестр
и кэшированные байты каталога остаются. Они теперь привязаны к другой
идентичности устройства; sync будет считать это другим подписантом.
=== "Нужна идентичность"
```bash
ai-stp device init --json
ai-stp device show --json
```
=== "Нужно вывести ключ из строя"
```bash
ai-stp device reset --confirm --json
ai-stp device show --json
```
Только после того, как человек решил уничтожить текущий ключ.
## Что содержит успешный конверт
Все три команды возвращают одну форму в `data`:
| Поле | Что это |
| --- | --- |
| `device_id` | идентификатор устройства этой установки |
| `public_key` | открытая половина ключа устройства |
| `key_fingerprint` | короткий отпечаток этого ключа |
| `state` | `active` или `revoked` |
| `credential_store` | `os_keyring` или `file` |
| `credential_store_detail` | почему выбрано это хранилище |
| `created_at` | когда создана эта идентичность |
| `retired_device_ids` | идентификаторы, которые эта установка вывела из строя |
| `schema_version` | major схемы этого отчёта |
Конверт также несёт `ok`, `warnings`, `next_actions`, `request_id`,
`operation_id` и `schema_version`. После `init` или `reset`
предупреждение об откате к файлу всё равно успех.
## Идентичность устройства — не паспорт устройства
| Объект | Группа команд | Что держит |
| --- | --- | --- |
| Идентичность устройства | `device` | `device_id`, пара ключей, отзыв |
| Паспорт устройства | `passport device` | наблюдаемое окружение: ОС, архитектура, установленные harness |
| Облачная сессия | `auth` | держит ли это устройство сейчас учётные данные аккаунта |
`device show` не печатает операционную систему и версии harness. Они
принадлежат `passport device show`. `auth status` не печатает
`device_id` как доказательство сессии: устройство после `init` есть
всегда, сессии может не быть.
## Чего эти команды никогда не делают
- не печатают и не экспортируют закрытый ключ;
- не кладут секрет в паспорт, журнал или файл конфигурации;
- не удаляют локальный реестр и кэшированные байты каталога;
- не входят в аккаунт и сами не регистрируют устройство на платформе;
- не пишут target harness.
## Типичные отказы
| Что видно | Что это значит | Что делать |
| --- | --- | --- |
| `AI_STP_NOT_FOUND` на `device show` | идентичность никогда не создавали | `ai-stp device init --json` |
| `AI_STP_USER_DECISION_REQUIRED` на `device reset` | не было `--confirm` | `ai-stp device reset --confirm --json` после явного решения |
| `credential_store` равен `file` | секретное хранилище ОС было недоступно | читать `credential_store_detail`; это сообщают, а не скрывают |
| doctor сообщает, что устройства нет | `device show` отказал бы так же | `device init`, не `device reset` |
| облачные вызовы падают после reset | старый ключ выведен из строя | `task start --intent account --idempotency-key account-session-01 --json` |
## Связанные страницы
| Страница | Зачем |
| --- | --- |
| [Быстрый старт для человека](../quickstart/human.md) | идентичность первого запуска связным текстом |
| [Наблюдение](observe.md) | `doctor` сообщает `device_identity` |
| [Паспорта](passport.md) | паспорт устройства против идентичности |
| [Вход](auth.md) | привязка этого устройства к аккаунту |
| [Синхронизация](sync.md) | события, которые подписывает это устройство |
| [Устройства на сайте](../web/devices.md) | та же идентичность, как её показывает сайт |
| [Диагностика](../troubleshooting/index.md) | сбои секретного хранилища и PATH |
!!! note "Флаги из `ai-stp help --agent --json`"
Если `help --agent` расходится с флагом на этой странице, прав CLI.
Необязательные флаги здесь не перечислены. Читайте их из дескриптора.
`device reset` требует `--confirm`.