# Инструкция по установке

> ## ⛔ НЕ запускайте установку «от имени администратора»
>
> Откройте **обычное** окно PowerShell. **Не** «Запуск от имени администратора».
>
> Запуск с повышением прав — главная причина отказа: папки в доме агента создаются от
> другой учётной записи, и потом движок не может прочитать свой собственный Python.
> Установка встаёт мгновенно с `Access is denied`, ещё до любой загрузки. Подробно —
> раздел «Если установка остановилась» ниже.
>
> От администратора запускается только `FIX.cmd` (или `WIPE.cmd`) — и только если
> установка уже остановилась.

Агент **AILab SCRUME Agent** — Hermes Agent: личный помощник. Ключ API выдаёт владелец
агента — его вы впишете один раз при установке.

Агент ставится в **единственный профиль** Hermes. Переключателей профилей и лишних
настроек в сборке нет: получается один помощник и больше ничего.

Вам передают **два архива**:

| Архив | Что внутри | Размер |
|---|---|---|
| `agent-setup.zip` (в релизе он же `ailab-setup-v<версия>.zip`) | агент: персона, настройки, 58 скиллов, установщик | ~1,2 МБ |
| `app-setup.zip` (он же `hermes-desktop-scrum.zip`) | приложение Hermes с фирменным логотипом на пустом чате | ~158 МБ |

Второй архив нужен, чтобы был графический интерфейс с логотипом. Без него агент
работает, но только в командной строке и с обычной заставкой Hermes.

---

## Быстрый путь

### Одна команда — и всё готово

Вставьте в PowerShell (Win+R → `powershell`), **целиком, одной строкой**:

```
$d = Join-Path $env:LOCALAPPDATA 'ailab-setup'; New-Item -ItemType Directory -Force -Path $d | Out-Null; Set-Location $d; Remove-Item -Recurse -Force ailab -ErrorAction SilentlyContinue; curl.exe -L --fail -o ailab.zip "https://github.com/AILABSCRUME/AI_Lab_SCRUME_Co/releases/latest/download/agent-setup.zip"; if (-not (Test-Path ailab.zip) -or (Get-Item ailab.zip).Length -lt 1MB) { throw "Архив не скачался. Папка: $d" }; Expand-Archive ailab.zip ailab -Force; .\ailab\setup.cmd
```

Установщик сам делает всё по порядку:

1. находит рядом файл агента;
2. снимает метку «скачано из интернета» (иначе Windows блокирует запуск);
3. проверяет, что установка свободна, и **останавливается**, если на машине уже работает
   другой агент Hermes — чтобы не потерять чужие данные. **Проверка идёт до первой записи**:
   при чужом агенте в доме не появляется ни одного файла;
4. при необходимости ставит переносимый Git (с GitHub, 58 МБ) и Hermes Agent;
   Git кладётся ровно туда, где его ищет официальный установщик Hermes —
   поэтому его стадия `prerequisites` ничего не качает и не падает;
   если Git в системе уже есть, ничего не скачивается;
5. ставит агента (при повторном запуске — обновляет);
6. создаёт файл ключа и **открывает его в Блокноте** — впишите туда ключ от владельца;
7. проверяет, что агент отвечает;
8. **готовит окружение** (`hermes pm repair`) — окно приложения поднимает бэкенд и ждёт
   его ответа считаные секунды, а на неподготовленной машине зависимости ставятся минутами;
   поэтому они ставятся заранее. Установка зависимостей идёт с отчётом на экране
   (на медленном интернете это может занять до 10 минут);
8b. **готовит движок для окна** — проверяет, что окно поднимет его сразу, и даёт запас
   по времени. Без этого шага окно на холодной машине решало, что движок не работает,
   и само уходило в доустановку, где падало с ошибкой «Отказано в доступе»;
9. **скачивает и ставит окно приложения** (~158 МБ) и кладёт **ярлык «AILab SCRUME Agent»
   на рабочий стол**.

