sidebar_position: 3 title: "Creating Skills" description: "How to create skills for Hermes Agent — SKILL.md format, guidelines, and publishing" lang: ru
Создание навыков
Навыки — это предпочтительный способ добавления новых возможностей в агент Hermes. Их легче создавать, чем инструменты, они не требуют внесения изменений в код агента и ими можно поделиться с сообществом.
Это должен быть навык или инструмент?
Сделайте это Навыком, когда:
- Возможности могут быть выражены в виде инструкций + команд оболочки + существующих инструментов.
- Он оборачивает внешний интерфейс командной строки или API, к которому агент может обращаться через terminal или web_extract.
- Не требуется специальная интеграция Python или управление ключами API, встроенное в агент.
- Примеры: поиск в arXiv, рабочие процессы git, управление Docker, обработка PDF, электронная почта через инструменты CLI.
Сделайте его инструментом, если: - Требуется сквозная интеграция с ключами API, потоками аутентификации или многокомпонентной конфигурацией. - Требуется специальная логика обработки, которая должна выполняться каждый раз точно. - Он обрабатывает двоичные данные, потоковую передачу или события в реальном времени. - Примеры: автоматизация браузера, TTS, анализ изображения.
Структура каталога навыков
Объединенные навыки хранятся в skills/ и организованы по категориям. Официальные дополнительные навыки используют ту же структуру в optional-skills/:
skills/
├── research/
│ └── arxiv/
│ ├── SKILL.md # Required: main instructions
│ └── scripts/ # Optional: helper scripts
│ └── search_arxiv.py
├── productivity/
│ └── ocr-and-documents/
│ ├── SKILL.md
│ ├── scripts/
│ └── references/
└── ...
Формат SKILL.md
---
name: my-skill
description: Brief description (shown in skill search results)
version: 1.0.0
author: Your Name
license: MIT
platforms: [macos, linux] # Optional — restrict to specific OS platforms
# Valid: macos, linux, windows
# Omit to load on all platforms (default)
metadata:
hermes:
tags: [Category, Subcategory, Keywords]
related_skills: [other-skill-name]
requires_toolsets: [web] # Optional — only show when these toolsets are active
requires_tools: [web_search] # Optional — only show when these tools are available
fallback_for_toolsets: [browser] # Optional — hide when these toolsets are active
fallback_for_tools: [browser_navigate] # Optional — hide when these tools exist
config: # Optional — config.yaml settings the skill needs
- key: my.setting
description: "What this setting controls"
default: "sensible-default"
prompt: "Display prompt for setup"
required_environment_variables: # Optional — env vars the skill needs
- name: MY_API_KEY
prompt: "Enter your API key"
help: "Get one at https://example.com"
required_for: "API access"
---
# Skill Title
Brief intro.
## When to Use
Trigger conditions — when should the agent load this skill?
## Quick Reference
Table of common commands or API calls.
## Procedure
Step-by-step instructions the agent follows.
## Pitfalls
Known failure modes and how to handle them.
## Verification
How the agent confirms it worked.
Навыки, специфичные для платформы
Навыки могут ограничиваться конкретными операционными системами с помощью поля platforms:
platforms: [macos] # macOS only (e.g., iMessage, Apple Reminders)
platforms: [macos, linux] # macOS and Linux
platforms: [windows] # Windows only
Если этот навык установлен, он автоматически скрывается из системной подсказки skills_list() и команд косой черты на несовместимых платформах. Если этот параметр опущен или пуст, навык загружается на всех платформах (обратная совместимость).
Условная активация навыка
Навыки могут объявлять зависимости от конкретных инструментов или наборов инструментов. Это определяет, будет ли навык отображаться в системной подсказке для данного сеанса.
metadata:
hermes:
requires_toolsets: [web] # Hide if the web toolset is NOT active
requires_tools: [web_search] # Hide if web_search tool is NOT available
fallback_for_toolsets: [browser] # Hide if the browser toolset IS active
fallback_for_tools: [browser_navigate] # Hide if browser_navigate IS available
| Поле | Поведение |
|---|---|
requires_toolsets |
Навык скрыт, когда ЛЮБОЙ указанный набор инструментов не доступен |
requires_tools |
Навык скрыт, если ЛЮБОЙ инструмент из списка не доступен |
fallback_for_toolsets |
Навык скрыт, когда доступен ЛЮБОЙ указанный набор инструментов |
fallback_for_tools |
Навык скрыт, если доступен любой указанный инструмент |
Сценарий использования fallback_for_*: Создайте навык, который будет служить обходным решением, когда основной инструмент недоступен. Например, навык duckduckgo-search с fallback_for_tools: [web_search] отображается только в том случае, если инструмент веб-поиска (для которого требуется ключ API) не настроен.
Пример использования requires_*: Создайте навык, который имеет смысл только при наличии определенных инструментов. Например, навык рабочего процесса веб-скрапинга с requires_toolsets: [web] не будет загромождать подсказку, когда веб-инструменты отключены.
Требования к переменным среды
Навыки могут объявлять необходимые им переменные среды. Когда навык загружается через skill_view, его необходимые переменные автоматически регистрируются для передачи в изолированную среду выполнения (терминал, Execute_code).
required_environment_variables:
- name: TENOR_API_KEY
prompt: "Tenor API key" # Shown when prompting user
help: "Get your key at https://tenor.com" # Help text or URL
required_for: "GIF search functionality" # What needs this var
Каждая запись поддерживает:
- name (обязательно) — имя переменной среды
- prompt (необязательно) — текст подсказки при запросе значения у пользователя.
- help (необязательно) — текст справки или URL для получения значения.
- required_for (необязательно) — описывает, какой функции нужна эта переменная.
Пользователи также могут вручную настроить сквозные переменные в config.yaml:
terminal:
env_passthrough:
- MY_CUSTOM_VAR
- ANOTHER_VAR
См. skills/apple/ для примеров навыков только для macOS.
Безопасная настройка при загрузке
Используйте required_environment_variables, если для навыка требуется ключ API или токен. Отсутствующие значения не скрывают навык от обнаружения. Вместо этого Hermes безопасно запрашивает их, когда навык загружается в локальный интерфейс командной строки.
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
Пользователь может пропустить настройку и продолжить загрузку навыка. Гермес никогда не раскрывает секретную ценность модели. В сеансах шлюза и обмена сообщениями отображаются локальные инструкции по настройке, а не внутренний сбор секретов.
:::совет Прохождение песочницы
Когда ваш навык загружается, все объявленные required_environment_variables, которые установлены, автоматически передаются в песочницы execute_code и terminal, включая удаленные серверные части, такие как Docker и Modal. Скрипты вашего навыка могут получить доступ к $TENOR_API_KEY (или os.environ["TENOR_API_KEY"] в Python) без необходимости пользователю настраивать что-либо дополнительно. Подробности см. в разделе Передача переменных среды.