Docs/Skills

Skills система

Обзор

Skills — это документы с выборочной загрузкой знаний, которые агент подключает по мере необходимости. Skills используют паттерн постепенного раскрытия (progressive disclosure) для минимизации потребления токенов и совместимы со спецификацией agentskills.io.

Все skills хранятся в ~/.hermes/skills/ — основной директории и источнике истины. При установке bundled skills копируются из репозитория. Skills, установленные через Hub и созданные агентом, также попадают сюда. Агент может изменять или удалять любой skill.


Прогрессивное раскрытие (Progressive Disclosure)

Skills используют трёхуровневую загрузку:

terminal
Copy
Level 0: skills_list() -> [{name, description, category}, ...] (~3k токенов) Level 1: skill_view(name) -> Полный контент + метаданные (размер варьируется) Level 2: skill_view(name, path) -> Конкретный справочный файл (размер варьируется)

Агент загружает полное содержимое skill только когда оно действительно необходимо.


Формат SKILL.md

Каждый skill — это директория с файлом SKILL.md, содержащим YAML-фронтматер:

yaml
--- name: my-skill description: Краткое описание того, что делает skill (до 60 символов) version: 1.0.0 platforms: [macos, linux] metadata: hermes: tags: [python, automation] category: devops fallback_for_toolsets: [web] requires_toolsets: [terminal] config: - key: my.setting description: "Что регулирует эта настройка" default: "value" prompt: "Запрос при настройке" --- # Название Skill ## Когда использовать Условия активации. ## Процедура 1. Шаг первый 2. Шаг второй ## Подводные камни - Известные сбои и решения ## Проверка Как убедиться, что всё работает.

Структура директорий

terminal
Copy
~/.hermes/skills/ # Единый источник истины |-- mlops/ # Директория категории | |-- axolotl/ | | |-- SKILL.md # Основные инструкции (обязательно) | | |-- references/ # Дополнительные документы | | |-- templates/ # Форматы вывода | | |-- scripts/ # Вспомогательные скрипты | | +-- assets/ # Дополнительные файлы | +-- vllm/ | +-- SKILL.md |-- devops/ | +-- deploy-k8s/ | +-- SKILL.md |-- .hub/ # Состояние Skills Hub | |-- lock.json | |-- quarantine/ | +-- audit.log +-- .bundled_manifest # Манифест bundled skills

Использование Skills

Slash-команды

Каждый установленный skill доступен как slash-команда:

terminal
Copy
/gif-search funny cats /axolotl help me fine-tune Llama 3 on my dataset /github-pr-workflow create a PR for the auth refactor /plan design a rollout for migrating our auth provider

Естественный язык

terminal
Copy
hermes chat --toolsets skills -q "What skills do you have?" hermes chat --toolsets skills -q "Show me the axolotl skill"

Команда /learn

Превращает существующие знания в reusable skill без ручного написания SKILL.md:

terminal
Copy
# Локальная директория с документацией /learn the REST client in ~/projects/acme-sdk, focus on auth + pagination # Онлайн-страница /learn https://docs.example.com/api/quickstart # Рабочий процесс из текущего разговора /learn how I just deployed the staging server # Описание процедуры /learn filing an expense: open the portal, New > Expense, attach the receipt, submit

Специфичные для платформы Skills

Поле platforms ограничивает skill определёнными ОС:

ЗначениеСовпадение
macosmacOS (Darwin)
linuxLinux
windowsWindows
yaml
platforms: [macos] # Только macOS platforms: [macos, linux] # macOS и Linux

При установленном поле skill автоматически скрывается на несовместимых платформах.


Условная активация (Fallback Skills)

Skills могут автоматически скрываться/показываться в зависимости от доступных инструментов:

yaml
metadata: hermes: fallback_for_toolsets: [web] # Скрыть, когда эти toolsets ДОСТУПНЫ requires_toolsets: [terminal] # Показать, когда эти toolsets ДОСТУПНЫ fallback_for_tools: [web_search] # Скрыть, когда эти инструменты ДОСТУПНЫ requires_tools: [terminal] # Показать, когда эти инструменты ДОСТУПНЫ
ПолеПоведение
fallback_for_toolsetsSkill скрыт, когда перечисленные toolsets доступны
fallback_for_toolsТо же, но проверяет отдельные инструменты
requires_toolsetsSkill скрыт, когда перечисленные toolsets недоступны
requires_toolsТо же, но проверяет отдельные инструменты

Пример: Bundled skill duckduckgo-search использует fallback_for_toolsets: [web]. Когда переменная FIRECRAWL_API_KEY установлена, web toolset доступен и агент использует web_search — skill DuckDuckGo остаётся скрытым. Если ключ отсутствует, web toolset недоступен и skill автоматически появляется как fallback.


Безопасная настройка при загрузке

