What a skill actually is
A Hermes skill is a Markdown file with YAML frontmatter stored in ~/.hermes/skills/. The frontmatter describes the skill (name, description, when to use it). The body contains instructions in natural language — what to do, what tools to use, what output to produce. There is no compiled code required to write a basic skill.
The agent reads skills into context when they are relevant to the current task. It decides which skills to load based on the description field in the frontmatter — this is how it knows whether a skill applies. A skill for 'deploy a Next.js app to Vercel' will be loaded when you ask about Vercel deployments; it won't load for unrelated tasks.
Skills can also include executable code in multiple languages (Python, JavaScript, bash) that runs inside the agent's Docker sandbox. A skill can fetch data, process it, and return structured results — functioning like a mini-program the agent can invoke.
The skill file format
Skills live in ~/.hermes/skills/ with a .md extension. The YAML frontmatter fields:
---
name: deploy-vercel
description: Deploy a Next.js or React application to Vercel. Use when user asks to deploy, push to Vercel, or set up Vercel hosting.
version: 1.2
author: your-handle
tags: [deployment, vercel, nextjs]
platforms: [telegram, discord, cli]
---
# Deploy to Vercel
When deploying to Vercel:
1. Check that vercel CLI is installed: `vercel --version`
- If missing, install: `npm i -g vercel`
2. Run `vercel login` if not authenticated
3. From the project root, run: `vercel --prod`
4. Copy the deployment URL and confirm with the user
The description field is the most important — it determines when the agent loads this skill. Write it as a trigger condition: 'Use when...' or 'When the user asks about...'. A vague description means the skill gets loaded for unrelated tasks (costs tokens) or missed when it should apply.
Key frontmatter fields:
name— internal identifier, used inhermes skillscommandsdescription— natural language trigger condition (critical)version— semantic version, used for updates and rollbackauthor— used on the Skills Hub if publishedtags— for filtering inhermes skills listplatforms— which gateways can use this skill (optional, defaults to all)
How Hermes self-creates and improves skills
This is the feature that distinguishes Hermes from most AI agents. When the agent successfully completes a complex task it is likely to face again, it can write the procedure as a new skill in ~/.hermes/skills/. On the next occurrence: load the skill, follow the documented procedure, and if the procedure works better or differently, update the skill file.
The improvement loop in practice: say you ask Hermes to set up a new Python project with a specific structure (venv, pytest, linting config). It works through the steps, succeeds, and writes a create-python-project.md skill capturing those steps. Next time you ask for the same thing, it loads the skill and executes faster. If you change your preferred structure, it updates the skill to match.
This doesn't happen automatically for every task — the agent decides when a procedure is worth codifying. You can prompt it explicitly: 'Package what you just did as a skill so you can do it faster next time.'
Skill versioning means the agent can roll back an improvement that broke something. hermes skills list shows versions. Skills on the Hub show version history so you can see how a skill evolved.
The Skills Hub — agentskills.io
The Skills Hub at agentskills.io is Hermes's community skill marketplace. Skills are submitted by community members, reviewed (though not all skills undergo security review), and installable directly from the CLI:
hermes skills list # browse installed skills
hermes skills search vercel # search the Hub for skills by keyword
hermes skills install deploy-vercel # install by name
hermes skills update # update all installed skills
hermes skills update deploy-vercel # update specific skill
Skill categories on the Hub include: development tools (deployment, testing, CI), productivity (email management, calendar, task tracking), data processing (web scraping, file conversion), system administration, API integrations (Stripe, GitHub, Notion), and lifestyle (personal finance, health tracking).
Skills on the Hub come from a range of authors. Not all skills are security reviewed. The same caution applies as installing any third-party package: read the skill file before running it in an environment with credentials or shell access. A skill that calls a remote URL on your behalf, runs shell commands with elevated permissions, or reads sensitive files deserves scrutiny before installation. Check the author's publish history and read the skill's implementation before installing anything that touches your data.
Hermes skills vs OpenClaw plugins
OpenClaw uses a plugin system hosted on ClawHub. The structural differences from Hermes skills:
| Feature | Hermes Skills | OpenClaw Plugins |
|---|---|---|
| Format | Markdown + YAML | TypeScript/JavaScript module |
| Self-creation | Yes — agent writes own skills | No |
| Self-improvement | Yes — agent updates skills | No |
| Language | Natural language + optional code | Code-first |
| Marketplace | agentskills.io | clawhub.io |
| Security record | No public CVEs | 400+ malicious plugins reported |
| Installation | hermes skills install | openclaw plugins install |
| Version rollback | Yes | Yes |
The OpenClaw plugin system is more powerful for developers who want to write full TypeScript modules with complex logic. Hermes skills are more accessible — most users can write a working skill in 5 minutes without writing any code. The self-creation feature has no OpenClaw equivalent.
The 400+ malicious plugin figure comes from OpenClaw's own community disclosures on ClawHub. The Hermes Skills Hub has not had a comparable public incident, though it is also smaller and newer.
Writing your first skill
Create a skill file directly:
mkdir -p ~/.hermes/skills
nano ~/.hermes/skills/my-first-skill.md
Minimal working example — a skill that formats a Git commit message:
---
name: git-commit-format
description: Format a Git commit message following conventional commits spec. Use when user asks to commit changes or write a commit message.
version: 1.0
author: your-handle
tags: [git, development]
---
# Git Commit Format
When writing a commit message:
1. Use conventional commits format: `type(scope): description`
2. Types: feat, fix, docs, style, refactor, test, chore
3. Keep the first line under 72 characters
4. Add a blank line before the body if explanation is needed
5. Body explains WHY, not what (code shows what)
Examples:
- `feat(auth): add OAuth2 Google login`
- `fix(api): handle null response from upstream provider`
- `docs(readme): add self-hosting section`
Test it:
hermes -m 'Help me write a commit message for the changes I made to the authentication flow'
The agent will load the skill because 'commit message' matches the trigger description.
For skills with code execution, add a code block with a language tag:
# This runs in the Docker sandbox when the agent invokes it
import subprocess
result = subprocess.run(['git', 'log', '--oneline', '-10'], capture_output=True, text=True)
print(result.stdout)
The agent decides when to execute code blocks vs when to use them as reference. Make the intent explicit in your prose instructions.
Managing and sharing skills
Useful skills commands:
hermes skills list # list all installed skills with versions
hermes skills list --tag development # filter by tag
hermes skills info git-commit-format # show skill metadata
hermes skills edit git-commit-format # open skill in $EDITOR
hermes skills remove git-commit-format # uninstall
hermes skills export git-commit-format # export as .tar.gz for sharing
hermes skills import skill.tar.gz # import from file
Skills are included in the Hermes profile export (hermes profile export <name>), making them portable between machines. When migrating from OpenClaw with hermes claw migrate, Hermes-compatible OpenClaw plugins are converted to the skill format automatically where possible. Plugin types that require TypeScript compilation fall back to stubs that explain what the original plugin did — these need manual rewriting.
To publish a skill to the Skills Hub: create a pull request to the agentskills.io GitHub repository with your skill file. Skills are reviewed by the maintainers before listing. Community contribution increases the Hub's coverage and means your skill benefits from community improvements over time.
Skills on Hermes OS
All Skills Hub installations work on Hermes OS instances identically to self-hosted. Skills are stored in the instance's persistent volume and survive container restarts. The hermes skills commands are available from the web terminal in the Hermes OS dashboard.
Self-created skills are particularly useful on Hermes OS because the agent's learning loop builds up a library of procedures specific to your workflows over time. A Hermes OS instance you have been using for six months will have a skill library tailored to your exact working patterns — deployments you run regularly, report formats you prefer, APIs you use. That library is backed up automatically and included in profile exports.