# Программа harness
[Home](/ru/ai)
[Catalog](/ru/ai/catalog)
Установка, обновление, удаление и состояние программы harness.
## 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
# Программа harness
Эти команды устанавливают *программу* harness — бинарный файл в конкретном
prefix — не сетап, не компонент и не провайдер.
Провайдер — отдельный бинарный файл, который позже записывает нативное
состояние. Применение сетапа описано в [Install](install.md). Обзор
видимых на машине harness — `toolchain harnesses`.
Объект — программа в `--prefix`, а не конфигурация в `--target`. Путаница
между этими двумя путями — способ, которым сетап оказывается в директории
программы, а бинарный файл — в проекте.
## Команды
| Команда | Изменяемость | Подтверждение | Когда |
| --- | --- | --- | --- |
| `ai-stp harness install` | `apply` | `none` | Установить саму программу harness в конкретный prefix. |
| `ai-stp harness update` | `apply` | `none` | Перевести программу harness на версию, которую фиксирует провайдер. |
| `ai-stp harness remove` | `destructive` | `explicit_flag` | Удалить программу harness, установленную этим CLI, и ничего больше. |
| `ai-stp harness resume` | `apply` | `none` | Завершить остановленную операцию программы, только проверив состояние, никогда не применяя повторно. |
| `ai-stp harness status` | `read` | `none` | Какая программа находится в данном prefix — по журналу и диску. |
`install`, `update` и `remove` требуют `--harness`, `--prefix` и
`--target`. `remove` также требует `--confirm`. `status` требует
`--harness` и `--prefix`. `resume` требует `--operation`.
`--prefix` — абсолютный путь к директории, в которой находится программа.
Это не target. `--target` — абсолютный путь к конфигурационному target
harness.
## Типичный путь
```bash
ai-stp toolchain harnesses --json
ai-stp harness status --harness codex --prefix <prefix> --json
ai-stp harness install --harness codex --prefix <prefix> --target <target> --json
ai-stp harness status --harness codex --prefix <prefix> --json
```
`<prefix>` и `<target>` — абсолютные пути. `--harness` — одно из значений:
`claude-code`, `codex`, `pi`, `opencode`, `grok-build`, `cursor`,
`antigravity`.
Если операция остановилась без завершённого результата:
```bash
ai-stp harness resume --operation <operation> --json
ai-stp harness status --harness codex --prefix <prefix> --json
```
`resume` завершает, проверяя состояние, никогда не применяя повторно. Это
то же правило, что и для `install resume` сетапов: повторный запуск эффекта
создаёт вторую копию, а не восстанавливает первую.
Переход на версию, зафиксированную провайдером:
```bash
ai-stp harness update --harness codex --prefix <prefix> --target <target> --json
```
Удаление только того, что установил этот CLI:
```bash
ai-stp harness remove --harness codex --prefix <prefix> --target <target> --confirm --json
```
## `harness install`
Устанавливает саму программу harness в конкретный prefix.
```bash
ai-stp harness install --harness codex --prefix <prefix> --target <target> --json
```
Исполняемый файл провайдера определяется при отсутствии `--provider`:
явный путь, затем конфигурация, затем запомненный выбор, затем discovery.
Опциональные флаги описаны в machine help. Не изобретайте путь провайдера.
`state` после успешного применения — то, что сообщил провайдер.
`verified` — единственное состояние, означающее, что программа установлена
и её идентификатор подтверждён.
## `harness update`
Переводит программу harness на версию, зафиксированную провайдером.
```bash
ai-stp harness update --harness codex --prefix <prefix> --target <target> --json
```
Те же обязательные опции, что и у install. Это не `provider update`.
Обновление бинарного файла провайдера — [Provider](provider.md). Эта
команда обновляет *программу harness*, которую провайдер предоставляет в
prefix.
## `harness remove`
Удаляет программу harness, установленную этим CLI, и ничего больше.
```bash
ai-stp harness remove --harness codex --prefix <prefix> --target <target> --confirm --json
```
Destructive. `--confirm` обязателен. Без него команда отказывает с
`AI_STP_USER_DECISION_REQUIRED`. Программа, не установленная этим CLI,
не удаляется. Нативная конфигурация в `--target` не удаляется.
Кэшированные байты каталога не удаляются.
## `harness resume`
Завершает остановленную операцию программы, только проверяя состояние,
никогда не применяя повторно.
```bash
ai-stp harness resume --operation <operation> --json
```
`--operation` обязателен. Он указывает запись журнала, которая остановилась.
Опциональные assert-флаги (`--harness`, `--prefix`, `--target`) берутся из
операции, если не указаны; другое значение отклоняется. Прочитайте их в
machine help, если нужно зафиксировать.
Resume не загружает вторую копию. Он проверяет, что уже есть на диске и в
журнале, и записывает завершённое состояние.
## `harness status`
Какая программа находится в данном prefix — по журналу и диску.
```bash
ai-stp harness status --harness codex --prefix <prefix> --json
```
Два независимых источника, намеренно: журнал говорит, что сделала эта
установка, файловая система — что сейчас там. Сообщение только первого
назвало бы верифицированную операцию успешной на пустом prefix.
`version` берётся из журнала, никогда — из запуска программы. Запрос
версии у бинарного файла означал бы выполнение чужого исполняемого файла
из команды, объявленной как `read`.
Поля успешного `data`:
| Поле | Что это |
| --- | --- |
| `harness_id` | harness, о котором вы спросили |
| `prefix` | директория, которую вы указали |
| `state` | `present`, `removed`, `never_installed`, `foreign`, `lost` или `interrupted` |
| `reason` | почему это состояние таково |
| `entry_point` | экспонированный путь в prefix |
| `executable` | имя программы, как записано |
| `version` | версия, записанная журналом |
| `operation_id` | последняя записанная операция, если есть |
| `recorded_at` | когда журнал последний раз писал |
| `recorded_operation` | `software_install`, `software_update` или `software_remove` |
| `recorded_state` | что журнал последний раз записал |
| `stopped` | операции, остановившиеся без завершённого результата |
| `schema_version` | major-версия схемы этого отчёта |
`lost` означает: журнал говорит verified, а prefix не содержит файлов.
Это отчёт, а не указание немедленно переустановить без чтения.
## Что содержит успешный envelope
`install`, `update`, `remove` и `resume` возвращают операцию программы
в `data`:
| Поле | Что это |
| --- | --- |
| `harness_id` | harness |
| `prefix` | prefix программы |
| `operation` | `software_install`, `software_update` или `software_remove` |
| `operation_id` | запись журнала |
| `plan_digest` | точный план, который был выполнен |
| `state` | что провайдер сообщил после эффекта |
| `version` | версия программы |
| `executable` | экспонированный исполняемый файл |
| `artifacts` | архивы, названные планом |
| `effects` | что изменилось |
| `recovered` | что resume завершил |
| `removed` | забрал ли remove программу обратно |
| `schema_version` | major-версия схемы этого отчёта |
`status` возвращает поля статуса выше. Каждый envelope также содержит
`ok`, `warnings`, `next_actions`, `request_id`, `operation_id` и
`schema_version`.
## Prefix не target не provider
| Путь | Что это | Команда |
| --- | --- | --- |
| `--prefix` | где находится программа harness | эта страница |
| `--target` | где живёт нативная конфигурация | [Install](install.md), [Target](target.md) |
| provider executable | бинарный файл, пишущий target | [Provider](provider.md) |
`toolchain harnesses` отвечает на вопрос «виден ли этот harness на
машине». `harness status` отвечает «что этот CLI положил в этот prefix».
Не используйте одно вместо другого.
## Что эти команды никогда не делают
- не применяют сетап и не записывают нативную конфигурацию как цель
команды;
- не запускают программу harness для получения версии из `status`;
- не удаляют программу, не установленную этим CLI;
- не заменяют `provider update` или `toolchain install`;
- не пропускают `--confirm` при remove.
## Типичные отказы
| Что вы видите | Что это значит | Что делать |
| --- | --- | --- |
| `AI_STP_VALIDATION_ERROR` отсутствует `--harness` / `--prefix` / `--target` | эти опции обязательны для install, update и remove | передайте все три; для status нужны harness и prefix |
| `AI_STP_USER_DECISION_REQUIRED` при remove | `--confirm` отсутствует | добавьте `--confirm` после явного решения |
| `AI_STP_NOT_FOUND` при resume | такой операции нет в журнале | `harness status`, прочитайте `stopped` |
| `AI_STP_PRECONDITION_FAILED` | prefix, target или провайдер не совпадают с планом | не переиспользуйте argv от другого prefix |
| `state: foreign` | этот prefix принадлежит чему-то другому | не делайте `remove`; этот CLI его не устанавливал |
| `state: lost` | журнал verified, диск пуст | прочитайте `reason`; resume или восстановление, не слепая переустановка |
| `state: interrupted` | операция остановилась | `harness resume --operation <operation> --json` |
## Связанные страницы
| Страница | Зачем |
| --- | --- |
| [Toolchain](toolchain.md) | обзор присутствия и возможностей |
| [Provider](provider.md) | бинарный файл, пишущий нативное состояние |
| [Install](install.md) | применение сетапа через этот провайдер |
| [Target](target.md) | текущее состояние проекта и harness |
| [Harnesses](../harnesses.md) | семь харнессов открытой беты |
| [Agent Skill CLI](skill.md) | skill, который программа будет читать |
| [Быстрый старт для человека](../quickstart/human.md) | первый запуск, когда программа отсутствует |
!!! note "Флаги из `ai-stp help --agent --json`"
Если `help --agent` расходится с флагом на этой странице, CLI побеждает.
Опциональные флаги здесь не перечислены. Читайте их из descriptor.
`harness install` и `harness update` требуют `--harness`,
`--prefix` и `--target`. `harness remove` также требует
`--confirm`. `harness resume` требует `--operation`.