Skills могут объявлять обязательные переменные окружения:

yaml
required_environment_variables: - name: TENOR_API_KEY prompt: Tenor API key help: Получить ключ на https://developers.google.com/tenor required_for: полная функциональность

При отсутствии значения Hermes запрашивает его только при загрузке skill в локальном CLI. Мессенджеры никогда не запрашивают секреты в чате — они рекомендуют использовать hermes setup или ~/.hermes/.env.

Объявленные env-переменные автоматически передаются в песочницы execute_code и terminal.


Настройки конфигурации Skills

Skills могут объявлять несекретные настройки в config.yaml:

yaml
metadata: hermes: config: - key: myplugin.path description: Путь к директории данных плагина default: "~/myplugin-data" prompt: Путь к директории данных

Настройки хранятся в skills.config конфигурационного файла. Команда hermes config migrate запрашивает ненастроенные параметры, hermes config show отображает их.


Внешние директории Skills

Если skills хранятся за пределами Hermes (например, общий каталог ~/.agents/skills/), Hermes может сканировать их тоже:

yaml
# ~/.hermes/config.yaml skills: external_dirs: - ~/.agents/skills - /home/shared/team-skills - ${SKILLS_REPO}/skills

Правила:

  • Новые skills создаются в ~/.hermes/skills/
  • Существующие skills изменяются в месте обнаружения, включая внешние директории
  • Локальный приоритет: при совпадении имён локальная версия побеждает
  • Внешние skills полностью интегрированы (system prompt, skills_list, slash-команды)
  • Несуществующие директории пропускаются без ошибок

Skill Bundles

Bundles — это YAML-файлы, группирующие несколько skills под одной slash-командой.

YAML-схема

Файл ~/.hermes/skill-bundles/<slug>.yaml:

yaml
name: backend-dev description: Backend feature work — review, test, PR workflow skills: - github-code-review - test-driven-development - github-pr-workflow instruction: | Всегда начинай с написания падающих тестов, затем реализуй. Открывай PR через стандартный workflow с co-author тегами.

Управление

bash
# Создание bundle hermes bundles create backend-dev \ --skill github-code-review \ --skill test-driven-development \ --skill github-pr-workflow \ -d "Backend feature work" # Использование в CLI /backend-dev refactor the auth middleware # Другие команды hermes bundles list # Список всех bundles hermes bundles show backend-dev # Просмотр bundle hermes bundles delete backend-dev hermes bundles reload # Пересканировать директорию

Поведение

  • Bundles имеют приоритет над отдельными skills при совпадении slug
  • Отсутствующие skills пропускаются, не вызывают ошибку
  • Работают на всех платформах (CLI, TUI, dashboard, мессенджеры)
  • Не инвалидируют кеш промпта

Управляемые Агентом Skills (skill_manage)

Агент создаёт, обновляет и удаляет свои skills через инструмент skill_manage — это процедурная память агента.

Когда агент создаёт skills

  • После успешного выполнения сложной задачи (5+ вызовов инструментов)
  • Когда нашёл рабочий путь после ошибок
  • Когда пользователь скорректировал подход
  • Когда обнаружил нетривиальный рабочий процесс

Действия

ДействиеНазначениеКлючевые параметры
createНовый skill с нуляname, content, необязательно category
patchТочечные правки (предпочтительно)name, old_string, new_string
editСтруктурная перезаписьname, content (полная замена)
deleteУдаление skillname
write_fileДобавление/обновление файловname, file_path, file_content
remove_fileУдаление файлаname, file_path

Действие patch предпочтительнее edit — оно потребляет меньше токенов, так как в вызове инструмента появляется только изменённый текст.


Контроль записи: skills.write_approval

По умолчанию агент записывает skills свободно. Если нужен контроль:

yaml
skills: write_approval: false # false = свободная запись (по умолчанию) | true = требуется одобрение

При write_approval: true каждая запись через skill_manage стагируется вместо фиксации:

terminal
Copy
/skills pending # Список стагированных записей /skills diff <id> # Unified diff /skills approve <id> # Применить (или 'all') /skills reject <id> # Отклонить (или 'all') /skills approval on # Включить/выключить контроль

Staged-записи сохраняются после перезапуска в ~/.hermes/pending/skills/.


Skills Hub

Просмотр, поиск, установка и управление skills из онлайн-реестров.

Основные команды

bash
hermes skills browse # Просмотр всех hub skills hermes skills browse --source official # Только официальные hermes skills search kubernetes # Поиск по всем источникам hermes skills search react --source skills-sh # Поиск в skills.sh hermes skills inspect openai/skills/k8s # Просмотр перед установкой hermes skills install openai/skills/k8s # Установка с проверкой безопасности hermes skills install official/security/1password hermes skills install https://sharethis.chat/SKILL.md # Прямой URL hermes skills list --source hub # Список hub-installed skills hermes skills check # Проверка обновлений hermes skills update # Установка обновлений hermes skills audit # Повторное сканирование безопасности hermes skills uninstall k8s # Удаление hermes skills publish skills/my-skill --to github --repo owner/repo