> **Запускайте установку обычным пользователем — НЕ «от имени администратора».**
> Это главная причина отказа: папки в доме агента уходят другой учётной записи, и потом
> ни движок, ни `pm repair` не могут прочитать свой собственный Python. Подробности —
> в разделе «Если установка остановилась».

Больше ничего делать не нужно: после установки запускайте агента ярлыком с рабочего стола.

Windows может один раз спросить подтверждение (SmartScreen) — это нормально.
Установка занимает несколько минут (качается приложение ~158 МБ), окно закрывать нельзя.
Протокол сохраняется рядом: `setup-log.txt`.

### Если качать архивом вручную

1. Скачайте `agent-setup.zip` (в релизе он же `ailab-setup-v<версия>.zip`), распакуйте в пустую папку, запустите
   `setup.cmd` двойным кликом — дальше как выше (шаги 1–9 делает скрипт).
2. Отдельно качать `hermes-desktop-scrum.zip` **не нужно** — установщик сам его скачает
   и поставит. Этот архив нужен, только если на машине нет интернета или хочется
   поставить приложение вручную: тогда распакуйте его в постоянную папку
   (например `C:\Hermes`), запустите `Hermes.exe`, затем `make-shortcut.cmd`.

> Приложение ставится в `%LOCALAPPDATA%\AILabSCRUME\App`. Ярлык ведёт на неё —
> папку не удаляйте и не переносите. В «Загрузки» распаковывать нельзя: Windows
> их периодически чистит, и приложение сломается.
Остальные разделы нужны, только если что-то пошло не так или вы ставите агента вручную.

---

## Если установка остановилась

Рядом с `setup.cmd` (в той же распакованной папке) лежат файлы помощи. Запускаются
**двойным кликом** — вводить команды не нужно:

| Файл | Что делает | От администратора? |
|---|---|---|
| `CHK.cmd` | показывает, что видит установщик: путь к агенту, пакеты и права на них | нет |
| `ACL.cmd` | показывает правила доступа к папке агента, отдельно помечает запреты | нет |
| `FIX.cmd` | починка прав: возврат владения и выдача прав пользователю. **Ключ сохраняется** | **да** |
| `WIPE.cmd` | полностью удаляет папку агента, чтобы поставить заново. **Ключ вписывать заново** | **да** |

`CHK` и `ACL` ничего не меняют — их можно запускать в любой момент.

**Запуск от администратора:** правой кнопкой по файлу → «Запуск от имени администратора».
Установку (`setup.cmd`) так запускать НЕЛЬЗЯ — только файлы починки.

### Симптом: «Отказано в доступе» или «движок не запускается»

**Причина — права, а не сеть.** Папки внутри `%LOCALAPPDATA%\hermes\tools` принадлежат
другой учётной записи: сама папка «видна», а войти внутрь нельзя. Движок не находит свой
Python и падает мгновенно, ещё до любой загрузки.

Признак: установка встаёт **сразу**, с сообщением `Access is denied`, без попыток что-то
скачать.

**Лечение:** запустите `FIX.cmd` от администратора и дождитесь окончания (несколько минут),
затем запустите `setup.cmd` **обычным** пользователем.

Такое состояние создаёт запуск установки от администратора. Если один раз так вышло —
больше не повышайте права для установки.

---

## 0. Что нужно заранее

| Что | Проверка | Если нет |
|---|---|---|
| Windows 10/11 | — | — |
| Git | `git --version` | не нужен — установщик положит сам |
| Hermes Agent | `hermes --version` | см. раздел 1 (setup.cmd поставит сам) |
| Свой ключ Polza.ai | — | получить у владельца агента |
| Файл агента `ailab-*.bundle` | — | получить у владельца (раздел 2) |

Данные Hermes лежат в `%LOCALAPPDATA%\hermes` — это и есть дом агента.

> **Важно.** Если здесь уже стоит рабочий агент (своя персона, ключи, память, переписка)
> — этот комплект ставить нельзя, он рассчитан на единственного агента. setup.cmd это
> проверит и остановится сам.

