Hermes Agent Skills: The Practical Guide
Hermes Agent is Nous Research's open-source, model-agnostic personal agent, and skills are how it gains new capabilities. This is a from-the-source walkthrough of how the system actually works, not a paraphrase of the docs homepage.
Published
AgentSkills.site editorial
What Hermes Agent skills are
Hermes Agent is an open-source, model-agnostic personal AI agent built by Nous Research. It runs as a CLI, a desktop app, a messaging gateway (Telegram, Discord, Slack, WhatsApp), and an IDE integration.
A skill is a folder containing a SKILL.md file plus optional supporting files (scripts, references, templates, examples, assets). SKILL.md tells the agent what a capability does, when to use it, and how — in effect, an on-demand instruction document the agent loads only when it's relevant, rather than stuffing every capability into the system prompt.
Hermes implements this using the agentskills.io open standard, which originated at Anthropic and is now used by a long list of agent products (Claude Code, Cursor, VS Code, Gemini CLI, OpenClaw, and others). That matters practically: a well-formed skill written for one compatible agent is often usable, with little or no change, in another.
Where skills live
All skills resolve from ~/.hermes/skills/, organized by category:
~/.hermes/skills/
├── category/
│ ├── skill-name/
│ │ ├── SKILL.md # required
│ │ ├── references/
│ │ ├── templates/
│ │ ├── scripts/
│ │ ├── examples/
│ │ └── assets/
└── .hub/
You can add additional search locations — useful for a team-shared skills repo, or a project-local set of skills checked out alongside a codebase — via external_dirs in config.yaml:
skills:
external_dirs:
- ~/.agents/skills
- ${SKILLS_REPO}/skills
The SKILL.md format
The required frontmatter, per the official docs:
---
name: my-skill
description: Brief description (≤60 chars)
version: 1.0.0
platforms: [macos, linux] # optional
metadata:
hermes:
tags: [python, automation]
category: devops
fallback_for_toolsets: [web] # optional
requires_toolsets: [terminal] # optional
config:
- key: my.setting
description: "What this controls"
default: "value"
---
The name and description fields are the only ones required by the base agentskills.io spec; everything under metadata.hermes is Hermes-specific extension data used for conditional loading and configuration (covered below).
How skills are discovered and loaded
Hermes scans its skill directories at startup and loads every valid SKILL.md it finds — but it doesn't load full skill content up front. It uses progressive disclosure, in three levels, to keep token usage low even with a large skill library installed:
| Level | Call | What loads | Approximate cost |
|---|---|---|---|
| 0 | skills_list() |
Name + description metadata for every skill | ~3k tokens for the full library |
| 1 | skill_view(name) |
The full SKILL.md body for one skill |
Only when the task matches |
| 2 | skill_view(name, path) |
A specific reference/template/script file inside the skill | Only when the instructions point there |
This is the general agentskills.io model (discovery → activation → execution), and it's why a Hermes install with hundreds of skills doesn't meaningfully bloat every conversation — most of that library sits at level 0 until it's actually relevant.
Installing skills: the eight hub sources
Hermes doesn't have one skill registry — it federates across eight source types, all reachable through hermes skills browse / hermes skills search / hermes skills install:
| Source | What it is | Example |
|---|---|---|
official |
Bundled-optional skills shipped in the Hermes repo | official/security/1password |
skills-sh |
Vercel's public skills directory | — |
well-known |
Any site publishing a /.well-known/skills/index.json endpoint |
— |
github |
Direct install from a GitHub repo path | openai/skills/k8s |
clawhub |
Third-party skill marketplace | — |
lobehub |
Skills converted from the LobeHub agent catalog | — |
browse-sh |
Browserbase's site-automation skill set | — |
url |
A direct HTTPS link to a SKILL.md file |
— |
For the full command reference and copy-pasteable examples, see how to install Hermes Agent skills.
Trust tiers
Every skill Hermes can install carries a trust level, and hub installs are scanned before they land on disk:
| Tier | Meaning |
|---|---|
builtin |
Ships with Hermes itself — always trusted |
official |
Lives in the optional-skills/ folder of the main repo — built-in trust |
trusted |
From a known registry (OpenAI, Anthropic, Hugging Face, NVIDIA, etc.) |
community |
Everything else. Findings that aren't flagged as dangerous can be overridden with --force; dangerous findings cannot. |
All hub installs are scanned for data exfiltration, prompt injection, and destructive commands before install completes. This scanning and trust-tier logic is documented behavior from the official docs — we haven't independently audited the scanner's detection accuracy, and you shouldn't treat "scanned" as a substitute for reading a community-tier skill's SKILL.md and scripts yourself before installing. See evaluating skills on GitHub for what to actually check.
What kinds of skills exist
Skills aren't one thing — they differ by where they come from and what they do:
- Bundled skills — ship with Hermes by default (
builtintrust), covering common tasks out of the box. - Optional official skills — maintained in the
optional-skills/folder of the main repo but not installed by default; add them withhermes skills install official/.... - Hub/community skills — installed from any of the eight sources above, spanning everything from document generation (PowerPoint, presentation creation) to SaaS integrations (Composio's connector skill for Gmail, Sheets, Slack, CRMs) to development workflow discipline (structured brainstorming, TDD, systematic debugging).
- Knowledge-base skills — created via
/learnfrom a large source (a book, a docs site, a whole SDK). These get a leanSKILL.mdcarrying the core mental model, with the bulk of the material indexed underreferences/and loaded chapter-by-chapter via level-2skill_viewcalls, so token cost stays proportional to what's actually asked. - Agent-authored skills — created or edited by Hermes itself through its learning loop (next section), not installed from anywhere.
Skills vs. tools vs. plugins vs. MCP, in Hermes specifically
These four terms get conflated constantly in third-party writeups. In Hermes they're distinct:
| Concept | What it is | How it's invoked |
|---|---|---|
| Tool | A built-in capability (terminal, browser, execute_code, etc.) exposed to the model directly |
Called by the model as part of normal reasoning |
| Skill | A SKILL.md document plus optional bundled files that teaches the agent how to do something, often by directing it to use existing tools in a specific way |
Loaded via progressive disclosure, invoked explicitly with /skill-name or matched automatically to a task |
| Plugin | A packaged extension that can add new tools, commands, or integrations to Hermes itself | Installed and configured separately from the skills system |
| MCP (Model Context Protocol) | An external protocol for connecting an agent to third-party tool servers | Skills can use MCP-provided tools, but a skill and an MCP server are different layers — the skill is the instructions, the MCP server is the capability being called |
The practical distinction: a skill rarely adds new low-level capability by itself. It packages judgment and process — when to use which tool, in what order, with what caveats — around capabilities the agent (via tools, plugins, or MCP) already has.
Conditional activation
Skills can hide or surface themselves depending on what's available in the current environment:
metadata:
hermes:
requires_toolsets: [terminal] # only show when terminal is available
fallback_for_toolsets: [web] # only show when web toolset is unavailable
requires_tools: [terminal] # check for a specific tool
fallback_for_tools: [web_search]
The documented example: a DuckDuckGo search skill stays hidden while Firecrawl's web toolset is active, and only surfaces as a fallback if that toolset isn't available. This keeps overlapping skills from competing for the same job — the agent only sees the one relevant option for the current setup.
Skill bundles: stacking multiple skills under one command
A bundle groups several skills under a single slash command, stored as YAML at ~/.hermes/skill-bundles/<slug>.yaml:
name: backend-dev
description: Backend feature work
skills:
- github-code-review
- test-driven-development
- github-pr-workflow
instruction: |
Always start by writing failing tests first.
Invoke it with /backend-dev refactor the auth middleware, and all three skills load together with the extra instruction applied. You can also stack skills ad hoc without a bundle file, up to five at once: /skill1 /skill2 /skill3 instruction. /bundles lists what's available.
The learning loop: skills that write themselves
This is the feature that most distinguishes Hermes from a typical skills-compatible agent, and it's the part most third-party "best skills" roundups skip entirely.
Creating skills from experience. /learn <path-or-url> turns a local source or a documentation URL into a new skill. Re-running /learn against updated material folds the new content into the existing skill instead of duplicating it.
Self-editing via skill_manage. Hermes has a dedicated tool for modifying its own skill library:
| Action | Purpose |
|---|---|
create |
New skill from scratch |
patch |
Targeted fix (preferred — smaller diff, cheaper) |
edit |
Larger rewrite |
delete |
Remove a skill entirely |
write_file / remove_file |
Manage a skill's supporting files |
Approval gating. By default this can happen autonomously; you can require a human check first:
skills:
write_approval: true
With that set, proposed changes land as staged writes under ~/.hermes/pending/skills/ instead of applying immediately:
/skills pending # list staged writes
/skills diff <id> # view the full diff
/skills approve <id> # apply it
/skills reject <id> # drop it
Editorial note: we have not run Hermes ourselves and can't independently characterize how reliable agent-authored skills are in practice, or how often write_approval: true catches something worth catching. This section describes documented mechanics, not tested outcomes. If you're running Hermes on anything you care about, turning on write_approval before you trust it with unattended self-editing seems like the obviously conservative default — but that's our inference, not a benchmark result.
Bundled-skill update protection
On install, Hermes records a content hash for every bundled skill at ~/.hermes/skills/.bundled_manifest. On update:
- If you haven't touched a bundled skill, upstream changes apply cleanly.
- If you have modified it, your version is preserved permanently and skipped in future syncs — no silent overwrite of local edits.
You can also opt a fresh install out of bundled-skill seeding entirely:
hermes skills opt-out # stop future seeding, keep what's installed
hermes skills opt-out --remove # also delete unmodified bundled skills
hermes skills opt-in --sync # re-enable and re-seed
Common setup questions
Do I need to restart Hermes after adding a skill manually? Skills are scanned at startup; a skill dropped into ~/.hermes/skills/ needs a restart (or the equivalent reload path in your interface) to be picked up as far as the documented behavior goes — we did not verify whether the CLI hot-reloads mid-session.
Can two skills fight over the same task? This is what requires_toolsets / fallback_for_toolsets exist to prevent — see Conditional activation above. Beyond that, the docs don't specify explicit conflict-resolution rules between two unrelated skills with overlapping descriptions, so overly broad description fields are worth avoiding when writing your own.
Where should I start looking for skills? See the best Hermes Agent skills for a criteria-based shortlist, and Hermes Agent skills on GitHub for how to evaluate a repository yourself.
Limitations and caveats
- Skill "popularity" has no public telemetry attached to it — the only observable signals for a community skill are GitHub stars, forks, and commit recency. Any ranking based on more than that is guessing.
- Security scanning on hub installs is Hermes's own automated check, not a manual audit. Treat
community-tier skills as unaudited by default. - The exact override semantics of
--forceon scan findings, and the full behavior ofwrite_approval, are documented in one place (the official docs) and we have not cross-verified them against a second independent source or our own testing. - This page describes the system as documented at the official docs site and corroborated against source files in the
NousResearch/hermes-agentGitHub repository as of August 2026. Hermes is under active development; check the official skills docs if you're reading this much later.
Sources
Elsewhere in the Hermes Agent guide
- 02The Best Hermes Agent SkillsA curated, criteria-based look at notable Hermes Agent skills — with honest limits on what can be ranked.
- 03How to Install Hermes Agent SkillsStep-by-step installation and setup, using verified commands from the official installer and CLI.
- 04Hermes Agent Skills on GitHubHow to find and evaluate Hermes-compatible skill repositories on GitHub, official and community.