Источники (Hub Sources)

ИсточникПримерОписание
officialofficial/security/1passwordОфициальные optional skills Hermes
skills-shskills-sh/vercel-labs/agent-skills/vercel-react-best-practicesПубличный каталог Vercel
well-knownwell-known:https://mintlify.com/docs/.well-known/skills/mintlifyURL-based discovery через /.well-known/skills/index.json
urlhttps://sharethis.chat/SKILL.mdПрямой URL на одиночный SKILL.md
githubopenai/skills/k8sУстановка из GitHub-репозитория
clawhubИдентификатор ClawHubСообщество / маркетплейс
lobehubИдентификатор LobeHubКонвертация агентов из каталога LobeHub
browse-shbrowse-sh/airbnb.com/search-listings-ddgioaКаталог browser-automation skills

Уровни доверия

УровеньИсточникПолитика
builtinВ комплекте с HermesВсегда доверенный
officialoptional-skills/ в репозиторииВстроенный уровень доверия
trustedПроверенные реестры (openai, anthropics, NVIDIA)Более свободная политика
communityВсе остальноеНенужные находки можно переопределить через --force

Проверка безопасности и --force

Все hub-installed skills проходят проверку на data exfiltration, prompt injection, destructive commands и другие угрозы.

bash
hermes skills install skills-sh/anthropics/skills/pdf --force

--force переопределяет policy blocks для caution/warn находок, но не переопределяет dangerous verdict.


Жизненный цикл обновлений

bash
hermes skills check # Проверить, какие hub skills обновились hermes skills update # Переустановить skills с доступными обновлениями hermes skills update react # Обновить конкретный skill

Официальные bundled skills при hermes update копируются в ~/.hermes/skills/. Если локальная версия не изменена, она обновляется. Если изменена — пропускается (защита от перезаписи).


Пользовательские Tap-источники

Публикуйте наборы skills как GitHub-репозиторий:

bash
# Добавление tap hermes skills tap add my-org/hermes-skills # Установка конкретного skill из tap hermes skills install my-org/hermes-skills/deploy-runbook # Управление hermes skills tap list hermes skills tap remove my-org/hermes-skills

Структура репозитория tap:

terminal
Copy
owner/repo/ +-- skills/ +-- my-workflow/ +-- SKILL.md

Сброс bundled skills: hermes skills reset

bash
# Сбросить запись в манифесте (локальная копия сохраняется) hermes skills reset google-workspace # Полная переустановка bundled версии hermes skills reset google-workspace --restore # Без подтверждения hermes skills reset google-workspace --restore --yes

В чате:

terminal
Copy
/skills reset google-workspace /skills reset google-workspace --restore

Установка с чистого листа

bash
# При установке (профиль по умолчанию) curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash -s -- --no-skills # При создании именованного профиля hermes profile create research --no-skills # На существующем профиле hermes skills opt-out # Остановить будущую сидингу hermes skills opt-out --remove # Также удалить неизменённые bundled skills hermes skills opt-in --sync # Отменить: удалить маркер и пересидировать

Практические примеры

Создание skill с нуля

yaml
--- name: deploy-k8s description: Развертывание сервисов в Kubernetes version: 1.0.0 platforms: [linux, macos] metadata: hermes: tags: [kubernetes, deployment, devops] category: devops requires_toolsets: [terminal] --- # Deploy Kubernetes ## Когда использовать Когда необходимо развернуть или обновить сервис в Kubernetes-кластере. ## Процедура 1. Проверить текущее состояние: `kubectl get pods -n <namespace>` 2. Применить манифесты: `kubectl apply -f k8s/` 3. Дождаться готовности: `kubectl rollout status deployment/<name>` 4. Проверить логи на ошибки ## Подводные камни - Убедиться, что контекст kubectl указывает на нужный кластер - Для production использовать canary или blue-green деплой

Запуск bundle

bash
hermes bundles create incident-response \ --skill oncall-runbook \ --skill log-analysis \ --skill slack-notify \ -d "Инцидент-реакция: диагностика, логи, уведомления"
terminal
Copy
/incident-response проблема с latency на API в production

Установка из разных источников

bash
# Официальный skill hermes skills install official/security/1password # Из skills.sh hermes skills search react --source skills-sh hermes skills install skills-sh/vercel-labs/json-render/json-render-react # Из GitHub hermes skills install openai/skills/k8s # Прямой URL hermes skills install https://example.com/my-skill/SKILL.md --name my-skill # Из пользовательского tap hermes skills tap add myorg/skills-repo hermes skills install myorg/skills-repo/my-workflow