refactor: harness CLI — объект первым, действие вторым
- грамматика: harness <объект> <действие> (skills / agents / mcp / catalog / hermes / opencode) - skills list теперь показывает каталог: что доступно к установке, с отметками ✓/· - skills installed — прежний вид «что реально стоит» (включая не из каталога) - фикс: установленные скиллы не находились — Path.rglob не разворачивает симлинки, перешёл на os.walk(followlinks=True) - в листинге каталога виден sha источника и признак «⚠ сдвинут» - README переписан под новую грамматику
This commit is contained in:
@@ -6,44 +6,99 @@
|
||||
|
||||
```
|
||||
dev/harness/
|
||||
├── agents/ # Определения агентов OpenCode (leader, fixer, devops, admin, ...)
|
||||
├── agents/ # Определения агентов OpenCode (leader, fixer, devops, admin, ...)
|
||||
├── catalog/ # Скиллы: git submodule'ы на внешние репы
|
||||
│ ├── jakubkrehel-skills/ # → github.com/jakubkrehel/skills (11 скиллов UI)
|
||||
│ └── developer-documentation-skill/ # → NateBJones-Projects/… (доки; ставится вручную)
|
||||
├── scripts/
|
||||
│ └── harness # Основной CLI-скрипт
|
||||
│ └── harness # Основной CLI-скрипт
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Грамматика
|
||||
|
||||
**Объект — первым, действие — вторым:** `harness <объект> <действие> [аргументы]`
|
||||
|
||||
| Объект | Что это | Действия |
|
||||
|--------|---------|----------|
|
||||
| `status` | среда целиком | — |
|
||||
| `skills` | скиллы из каталога | `list`, `installed`, `install`, `remove` |
|
||||
| `agents` | агенты (только OpenCode) | `list`, `install`, `remove` |
|
||||
| `mcp` | MCP-серверы Hermes | `list`, `add`, `rm` |
|
||||
| `catalog` | внешние репозитории каталога | `list`, `update` |
|
||||
| `hermes` | сам Hermes | `config`, `restart`, `update` |
|
||||
| `opencode` | сам OpenCode | `install`, `restart` |
|
||||
|
||||
```bash
|
||||
./scripts/harness status
|
||||
./scripts/harness skills list
|
||||
./scripts/harness skills install jakubkrehel-skills better-ui --target all
|
||||
./scripts/harness agents install leader
|
||||
./scripts/harness mcp list
|
||||
./scripts/harness catalog update
|
||||
./scripts/harness hermes restart
|
||||
```
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
```bash
|
||||
./scripts/harness status # Статус всей среды
|
||||
./scripts/harness list catalog # Что есть в каталоге скиллов
|
||||
./scripts/harness list skills # Установленные скиллы
|
||||
./scripts/harness list agents # Агенты: доступные в репо + установленные
|
||||
./scripts/harness list mcp # MCP-серверы Hermes
|
||||
./scripts/harness status # Обзор среды
|
||||
./scripts/harness skills list # Что доступно в каталоге (+ отметки установки)
|
||||
./scripts/harness skills installed # Что реально стоит у агентов
|
||||
./scripts/harness agents list # Агенты: доступные в репо + установленные
|
||||
./scripts/harness mcp list # MCP-серверы Hermes
|
||||
./scripts/harness catalog list # Источники каталога
|
||||
```
|
||||
|
||||
## Команды
|
||||
## `skills` — скиллы из каталога
|
||||
|
||||
### Установка скиллов
|
||||
### `skills list` — что доступно к установке
|
||||
|
||||
Показывает содержимое каталога и где скилл уже стоит. `✓` — установлено, `·` — нет.
|
||||
|
||||
```bash
|
||||
# Установить скилл из каталога
|
||||
./scripts/harness install skill jakubkrehel-skills better-ui --target opencode
|
||||
./scripts/harness install skill jakubkrehel-skills better-ui --target hermes
|
||||
./scripts/harness install skill jakubkrehel-skills better-ui --target all
|
||||
|
||||
# Можно писать через слэш
|
||||
./scripts/harness install skill jakubkrehel-skills/better-ui --target all
|
||||
|
||||
# Все скиллы из репозитория разом
|
||||
./scripts/harness install skill jakubkrehel-skills --all --target opencode
|
||||
./scripts/harness install skill jakubkrehel-skills --all --target all
|
||||
./scripts/harness skills list
|
||||
./scripts/harness skills list --target opencode
|
||||
```
|
||||
|
||||
Скиллы ставятся симлинками в соответствующие директории:
|
||||
```
|
||||
Доступно из каталога (/mnt/data/Agent/dev/harness/catalog)
|
||||
✓ — установлено, · — нет
|
||||
|
||||
jakubkrehel-skills 11 скиллов 267330e
|
||||
├─ better-ui hermes · opencode ✓
|
||||
├─ better-colors hermes · opencode ·
|
||||
...
|
||||
```
|
||||
|
||||
Для git-источников показывается короткий sha; `⚠ сдвинут` — submodule ушёл вперёд
|
||||
и это ещё не закоммичено.
|
||||
|
||||
### `skills installed` — что реально стоит
|
||||
|
||||
Полное дерево каталогов агента, включая скиллы не из каталога.
|
||||
|
||||
```bash
|
||||
./scripts/harness skills installed
|
||||
./scripts/harness skills installed --target hermes
|
||||
```
|
||||
|
||||
### `skills install` / `skills remove`
|
||||
|
||||
```bash
|
||||
# Один скилл
|
||||
./scripts/harness skills install jakubkrehel-skills better-ui --target opencode
|
||||
./scripts/harness skills install jakubkrehel-skills/better-ui --target all
|
||||
|
||||
# Все скиллы источника
|
||||
./scripts/harness skills install jakubkrehel-skills --all --target opencode
|
||||
|
||||
# Удалить
|
||||
./scripts/harness skills remove better-ui
|
||||
./scripts/harness skills remove better-ui --target hermes
|
||||
```
|
||||
|
||||
Скиллы ставятся **симлинками**:
|
||||
|
||||
| Агент | Куда ставится |
|
||||
|-------|--------------|
|
||||
@@ -51,33 +106,21 @@ dev/harness/
|
||||
| OpenCode | `~/.claude/skills/<name>/` |
|
||||
| OpenCode | `~/.config/opencode/skills/<name>/` |
|
||||
|
||||
### Управление скиллами
|
||||
|
||||
```bash
|
||||
./scripts/harness list skills # Все скиллы
|
||||
./scripts/harness list skills --target hermes # Только Hermes
|
||||
./scripts/harness remove skill better-ui # Удалить отовсюду
|
||||
./scripts/harness remove skill better-ui --target hermes
|
||||
```
|
||||
|
||||
### Агенты (только OpenCode)
|
||||
## `agents` — агенты (только OpenCode)
|
||||
|
||||
Источник — `harness/agents/*.md`. Имя агента = имя файла без `.md`.
|
||||
|
||||
```bash
|
||||
# Список: что есть в репо + что уже установлено
|
||||
./scripts/harness list agents
|
||||
./scripts/harness list agents --scope global # только глобальные
|
||||
./scripts/harness list agents --scope project --project ~/work/myrepo
|
||||
./scripts/harness agents list
|
||||
./scripts/harness agents list --scope global
|
||||
./scripts/harness agents list --scope project --project ~/work/myrepo
|
||||
|
||||
# Установить одного / всех
|
||||
./scripts/harness install agent leader # в ~/.config/opencode/agents/
|
||||
./scripts/harness install agent --all --scope global # всех, глобально
|
||||
./scripts/harness install agent devops --scope project --project ~/work/myrepo
|
||||
./scripts/harness agents install leader # в ~/.config/opencode/agents/
|
||||
./scripts/harness agents install --all --scope global
|
||||
./scripts/harness agents install devops --scope project --project ~/work/myrepo
|
||||
|
||||
# Удалить
|
||||
./scripts/harness remove agent leader # отовсюду
|
||||
./scripts/harness remove agent leader --scope global
|
||||
./scripts/harness agents remove leader
|
||||
./scripts/harness agents remove leader --scope global
|
||||
```
|
||||
|
||||
| `--scope` | Куда ставится |
|
||||
@@ -89,60 +132,47 @@ dev/harness/
|
||||
`mode: all` (кроме `leader` — `primary`), чтобы лидер мог вызывать их как сабагентов.
|
||||
|
||||
> **Hermes агентов не поддерживает** — только runtime-делегирование через
|
||||
> `delegate_task`. Пользовательских определений агентов у него нет, поэтому
|
||||
> `install agent` работает только для OpenCode.
|
||||
> `delegate_task`. Пользовательских определений агентов у него нет.
|
||||
|
||||
### MCP-серверы (Hermes)
|
||||
## `mcp` — MCP-серверы Hermes
|
||||
|
||||
```bash
|
||||
# Добавить MCP по URL (HTTP SSE)
|
||||
./scripts/harness configure hermes mcp add my-server http://localhost:8000/mcp
|
||||
./scripts/harness mcp list
|
||||
|
||||
# Добавить MCP через команду (STDIO)
|
||||
./scripts/harness configure hermes mcp add github npx \
|
||||
# По URL (HTTP/SSE)
|
||||
./scripts/harness mcp add my-server http://localhost:8000/mcp
|
||||
|
||||
# Командой (stdio)
|
||||
./scripts/harness mcp add github npx \
|
||||
--env GITHUB_TOKEN=ghp_xxx \
|
||||
--arg -y --arg @modelcontextprotocol/server-github
|
||||
|
||||
# Список MCP
|
||||
./scripts/harness list mcp
|
||||
|
||||
# Удалить MCP
|
||||
./scripts/harness configure hermes mcp rm my-server
|
||||
./scripts/harness mcp rm my-server
|
||||
```
|
||||
|
||||
### Конфигурация Hermes
|
||||
`add` и `rm` сами перезапускают `hermes-gateway`, чтобы изменения подхватились.
|
||||
|
||||
## `catalog` — внешние репозитории
|
||||
|
||||
```bash
|
||||
# Посмотреть конфиг
|
||||
./scripts/harness configure hermes
|
||||
|
||||
# Установить параметры
|
||||
./scripts/harness configure hermes --set model.default=gpt-4o
|
||||
./scripts/harness configure hermes --set model.provider=openai
|
||||
./scripts/harness configure hermes --set agent.max_turns=200
|
||||
./scripts/harness catalog list # источники, содержимое, sha, признак «сдвинут»
|
||||
./scripts/harness catalog update # git submodule update --remote / git pull для клонов
|
||||
```
|
||||
|
||||
После изменения конфига скрипт автоматически перезапускает Hermes.
|
||||
|
||||
### Установка/обновление бинарников
|
||||
## `hermes` / `opencode` — сам агент
|
||||
|
||||
```bash
|
||||
./scripts/harness install opencode # curl-установщик opencode.ai
|
||||
./scripts/harness install hermes # hermes update + рестарт сервисов
|
||||
./scripts/harness hermes config # показать конфиг
|
||||
./scripts/harness hermes config --set model.default=gpt-4o
|
||||
./scripts/harness hermes config --set agent.max_turns=200
|
||||
./scripts/harness hermes restart # systemctl --user restart hermes-gateway + webui
|
||||
./scripts/harness hermes update # hermes update + рестарт сервисов
|
||||
|
||||
./scripts/harness opencode install # curl-установщик opencode.ai
|
||||
./scripts/harness opencode restart # systemctl --user restart opencode + openchamber
|
||||
```
|
||||
|
||||
### Перезапуск
|
||||
|
||||
```bash
|
||||
./scripts/harness restart hermes # systemctl --user restart hermes-gateway + webui
|
||||
./scripts/harness restart opencode # systemctl --user restart opencode + openchamber
|
||||
```
|
||||
|
||||
### Обновление каталога
|
||||
|
||||
```bash
|
||||
./scripts/harness update catalog # git pull во всех репах внутри catalog/
|
||||
```
|
||||
`hermes config --set` меняет `~/.hermes/config.yaml` и перезапускает сервисы.
|
||||
|
||||
## Как добавить скилл в каталог
|
||||
|
||||
@@ -154,19 +184,16 @@ git submodule add https://github.com/user/skills-repo.git catalog/user-skills
|
||||
git commit -m "chore: add user-skills to catalog"
|
||||
```
|
||||
|
||||
После этого `harness list catalog` покажет все найденные скиллы, а
|
||||
`harness update catalog` подтянет свежие коммиты во всех submodule'ах.
|
||||
|
||||
Обычный клон (`git clone` внутрь `catalog/`) тоже работает — `update catalog`
|
||||
обновит его через `git pull`, но такой каталог не попадёт в коммит репы
|
||||
(вложенная репа не станет submodule автоматически).
|
||||
После этого `harness skills list` покажет найденные скиллы, а
|
||||
`harness catalog update` подтянет свежие коммиты во всех submodule'ах.
|
||||
|
||||
### Раскладка репозитория и ручная установка
|
||||
|
||||
CLI `harness` понимает одну раскладку — `<репа>/skills/<name>/SKILL.md`.
|
||||
Репозитории с другой структурой он показывает как `(no skills/)`, и их скиллы
|
||||
ставятся вручную. Ограничение только у CLI: сам OpenCode сканирует рекурсивно
|
||||
(`skills/**/SKILL.md`, а через `skills.paths` — `**/SKILL.md` на любой глубине).
|
||||
CLI понимает одну раскладку — `<репа>/skills/<name>/SKILL.md`. Репозитории с другой
|
||||
структурой (`SKILL.md` в корне, `.agents/skills/`, вложенные категории) он показывает
|
||||
без списка скиллов, и такие скиллы ставятся вручную. Ограничение только у CLI: сам
|
||||
OpenCode сканирует рекурсивно (`skills/**/SKILL.md`, а через `skills.paths` —
|
||||
`**/SKILL.md` на любой глубине).
|
||||
|
||||
Пример — `developer-documentation-skill` держит `SKILL.md` в корне репы:
|
||||
|
||||
@@ -186,7 +213,7 @@ ln -s /mnt/data/Agent/dev/harness/catalog/developer-documentation-skill \
|
||||
|
||||
## Как добавить агента
|
||||
|
||||
Положить `.md` файл в `agents/` репозитория — и он сразу виден через `harness list agents`.
|
||||
Положить `.md` файл в `agents/` репозитория — и он сразу виден через `harness agents list`.
|
||||
|
||||
Формат — как у OpenCode:
|
||||
|
||||
@@ -215,9 +242,7 @@ permission:
|
||||
## Поддерживаемые форматы
|
||||
|
||||
- **Скиллы** — `SKILL.md` с YAML frontmatter (`name`, `description`); родной формат OpenCode и Hermes.
|
||||
Скиллы из `catalog/*/skills/<name>/SKILL.md` видны через `harness list catalog`.
|
||||
- **Агенты** — `<name>.md` с frontmatter (`description`, `mode`, ...); формат OpenCode.
|
||||
Лежат в `agents/<name>.md`.
|
||||
|
||||
## Совместимость
|
||||
|
||||
|
||||
Reference in New Issue
Block a user