Система навыков
Навыки — это документы со знаниями, которые агент загружает по мере необходимости. Они построены по принципу прогрессивного раскрытия (progressive disclosure), что минимизирует расход токенов, и совместимы с открытым стандартом agentskills.io.
Все навыки хранятся в ~/.hermes/skills/ — это основной каталог и единственный источник истины. При свежей установке встроенные навыки копируются туда из репозитория. Навыки, установленные из Hub, и навыки, созданные агентом, тоже попадают сюда. Агент может изменить или удалить любой навык.
Вы также можете указать Hermes на внешние каталоги навыков — дополнительные папки, которые сканируются наряду с локальной. См. раздел Внешние каталоги навыков ниже.
См. также:
Установка с сайта
У каждой устанавливаемой карточки в публичном Skills Hub
есть кнопка Install in Hermes. Она открывает Hermes Desktop с URL-кодированной целью установки,
в которой указан источник: official/... для опциональных навыков, clawhub/... для ClawHub и
явный путь к репозиторию для встроенных навыков (вместо неоднозначного голого имени). Та же цель
стоит и в CLI-команде на карточке:
hermes://skill/install?identifier=official%2Fsecurity%2F1password
Desktop показывает вопрос Install “skill-name”? с отдельными строками Source и Install to. Отмена ничего не меняет. После подтверждения в диалоге появляется Installing…, затем Installed и уведомление о завершении; ошибки остаются в диалоге, так что можно повторить попытку. Установка идёт через обычный конвейер Skills Hub (сканирование безопасности, журнал действий, обновление списка установленных). Если пока открыто подтверждение вы сменили профиль или подключение, откройте ссылку заново для нового места назначения: ссылка не может обойти сканирование или выбрать другой профиль. Открытые диалоги узнают о новом навыке со следующим сообщением.
Для маршрута skill/install нужна обновлённая сборка Desktop. Если приложения нет или оно не
распознаёт ссылку, разверните карточку и скопируйте её CLI-команду установки.
Старт с чистого листа
По умолчанию каждый профиль засеивается каталогом встроенных навыков, и каждый hermes update добавляет новые встроенные навыки, появившиеся с момента предыдущей версии. Если вам нужен профиль вообще без встроенных навыков — причём чтобы он оставался пустым при последующих обновлениях, — есть два пути.
На этапе установки (применяется к профилю по умолчанию ~/.hermes): у
установщика нет флага --no-skills. На этапе настройки он спрашивает, засеивать ли
каталог встроенных навыков, если вы выбрали вариант Blank Slate; ответ «нет»
записывает маркер отказа, описанный ниже. Неинтерактивная установка каталог засеивает,
поэтому, если хотите пустой профиль, после неё выполните hermes skills opt-out.
На этапе создания профиля (именованные профили):
hermes profile create research --no-skills
На уже установленном профиле (по умолчанию или именованном) переключить поведение можно и во время работы:
hermes skills opt-out # прекратить будущее засеивание — файлы на диске не трогаются
hermes skills opt-out --remove # плюс удалить НЕИЗМЕНЁННЫЕ встроенные навыки (сначала запрашивает подтверждение)
hermes skills opt-in --sync # отмена: убрать маркер и засеять заново прямо сейчас
Все эти пути записывают в директорию профиля маркер .no-bundled-skills. Пока маркер присутствует, установщик, hermes update и любая синхронизация навыков пропускают засеивание встроенных навыков для этого профиля. Удалите маркер (или выполните hermes skills opt-in), чтобы включить засеивание снова.
hermes skills opt-out останавливает только будущее засеивание — он никогда не удаляет то, что уже есть на диске. Опциональный флаг --remove удаляет встроенные навыки только если они не изменялись (побайтово идентичны версии, установленной Hermes). Навыки, которые вы редактировали, навыки, установленные из hub, и навыки, написанные вами самостоятельно, сохраняются всегда.
Использование навыков
Каждый установленный навык автоматически доступен как слэш-команда:
# В CLI или на любой мессенджер-платформе:
/gif-search funny cats
/axolotl help me fine-tune Llama 3 on my dataset
/github-pr-workflow create a PR for the auth refactor
/songsee analyze the frequency spread of this mix
# Одно только имя навыка загружает его и позволяет агенту спросить, что вам нужно:
/excalidraw
Объединение нескольких навыков в одной команде
Вы можете вызвать сразу несколько навыков в одном сообщении, выстроив слэш-команды подряд в начале строки — загружается каждый ведущий токен /skill (до 5 штук), а всё остальное становится вашей инструкцией:
/github-pr-workflow /test-driven-development fix issue #123 and open a PR
Разбор останавливается на первом токене, который не является установленным навыком, поэтому аргументы, случайно начинающиеся с / (например, пути к файлам), никогда не поглощаются по ошибке:
/ocr-and-documents ~/.hermes/cache/scratch/scan.pdf extract the tables # загружается один навык; ~/.hermes/cache/scratch/scan.pdf становится аргументом
Для комбинаций, которые вы используете постоянно, лучше завести набор навыков (skill bundle) — тот же эффект, но под одной короткой командой.
(Режим плана работает точно так же, но теперь это встроенная команда: /plan [запрос] поручает Hermes при необходимости изучить контекст, написать markdown-план реализации вместо непосредственного выполнения задачи и сохранить результат в .hermes/plans/ относительно активного рабочего пространства/рабочей директории бэкенда.)
Взаимодействовать с навыками можно и через обычный диалог:
hermes chat --toolsets skills -q "What skills do you have?"
hermes chat --toolsets skills -q "Show me the axolotl skill"
Создание навыка из источников (/learn)
/learn — это быстрый способ превратить то, что вы уже знаете, — или груду справочных материалов — в переиспользуемый навык, без ручного написания SKILL.md. Команда открытого формата: направьте её на что угодно, что можно описать, и агент соберёт материал имеющимися у него инструментами, а затем составит навык по внутренним стандартам написания (описание ≤60 символов, стандартный порядок разделов, формулировки под инструменты Hermes, без выдуманных команд).
# Локальный SDK или директория с документацией — читается через read_file / search_files
/learn the REST client in ~/projects/acme-sdk, focus on auth + pagination
# Онлайн-страница документации — загружается через web_extract
/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
# Целая книга, стопка статей или большой корпус документации — становится навыком-базой знаний
/learn ~/books/designing-data-intensive-applications.pdf
Большие источники становятся навыками-базами знаний
Когда источник — это книга, стопка статей, спецификация или большая папка с документацией, агент не пытается втиснуть её в один файл и не сводит к урезанному пересказу. Вместо этого он составляет развёрнутый навык-базу знаний: компактный SKILL.md с ключевыми ментальными моделями источника и индексом, плюс по одному отдельному файлу на главу или тему под references/ (а также глоссарий или шпаргалку, если источник их заслуживает). Справочные файлы ничего не стоят, пока не понадобятся, — агент подгружает их по требованию через skill_view, поэтому стоимость запроса пропорциональна ответу, а не размеру источника. Повторный запуск /learn с новыми материалами на ту же тему встраивается в уже существующий навык, а не создаёт дубликат.
Дистилляция синтезирует структуру — фреймворки, определения, правила принятия решений, антипаттерны — и никогда не воспроизводит фрагменты исходного текста дословно.
Поскольку сбором материала занимается сам живой агент, /learn работает одинаково в CLI, в мессенджер-шлюзе, в TUI и в дашборде — и на любом терминальном бэкенде (локальном, Docker, удалённом), так как отдельного движка сбора данных не существует. На странице Skills в дашборде есть кнопка Learn a skill, открывающая панель с полем для директории, полем для URL и текстовым полем свободной формы; она составляет запрос /learn и запускает его в чате.
У /learn нет отдельного модельного инструмента: команда строит промпт, основанный на стандартах, и передаёт его агенту как обычный ход диалога. Агент сохраняет результат через инструмент skill_manage, поэтому гейт с подтверждением записи применяется и здесь, если вы его включили.
Прогрессивное раскрытие
Навыки используют схему загрузки, экономную по токенам:
Level 0: skills_list() → [{name, description, category}, ...] (~3k токенов)
Level 1: skill_view(name) → Полное содержимое + метаданные (варьируется)
Level 2: skill_view(name, path) → Конкретный справочный файл (варьируется)
Агент загружает полное содержимое навыка только тогда, когда оно действительно нужно.
Навыки, добавленные во время диалога
Список навыков, из которого выбирает агент, входит в системный промпт диалога. Системный промпт остаётся
неизменным, чтобы продолжал работать кэш промптов провайдера. Если пока диалог открыт, навык установили,
создали или удалили (из Skills Hub, командой hermes skills install в другом терминале, плагином,
куратором или самим агентом), ваше следующее сообщение агенту несёт короткую заметку: в ней перечислены
новые навыки с описаниями и удалённые. Заметка отправляется один раз на каждое изменение, а сам системный
промпт подхватывает изменение при следующем уплотнении контекста. Для этого /reload-skills не нужен,
хотя он по-прежнему обновляет слэш-команды /skill-name.
Формат SKILL.md
---
name: my-skill
description: Brief description of what this skill does
version: 1.0.0
platforms: [macos, linux] # Опционально — ограничение по конкретным ОС
metadata:
hermes:
tags: [python, automation]
category: devops
fallback_for_toolsets: [web] # Опционально — условная активация (см. ниже)
requires_toolsets: [terminal] # Опционально — условная активация (см. ниже)
config: # Опционально — настройки config.yaml
- key: my.setting
description: "What this controls"
default: "value"
prompt: "Prompt for setup"
---
# Skill Title
## When to Use
Условия срабатывания этого навыка.
## Procedure
1. Шаг первый
2. Шаг второй
## Pitfalls
- Известные сбои и их устранение
## Verification
Как убедиться, что сработало.
Платформо-специфичные навыки
Навыки могут ограничивать себя конкретными операционными системами через поле platforms:
| Значение | Соответствие |
|---|---|
macos | macOS (Darwin) |
linux | Linux |
windows | Windows |
platforms: [macos] # только macOS (например, iMessage, Apple Reminders, FindMy)
platforms: [macos, linux] # macOS и Linux
Если поле задано, навык автоматически скрывается из системного промпта, skills_list() и слэш-команд на несовместимых платформах. Если поле не указано, навык загружается на всех платформах.
Вывод навыка и доставка медиафайлов
Когда ответ навыка (или любой другой ответ агента) содержит голый абсолютный путь к медиафайлу — например, /home/user/screenshots/diagram.png, — шлюз автоматически распознаёт его, убирает из видимого текста и доставляет файл нативно в чат пользователя (фото в Telegram, вложение в Discord и т. п.) вместо того, чтобы оставлять сырой путь в сообщении.
Для аудио отдельно предусмотрена директива [[audio_as_voice]], которая превращает аудиофайлы в нативные голосовые сообщения на платформах, которые их поддерживают (Telegram, WhatsApp).
Принудительная доставка в виде документа: [[as_document]]
Иногда нужен обратный эффект по сравнению с встроенным превью: файл должен доставляться как скачиваемое вложение, а не как заново сжатая картинка. Классический пример — скриншот высокого разрешения или график: sendPhoto в Telegram пересжимает его примерно до 200 КБ при 1280 px, разрушая читаемость. PNG на 1-2 МБ, отправленный через sendDocument, сохраняет исходные байты без изменений.
Если ответ (или любой текст внутри него — как правило, последняя строка) содержит буквальную директиву [[as_document]], каждый медиапуть, извлечённый из этого ответа, доставляется как вложение-документ, а не как картинка-превью:
Here is your rendered chart:
/home/user/.hermes/cache/chart-q4-2025.png
[[as_document]]
Директива убирается перед доставкой, так что пользователи её никогда не видят. Гранулярность намеренно сделана «всё или ничего» на уровне ответа: укажите [[as_document]] один раз — и каждый путь к изображению в этом же ответе доставится как документ. Логика зеркальна области действия [[audio_as_voice]].
Используйте эту директиву из навыка, когда:
- Вы генерируете скриншоты или графики, которые пользователю нужны как файлы (для редактирования в другом инструменте, архивирования, пересылки без потерь).
- Стандартное превью с потерями скрывает детали (мелкий текст, точные пиксель-в-пиксель диаграммы, чувствительные к цвету рендеры).
Платформы без отдельного механизма доставки документов (например, SMS) откатываются на тот механизм вложений, который у них есть.
Условная активация (резервные навыки)
Навыки могут автоматически показывать или скрывать себя в зависимости от того, какие инструменты доступны в текущей сессии. Это особенно полезно для резервных навыков (fallback skills) — бесплатных или локальных альтернатив, которые должны появляться только тогда, когда премиум-инструмент недоступен.
metadata:
hermes:
fallback_for_toolsets: [web] # Показывать ТОЛЬКО когда эти наборы инструментов недоступны
requires_toolsets: [terminal] # Показывать ТОЛЬКО когда эти наборы инструментов доступны
fallback_for_tools: [web_search] # Показывать ТОЛЬКО когда эти конкретные инструменты недоступны
requires_tools: [terminal] # Показывать ТОЛЬКО когда эти конкретные инструменты доступны
| Поле | Поведение |
|---|---|
fallback_for_toolsets | Навык скрыт, когда перечисленные наборы инструментов доступны. Показывается, когда их нет. |
fallback_for_tools | То же самое, но проверяются отдельные инструменты, а не наборы. |
requires_toolsets | Навык скрыт, когда перечисленные наборы инструментов недоступны. Показывается, когда они есть. |
requires_tools | То же самое, но проверяются отдельные инструменты. |
Пример: встроенный навык duckduckgo-search использует fallback_for_toolsets: [web]. Когда у вас установлен FIRECRAWL_API_KEY, набор инструментов web доступен и агент пользуется web_search — навык DuckDuckGo остаётся скрытым. Если ключ API отсутствует, набор web недоступен, и навык DuckDuckGo автоматически появляется как резервный вариант.
Навыки без каких-либо условных полей ведут себя как прежде — они показываются всегда.
Безопасная настройка при загрузке
Навыки могут объявлять обязательные переменные окружения без того, чтобы пропадать из списка доступных:
required_environment_variables:
- name: TENOR_API_KEY
prompt: Tenor API key
help: Get a key from https://developers.google.com/tenor
required_for: full functionality
Когда встречается отсутствующее значение, Hermes безопасно запрашивает его, но только когда навык фактически загружается в локальном CLI. Настройку можно пропустить и продолжать пользоваться навыком. Мессенджер-поверхности никогда не запрашивают секреты прямо в чате — они советуют использовать hermes setup или ~/.hermes/.env локально.
После установки объявленные переменные окружения автоматически прокидываются в песочницы execute_code и terminal — скрипты навыка могут напрямую использовать $TENOR_API_KEY. Для переменных окружения, не относящихся к навыкам, используйте параметр конфигурации terminal.env_passthrough. Подробности см. в разделе Проброс переменных окружения.
Настройки конфигурации навыка
Навыки также могут объявлять несекретные настройки конфигурации (пути, предпочтения), хранящиеся в config.yaml:
metadata:
hermes:
config:
- key: myplugin.path
description: Path to the plugin data directory
default: "~/myplugin-data"
prompt: Plugin data directory path
Настройки хранятся в skills.config вашего config.yaml. Команда hermes config migrate запрашивает значения для ненастроенных параметров, а hermes config show их отображает. Когда навык загружается, его разрешённые значения конфигурации внедряются в контекст, чтобы агент автоматически знал настроенные значения.
Подробности см. в разделах Настройки навыков и Создание навыков — Настройки конфигурации.
Структура каталога навыков
~/.hermes/skills/ # Единственный источник истины
├── mlops/ # Каталог категории
│ ├── axolotl/
│ │ ├── SKILL.md # Основные инструкции (обязательно)
│ │ ├── references/ # Дополнительная документация
│ │ ├── templates/ # Форматы вывода
│ │ ├── scripts/ # Вспомогательные скрипты, вызываемые из навыка
│ │ ├── examples/ # Примеры результатов, на которые есть ссылки
│ │ └── assets/ # Дополнительные файлы
│ └── vllm/
│ └── SKILL.md
├── devops/
│ └── deploy-k8s/ # Навык, созданный агентом
│ ├── SKILL.md
│ └── references/
├── .hub/ # Состояние Skills Hub
│ ├── lock.json
│ ├── quarantine/
│ └── audit.log
└── .bundled_manifest # Отслеживает засеянные встроенные навыки
Установки со сторонних URL и из GitHub включают SKILL.md плюс точные локальные файлы, на которые он ссылается, под references/, templates/, scripts/, assets/ и examples/. Файлы репозитория, на которые нет ссылок, не копируются. Hermes сканирует весь карантинный бандл целиком и записывает в skills/.hub/lock.json исходный URL, точный хеш содержимого, версию сканера, находки, время и статус свежести/кэшированности.
Дополнительное сканирование SkillEvaluator
Помимо встроенного сканера безопасности (который применяет описанную выше политику установки), Hermes может запускать проверки уровня 1 (Tier 1) NVIDIA SkillEvaluator при каждой установке из hub как второе мнение. Tier 1 детерминирован и не требует ключей — это детекция PII (утёкшие email, персональные пути, строки подключения), детекция unicode-подмены, линт скриптов, проверка лицензионной совместимости и статическое сканирование безопасности через NVIDIA SkillSpector.
Сканирование носит рекомендательный характер: находки печатаются с указанием файла и строки перед подтверждением установки, а сама установка продолжается. Находки, похожие на настоящие учётные данные (приватные ключи, ключи доступа к облаку, токены, строки подключения с учётными данными), выделяются красным, чтобы вы могли просмотреть отмеченные строки перед принятием решения. Находки класса PII носят информационный характер — у вышестоящего сканера есть известные классы ложных срабатываний (например, SSH-синтаксис вида git@github.com, примеры email в документации), поэтому они никогда ничего не блокируют.
Чтобы включить его, установите опциональные бинарники сканера (второй из них отвечает за проверку security; без него эта проверка просто сообщает «не выполнена»):
uv tool install --python 3.13 \
"skillevaluator @ git+https://github.com/NVIDIA/SkillEvaluator.git@v0.1.0"
uv tool install "git+https://github.com/NVIDIA/SkillSpector.git@v2.9.5"
Без бинарника в PATH сканирование молча пропускается. Чтобы отключить его полностью:
skills:
tier1_advisory: false
Кнопка сканирования в разделе Browse-hub дашборда возвращает те же рекомендательные данные в своём ответе (поле tier1) наряду с вердиктом встроенного сканера.
Внешние каталоги навыков
Если вы держите навыки вне Hermes — например, общую директорию ~/.agents/skills/, используемую несколькими инструментами на базе ИИ, — вы можете указать Hermes сканировать и эти каталоги тоже.
Добавьте external_dirs в раздел skills файла ~/.hermes/config.yaml:
skills:
external_dirs:
- ~/.agents/skills
- /home/shared/team-skills
- ${SKILLS_REPO}/skills
Пути поддерживают расширение ~ и подстановку переменных окружения ${VAR}.
Как это работает
- Создание локально, обновление на месте: новые навыки, созданные агентом, записываются в
~/.hermes/skills/(или вskills.create_dir, если он настроен, — см. ниже). Существующие навыки изменяются там, где они найдены, включая навыки подexternal_dirs, когда агент использует действияskill_manageвродеpatch(точечного или с полной перезаписью),write_file,remove_fileилиdelete. - Внешние каталоги — не граница защиты от записи: если внешний каталог навыков доступен для записи процессу Hermes, обновления навыков, управляемых агентом, могут менять файлы в этой директории. Используйте права файловой системы или отдельную настройку профиля/набора инструментов, если общие внешние навыки должны оставаться только для чтения.
- Приоритет: если одно и то же имя навыка есть в нескольких каталогах, везде побеждает каталог с более высоким приоритетом: в индексе навыков,
skills_list,hermes skills list,skill_view, слэш-командах, предзагрузке-sи cron. Порядок такой:project → local (~/.hermes/skills/) → skills.create_dir → external_dirs. Скрытая копия попадает в лог как перекрытая (shadowed). См. Повторяющиеся имена навыков. - Полная интеграция: внешние навыки появляются в индексе системного промпта, в
skills_list,skill_viewи как слэш-команды/skill-name— никак не отличаясь от локальных навыков. - Несуществующие пути молча пропускаются: если настроенной директории не существует, Hermes игнорирует её без ошибок. Полезно для опциональных общих каталогов, которые могут отсутствовать не на каждой машине.
Пример
~/.hermes/skills/ # Локальный (основной, чтение-запись)
├── devops/deploy-k8s/
│ └── SKILL.md
└── mlops/axolotl/
└── SKILL.md
~/.agents/skills/ # Внешний (общий, изменяемый при наличии прав на запись)
├── my-custom-workflow/
│ └── SKILL.md
└── team-conventions/
└── SKILL.md
Все четыре навыка появляются в вашем индексе навыков. Если вы создадите локально новый навык с именем my-custom-workflow, он затенит внешнюю версию.
Перенаправление создания навыков (skills.create_dir)
По умолчанию агент пишет новые навыки в локальную для профиля ~/.hermes/skills/. Если вы хотите, чтобы созданные агентом навыки попадали куда-то ещё — в общую директорию «мозга», git-репозиторий или общий для целого парка машин том с навыками, — задайте create_dir в разделе skills:
skills:
create_dir: /opt/brain/skills
Что при этом меняется:
- Создание через
skill_manageпишет туда. Новые навыки (включая категорийные поддиректории) создаются подcreate_dirвместо локальной директории навыков. Директория создаётся при первой записи, если её ещё нет. - Инструкции агента следуют за конфигом. Каждая инструкция, обращённая к агенту и называющая путь для создания навыков, — описание инструмента
skill_manageи связанный текст промпта — динамически подставляет настроенную директорию, так что агенту сообщается писать именно туда. Никаких переопределений системного промпта или трюков с файловой системой не требуется. - Директория полностью интегрирована. Навыки под
create_dirсканируются наравне с локальной директорией: они появляются в индексе навыков,skills_list,skill_view, слэш-командах, их можно патчить или удалять точно так же, как любой локальный навык. - Всё остальное остаётся локальным. Существующие навыки по-прежнему изменяются на месте, где бы они ни находились; синхронизация встроенных навыков, hub и куратор продолжают работать с локальной для профиля директорией.
Пути поддерживают расширение ~ и подстановку ${VAR}; относительные пути разрешаются относительно вашего Hermes home. Указать в create_dir локальную директорию навыков — то же самое, что оставить параметр не заданным.
Проектные навыки (Project-Local Skills)
Репозитории могут нести собственные навыки, активные только для сессий, запущенных внутри этого проекта, — тот же паттерн, что и репо-локальная конфигурация в других агентских харнессах. Когда вы запускаете Hermes внутри git-чекаута, он ищет навыки в:
<project-root>/.hermes/skills/ # нативное расположение Hermes
<project-root>/.agents/skills/ # межинструментальная конвенция (общая с другими агентскими CLI)
Корень проекта — это ближайшая родительская директория, содержащая .git (worktree и submodule тоже считаются).
Доверие к проекту
Навыки — это процедурные документы, которым следует агент, поэтому Hermes не загружает их автоматически из произвольных клонированных репозиториев. При первом запуске Hermes в репозитории с проектными навыками баннер показывает уведомление:
◆ 3 project skill(s) found in /home/you/myproject but not loaded — run `hermes skills trust` to enable them.
Доверьтесь репозиторию один раз (изнутри него или передав путь):
hermes skills trust # доверять текущему репозиторию
hermes skills trust ~/myproject # или явно
hermes skills untrust # отозвать доверие
Доверенные корни хранятся в skills.trusted_project_dirs в ~/.hermes/config.yaml. Установите skills.project_discovery: false, чтобы полностью отключить эту функцию (без сканирования, без уведомлений).
Приоритет
Проектные навыки — это уровень с наивысшим приоритетом: project → local (~/.hermes/skills/) → skills.create_dir → external_dirs. Проектный навык с именем deploy перекрывает одноимённый навык профиля или встроенный навык для сессий внутри этого репозитория — в этом и смысл: вендоренные навыки репозитория побеждают на своей территории, не затрагивая ваш глобальный профиль. Проектные навыки помечаются тегом [project] в индексе навыков агента, чтобы происхождение оставалось видимым.
Как и внешние каталоги, директории проектных навыков считаются собственностью репозитория: автономное обслуживание навыков (куратор) никогда их не изменяет, а новые навыки, созданные агентом, всегда попадают в ~/.hermes/skills/.
Повторяющиеся имена навыков
Любая часть системы разрешает имя навыка одинаково.
- В разных каталогах побеждает каталог с более высоким приоритетом (
project → local → skills.create_dir → external_dirs), в том числе для одного и того же относительного пути (еслиproductivity/xdupесть и в локальном, и во внешнем каталоге, загрузится локальная копия). Перекрытая копия скрывается, а в лог пишется предупреждение. - Внутри одного каталога два разных навыка с одним именем система не выбирает наугад. Оба перечисляются под точным относительным путём (например,
a/oneиb/two), а загрузка по голому имени падает с ошибкойAmbiguous skill name dup-demo: use one of a/one, b/two. Такое же сообщение выдаютhermes -s dup-demoи cron-задачи. Одинаковые копии одного навыка (вид через симлинк или побайтово идентичная копия) разрешаются в самый неглубокий путь.
Навыки плагинов используют собственные имена вида plugin:skill и с этими правилами не пересекаются.
Карантин на этапе сканирования
Доверие — это решение уровня репозитория, но содержимое навыков репозитория меняется с каждым git pull. Чтобы закрыть этот разрыв, каждый проектный навык сканируется тем же сканером безопасности, что используется для установок из Skills Hub, прежде чем попасть в индекс. Навык, чей вердикт сканирования — dangerous (директивы инъекции промпта, команды эксфильтрации учётных данных, приёмы со скрытым текстом), помещается в карантин: он не появляется в индексе навыков, в skills_list, в слэш-командах и отказывается загружаться по имени с объясняющей ошибкой. Сканирования кэшируются по хешу содержимого в ~/.hermes/cache/project_skill_scans/ (никогда внутри вашего репозитория) и перезапускаются автоматически при изменении содержимого навыка.
Неинтерактивные поверхности (cron, API, ACP)
Cron-задачи и другие неинтерактивные поверхности наследуют ваше интерактивное решение о доверии — они никогда не запрашивают его и никогда не доверяют автоматически. Корень проекта разрешается из рабочей директории поверхности (workdir cron-задачи — через тот же механизм, что использует инструмент terminal). Cron-задача, чей workdir находится внутри ранее доверенного репозитория, загружает проектные навыки этого репозитория; задача в недоверенном или ещё не решённом репозитории не загружает ни одного.
В TUI и десктопе корень проекта следует за рабочим пространством каждой сессии (каталогом, который показан в боковой панели или задан выбором рабочего пространства), поэтому hermes --tui, запущенный внутри доверенного репозитория, регистрирует его проектные навыки как слэш-команды, даже если terminal.cwd оставлен на заглушке по умолчанию .; две сессии, открытые в двух репозиториях, видят каждая свои.
Наборы навыков (Skill Bundles)
Наборы навыков (skill bundles) — это крошечные YAML-файлы, группирующие несколько навыков под одной слэш-командой. Когда вы выполняете /<bundle-name>, загружаются сразу все навыки, перечисленные в наборе, — это удобно, когда конкретной задаче всегда помогает один и тот же набор навыков вместе.
Быстрый пример
# Создаём набор для backend-разработки функциональности
hermes bundles create backend-dev \
--skill github-code-review \
--skill test-driven-development \
--skill github-pr-workflow \
-d "Backend feature work — review, test, PR workflow"
Затем в CLI или на любой платформе шлюза:
/backend-dev refactor the auth middleware
Агент получает все три навыка, загруженные в одно пользовательское сообщение, а текст после слэш-команды прикрепляется как пользовательская инструкция.
YAML-схема
Наборы навыков хранятся в ~/.hermes/skill-bundles/<slug>.yaml и выглядят так:
name: backend-dev
description: Backend feature work — review, test, PR workflow.
skills:
- github-code-review
- test-driven-development
- github-pr-workflow
instruction: |
Always start by writing failing tests, then implement.
Open the PR through the standard workflow with co-author tags.
Поля:
name(опционально — по умолчанию берётся из имени файла) — отображаемое имя набора. Нормализуется в дефисный слаг для слэш-команды (Backend Dev→/backend-dev).description(опционально) — короткий текст, показываемый в/bundlesиhermes bundles list.skills(обязательно, непустой список) — имена навыков или пути относительно вашей директории навыков. Используйте тот же идентификатор, который вы передали бы в/<skill-name>.instruction(опционально) — дополнительное указание, добавляемое перед содержимым загружаемых навыков. Полезно, чтобы зафиксировать «как мы всегда используем их вместе».
Управление наборами
# Список всех установленных наборов
hermes bundles list
# Просмотр одного набора
hermes bundles show backend-dev
# Создание набора в интерактивном режиме (опустите флаги --skill, чтобы вводить их по одному)
hermes bundles create research
# Перезапись существующего набора
hermes bundles create backend-dev --skill ... --force
# Удаление набора
hermes bundles delete backend-dev
# Пересканировать ~/.hermes/skill-bundles/ и сообщить об изменениях
hermes bundles reload
Внутри сессии чата /bundles выводит список всех установленных наборов и входящих в них навыков.
Поведение
- Наборы имеют приоритет над отдельными навыками при совпадении слагов. Если вы назовёте набор
research, а у вас уже есть навык с именемresearch, то/researchвызовет именно набор. Это сделано намеренно — вы сами согласились на такое поведение, назвав набор так. - Отсутствующие навыки пропускаются, а не считаются фатальной ошибкой. Если набор перечисляет
skill-foo, а вы его не установили, набор всё равно загрузит те навыки, что разрешились, а агент получит примечание со списком пропущенного. - Наборы работают на всех поверхностях — в интерактивном CLI, TUI, чате дашборда и на всех платформах шлюза (Telegram, Discord, Slack и т. д.), — потому что диспетчеризация централизована в том же месте, что и для отдельных команд навыков.
- Наборы не инвалидируют кэш промпта. Они генерируют новое пользовательское сообщение в момент вызова, точно так же, как
/<skill-name>, — без изменения системного промпта.
Когда наборы лучше установки каждого навыка вручную
Используйте набор, когда:
- Вы всегда сочетаете одни и те же навыки для повторяющейся задачи (
/backend-dev,/release-prep,/incident-response). - Вам хочется модель на пару символов короче, чем набирать несколько команд
/skillподряд. - Вы хотите распространить командный «профиль задачи», зафиксировав YAML набора в общем репозитории dotfiles и подключив его символьной ссылкой в
~/.hermes/skill-bundles/.
Набор — это просто YAML-псевдоним: он не устанавливает навыки за вас. Сами навыки должны уже присутствовать (в ~/.hermes/skills/ или во внешнем каталоге навыков). В противном случае вызов набора просто пропустит отсутствующие.
Навыки, управляемые агентом (инструмент skill_manage)
Агент может создавать, обновлять и удалять собственные навыки через инструмент skill_manage. Это процедурная память агента: когда он вырабатывает нетривиальный рабочий процесс, он сохраняет подход как навык для повторного использования в будущем.
Навыки и память работают вместе в цикле самосовершенствования: память хранит небольшие устойчивые факты, которые всегда должны быть в контексте, а навыки — более длинные процедуры, которые должны загружаться только при необходимости. Фоновая проверка может предложить или подготовить изменения навыков после сессии, но описанный ниже гейт подтверждения записи позволяет вам требовать проверки человеком перед тем, как эти изменения вступят в силу.
Когда агент создаёт навыки
Системный промпт просит агента фиксировать нетривиальный рабочий процесс через skill_manage
для последующего переиспользования. На практике это покрывает:
- Когда он выработал многошаговый рабочий процесс, который стоит повторять
- Когда он столкнулся с ошибками или тупиками и нашёл рабочий путь
- Когда пользователь скорректировал его подход
Как выглядит запись навыка
Навык — это инструкция, как выполнять целый класс задач наиболее эффективным и правильным
способом, по вашим требованиям: процедура по шагам, работающие команды и вызовы инструментов,
каким должен получиться результат, и подводные камни, которые стоили времени. Написан ли он
в ходе разговора, фоновым разбором или в проходе консолидации у куратора, он фиксирует
уроки, а не логи: подводный камень — это обобщаемое правило плюс одно придаточное
почему (механизм), привязанное к тому шагу, которого касается, и сформулированное один раз.
Пересказ инцидента, номера PR и задач, даты и цитаты из переписки содержимым навыка не
являются; правило обязано стоять само, без истории за ним. Постоянно действующие правила
живут в самом SKILL.md; в references/ лежит небольшой набор файлов, названных по темам
(таблица решений, рецепт, особенности провайдера), и они дополняются на месте, а не копятся
по файлу за сессию. Навыки к тому же не пересказывают то, что и так грузится каждый ход
(AGENTS.md репозитория, схемы инструментов).
Инструмент skill_manage прогоняет рекомендательный линтер на create, на патчах SKILL.md и
на записи в references/ и возвращает находки в результате вызова. Ровно под эту форму заведены
три правила: incident-log-shape (тело, густо усыпанное номерами PR и задач), references-sprawl
(больше 60 файлов в справочнике) и oversized-body (тело SKILL.md длиннее ~24 тыс. символов —
skill_view грузит файл целиком, и он остаётся в контексте до конца сессии). Они предупреждают,
но запись не блокируют.
Действия
| Действие | Для чего использовать | Ключевые параметры |
|---|---|---|
create | Новый навык с нуля | name, content (полный SKILL.md), опционально category |
patch | Точечные правки (предпочтительно) | name, old_string, new_string |
patch с content | Крупные структурные переписывания (заменяет весь SKILL.md; edit — устаревший псевдоним) | name, content |
delete | Полное удаление навыка | name |
write_file | Добавление/обновление вспомогательных файлов | name, file_path, file_content |
remove_file | Удаление вспомогательного файла | name, file_path |
Каждое действие объявляется как собственная форма: текстовый слот принадлежит только одному действию
(content → create / полная перезапись, new_string → точечный patch, file_content →
write_file). Операция, несущая слот другого действия — например, file_content у
create, — не проходит по схеме инструмента (локальные бэкенды с ограничением по грамматике её
никогда не выдадут), а если всё же приходит, отклоняется до применения любой операции из пакета —
с ошибкой, называющей ключ, в котором лежит текст, и куда его перенести.
Точечный patch предпочтителен для обновлений — он экономнее по токенам, чем полная перезапись, поскольку в вызове инструмента появляется только изменённый текст.
Гейтинг записи навыков агентом (skills.write_approval)
По умолчанию агент пишет навыки свободно — в том числе из фоновой проверки самосовершенствования, которая запускается после хода диалога. Если вы предпочитаете подтверждать каждую запись навыка (небольшие модели, ошибочно оценивающие то, что они выучили, требования безопасной среды или просто желание держать под контролем цикл самосовершенствования), включите гейт подтверждения записи:
skills:
write_approval: false # false = писать свободно (по умолчанию) | true = требовать подтверждение
Когда write_approval: true, каждая запись skill_manage (create / edit / patch / delete / write_file / remove_file) ставится на паузу вместо немедленной фиксации — SKILL.md слишком велик, чтобы просматривать его прямо внутри диалога, поэтому пауза применяется независимо от того, пришла ли запись из хода в текущем диалоге или из фоновой проверки. Отложенные записи переживают перезапуски в ~/.hermes/pending/skills/ и рассматриваются по тому же знакомому циклу подтверждения/отклонения, что и опасные команды:
/skills pending # список отложенных записей навыков + краткая суть каждой
/skills diff <id> # полный unified-diff (лучше смотреть в CLI или дашборде)
/skills approve <id> # применить (или 'all')
/skills reject <id> # отбросить (или 'all')
/skills approval on # включить гейт (или 'off') и сохранить это состояние
Поверхность для рассмотрения работает и в интерактивном CLI, и в мессенджер-платформах (вывод диффа усекается для чат-пузырьков — полный дифф читайте в CLI или в JSON-файле отложенных записей). Записи памяти подчиняются такому же гейту через memory.write_approval — см. раздел Контроль записей памяти.
Отдельная настройка
skills.guard_agent_created— это сканер содержимого (эвристики опасных паттернов), а не гейт подтверждения — они независимы друг от друга. См. раздел Защита на записях навыков, созданных агентом.
Skills Hub
Просматривайте, ищите, устанавливайте и управляйте навыками из онлайн-реестров, skills.sh, напрямую с известных (well-known) конечных точек навыков и официальных опциональных навыков.
Поиск без фильтров (в CLI, TUI и на дашборде) отвечает из закэшированного централизованного индекса, который покрывает внешние реестры. Индекс перестраивается периодически, поэтому, когда по вашему запросу в нём ничего нет, Hermes дополнительно спрашивает напрямую skills.sh, ClawHub, LobeHub и well-known-эндпоинты — навык, опубликованный минуты назад, всё равно найдётся. На этот дополнительный проход отводится не больше 8 секунд из бюджета поиска, так что медленный реестр не превратит промах в долгое ожидание. Пользовательские GitHub-тапы в этот запасной проход не входят (ищите по ним через --source github или через индекс, когда он догонит), а фильтры по провайдеру вроде --source nvidia его не запускают (у этих реестров нет данных о провайдерах).
Основные команды
hermes skills browse # Просмотреть все навыки hub (сначала официальные)
hermes skills browse --source official # Просмотреть только официальные опциональные навыки
hermes skills search kubernetes # Поиск по всем источникам
hermes skills search react --source skills-sh # Поиск в каталоге skills.sh
hermes skills search https://mintlify.com/docs --source well-known
hermes skills inspect openai/skills/k8s # Предпросмотр перед установкой
hermes skills install openai/skills/k8s # Установка со сканированием безопасности
hermes skills install official/security/1password
hermes skills install skills-sh/vercel-labs/json-render/json-render-react --force
hermes skills install well-known:https://mintlify.com/docs/.well-known/skills/mintlify
hermes skills install https://sharethis.chat/SKILL.md # Прямой URL (+ файлы поддержки, на которые есть ссылки)
hermes skills install https://example.com/SKILL.md --name my-skill # Переопределение имени, когда во frontmatter его нет
hermes skills list --source hub # Список навыков, установленных из hub
hermes skills check # Проверить установленные навыки hub на наличие обновлений выше по течению
hermes skills update # Переустановить навыки hub с изменениями выше по течению при необходимости
hermes skills audit # Пересканировать все навыки hub на безопасность
hermes skills uninstall k8s # Удалить навык hub
hermes skills reset google-workspace # Снять встроенный навык со статуса "изменён пользователем" (см. ниже)
hermes skills reset google-workspace --restore # Также восстановить встроенную версию, удалив ваши локальные правки
hermes skills publish skills/my-skill --to github --repo owner/repo
hermes skills snapshot export setup.json # Экспортировать конфигурацию навыков
hermes skills tap add myorg/skills-repo # Добавить пользовательский источник GitHub
Поддерживаемые источники hub
| Источник | Пример | Примечания |
|---|---|---|
official | official/security/1password | Опциональные навыки, поставляемые вместе с Hermes. |
skills-sh | skills-sh/vercel-labs/agent-skills/vercel-react-best-practices | Поиск через hermes skills search <query> --source skills-sh. Hermes разрешает алиас-подобные навыки, когда слаг skills.sh отличается от папки репозитория. |
well-known | well-known:https://mintlify.com/docs/.well-known/skills/mintlify | Навыки, отдаваемые напрямую с /.well-known/skills/index.json на сайте. Поиск по URL сайта или документации. |
url | https://sharethis.chat/SKILL.md | Прямой HTTP(S)-URL на SKILL.md плюс явно указанные файлы поддержки. Разрешение имени: frontmatter → слаг URL → интерактивный запрос → флаг --name. |
github | openai/skills/k8s | Прямая установка из репозитория/пути GitHub и пользовательских источников. |
clawhub, lobehub, browse-sh | Идентификаторы, специфичные для источника | Интеграции с сообществами или маркетплейсами. |
Интегрированные хабы и реестры
Hermes на данный момент интегрирован со следующими экосистемами навыков и источниками обнаружения:
1. Официальные опциональные навыки (official)
Они поддерживаются прямо в репозитории Hermes и устанавливаются со встроенным доверием.
- Каталог: Каталог официальных опциональных навыков
- Источник в репозитории:
optional-skills/ - Пример:
hermes skills browse --source official
hermes skills install official/security/1password
2. skills.sh (skills-sh)
Публичный каталог навыков от Vercel. Hermes умеет искать в нём напрямую, просматривать детальные страницы навыков, разрешать алиас-подобные слаги и устанавливать из исходного репозитория.
- Каталог: skills.sh
- Репозиторий CLI/инструментов: vercel-labs/skills
- Официальный репозиторий навыков Vercel: vercel-labs/agent-skills
- Пример:
hermes skills search react --source skills-sh
hermes skills inspect skills-sh/vercel-labs/json-render/json-render-react
hermes skills install skills-sh/vercel-labs/json-render/json-render-react --force
3. Известные конечные точки навыков (well-known)
Обнаружение на основе URL с сайтов, публикующих /.well-known/skills/index.json. Это не единый централизованный хаб, а веб-конвенция обнаружения.
- Пример живой конечной точки: индекс навыков документации Mintlify
- Референсная реализация сервера: vercel-labs/skills-handler
- Пример:
hermes skills search https://mintlify.com/docs --source well-known
hermes skills inspect well-known:https://mintlify.com/docs/.well-known/skills/mintlify
hermes skills install well-known:https://mintlify.com/docs/.well-known/skills/mintlify
4. Прямые навыки GitHub (github)
Hermes может устанавливать навыки напрямую из репозиториев GitHub и источников (тап) на его основе. Это удобно, когда вы уже знаете путь к репозиторию или хотите добавить свой собственный пользовательский источник.
Источники по умолчанию (доступны для просмотра без какой-либо настройки):
-
NVIDIA/skills — навыки, верифицированные NVIDIA (подписанные
skill.oms.sig+ документ управленияskill-card.md) -
K-Dense-AI/scientific-agent-skills и synthetic-sciences/openscience — около 480 навыков для научных исследований (биоинформатика, химия, физика, обучение ML-моделей, инструменты для научных публикаций), собранных в одну категорию
science. Доверие уровня сообщества: каждая установка проходит сканирование безопасности. Многие оборачивают сторонние инструменты со своими лицензиями (часть под GPL; KEGG требует коммерческой лицензии для неакадемического использования) — проверяйте требования каждого навыка. -
Пример:
hermes skills install openai/skills/k8s
hermes skills tap add myorg/skills-repo
Группировка по категориям (skills.sh.json). Источник GitHub может поставлять файл skills.sh.json в корне репозитория по схеме skills.sh. Его groupings (каждая с полем title и списком имён навыков) считываются во время индексации и становятся метками категорий, показанными на странице Skills Hub, — вместо предположения на основе тегов. Это работает универсально: любой источник, поставляющий этот файл, получает настоящую категоризацию без каких-либо изменений на стороне Hermes.
{
"$schema": "https://skills.sh/schemas/skills.sh.schema.json",
"groupings": [
{ "title": "Inference AI", "skills": ["dynamo-recipe-runner", "dynamo-router-sla"] },
{ "title": "Decision Optimization", "skills": ["cuopt-developer", "cuopt-install"] }
]
}
5. ClawHub (clawhub)
Стороннее маркетплейс-решение для навыков, интегрированное как источник сообщества.
- Сайт: clawhub.ai
- Идентификатор источника Hermes:
clawhub
6. LobeHub (lobehub)
Hermes может искать записи агентов в публичном каталоге LobeHub и конвертировать их в устанавливаемые навыки Hermes.
- Сайт: LobeHub
- Публичный индекс агентов: chat-agents.lobehub.com
- Репозиторий-источник: lobehub/lobe-chat-agents
- Идентификатор источника Hermes:
lobehub
7. browse.sh (browse-sh)
Hermes интегрирован с browse.sh — каталогом Browserbase из 200+ файлов SKILL.md для браузерной автоматизации конкретных сайтов (Airbnb, Amazon, arXiv, 12306.cn, Etsy, Xero и многие другие). Каждый навык описывает, как провести конкретный сайт от начала до конца, и подходит для использования с браузерными инструментами Hermes и уже установленными навыками браузерной автоматизации.
- Сайт: browse.sh
- API каталога:
https://browse.sh/api/skills - Идентификатор источника Hermes:
browse-sh - Уровень доверия:
community
hermes skills search airbnb --source browse-sh
hermes skills inspect browse-sh/airbnb.com/search-listings-ddgioa
hermes skills install browse-sh/airbnb.com/search-listings-ddgioa
Идентификаторы имеют форму browse-sh/<hostname>/<task-id> и совпадают со слагом, который отдаёт каталог browse.sh. Содержимое разрешается через детальную конечную точку каждого навыка (/api/skills/<slug> → skillMdUrl), а не через GitHub-поле sourceUrl каталога.
8. Прямой URL (url)
Установка SKILL.md напрямую по любому HTTP(S)-URL — удобно, когда автор размещает навык на собственном сайте (без листинга в хабе, без пути на GitHub). Hermes также загружает явно указанные файлы под references/, templates/, scripts/, assets/ и examples/, а затем сканирует и устанавливает весь бандл целиком.
- Идентификатор источника Hermes:
url - Идентификатор: сам URL (без префикса)
- Область охвата:
SKILL.mdплюс точные файлы поддержки из разрешённого списка директорий. Hermes не перечисляет и не копирует посторонние файлы с хоста.
hermes skills install https://sharethis.chat/SKILL.md
hermes skills install https://example.com/my-skill/SKILL.md --category productivity
Разрешение имени в следующем порядке:
- Поле
name:во frontmatter YAML файла SKILL.md (рекомендуется — у каждого корректно оформленного навыка оно есть). - Имя родительской директории из пути URL (например,
.../my-skill/SKILL.md→my-skill, или.../my-skill.md→my-skill), если это валидный идентификатор (^[a-z][a-z0-9_-]*$). - Интерактивный запрос в терминале с TTY.
- На неинтерактивных поверхностях (слэш-команда
/skills installвнутри TUI, платформы шлюза, скрипты) — понятная ошибка, указывающая на переопределение--name.
# Во frontmatter нет имени, а слаг URL бесполезен — задаём вручную:
hermes skills install https://example.com/SKILL.md --name sharethis-chat
# Или внутри сессии чата:
/skills install https://example.com/SKILL.md --name sharethis-chat
Уровень доверия всегда community — запускается та же самая проверка безопасности, что и для любого другого источника. URL хранится как идентификатор установки, так что hermes skills update автоматически перезагружает данные с того же URL, когда вы хотите обновить навык.
Сканирование безопасности и --force
Все навыки, устанавливаемые из hub, проходят через сканер безопасности, который проверяет их на утечку данных, инъекцию промптов, деструктивные команды, признаки атак через цепочку поставок и другие угрозы.
hermes skills inspect ... теперь также показывает метаданные из источника, если они доступны:
- URL репозитория
- URL детальной страницы skills.sh
- команду установки
- количество еженедельных установок
- статусы аудита безопасности со стороны источника
- URL индекса/конечной точки well-known
Используйте --force, когда вы просмотрели сторонний навык и хотите обойти блокировку политики для некритичных находок:
hermes skills install skills-sh/anthropics/skills/pdf --force
Важное поведение:
--forceможет обходить блокировки политики для находок класса caution/warn.--forceне обходит вердикт сканераdangerous.- Официальные опциональные навыки (
official/...) считаются встроенным доверием и не показывают панель предупреждения о стороннем происхождении.
Уровни доверия
| Уровень | Источник | Политика |
|---|---|---|
builtin | Поставляется вместе с Hermes | Всегда доверенный |
official | optional-skills/ в репозитории | Встроенное доверие, без предупреждения о стороннем происхождении |
trusted | Доверенные реестры/репозитории, такие как openai/skills, anthropics/skills, huggingface/skills, NVIDIA/skills | Более мягкая политика, чем для источников сообщества |
community | Всё остальное (skills.sh, well-known-конечные точки, пользовательские репозитории GitHub, большинство маркетплейсов) | Некритичные находки можно обойти через --force; вердикты dangerous остаются заблокированными |
Жизненный цикл обновлений
Hub теперь отслеживает достаточно данных о происхождении, чтобы перепроверять исходные копии установленных навыков:
hermes skills check # Показать, какие установленные навыки hub изменились в источнике
hermes skills update # Переустановить только те навыки, для которых есть обновления
hermes skills update react # Обновить один конкретный установленный навык hub
hermes skills update react --force # Перезаписать навык, который вы отредактировали локально
Для обнаружения расхождений используется сохранённый идентификатор источника плюс текущий хеш содержимого исходного бандла.
Сеть не дёргается вовсе, если установка пропала или перестала быть каталогом (orphaned), а также при небезопасном или неразрешимом записанном пути (invalid_install). Записи с пропавшим каталогом убираются командой hermes skills uninstall <name>; с неверными путями сначала придётся разобраться в skills/.hub/lock.json активного профиля и починить его. Сами по себе записи не удаляются никогда.
Для живых установок остаются в силе синхронная загрузка и таймауты транспорта их собственного адаптера источника. Общего жёсткого дедлайна у проверки обновлений нет: недоступный или медленный источник существующей установки способен задержать разбор остальных записей.
Навыки, которые вы отредактировали локально (содержимое на диске больше не совпадает с хешем, зафиксированным при установке), hermes skills update пропускает, чтобы никогда не затереть ваши изменения молча. Передайте --force, чтобы всё же заменить их версией из источника.
Операции Skills Hub используют GitHub API, у которого лимит 60 запросов/час для неаутентифицированных пользователей. Установка стоит примерно два вызова API (репозиторий и дерево его файлов); сами файлы навыка скачиваются с raw.githubusercontent.com, и лимит их не учитывает. Если при установке или поиске вы видите ошибки лимита запросов, укажите GITHUB_TOKEN в вашем файле .env, чтобы поднять лимит до 5000 запросов/час. Сообщение об ошибке в этом случае содержит подсказку с конкретным действием.
Публикация собственного источника навыков (tap)
Если вы хотите поделиться подобранным набором навыков — со своей командой, своей организацией или публично, — вы можете опубликовать их как tap: репозиторий GitHub, который другие пользователи Hermes добавляют командой hermes skills tap add <owner/repo>. Без сервера, без регистрации в реестре, без пайплайна релизов. Просто директория с файлами SKILL.md.
Структура репозитория
Tap — это любой репозиторий GitHub (публичный или приватный — приватному нужен GITHUB_TOKEN), устроенный так:
owner/repo
├── skills/ # путь по умолчанию; настраивается для каждого tap отдельно
│ ├── my-workflow/
│ │ ├── SKILL.md # обязательно
│ │ ├── references/ # опциональные вспомогательные файлы
│ │ ├── templates/
│ │ └── scripts/
│ ├── another-skill/
│ │ └── SKILL.md
│ └── third-skill/
│ └── SKILL.md
└── README.md # опционально, но полезно
Правила:
- Каждый навык располагается в своей собственной директории под корневым путём tap (по умолчанию
skills/). - Имя директории становится слагом установки навыка.
- Каждая директория навыка должна содержать
SKILL.mdсо стандартным frontmatter SKILL.md (name,description, а также опциональноmetadata.hermes.tags,version,author,platforms,metadata.hermes.config). - Поддиректории вроде
references/,templates/,scripts/,assets/загружаются вместе сSKILL.mdво время установки. - Навыки, имя директории которых начинается с
.или_, игнорируются.
Hermes обнаруживает навыки, перечисляя все поддиректории по пути tap и проверяя каждую на наличие SKILL.md.
Минимальный пример tap
my-org/hermes-skills
└── skills/
└── deploy-runbook/
└── SKILL.md
skills/deploy-runbook/SKILL.md:
---
name: deploy-runbook
description: Our deployment runbook — services, rollback, Slack channels
version: 1.0.0
author: My Org Platform Team
metadata:
hermes:
tags: [deployment, runbook, internal]
---
# Deploy Runbook
Step 1: ...
После того как это запушено в GitHub, любой пользователь Hermes может подписаться и установить:
hermes skills tap add my-org/hermes-skills
hermes skills search deploy
hermes skills install my-org/hermes-skills/deploy-runbook
Нестандартные пути
Если ваши навыки не лежат в skills/ (обычная ситуация, когда вы добавляете поддерево skills/ в уже существующий проект), отредактируйте запись tap в ~/.hermes/skills/.hub/taps.json:
{
"taps": [
{"repo": "my-org/platform-docs", "path": "internal/skills/"}
]
}
CLI hermes skills tap add по умолчанию задаёт новым источникам path: "skills/"; если нужен другой путь, отредактируйте файл напрямую. hermes skills tap list показывает действующий путь для каждого источника.
Установка отдельных навыков напрямую (без добавления tap)
Пользователи также могут установить один навык из любого публичного репозитория GitHub, не добавляя весь репозиторий как tap:
hermes skills install owner/repo/skills/my-workflow
Полезно, когда вы хотите поделиться одним навыком, не прося пользователя подписываться на весь ваш реестр.
Уровни доверия для tap
Новым tap по умолчанию присваивается доверие уровня community. Навыки, установленные из них, проходят через стандартную проверку безопасности и показывают панель предупреждения о стороннем происхождении при первой установке. Если вашей организации или широко доверенному источнику нужен более высокий уровень доверия, добавьте его репозиторий в TRUSTED_REPOS в tools/skills_guard.py (требует PR в ядро Hermes).
Управление tap
hermes skills tap list # показать все настроенные источники
hermes skills tap add myorg/skills-repo # добавить (путь по умолчанию: skills/)
hermes skills tap remove myorg/skills-repo # удалить
Внутри работающей сессии:
/skills tap list
/skills tap add myorg/skills-repo
/skills tap remove myorg/skills-repo
Источники (tap) хранятся в ~/.hermes/skills/.hub/taps.json (создаётся по требованию).
Обновления встроенных навыков (hermes skills reset)
Hermes поставляется с набором встроенных навыков в skills/ внутри репозитория. При установке и при каждом hermes update проход синхронизации копирует их в ~/.hermes/skills/ и записывает манифест в ~/.hermes/skills/.bundled_manifest, сопоставляющий каждое имя навыка с хешем содержимого на момент синхронизации (исходный хеш, origin hash).
При каждой синхронизации Hermes пересчитывает хеш вашей локальной копии и сравнивает его с исходным хешем:
- Без изменений → безопасно подтянуть изменения из вышестоящего источника, скопировать новую встроенную версию, записать новый исходный хеш.
- Изменено → считается изменённым пользователем и пропускается навсегда, чтобы ваши правки никогда не были затёрты.
Служебные кэши, которые появляются внутри навыка при запуске (__pycache__/, .pytest_cache/, .mypy_cache/, .ruff_cache/, а также .pyc рядом со своим .py), в хеш не входят, поэтому запуск вспомогательного скрипта навыка никогда не помечает его как изменённый пользователем и не прячет из hermes skills list-modified и diff.
Эта защита хороша, но у неё есть одна острая грань. Если вы отредактировали встроенный навык, а затем захотели отказаться от своих изменений и вернуться к встроенной версии, просто скопировав файлы из ~/.hermes/hermes-agent/skills/, манифест всё ещё хранит старый исходный хеш от последней успешной синхронизации. Ваша свежая копия (текущий встроенный хеш) не совпадёт с этим устаревшим исходным хешем, поэтому синхронизация продолжит помечать навык как изменённый пользователем.
hermes skills reset — это лазейка для такого случая:
# Безопасно: очищает запись манифеста для этого навыка. Ваша текущая копия сохраняется,
# но следующая синхронизация заново берёт её за базовую линию, чтобы будущие обновления работали нормально.
hermes skills reset google-workspace
# Полное восстановление: также удаляет вашу локальную копию и копирует заново текущую
# встроенную версию. Используйте, когда хотите вернуть исходный upstream-навык.
hermes skills reset google-workspace --restore
# Неинтерактивный режим (например, в скриптах или в TUI) — пропустить подтверждение для --restore.
hermes skills reset google-workspace --restore --yes
Та же команда работает в чате как слэш-команда:
/skills reset google-workspace
/skills reset google-workspace --restore
У каждого профиля свой собственный .bundled_manifest в своём собственном HERMES_HOME, так что hermes -p coder skills reset <name> затрагивает только этот профиль.
Слэш-команды (внутри чата)
Все те же команды работают через /skills:
/skills browse
/skills search react --source skills-sh
/skills search https://mintlify.com/docs --source well-known
/skills inspect skills-sh/vercel-labs/json-render/json-render-react
/skills install openai/skills/skill-creator --force
/skills check
/skills update
/skills reset google-workspace
/skills list
Официальные опциональные навыки по-прежнему используют идентификаторы вида official/security/1password и official/migration/openclaw-migration.