184 Shared Skills Across Two Agents With Zero MCP Servers

@zx_joy_ runs two AI agents on the same machine: Hermes as an always-on Telegram agent (built on OpenClaw), and Claude Code as a terminal coding agent. This week they shared a setup that lets both agents draw from the same library of 184 battle-tested skill files - without any MCP servers, shared databases, or API integration. The mechanism: symlinks and markdown.
The Problem
Agents accumulate specialized knowledge. A workflow for deploying to Cloudflare Workers, a checklist for code review, a set of exact commands for database migrations. Each of these is valuable. But when you run two agents, that knowledge splits. Hermes knows one set of workflows. Claude Code knows another. The user becomes the bridge - manually pasting context from one agent to the other.
The conventional solution is an MCP server. Both agents connect to it, read and write to a shared store. But MCP servers add complexity: they need to be running, they need network access, they need authentication, and they introduce another surface to debug when something breaks.
@zx_joy_'s approach is simpler. If both agents read markdown files from disk, make them read the same files.
The Architecture
The setup has three layers:
| Layer | Location | Role |
|---|---|---|
| Canonical library | ~/.hermes/skills/ |
184 SKILL.md files, each a battle-tested workflow |
| Shared context | ~/.hermes/context/ |
AGENTS.md (conventions), MEMORY.md (long-term memory), DAILY.md (priorities) |
| Symlink bridge | ~/.claude/skills/hermes-*.md |
Prefixed symlinks into Claude Code's skills directory |
| Instruction rule | ~/.claude/CLAUDE.md |
One directive: check hermes-* skills before starting any task |
The canonical library lives in Hermes's directory because that is where skills are authored and maintained. Hermes writes new skills as it learns. The symlinks make those same files visible to Claude Code. The prefix (hermes-) prevents name collisions with Claude Code's own skills.
The symlink command is a one-liner:
for skill in ~/.hermes/skills/*.md; do
ln -s "$skill" ~/.claude/skills/hermes-$(basename "$skill")
done
Shared context files (AGENTS.md, MEMORY.md, DAILY.md) are symlinked the same way. Claude Code inherits the full workspace context without any additional configuration.
The Instruction Rule
The last piece is one instruction block in ~/.claude/CLAUDE.md:
## Hermes Shared Skills Protocol (Zero MCP)
Before beginning any task:
1. Scan skills/ for any file matching `hermes-*` or relevant keywords.
2. Read the full content of every relevant skill file.
3. Treat these files as authoritative, higher priority than general knowledge.
4. Follow their exact steps, commands, order of operations, and avoidance patterns.
Shared context files:
- AGENTS.md: conventions and personality
- MEMORY.md: long-term learned knowledge
- DAILY.md: current priorities
When you discover a new durable pattern, update the relevant hermes-*.md file
directly so Hermes receives the improvement on its next run.
This is the entire integration surface. No API keys. No server processes. No network calls. A few symlinks and a markdown directive.
Bidirectional Updates
The approach works in both directions. When Hermes refines a skill (it edits the canonical file in ~/.hermes/skills/), the symlink resolves to the same inode. Claude Code sees the update immediately on its next scan. When Claude Code discovers a better pattern and writes to a hermes-*.md file, the write goes through the symlink back to the canonical location. Hermes picks it up on its next run.
This is not a theoretical property of symlinks - it is the defining behavior of hard links and symlinks on Unix. The same inode, the same file, the same bytes. Two agents, one source of truth.
What This Replaces
The zero-MCP approach does not replace the Hermes Skills Hub (90,000+ community skills installed as slash commands). Those are for one-off or complex tools. The symlinked library is for high-signal, repeatedly-used workflows: git workflows, code review checklists, deployment procedures, refactoring patterns. Things you do weekly and want both agents to know.
The approach also does not claim to replace MCP for use cases that genuinely need a server: multi-machine coordination, shared state across networks, authenticated tool access from multiple hosts. But for two agents on the same machine, symlinks are simpler, faster, and have zero runtime overhead.
The Numbers
184 skills in a single canonical directory. One symlink command. One instruction block in CLAUDE.md. Zero MCP servers. Zero additional infrastructure.
The setup produces bidirectional skill updates between Hermes and Claude Code. Each agent learns from the other's experience without any coordination layer beyond the filesystem.
[^1]: @zx_joy_. "Hermes inside Claude Code without MCP" X (Twitter). August 4, 2025. [^2]: Nous Research. "Hermes Agent Skills Hub" Hermes Agent Documentation.