DEV Community

Cover image for Master Hermes Agent: A No-BS Beginner's Guide to Memory, Skills, and Multi-Agent Orchestration
HIROKI II
HIROKI II

Posted on

Master Hermes Agent: A No-BS Beginner's Guide to Memory, Skills, and Multi-Agent Orchestration

Cover

Cover

I spent way too many hours wrestling with Hermes Agent before things clicked. You know the feeling: "Why doesn't it remember what I told it yesterday?" or "Why does my sub-agent have no clue what's going on?"

Turns out, most of the pain comes from three simple misunderstandings. Once you internalize these, Hermes becomes a completely different beast.

Let me save you the struggle.


The Three Things Nobody Tells You

Before you touch a single config file, you need to understand how Hermes actually thinks. There are three mental models that change everything:

1. Memory is Agent-Curated, Not Automatic

This is the biggest trap. You assume the agent writes down everything you say. It doesn't.

Hermes uses agent-curated memory — the agent decides what's worth keeping. This isn't a bug. It's a deliberate design choice that prevents context pollution and reduces token costs.

The fix is dead simple. When something matters, say it explicitly:

"Remember this preference: all my code uses Python 3.11."

"Save our progress: we finished data cleaning and feature engineering. Next is model training."

Pro tip: if you're in a long session and worried about losing context midway, ask the agent to write a TASK_STATUS.md file in your project directory. It's the most reliable way to persist state across sessions.

2. A Skill Is Not Code — It's a Reusable SOP

I kept thinking of skills as plugins or scripts. They're not. A skill is a standard operating procedure — just markdown that tells the agent "here's how to handle this kind of task."

Every good skill has four elements:

Element What it does
Trigger When should the agent use this?
Steps What exactly should it do, in order?
Verification How does it know it succeeded?
Warnings What traps has it fallen into before?

The pattern is: you repeat a workflow → the agent notices → you tell it to create a skill → it crystallizes the pattern into reusable knowledge.

3. Sub-agents Start From Zero Context

This one burned me repeatedly. You spawn a sub-agent and say "fix that TypeError," expecting it to magically know which file, which line, which Python version.

It won't. Sub-agents launch from a fresh conversation context. They inherit nothing from the parent. You must pass everything explicitly:

delegate_task(
  goal="Fix the TypeError in api/handlers.py",
  context="""
  File: /home/user/myproject/api/handlers.py
  Error: line 47, TypeError: 'NoneType' object has no attribute 'get'
  Root cause: parse_body() returns None when Content-Type header is missing
  Project: Python 3.11 + Flask
  """
)
Enter fullscreen mode Exit fullscreen mode

Being lazy with the context field is the #1 reason sub-agent tasks fail.


The Memory System: What Goes Where

Hermes has four memory files, and putting the wrong thing in the wrong one will drive you insane.

File What belongs here Who writes it
SOUL.md Stable rules, identity, behavior guidelines You
USER.md Your preferences, habits, personal details Agent
MEMORY.md Working notes, environment facts, project context Agent

Critical rule: Never put permanent rules in MEMORY.md. The agent can and will reorganize or compress it. SOUL.md is your safe space for anything that should never change.

Keep MEMORY.md under 1,800 characters (out of 2,200 max) and USER.md under 1,100 characters (out of 1,375 max). Staying at 70-80% capacity gives the agent breathing room.


Skills: When and How to Create Them

You don't need to create a skill for every little thing. But when you catch yourself repeating the same workflow for the third time, that's your signal.

Four essential skill commands for beginners:

Create a new skill:

"Save this data processing workflow as a skill called data-pipeline. Include trigger conditions, steps, verification methods, and gotchas."

Crystallize from memory:

"I notice you've been tracking our deployment process. Create a reusable skill for it called deploy-workflow."

Surgical update (never rewrite the whole thing):

"Update the stock-daily-report skill. Add to the warnings: 'Friday closing data may be delayed until Saturday morning.'"

Periodic audit:

"Review all your skills. Find duplicates (merge them), unclear ones (rewrite), and outdated ones (update). Give me a report first — I'll confirm before you execute."


Multi-Agent Collaboration: The Rules

Concurrency: 2 is plenty, 3 is the ceiling

Don't try to spawn 10 sub-agents at once. Start with 2. Most API providers will rate-limit you. More importantly, cost spirals out of control fast.

Use this pattern for parallel work:

This task can run in parallel:
- Subtask A: Pull today's market data
- Subtask B: Calculate sentiment indicators
- Subtask C: Generate the summary report

Spawn 3 sub-agents to handle these in parallel, then aggregate the results.
Enter fullscreen mode Exit fullscreen mode

Assign clear roles

In SOUL.md or AGENTS.md, define who does what:

## Multi-Agent Collaboration Rules
- Planner Agent: task decomposition and progress tracking only; no execution
- Executor Agent: data retrieval and processing only; no decision-making
- Reviewer Agent: quality checks and validation only; no modifications
Enter fullscreen mode Exit fullscreen mode

This prevents agents from stepping on each other's toes.


Profiles: One Machine, Multiple Hermes

Profiles give you completely isolated environments — separate configs, separate memories, separate sessions. They share nothing.

Command What it does
hermes profile create mybot Fresh empty profile
hermes profile create work --clone Copy API key + model config, fresh memory
hermes profile create backup --clone-all Copy everything including memory

Pro move: run a coding assistant in one terminal and a research assistant in another. No context cross-contamination.


The Production Checklist

If you're deploying Hermes to production, run through this:

  • [ ] hermes doctor — no errors
  • [ ] API keys in .env, NOT in config.yaml
  • [ ] GATEWAY_HEARTBEAT=true — prevents silent failures
  • [ ] User whitelist configured (e.g., TELEGRAM_ALLOWED_USERS)
  • [ ] Approvals mode set: smart for convenience, manual for strict audit
  • [ ] Server timezone verified — timedatectl should show your actual zone, not UTC
  • [ ] Cron tasks manually verified once before going live

The Quick-Fix Table

Problem Why Fix
Agent never remembers things Session too short / agent deemed it unimportant Say "save this to long-term memory"
Sub-agent doesn't know the task No context passed Fill the context field completely
Cron job doesn't fire Wrong timezone / Gateway not running Check timedatectl → check Gateway → test manually
API costs are exploding Too many concurrent agents Cap at 2-3, use cheaper models for sub-tasks
Tirith blocks every command Approval mode too strict Switch to smart mode

Debug Commands to Know

hermes doctor           # Full health check — run this first
hermes memory status    # Is the memory system working?
hermes mcp status       # Are MCP connections alive?
hermes cron list        # What cron jobs do I have?
hermes cron run [name]  # Manually trigger a cron job to test it
hermes debug share      # Generate a sanitized debug report
Enter fullscreen mode Exit fullscreen mode

The Bottom Line

Hermes isn't magic. It's three things:

  1. Memory solves "I forgot" — but you have to tell it what matters
  2. Skills solve "how do I do this again?" — crystallize workflows into reusable SOPs
  3. Sub-agents solve "this is too much for one agent" — but only if you give them full context

Most beginners struggle because they skip #1 (expecting the agent to just remember everything) and #3 (throwing sub-agents at problems without proper briefs).

Fix those two things, and 80% of the pain disappears.


Built with Hermes Agent. Documented from real experience — all of it earned the hard way.

Top comments (0)