# Сетапы
[Home](/ru/ai)
[Catalog](/ru/ai/catalog)
Как ai_stp собирает полный сетап из точных версий компонентов.
## 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
# Сетапы
Повседневная сборка — intent `change`, повседневная установка записанного
сетапа — `install`. Не набирайте `setup compose plan`, если у вас ещё нет
digest.
```bash
ai-stp task start --intent change --idempotency-key change-session-01 --json
ai-stp task start --intent install --idempotency-key install-session-01 --json
```
## Сборка из каталога и внешних источников
`setup compose` собирает один точный setup из каталожных компонентов и embedded
компонентов из GitHub, package registry или локального пути. Внешнему компоненту
не обязательно иметь собственную карточку в каталоге.
Формат JSON-манифеста и полный пример находятся в английской версии этой
страницы. Expert compose (уже есть digest):
```text
ai-stp setup compose plan --manifest setup.json --root . --json
ai-stp setup compose apply --manifest setup.json --root . --id <setup_id> --created-at <created_at> --expected-plan-digest <digest> --json
ai-stp setup export --id <setup_id> --version 1.0 --output ./exported-setup --json
ai-stp setup publish plan --id <setup_id> --version 1.0 --json
```
Git ref замораживается в commit, package требует точную версию, а локальный путь
ограничен `--root`. `apply` повторно получает источники и откажется, если байты
изменились. Embedded-компоненты публикуются внутри setup, а каталожные сохраняют
своего publisher и идентичность.
`setup export` пишет review-дерево уже записанного определения: паспорт, артефакт
определения и README, где сказано, что хранилище — локальный реестр, а
физическое дерево харнесса не создаётся. Занятый каталог отвергается. Native
состояние харнесса не пишется.
Сетап — итоговая конфигурация одного харнесса. Он закрепляет точные версии
компонентов и применяется только через public provider этого харнесса.
## Как собирается сетап
Упрощённый путь:
```text
кандидаты из каталога и локального реестра
→ механические фильтры
→ вопросы агента
→ подтверждение пользователя
→ setup graph
→ deterministic compiler
→ provider plan
```
Агент помогает выбрать состав, но не обходит проверки совместимости, доступа и
безопасности.
| Этап | Кто отвечает | Что должно быть видно |
| --- | --- | --- |
| Поиск кандидатов | CLI и каталог | источник, версия, харнесс, trust line |
| Выбор состава | пользователь и agent | почему выбран каждый компонент |
| Проверка графа | сборщик сетапа | конфликты, несовместимости, missing pieces |
| План применения | provider | target diff, backup, digest |
| Применение | provider | журнал операции и status |
## Установка
Перед изменением target provider строит план, создаёт резервную копию и только
после подтверждения применяет изменения.
Работающий агент не изменяет собственный активный target по месту. Новый сетап
проверяется отдельно, а переключение выполняется после проверки.
## Rollback
Если применение не удалось, восстановление идёт через provider и журнал
операций. Не удаляйте резервные копии вручную до завершения восстановления.
### Осознанный откат из снятой копии
Это другой путь, чем восстановление после неудачи. Здесь вы заранее снимаете
копию цели, позже меняете сетап, а ещё позже возвращаетесь к снятой копии.
Сначала копия:
```text
$ ai-stp install plan --action backup --project <id> --harness <id> \
--provider <exe> --provider-manifest <path> --protocol-version 3 \
--target <dir> --json
$ ai-stp install approve --operation <id> --plan-digest <exact> --json
$ ai-stp install apply --operation <id> --provider <exe> --json
```
Позже копию не нужно помнить — её перечисляет отдельная команда:
```console
ai-stp target backups --project <id> --harness <id> --json
```
Ответ содержит `backup_ref`, операцию, которая её сняла, и версию сетапа,
установленную на тот момент. Дальше — обычные план, подтверждение и применение:
```text
$ ai-stp install plan --action rollback --backup-ref <exact> \
--provider <exe> --provider-manifest <path> --protocol-version 3 \
--target <dir> --json
$ ai-stp install approve --operation <id> --plan-digest <exact> --json
$ ai-stp install apply --operation <id> --provider <exe> --json
$ ai-stp target status --project <id> --harness <id> --json
```
Три отличия, которые стоит держать в голове:
- `target rollback` **называет** предыдущую подтверждённую версию и ничего не
восстанавливает. Это ответ на «куда откатываться», а не «откатись»;
- повторная установка прошлой версии через `action=update` — не то же самое,
что восстановление: bundle не содержит файлов, которые вы не устанавливали, а
копия их сохраняет;
- восстановление возвращает цель **целиком**. Восстановить один компонент
нельзя, и такой запрос отклоняется.
??? tip "Как думать о версии сетапа"
Сетап — не папка с текущими файлами, а закреплённый состав. Если вы
обновили один `skill`, отключили `hook` или поменяли `setting`, это уже
новая версия сетапа.