SKILL.md · Skill Bundles · Conditional activation · Tap publishing · GEPA + DSPy · Remote Mac validation
Who is this for? You finished the Hermes install guide but still paste deploy, PR, and audit instructions into every conversation—burning tokens while the agent forgets how to work. Bottom line: Nous Research's Hermes Agent crossed 160,000 GitHub stars in roughly two months, not because of a bigger model, but because of "the agent that grows with you"—powered by a standardized, evolvable, cross-session Skills system. What follows: concept comparison → SKILL.md and progressive loading → Skill Bundles → conditional activation → open ecosystem and Tap publishing → GEPA five-stage self-evolution → Plugin skills and authoring tips → blog workflow case study → FAQ. For macOS script validation, pair this with a VNCMac remote Mac VNC session.
In early 2026, Nous Research shipped Hermes Agent—one of the fastest-growing open-source AI agent projects. Unlike one-shot prompts, Hermes Skills are a standardized, evolvable, cross-session layer of procedural memory: they teach the agent how to do something, not what fact to remember.
This guide skips beginner setup and goes straight to advanced territory:
Progressive Disclosure: How do you spend zero tokens before activation and expand the full SKILL.md only when needed?
Conditional Activation: Automatically show or hide skills based on tool availability—smart switching between free and paid APIs.
Skill Bundles: One slash command loads multiple related skills and triggers a complete workflow.
DSPy + GEPA: Evolve skill text without touching model weights—each run costs roughly $2–10 in API fees, no GPU required.
Open ecosystem: awesome-hermes-skills, hermeshub, kevinnft/ai-agent-skills, and more—subscribe directly via Tap.
Confusing these three is the most common beginner mistake. A simple mnemonic: Prompt = sticky note (valid for this turn only); Memory = notebook (permanent notes, always within reach); Skill = SOP manual (step-by-step procedure, opened when needed).
| Dimension | Plain Prompt | Memory | Skills |
|---|---|---|---|
| Persistence | Current conversation | Cross-session, permanent | Cross-session, permanent |
| Load timing | Always in context | Auto-injected each session | On demand |
| Token cost | Every turn | Small and stable | Zero before activation |
| Content type | Any intent description | User preferences / facts | Procedural steps |
| Maintenance | Manual by user | Automatic by agent | User + agent |
| Shareability | Awkward | Private | Publishable as community Tap |
All Hermes Skills follow the open agentskills.io standard, portable across Hermes, Claude Code, and Cursor.
---
name: my-skill
description: |
Use when the user needs to [...].
Handles [...] and [...].
version: 1.0.0
license: MIT
compatibility: Requires git, docker
allowed-tools: Bash(git:*) Read
metadata:
hermes:
tags: [devops, automation]
category: software-development
related_skills: [github-pr-workflow, test-driven-development]
requires_toolsets: [terminal]
fallback_for_toolsets: [web]
---
# My Skill Title
## Overview
## When to Use
## Procedure
## Common Pitfalls
## Verification Checklistmy-category/my-skill/ ├── SKILL.md # Core steps; keep ≤500 lines ├── references/ # API docs, loaded on demand ├── templates/ # Reusable templates └── scripts/ # Scripts the agent can execute directly
| Level | Content | Trigger | Token cost |
|---|---|---|---|
| Level 0 | name + description | Every session start, all skills | ~3K (all skills combined) |
| Level 1 | Full SKILL.md body | /skill-name or LLM decides needed | Depends on file length |
| Level 2 | references/ scripts/ | LLM decides at execution time | On demand, per file |
Writing tip: description is the only Level 0 signal—the LLM uses it to decide whether to load the full skill. State when to use more clearly than what it is; start with Use when... and stay under 1024 characters.
Skill Bundles are a 2026 Hermes addition and one of the most underrated features. A Bundle is a lightweight YAML file that packs multiple related skills into a single slash command; running /bundle-name loads all listed skills at once.
File location: ~/.hermes/skill-bundles/<slug>.yaml
name: backend-dev description: | Full backend feature workflow — code review, TDD, and PR management. skills: - github-code-review - test-driven-development - github-pr-workflow instruction: | Always write failing tests first before implementation. Never push directly to main.
Advanced scenarios: An AI research workflow might bundle arxiv + deep-research + plan + excalidraw; an MLOps deploy might bundle vllm + llama-cpp + github-pr-workflow + systematic-debugging.
| Rule | Behavior |
|---|---|
| Name collision | Bundle takes priority over a single Skill |
| Missing skill | Skipped without error; warning shown at load time |
| Prompt Cache | Bundle does not modify system prompt—token friendly |
hermes bundles create backend-dev \ --skills github-code-review,test-driven-development,github-pr-workflow \ --instruction "Always write failing tests first"
Under metadata.hermes, configure four activation rules so skills automatically show or hide based on tool availability in the current session:
| Field | Logic |
|---|---|
| requires_toolsets | Hide this skill when listed toolsets are absent |
| requires_tools | Hide this skill when listed tools are absent |
| fallback_for_toolsets | Hide when listed toolsets exist (fallback role) |
| fallback_for_tools | Hide when listed tools exist (fallback role) |
Classic scenario—free vs paid tool switching: When the user configures FIRECRAWL_KEY or BRAVE_SEARCH_KEY, the paid web_search skill activates and the DuckDuckGo fallback disappears from the prompt—saving tokens. When the API is unavailable, the fallback resurfaces automatically.
metadata:
hermes:
fallback_for_tools: [web_search] # auto-hide when paid web_search existsThrough the hermes skills TUI, you can also toggle individual skills on or off per platform—CLI, Telegram, Discord, and others.
hermes skills install official/research/arxiv hermes skills install https://example.com/SKILL.md --name my-skill hermes skills install github:openai/skills/k8s hermes skills tap add github:my-org/my-skills
| Repository | Highlights | Stars |
|---|---|---|
| awesome-hermes-skills | Production-grade collection: Deep Research, MLOps, Apple integration | 67 |
| hermeshub | Community registry with security scanning | 166 |
| ai-agent-skills | 191 skills, 28 categories, cross Hermes/Claude/Cursor | 10 |
| hermes-agent | Official repo—authoritative source and authoring spec | — |
The agentskills.io open standard means skill assets are not locked to one platform. Validate format compliance with skills-ref validate ./my-skill.
Create a GitHub repository as a Tap so your team—or the wider community—can subscribe to your skill set:
my-skills-tap/ ├── skills.sh.json ├── mlops/vllm-deploy/SKILL.md └── research/paper-summarizer/SKILL.md # One-command team subscription hermes skills tap add github:your-org/your-skills-tap hermes skills tap add github:your-org/private-skills --token $GH_TOKEN hermes skills tap update hermes skills tap list
Version control tip: Put ~/.hermes/skills/ under Git. After git pull && hermes skills reset on another device, rebuild built-in skills to stay in sync.
GEPA (Genetic-Pareto Prompt Evolution) is a 2026 ICLR Oral result, integrated in hermes-agent-self-evolution. The core idea: without fine-tuning model weights, analyze execution traces, generate variants, and apply multi-objective Pareto optimization to improve the skill text itself. Each optimization run costs roughly $2–10 in API fees—no GPU required.
Execution trace collection: Read full reasoning traces from SQLite—tool calls, branches, errors.
Reflective failure analysis: LLM produces actionable side information—not just "it failed," but why it failed.
Targeted mutation: Generate 10–20 SKILL.md variants aimed at the failure root cause.
Multi-objective Pareto evaluation: Optimize success rate × token efficiency × speed simultaneously.
Human PR review: Best variant → PR generated → merge after human approval.
git clone https://github.com/NousResearch/hermes-agent-self-evolution
cd hermes-agent-self-evolution && pip install -r requirements.txt
export HERMES_AGENT_PATH=~/.hermes
# Synthetic data entry point
python -m evolution.skills.evolve_skill \
--skill github-code-review --iterations 10 --eval-source synthetic
# Real session data (better results)
python -m evolution.skills.evolve_skill \
--skill github-code-review --iterations 10 --eval-source sessiondbFull test suite pytest tests/ -q must pass 100%
Size limits: Skills ≤ 15KB, tool descriptions ≤ 500 characters
Prompt cache compatibility: no mid-session edits that invalidate cache
Semantic preservation check: must not drift from the skill's original purpose
| Phase | Optimization target | Engine | Status |
|---|---|---|---|
| Phase 1 | Skill files (SKILL.md) | DSPy + GEPA | ✅ Shipped |
| Phase 2 | Tool descriptions | DSPy + GEPA | 🔲 Planned |
| Phase 3 | System prompt fragments | DSPy + GEPA | 🔲 Planned |
| Phase 4 | Tool implementation code | Darwinian Evolver | 🔲 Planned |
| Phase 5 | Continuous improvement loop | Automated pipeline | 🔲 Planned |
Because Skills follow the agentskills.io standard, you can feed Claude Code or Gemini CLI execution traces into GEPA too: --eval-source mixed --trace-dirs ~/.claude/traces,~/.hermes/sessions
Plugins package skills into a namespace (plugin:skill): they do not appear in the default skills_list (reducing noise); they activate only on explicit user invocation (opt-in); and skills inside a plugin can reference each other.
name: my-hermes-plugin
skills:
- name: writing-plans
path: skills/writing-plans/SKILL.md
- name: editing
path: skills/editing/SKILL.md
# Load: skill_view("superpowers:writing-plans")description drives activation precision: Avoid vague lines like Helps with code. State trigger conditions, scope, and explicit exclusions (Do NOT use for...).
Pitfalls separate good skills from great ones: Each failure mode needs root-cause analysis and an actionable fix—not generic advice.
| Skill size | Recommendation |
|---|---|
| < 500 lines | Keep everything in SKILL.md |
| 500–1000 lines | Move detailed material to references/ |
| > 1000 lines | Split strongly; consider whether this is two skills |
| > 15KB | Exceeds GEPA size limit—must split |
skill_manage lets the agent maintain its own skills: Supports patch and create actions. Set skills.agent_writes_require_approval: true in config.yaml to require human approval before writes land on disk.
Build a blog-workflow Bundle that packages SEO research, outline generation, code validation, bilingual checks, and publishing skills:
name: blog-workflow description: Full tech blog writing workflow. skills: - seo-keyword-research - outline-generator - code-example-validator - bilingual-checker - publish-to-platform instruction: | Always research SEO keywords before writing. Ensure all code examples are tested and runnable. Generate both Chinese and English title options.
A custom seo-keyword-research skill might specify in Procedure: Chinese long-tail patterns like "X 怎么用" and "X 教程"; English patterns like "X tutorial," "how to X," and "X vs Y"; cross-reference Juejin trending and Dev.to hot posts; output 3–5 primary keywords plus a 10–15 long-tail matrix.
Hermes Agent needs 24/7 uptime and local trace accumulation for GEPA evolution to work (see our three-layer memory architecture guide). You can write Skills on a Windows or Linux primary machine, but macOS-specific scripts/ and Telegram Gateway validation belong on a remote Mac.
| Scenario | SSH only | SSH + VNC | Recommendation |
|---|---|---|---|
| Edit SKILL.md / Bundle YAML | ✅ | ✅ | SSH is enough |
| Run bash script validation | ✅ | ✅ | SSH is enough |
| Telegram / Discord QR pairing | ❌ | ✅ | VNC required |
| GEPA evolution + manual PR review | ✅ | Optional | SSH + local diff review |
| macOS Keychain / TCC permissions | ❌ | ✅ | VNC required |
Rent a Mac Mini M4 monthly node and install Hermes over SSH (see the install guide).
Create your first SKILL.md under ~/.hermes/skills/; validate with skills-ref validate.
Create a Skill Bundle and verify multi-skill loading with /bundle-name.
Complete Telegram Gateway QR pairing and hermes doctor health checks in a VNC session.
After session traces accumulate, run GEPA evolve_skill on the remote node and review the generated PR.
Official reference from Nous Research.
Read →hermes-agent-self-evolution repository.
Read →Cursor / Claude Code SKILL.md spec for any agent.
Read →Skills are procedural knowledge documents that teach an agent how to perform a task. MCP is a tool interface that gives the agent additional tool-calling capabilities. They complement each other: MCP provides database access; a Skill teaches the agent how to run a migration correctly.
Skill edits do not take effect in the current session. Run /reset to start fresh, or install with the --now flag to force a refresh (this invalidates Prompt Cache and costs more tokens).
Four guardrails constrain output: full test suite, size limits, semantic preservation, and human PR review. Semantic drift detection ensures skills do not wander from their original purpose. Still review every PR diff manually before merging.
Copy SKILL.md to ~/.claude/skills/, or use multi-agent install scripts such as kevinnft/ai-agent-skills for one install across Hermes, Claude Code, and Cursor.
CJK characters in most tokenizers cost roughly 1–1.5 tokens per character—comparable to English. Keep the description field in English (or bilingual), because underlying LLMs match English descriptions more precisely.
Hermes Agent Skills turn "gets better with use" from a slogan into an engineering path: the agentskills.io standard guarantees cross-platform portability, Progressive Disclosure controls token spend, Bundles and conditional activation orchestrate complex workflows, and GEPA lets skill text evolve continuously—all of which require a 24/7 host that accumulates session traces.
Writing Skills on Windows or Linux is fine, but Telegram QR pairing, macOS permission dialogs, and long-term trace accumulation often stall on "no always-on Mac." Buying a Mac mini means depreciation and power bills; a VPS cannot run the full native Hermes Gateway toolchain. By contrast, renting a Mac Mini M4 from VNCMac hands uptime and base image to a provider—you focus on skill authoring and GEPA evolution, and use VNC for graphical validation.
If you are ready to move Hermes from "installed" to "skill-systemized," open a remote Mac node via the button below, then follow Section 12's five-step checklist alongside our architecture guide and install tutorial.