# Установка

Три рантайма, три разных механизма. Каждая команда на этой странице выполнена 24.10.2026 на этой
машине; то, что взято из другой сессии, помечено. Если шаг требует действия человека, он так и
написан — изображать обратное и есть тот отказ, ради предотвращения которого страница существует.

## Что устанавливается

| Часть | Назначение | Куда должна попасть |
|---|---|---|
| навык | процедура «сессия → специализированное окружение» | корень навыков рантайма |
| команда | короткий вход `/`, запускающий процедуру | корень команд рантайма либо тот же навык |
| `tools/experience.py` | хранилище прежней работы (M13) | внутрь установленного навыка |

```bash
git clone https://github.com/paulmann/agent-prompt-kit.git
cd agent-prompt-kit
python tools/install.py --runtime autoclaw2 --check     # что произойдёт
python tools/install.py --runtime autoclaw2 --write     # сделать
```

Допустимые значения: `autoclaw2`, `harness`, `saga`. `--check` никогда не пишет.

## AutoClaw2

Замерено в `resources/app/dist/main.cjs` AutoClaw2 2.2.x на этой машине.

| Факт | Значение |
|---|---|
| корни навыков по приоритету | `%USERPROFILE%\.pi\agent\skills` (pi-user, 1) · `%USERPROFILE%\.agents\skills` (shared) · `<account>\runtime\zwork-agent\skills` (zwork, 2) |
| файлы команд | `%USERPROFILE%\.pi\agent\prompts\<имя>.md` |
| имя команды | имя файла без `.md`, строчные буквы, цифры и дефисы |
| front matter команды | `description` (обязателен на практике), `argument-hint` (необязателен); аргументы через `${ARGUMENTS}`, `$1`, `${1:-умолчание}` |
| зарезервированные имена | `reload`, `settings` — файл с таким именем отклоняется |
| предел тела | 256 КБ |
| как адресуется навык | `/skill:<имя>`, имя из front matter `SKILL.md`, должно совпадать с именем каталога |
| регистрация | приложение собирает снимок ресурсов в `<account>\runtime\pi-resources\revisions\<hash>\manifest.json`; файл, которого нет в манифесте, модели не виден |

Два шага человека, оба дешёвые:

1. **Перезагрузить** после установки (или перезапустить приложение). Снимок пересобирается тогда;
   текущая сессия держит тот снимок, с которым началась.
2. **Проверить**: `python tools/install.py --runtime autoclaw2 --check` должен показать навык и
   команду как зарегистрированные.

Измеренная особенность: снимок пересобрался сам между ходами (21:02 → 22:51), так что перезапуск не
всегда обязателен — но **запущенная** сессия никогда не видит ресурс, добавленный после её старта.
Не верь «должно появиться»: проверяй манифест.

## HARNESS

Здесь замерены: цель установки, индекс сессий и реестр Workspace. Шаг регистрации кликом и бюджет
`AGENTS.md` взяты из сессии HARNESS 24.10.2026 и помечены как таковые.

| Факт | Значение |
|---|---|
| корень навыков | `%USERPROFILE%\.dsh\skills\<имя>\SKILL.md` |
| команда | тот же файл: `/agent-prompt-kit` (имя навыка становится командой) |
| реестр Workspace | `%USERPROFILE%\.dsh\storages\workspace.json` — версия 2, `tables.workspaces.<uuid>{path,title,sessionIds}`, на момент замера 18 записей |
| индекс сессий | `%USERPROFILE%\.dsh\cache\session-search.db` — SQLite FTS5, замерено 232 сессии / 106 663 документа / 310 МБ |
| Workspace = путь + заголовок в реестре | сам каталог ещё не Workspace |
| бюджет `AGENTS.md` | 65 536 байт; более длинный файл перестаёт загружаться (замерено в сессии HARNESS) |

Установка:

```bash
python tools/install.py --runtime harness --write
```

Команда копирует набор в `%USERPROFILE%\.dsh\skills\agent-prompt-kit\` и кладёт туда `SKILL.md`.

**Единственный шаг, который модель сделать не может:** добавить каталог как Workspace. В левой панели
— **add workspace**, указать путь нового окружения. До этого клика каталог остаётся папкой. Не
сообщай, что окружение работает, пока оно не появилось в списке.

Запрос к индексу сессий (только чтение, безопасно):

```bash
sqlite3 "%USERPROFILE%\.dsh\cache\session-search.db" ^
  "select session_id, count(*) from persisted_docs where persisted_docs match '\"agent-prompt-kit\"' and type = 'user/message' group by session_id order by 2 desc limit 10"
```

`type` — одно из `user/message`, `assistant/message`, `tool/call`, `tool/result`, `turn/end`,
`todo/write`; `surface` — `current`, `log-only`, `shadowed`. Фильтр по `user/message` и убирает шум
инъекций: из 106 663 документов сообщений пользователя только 3 193.

## SagaAI

Проверенных фактов о механизме навыков и команд SagaAI в этом репозитории нет. Поэтому установщик
**отказывается угадывать**: `--runtime saga` печатает переносимую процедуру и два вопроса, на которые
нужно ответить до установки — где корень навыков и есть ли API для регистрации команды или агента.

Переносимо независимо от рантайма: `PROMPT.md` (вставить как рабочий контракт), `memory/` и
`tools/experience.py` (нужны только Python 3.11 и каталог).

```bash
python tools/install.py --runtime saga
```

## Проверка в одном месте

```bash
python tools/prompt_lint.py                      # контракты самого документа
python tools/experience.py selftest              # 13 проверок хранилища на фикстурах
python tools/install.py --runtime <rt> --check    # установленные файлы и регистрация
```

## Ловушки, все замеренные

| Ловушка | Признак | Что делать |
|---|---|---|
| Неверное имя файла команды | команда не появляется в палитре | только строчные буквы, цифры, дефисы; не `reload`, не `settings` |
| Имя каталога навыка не совпадает с `name` в `SKILL.md` | навык загружается под неожиданным именем или не загружается | держать их одинаковыми |
| Нет `description` во front matter | навык никогда не выбирается автоматически | написать фразу, которую пользователь реально набирает |
| Файлы установлены, снимок не пересобран | всё выглядит верно, и ничего не работает | перезагрузить, затем проверить манифест |
| Каталог Workspace без регистрации | агент «создал окружение», следующая сессия ничего не видит | назвать клик явно |
| `AGENTS.md` больше 64 КБ в HARNESS | правила молча перестают применяться | держать файл коротким, детали — в `docs/` |
| Windows-переводы строк в записях | диффы в шуме, расхождение контрольных сумм | инструменты пишут LF; не «исправлять» руками |
| Кириллический запрос к английским записям | хранилище отдаёт мало кандидатов | писать `title` и `applicability` словами будущего запроса |