---

## 1. Поставить Hermes Agent (если ещё нет)

PowerShell (обычный, без администратора):

```powershell
iex (irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1)
```

После установки **закрыть и открыть терминал заново** — установщик добавляет
`hermes` в PATH. Проверка:

```powershell
hermes --version
```

---

## 2. Что вам передаёт владелец

Один файл: **`ailab-<версия>.bundle`** (например `ailab-v<версия>.bundle`).
Внутри — весь агент с историей версий. Больше ничего не нужно, доступ к репозиторию
не требуется.

---

## 3. Установить агента (вручную)

Если не хотите запускать `setup.cmd`, положите файл, например, в `Downloads` и откройте
PowerShell:

```powershell
cd $env:USERPROFILE\Downloads
git clone ailab-<версия>.bundle ailab-dist
Remove-Item -Recurse -Force .\ailab-dist\.git
```

Скопируйте персону, настройки и скиллы в дом агента:

```powershell
Copy-Item .\ailab-dist\SOUL.md     $env:LOCALAPPDATA\hermes\ -Force
Copy-Item .\ailab-dist\config.yaml $env:LOCALAPPDATA\hermes\ -Force
Copy-Item .\ailab-dist\skills      $env:LOCALAPPDATA\hermes\ -Recurse -Force
```

Строка с удалением `.git` — не украшение: git помечает файлы внутри `.git/objects/pack`
атрибутом «только чтение», и копирование может упасть с `PermissionError: [WinError 5]`.

Проверить, что стало:

```powershell
hermes doctor
```

---

## 4. Ключ Polza.ai — обязательный шаг

Ключ вам выдаёт владелец агента. Вписать его нужно один раз.

**Как это происходит:** установщик откроет файл `.env` в Блокноте. Впишите ключ
после знака `=`, без кавычек и пробелов, сохраните (Ctrl+S) и закройте Блокнот:

```
HERMES_CUSTOM_POLZA_AI_API_KEY=ваш_ключ
```

Если Блокнот закрылся, а ключ вписать не успели — откройте файл вручную:

```powershell
notepad $env:LOCALAPPDATA\hermes\.env
```

Проверить, что Hermes видит файл:

```powershell
hermes config env-path
```

### Куда ключ не вписывать

Ключ в `config.yaml` **не вписывать** — там только имя переменной
(`key_env: HERMES_CUSTOM_POLZA_AI_API_KEY`). Так ключ не уезжает в репозиторий и не
теряется при обновлении.

---

## 5. Запустить

```powershell
hermes chat
```

Первое сообщение для проверки: `Как тебя зовут и кому ты помогаешь?`
Ответ должен быть про AILab SCRUME Agent.

---

## 6. Что где менять под себя

| Что | Файл | Как правильно |
|---|---|---|
| Имя владельца, персона, тон | `%LOCALAPPDATA%\hermes\SOUL.md` | открыть в редакторе, править текст |
| Модель | `config.yaml` | только через `hermes config set model.default <модель>` — правка файла руками ломает конфиг |
| Список моделей | `config.yaml` | `hermes model` (интерактивный выбор) |
| Ключ API | `.env` | правка строки `HERMES_CUSTOM_POLZA_AI_API_KEY=` |
| Память о вас | — | набирается в чате само; чистится через `/memory` в чате |

`SOUL.md` — единственный файл, который стоит править текстом. Всё остальное — командами.

---

## 7. Обновление агента

**Автоматически:** положить новый `ailab-<новая версия>.bundle` в ту же папку, где лежит
`setup.cmd`, и снова запустить `setup.cmd`. Скрипт увидит установленного агента, обновит
его и оставит ваш ключ, память и переписку. Прежний бандл можно не удалять — берётся
самый свежий по имени.

**Вручную**, если предпочитаете команды: повторите раздел 3 с новым файлом — три команды
`Copy-Item` перезапишут персону, настройки и скиллы. Ключ и память лежат в других файлах
и не трогаются.

