This page documents the skills management system, which allows the agent to create, modify, and delete skills—reusable procedural knowledge for recurring task types. Skills are the agent's "how-to" memory: they capture proven approaches, workflows, and solutions that can be applied to similar problems in the future.
For information about discovering and installing community skills from the hub, see 8.2 Skills Hub. This page focuses on programmatic management, security scanning, and the underlying synchronization mechanisms.
The skills system provides:
skill_manage tool tools/skill_manager_tool.py3-12skill_manage tool tools/skill_manager_tool.py14-20Skills Guard tools/skills_guard.py3-9SKILL.md tools/skills_tool.py14-26All skills reside in a single location (~/.hermes/skills/) and follow a standardized structure with YAML frontmatter tools/skills_tool.py28-46
Sources: tools/skill_manager_tool.py3-20 tools/skills_tool.py14-26 tools/skills_sync.py3-7 tools/skills_guard.py3-9 agent/skill_utils.py175-197 tools/skills_tool.py28-46
All skills are stored in SKILLS_DIR (~/.hermes/skills/) with optional category subdirectories tools/skills_tool.py139-143 This directory is the single source of truth for agent edits, hub installs, and bundled skills tools/skills_tool.py139-141
Sources: tools/skills_tool.py14-26 tools/skills_tool.py139-143 tools/skills_sync.py57 tools/skill_manager_tool.py28 tools/skills_hub.py72-75
Every skill must have a SKILL.md file with YAML frontmatter followed by markdown content tools/skills_tool.py28-46 The skill_manage tool and internal utilities validate these fields tools/skill_manager_tool.py176-177
| Field | Requirement | Description |
|---|---|---|
name | Required | Max 64 chars, lowercase alphanumeric + hyphens tools/skill_manager_tool.py176 tools/skill_manager_tool.py114-124 |
description | Required | Max 1024 chars tools/skills_tool.py163 tools/skill_manager_tool.py177 |
platforms | Optional | List of macos, linux, windows tools/skills_tool.py34-36 Maps to sys.platform agent/skill_utils.py21-25 |
prerequisites | Optional | Env var names and command checks tools/skills_tool.py37-41 |
Sources: tools/skills_tool.py28-46 tools/skill_manager_tool.py114-124 tools/skills_tool.py163 tools/skill_manager_tool.py177 agent/skill_utils.py21-25
The primary programmatic interfaces for skills are skills_list and skill_view, which implement a "progressive disclosure" architecture to save context tokens tools/skills_tool.py9-13
The following diagram bridges the agent's intent to the underlying code entities that perform file operations and security checks.
Sources: tools/skills_tool.py60-66 tools/skill_manager_tool.py21 tools/skill_manager_tool.py127 agent/skill_commands.py138 agent/skill_utils.py123 agent/skill_utils.py200 tools/skill_manager_tool.py180
Hermes implements layers of security scanning for skill content and memory:
The memory tool, which manages persistent notes in MEMORY.md and USER.md, scans all content for injection/exfiltration patterns before storage tools/memory_tool.py88-91
_first_threat_message from tools.threat_patterns tools/memory_tool.py85-91Sources: tools/memory_tool.py78-91
The Skills Guard is a security scanner for externally-sourced skills tools/skills_guard.py3-9
builtin, trusted (e.g., openai/skills, NVIDIA/skills), and community levels tools/skills_guard.py11-53community skills with any caution or dangerous findings are blocked tools/skills_guard.py55-65curl with API_KEY), credential store access (e.g., ~/.ssh), and programmatic env dumps tools/skills_guard.py101-168Sources: tools/skills_guard.py3-168
The skill_manage tool can optionally scan agent-created skills if skills.guard_agent_created is enabled tools/skill_manager_tool.py108-115
Sources: tools/skill_manager_tool.py108-151
Bundled skills are seeded into the user's ~/.hermes/skills/ directory on install and updated via a manifest-based sync mechanism tools/skills_sync.py3-7
The sync process uses ~/.hermes/skills/.bundled_manifest to track skill versions via MD5 hashes tools/skills_sync.py8-57
| Scenario | Logic |
|---|---|
| New Skill | Copied to user directory, hash recorded tools/skills_sync.py204 |
| Unmodified Skill | If user copy matches manifest hash, it is updated if the repo version changed tools/skills_sync.py210-212 |
| Modified Skill | If user copy differs from origin hash, sync is skipped to protect customizations tools/skills_sync.py214-215 |
| Deleted Skill | If entry exists in manifest but file is missing in user dir, it is not re-added tools/skills_sync.py217-218 |
Sources: tools/skills_sync.py3-22 tools/skills_sync.py69-75 tools/skills_sync.py204-218
To maintain efficiency and prevent context overflow, the system enforces limits on skill metadata and memory content:
MAX_NAME_LENGTH) tools/skills_tool.py162 tools/skill_manager_tool.py176MAX_DESCRIPTION_LENGTH) tools/skills_tool.py163 tools/skill_manager_tool.py177MEMORY.md is limited to 2200 characters, and USER.md to 1375 characters by default tools/memory_tool.py167Sources: tools/skills_tool.py162-163 tools/skill_manager_tool.py176-177 tools/memory_tool.py167
Refresh this wiki
This wiki was recently refreshed. Please wait 3 days to refresh again.