diff --git a/.wiki/concepts/hermes-skills-rollout-design.md b/.wiki/concepts/hermes-skills-rollout-design.md new file mode 100644 index 0000000..6014582 --- /dev/null +++ b/.wiki/concepts/hermes-skills-rollout-design.md @@ -0,0 +1,141 @@ +--- +tags: + - hermes + - skills + - conversion + - deployment + - factory +sources: + - 'https://hermes-agent.nousresearch.com/docs/user-guide/features/skills' + - 'https://hermes-agent.nousresearch.com/docs/guides/use-mcp-with-hermes' + - 'https://www.glukhov.org/ai-systems/hermes/authoring-hermes-skill/' + - >- + https://github.com/NousResearch/hermes-agent/blob/main/skills/research/llm-wiki/SKILL.md +source_brainstorm: .meeting-room/.archive/2026-05-06-hermes-skills-rollout.md +title: hermes-skills-rollout-design +type: concept +ingested_at: '2026-05-06T20:21:13.349Z' +ingested_by: OpeItcLoc03@DESKTOP-NSEF0UK +source_project: .meeting-room +--- +# Hermes Skills Rollout — Design + +Раскатить `claude-skills` на Hermes Agent (Nous Research) как **частный фабричный комплект**, через converter + pre-built `dist-hermes/` + recursive installer-skill. Не tap, не Hub, не публикация. + +## Context + +Hermes — агент Nous Research (модель `glm-5.1`, локальная), формально совместим с `agentskills.io`. Цель: те же 21 наших скила, что работают в Claude Code, доступны и Hermes-агенту на фабричных Linux-машинах. Установка — через `skill_manage(action='create')` в `~/.hermes/skills///`. + +## Design tenet: независимость + +Мы не зависим от Hermes built-in скилов. Где у нас и у Hermes есть аналог по функции (например `research/llm-wiki`), ставим **наш**. Hermes built-in остаётся, но наша schema, наш темп развития — суверенны. Override через `skill_manage` precedence. + +Исключение — Hermes-нативные **тулы** (не скилы): `skills_list()`, `cronjob`, `execute_code`, `native-mcp`. Это инфраструктура, используем напрямую. + +## Hermes' inventory (relevant findings) + +- **`research/llm-wiki`** — встроен (Karpathy три-слой). Schema: `SCHEMA.md` (vs наш `.wiki/CLAUDE.md`), секции `entities/concepts/comparisons/queries` (vs наш `entities/concepts/packages/sources`). `.tasks/` НЕ трогает. Не drop-in replacement — другая schema → ставим наш через override. +- **`mcp/native-mcp`** — встроенный MCP-клиент. Внешние сервера через `~/.hermes/config.yaml > mcp_servers.` (stdio/HTTP, env-vars, auto-discovery, `/reload-mcp`). +- **`skills_list()`** — встроенный progressive disclosure (Level 0). Делает наш `find-skills` лишним. +- **`cronjob`** tool встроен → через `using-projects-meta` вешаем синк фабричных проектов на расписание. +- Hermes на Linux (`/opt/data/projects`), модель `glm-5.1` (Nous, дешёвая) → caveman-экономия токенов мотива не имеет. + +## Audit (factory-relevance × Hermes-side fit) + +| Skill | Решение | Reasoning | +|---|---|---| +| `pulling-before-work` | ✅ MVP | универсально, нет Hermes-аналога | +| `using-markitdown` | ✅ MVP | через `execute_code` | +| `active-platform` | ✅ MVP | shell-идиома (Hermes на Linux) | +| `project-discipline` | ✅ MVP | workflow-правила | +| `setup-tasks` / `using-tasks` | ✅ adapt | Hermes' llm-wiki `.tasks/` не покрывает | +| `setup-wiki` / `using-wiki` | ✅ adapt | наша schema, override Hermes built-in | +| `setup-projects-meta` (Hermes-flavour) | ✅ adapt-mandatory | thin wrapper: бинарь и `auth.toml` уже общие в `~/projects/.common/lib/projects-meta-mcp/` и `~/.config/projects-mcp/auth.toml` → только yaml-edit + `/reload-mcp` | +| `using-projects-meta` | ✅ adapt-mandatory | тулы auto-injected; политика та же; cron-синк фабричных проектов потом | +| `setup-context7` (Hermes-flavour) | ✅ adapt-mandatory | yaml-edit паттерн, аналогично projects-meta | +| `using-context7` | ✅ adapt-mandatory | политика та же | +| `project-bootstrap` | ⚠️ adapt | orchestrator — адаптируется последним | +| `caveman`×5 | ❌ skip | Hermes на дешёвой модели, мотив пропадает | +| `setup-interns` / `using-interns` | ❌ skip | Hermes сам — «cheap intern» | +| `find-skills` | ❌ skip | Hermes имеет `skills_list()` | + +**MVP locked: 13 скилов** (4 универсальных + 2 tasks + 2 projects-meta + 2 wiki + 2 context7 + 1 bootstrap). **Skip: 8** (caveman×5 + interns×2 + find-skills). + +## Architecture + +### Источник истины + конвертер + pre-built dist + +``` +claude-skills/ +├── skills/ ← source-of-truth (Claude-формат, без изменений) +├── dist/ ← .skill архивы для Claude (есть) +├── dist-hermes/ ← pre-converted Hermes-tree (committed, NEW) +│ ├── productivity/caveman/SKILL.md ← (нет — в SKIPPED.md) +│ ├── software-development/pulling-before-work/SKILL.md +│ ├── software-development/active-platform/SKILL.md +│ ├── ... +│ ├── meta/claude-skills-installer/SKILL.md ← bootstrap installer +│ └── SKIPPED.md ← skip-log с причинами +├── hermes/ +│ ├── mapping.yaml ← skill→category, replace-rules, skip-list, mode (NEW) +│ └── skills//SKILL.md ← `mode: manual` overrides (Hermes-flavour setups) +├── scripts/ +│ ├── build.sh / build.ps1 (есть) +│ ├── install.sh (есть) +│ └── build-hermes.{sh,py} (NEW — конвертер) +``` + +### Установка на Hermes-машине (recursive bootstrap) + +``` +git clone # private Gitea remote, на /opt/data/projects/ +# Один раз: +hermes → skill_manage(action='create', from='dist-hermes/meta/claude-skills-installer/SKILL.md') +# Дальше: +hermes → trigger «обнови claude-skills» → installer-скил итерирует по dist-hermes///, вызывает skill_manage per файл +``` + +Никакой conversion-логики на стороне Hermes. Никакого Python-окружения. Только `skill_manage` петля. + +### Категория-маппинг (черновик) + +- `pulling-before-work`, `project-discipline`, `project-bootstrap`, `active-platform` → `software-development` +- `setup-tasks`, `using-tasks` → `productivity` +- `using-markitdown` → `productivity` (или `research`) +- `setup-projects-meta`, `using-projects-meta`, `setup-context7`, `using-context7` → `mcp` +- `setup-wiki`, `using-wiki` → `research` + +## Decisions log + +- **Q1.** Maintenance model → ongoing dual-target (конвертер + маппинг, регенерим при каждом релизе claude-skills). Anti-drift, видимость Claude-измов, reuse под другие агенты. +- **Q2.** Distribution → НЕ tap-репо, НЕ install-script. **Pre-built `dist-hermes/` (committed) + recursive Hermes-side installer-скил.** Конвертация у нас, установка на Hermes — глупая петля по `skill_manage`. +- **Q3.** Hub-публикация → out of scope (частные фабричные скилы). +- **Q4.** Форма installer'а → installer-как-Hermes-скил (recursive bootstrap). Один раз ручная регистрация installer'а, дальше «обнови claude-skills» работает сам. +- **Q5.** caveman → skip (модель дешёвая, мотив теряется). wiki-fork → порти́руем наши (independence). context7 → mandatory adapt. projects-meta → mandatory adapt thin (бинарь общий). +- **Q6.** 🔴 не портируется → `mode: skip` в `mapping.yaml` + коммитимый `dist-hermes/SKIPPED.md` с причиной per skill. Stub-скилы не пишем. Silent отвергнут. +- **Q7.** Версионирование → per-skill semver mirror из claude-skills фронтматтера (`1.0.0` default если нет). Lock-step с upstream. Bump по `project-discipline` Rule 3. +- **Q8.** Layout → `claude-skills/hermes/{mapping.yaml,skills/}` + `scripts/build-hermes` + `dist-hermes/{/,meta/,SKIPPED.md}`. + +## Security carry-forward + +При имплементации — учитывать ЛОКАЛЬНЫЕ pre-existing уроки из claude-skills (актуально для Hermes-flavour `setup-projects-meta`): + +- **Extraheader-pattern** для git clone с auth: `git -c http.extraheader="Authorization: token $T" clone ` (per-invocation, НЕ persist в `.git/config`). Никаких `https://USER:TOKEN@host/...` URL — git персистит креды. +- **POSIX-absolute paths** (`~/projects/.common/...`), не `/.common/...` (cwd-relative). Урок из `[setup-interns-fix-paths]` / `[using-projects-meta-fix-paths]`. +- **Version bump** на каждый edit per `project-discipline` Rule 3 (PATCH/MINOR/MAJOR). + +## Out of scope + +- CI auto-rebuild `dist-hermes/` (отдельная deferred-таска `hermes-converter-ci`, не блокирует MVP). +- Распространение через Hermes Hub (частные скилы, public out). +- Cross-fabric distribution через приватный Gitea-tap (если когда-нибудь — отдельный спайк). + +## Связанные таски + +- `hermes-converter-mvp` (claude-skills) — infra + 4 universal как proof +- `hermes-flavour-mcp-setups` (claude-skills) — Hermes-version `setup-projects-meta` + `setup-context7` (yaml-edit) +- `hermes-installer-skill` (claude-skills) — recursive bootstrap loop +- `hermes-mvp-coverage` (claude-skills) — extend на остальные 9 MVP-скилов, smoke-test +- `hermes-converter-ci` (claude-skills, deferred) — auto-rebuild на push to master +- `tasks-close-normalize-body` (common, discipline pre-req) +- `using-tasks-close-coverage-gate` (claude-skills, discipline pre-req)