### Обновление само, по ночам

С версии 1.5.0 установщик заводит задачу Планировщика **`AILabAgentUpdate`**: раз в сутки,
около 03:00 (плюс случайный разброс до 45 минут, чтобы машины не били в GitHub разом),
она проверяет, не вышла ли новая сборка, и если вышла — ставит её.

| Шаг | Действие |
|---|---|
| 1 | читает установленную версию из `.ailab-install.json` |
| 2 | спрашивает у GitHub последний релиз |
| 3 | сравнивает **по числам** (1.4.10 новее, чем 1.4.9 — не строкой) |
| 4 | если новее — скачивает архив и запускает установку |

**Обновление не ставится, пока открыто окно агента.** Установщик подменяет файлы движка
и приложения, а занятые файлы перезаписать нельзя. Проверка просто отложится до следующей
ночи — окно никто не закроет за вас. Держать приложение открытым сутками можно, но тогда
обновление может ждать долго.

**Молча ставится только обновление.** Если ключ ещё не вписан, скрипт ничего не делает:
первая установка требует Блокнота, а это не ночная операция.

**Журнал:** `%LOCALAPPDATA%\hermes\logs\update-check.log` — одна строка на запуск:
`актуально`, `отложено`, `обновление установлено` либо причина отказа.

**Отключить:**

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:LOCALAPPDATA\hermes\update-check.ps1" -Off
```

Задача снимется, агент останется работать. Вернуть — запустить установку заново.

**Проверить, не дожидаясь ночи:** запустите тот же файл без ключей — он сделает одну
проверку и, если есть что ставить, поставит.

Посмотреть, что стоит:

```powershell
hermes doctor
```

---

## 8. Чего в комплекте нет — настроить самому (по желанию)

| Возможность | Команда / где |
|---|---|
| MCP-серверы (внешние инструменты) | `hermes mcp catalog`, затем `hermes mcp add` |
| Мессенджеры (Telegram и др.) | `hermes gateway setup`, затем `hermes gateway start` |
| Задачи по расписанию | `hermes cron add` или через десктоп-приложение |
| Графическое приложение | `Hermes.exe` (из распакованного архива) |

Скиллы (58 штук: Word, Excel, PDF, поиск, почта, заметки, карты, код) уже внутри —
их доустанавливать не нужно. Свой скилл добавляется командой
`hermes skills install <источник>`.

### Голос

**Работает из коробки, ключей не требует.** Распознавание речи — локальная модель Whisper
(скачается при первом использовании, ~40 МБ), синтез — бесплатный русский голос `edge`
(`ru-RU-SvetlanaNeural`). Язык распознавания — русский.

Если синтез молчит — проверьте версию библиотеки, в старых она отвечает отказом сервера:

```powershell
uv pip install --python "<дом>\installs\<...>\venv\Scripts\python.exe" -U edge-tts
```

### Номер сборки в заголовке окна

В заголовке окна, слева, виден чип **`AILab v1.5.0`** — какая сборка агента стоит.
Наведение показывает дату установки и имя исходного файла.

Чип живёт плагином (`desktop-plugins/version-badge`) и берёт версию из файла
`%LOCALAPPDATA%\hermes\.ailab-install.json`, который пишет установщик. Поэтому
номер не устаревает: обновился агент — файл изменился, чип показывает новое.
Кликать по нему не нужно, истории версий нет.

Если чипа нет — плагины отключены в настройках приложения (`Настройки → Плагины`).

### Девиз рядом с номером сборки

Справа от номера идёт девиз сборки: **«Работа агента ограничена только вашей
фантазией»**.

Девиз живёт плагином (`desktop-plugins/slogan`). На узком окне он скрывается сам,
чтобы не теснить кнопку «Новый сеанс», и возвращается при растягивании — это
нормальное поведение, а не пропавший плагин.

### Время текущей сессии в композере

В строке управления композером, **слева от чипа расхода Polza.ai**, виден счётчик времени
текущей сессии: `0:07` → `1:05:32`. Наведение показывает название сессии, когда она начата
и сколько идёт.

Счётчик живёт плагином (`desktop-plugins/session-time`) и берёт **настоящее время старта
сессии**, а не момент открытия окна: при перезапуске приложения отсчёт не начинается
заново. Пока сессии нет (вкладка «Новая сессия») — чипа нет вовсе, а не «0:00».

Отключить — `Настройки → Плагины`, плагин `session-time`.

### Каталог моделей по цене

В той же строке управления композером, **сразу за чипом расхода**, стоит чип
**`Модели от 50,54`**. Наведение открывает список моделей Polza.ai в двух секциях,
и это разделение — главное в нём.

**По факту списания.** Модели, которыми уже пользовались. Ставка посчитана из
`costLines` каждой генерации — это списанные рубли, а не прайс. Рядом число
запросов в выборке и сумма за них.

**Прайс каталога — не факт.** Остальные модели с ценой из каталога Polza.ai.
Это ориентир для выбора, а не цена.

Почему нельзя обойтись каталогом: он расходится с фактическим списанием
**по-разному** для разных моделей — от 1,01 до 8,76 раза. У `openai/gpt-6.1-sol`
ставка входа 282,18 ₽ при каталоге 118,09, у `deepseek/deepseek-v4.1-flash` —
50,54 при каталоге 5,78, а у `anthropic/claude-sonnet-5.5` каталог совпал.
Поэтому порядок моделей по каталогу не равен порядку по деньгам: по каталогу
самый дорогой — Claude Sonnet 5.5, по факту — GPT-6.1 Sol.

Чип живёт плагином (`desktop-plugins/polza-models`), данные берёт локальный скрипт
(`%LOCALAPPDATA%\hermes\.polza-models\polza-models.cmd`). Ключ остаётся в `.env`
и в окно не попадает. Список обновляется сам раз в 30 минут, клик — обновить сразу.
Отключить — `Настройки → Плагины`, плагин `polza-models`.

### ГОСТ-ассистент (MCP-сервер)

В конфиг добавлен MCP-сервер **`gostassistent`** — поиск и чтение ГОСТ, СП, СНиП.
Он включён, но **без ключа не авторизуется**: ключ свой у каждого получателя.

Впишите его в `.env` строкой `MCP_GOSTASSISTENT_API_KEY=ваш_ключ`. Без ключа агент
работает полностью — просто инструменты `mcp__gostassistent__*` отвечать не будут.
Это состояние «нет доступа», а не поломка агента.

### Сообщения об обновлениях самого Hermes

Фоновые проверки обновлений Hermes **выключены** (`updates.check: false`): получателю
не нужны сообщения про версии кода, который он не ставил и сам не обновляет.
Обновления **нашего** агента приходят ночной задачей `AILabAgentUpdate` и ставятся
без участия человека. Ручная команда `hermes update` при этом работает как раньше.

### Боковая навигация

Строка **«Сообщения»** из боковой панели убрана: мессенджеры не подключены, а вкладка ведёт
в настройку Telegram, Slack, Discord и в шлюз сообщений — место, куда лезть не нужно.

Это «убрано с глаз», а не отобрана возможность: сочетание клавиш и прямой адрес работают,
как раньше. Вернуть строку можно, выключив плагин `hide-messaging`
в `Настройки → Плагины`.

### Если после «Сброса настроек» агент перестал отвечать

Кнопки **экспорта, импорта и сброса** настроек оставлены намеренно — пользуйтесь ими свободно.

Одна особенность: **«Сброс настроек» обнуляет маршрут к модели** (в настройках по умолчанию
провайдер пустой). Ключ при этом цел, но агент не знает, куда обращаться, и не отвечает.

**Лечение — запустить установку заново, ничего не настраивая.** Она вернёт рабочий
конфигурационный файл; ключ, память и переписка сохранятся.

Импорт настроек безопасен: битый файл не запишется, старый конфиг останется на месте,
копия испорченного сохранится в `backups\config\`.

## Установка на удалённый компьютер

Если ставите не на свой компьютер, а через RDP или удалённую сессию — есть особенность,
из-за которой установка падает с `Permission denied` и `Архив не скачался`.

**С версии 1.5.1 установщик перестал зависеть от `%TEMP%`.** Рабочие папки строятся
от `%LOCALAPPDATA%` (папка `ailab-scratch`) и приводятся к **длинному** виду: короткое имя
8.3 (вида `C:\Users\E4FB5~1.KAS`) на таких машинах ломает именно удаление — папку
`Test-Path` и `New-Item` видят, а `Remove-Item` по ней падает. Проверка существования этот
случай не ловит, поэтому `%TEMP%` для своих путей больше не используется вовсе.
Начиная с 1.5.2 в протокол печатаются `TEMP`, `TMP`, `LOCALAPPDATA` и рабочая папка —
если что-то снова упрётся, причина будет видна прямо в логе. Раздел ниже нужен в двух
случаях: стоит более старая сборка, либо надо понять, что происходит на экране.

### Признак

```
cd : Объект по указанному пути C:\Users\XXXXX~1.XXX не существует
curl: (23) Failed writing body
```

Короткое имя вида `E4FB5~1.KAS` — это битая переменная `%TEMP%`. Команда `cd` не находит
папку, PowerShell остаётся в `C:\Windows\system32`, и `curl` не может туда записать файл.
**Сеть и VPN тут не при чём** — до скачивания дело не доходит.

### Почему так бывает

При удалённом входе переменные `%TEMP%` и `%TMP%` иногда указывают на путь, которого нет:
имена собираются в коротком формате 8.3, а папка не создаётся. При **временном профиле**
Windows та же картина.

### Лечение

Выполнить в той же сессии, где ставите, **до** установки:

```powershell
$env:TEMP = "$env:LOCALAPPDATA\Temp"
$env:TMP  = "$env:LOCALAPPDATA\Temp"
New-Item -ItemType Directory -Force -Path $env:TEMP | Out-Null
```

Затем запустить установку командой выше — она создаёт рабочую папку явно
в `%LOCALAPPDATA%\ailab-setup` и не зависит от `%TEMP%`.

### Проверить, постоянный ли профиль

Это важно: **во временном профиле ставить нельзя** — всё исчезнет после выхода из системы.

```powershell
whoami
$env:USERPROFILE
$env:TEMP
Test-Path $env:TEMP
Get-ChildItem C:\Users
```

| Что видно | О чём говорит |
|---|---|
| `Test-Path $env:TEMP` → **False** | переменная битая — лечится командами выше |
| `whoami` даёт имя, которого **нет** в `C:\Users` | временный профиль — ставить нельзя |
| В `C:\Users` есть `TEMP.000` / `TEMP.001` | временный профиль, нужен ремонт учётной записи |

### Чего НЕ делать при удалённой установке

| Нельзя | Почему |
|---|---|
| Запускать установку от администратора | папки уйдут другой учётке, у пользователя будет `Access is denied` |
| Запускать через `PsExec -s`, `Invoke-Command` от админа, задачу Планировщика | агент поставится в чужой профиль, пользователь увидит пустоту |
| Ставить во временном профиле | всё сотрётся при выходе из системы |

**Правильно:** войти по RDP **под учёткой получателя**, запустить установку там же обычным
PowerShell. От администратора — только `FIX.cmd` или `WIPE.cmd`, и только если установка
уже остановилась.

### Если RDP недоступен

```powershell
Enter-PSSession -ComputerName <имя> -Credential <учёткаполучателя>
```

Но сначала убедиться, что **профиль получателя уже создан** — пользователь должен хотя бы раз
войти интерактивно. Иначе установка уйдёт в несуществующий профиль.

### Границы возможностей

Терминал и запуск кода **включены** — на них построены скиллы Excel, Word, PDF, PowerPoint
и почты: это запуск python-скриптов, другого способа в Hermes нет.

Пакеты для документов установщик ставит сам на шаге 8:

| Формат | Пакет |
|---|---|
| Excel `.xlsx` | `openpyxl` |
| Word `.docx` | `python-docx` |
| PowerPoint `.pptx` | `python-pptx` |
| PDF | `pypdf`, `reportlab`, `pdfplumber` |

Проверено на живом доме: все четыре формата создаются и читаются обратно.

Если пакеты не встали (нет интернета при установке) — доставить вручную:

```powershell
uv pip install --python "<дом>\installs\<...>\venv\Scripts\python.exe" openpyxl python-docx python-pptx pypdf reportlab pdfplumber
```

Управление рабочим столом (`computer_use`) выключено.

Ограничить сильнее — одной командой:

```powershell
hermes config set agent.disabled_toolsets "[terminal, code_execution, computer_use]"
```

и вернуть обратно:

```powershell
hermes config set agent.disabled_toolsets "[computer_use]"
```

> Эти правки не переживают обновление: установщик кладёт `config.yaml` из сборки
> заново. После обновления команду нужно повторить.

---

## 9. Если что-то не работает

| Симптом | Причина / решение |
|---|---|
| Установка остановилась с перечнем чужих данных | на машине уже работает другой агент — ставить нельзя, данные сохранены |
| `hermes: command not found` | терминал не перезапущен после установки Hermes |
| Ответы вида «нет доступа к модели», 401 | ключ в `.env` пустой/с опечаткой — проверить строку и `hermes config env-path` |
| Установка не находит файл агента | файл не рядом со скриптом — положить `setup.cmd` и `ailab-*.bundle` в одну папку |
| `PermissionError: [WinError 5]` при установке вручную | удалить папку `.git` в распакованном дистрибутиве (раздел 3) |
| `WinError 32` — файл занят другим процессом | запущено приложение Hermes: значок в трее → Выход, затем запустить `setup.cmd` снова |
| Установка идёт слишком долго | первый запуск качает Python, Node и зависимости — это минуты, не ошибка |
| Общий диагноз | `hermes doctor` |

---

## 10. Установка одной командой (PowerShell)

Откройте PowerShell (обычный, без администратора) и вставьте **целиком, одной
строкой**:

```powershell
$d = Join-Path $env:LOCALAPPDATA 'ailab-setup'; New-Item -ItemType Directory -Force -Path $d | Out-Null; Set-Location $d; Remove-Item -Recurse -Force ailab -ErrorAction SilentlyContinue; curl.exe -L --fail -o ailab.zip "https://github.com/AILABSCRUME/AI_Lab_SCRUME_Co/releases/latest/download/agent-setup.zip"; if (-not (Test-Path ailab.zip) -or (Get-Item ailab.zip).Length -lt 1MB) { throw "Архив не скачался. Папка: $d" }; Expand-Archive ailab.zip ailab -Force; .\ailab\setup.cmd
```

Установщик делает всё сам: Git, Hermes, агент, Блокнот для ключа, проверка,
**скачивание и установка окна приложения, ярлык на рабочем столе**. Второй команды
не требуется.

Ссылка `releases/latest/download/...` всегда указывает на последний выпуск — при
выходе новой версии команду менять не нужно.

> Строка дана **одной строкой с `;`** намеренно: многострочный блок при копировании
> из письма или мессенджера легко приезжает побитым (пустые `$b`/`$t`, ошибка
> `Непредвиденная лексема "\ailab"`). Каждую часть можно выполнить и по отдельности —
> результат тот же.

Приложение качать отдельно не нужно. Если же интернета нет или приложение хочется
поставить вручную — распакуйте `hermes-desktop-scrum.zip` в постоянную папку
(например `C:\Hermes`), запустите `Hermes.exe`, затем `make-shortcut.cmd`.
