What is Hermes Agent?

Hermes Agent is Nous Research’s self-hosted agent runtime: a Python process with persistent memory, built-in cron, and a learning loop that writes its own skills. It is not the Hermes LLM. It is not a social scheduler. Like OpenClaw, it still needs a last mile to publish to Instagram, LinkedIn, TikTok, X or Facebook.

I build Social by InstantDM. We ship a hosted MCP server and a Hermes skill. I care about Hermes because operators keep migrating to it, then asking me why the agent still cannot “just post.” Same answer as OpenClaw: the runtime thinks. A publisher posts.

Figures below were checked on 27 August 2026. Latest tagged release at that check: v0.20.5 (v2026.8.19). If you are reading later, check hermes-agent.nousresearch.com/docs — YAML keys and CLI flags move.

Hermes Agent homepage Hermes Agent homepage at hermes-agent.nousresearch.com, captured 27 August 2026. Nous Research’s runtime, not the Hermes LLM.

Install it. It runs on your hardware or a cheap VPS. You talk from hermes in a terminal, or you start hermes gateway and message it on Telegram, Discord, Slack, WhatsApp or Signal. It keeps a model of you across sessions, searches past chats, and after a hard task it often writes a SKILL.md so the next run is cheaper.

Nous’s line is “the agent that grows with you.” The architectural bet is depth over catalog: fewer pre-built marketplace skills, more skills the agent authors from your work. That bet is why people leave OpenClaw. It is also why a publishing skill can drift if you do not pin it.

Config lives in ~/.hermes/config.yaml. Secrets belong in ~/.hermes/.env. Skills land in ~/.hermes/skills/. None of that is a token vault for Instagram. If you want the agent to draft a carousel, you add MCP. If you skip that and try to “let Hermes figure out the Graph API,” you are asking a language model to become a nine-platform OAuth app. Do not.

Is Hermes Agent the same as the Hermes LLM?

No. Confusing them is the most common search mistake on this topic.

NameWhat it is
Hermes (LLM)Nous Research fine-tunes. Weights you can run or call. A model family.
Hermes AgentThe runtime. Tools, memory, cron, gateway, MCP client. MIT license. Repo: NousResearch/hermes-agent.

You can run Hermes Agent on Claude, GPT, a Hermes checkpoint, OpenRouter, or Nous Portal. Swap with hermes model. The agent does not require the Hermes LLM. I have watched people buy GPU time for a Hermes model because they thought the agent would not start otherwise. It starts. It calls whatever provider you configured.

A buying-decision rule: if the page is about weights, GGUF, or a Hugging Face card, you are looking at the model. If the page is about hermes setup, cron, config.yaml, and a gateway, you are looking at the agent. This article is the agent.

Why Nous reused the name is their marketing problem, not yours. Your problem is a GitHub star count that mixes two products in search snippets. When I cite 237,120 stars, that is NousResearch/hermes-agent on 27 August 2026, not a model repo.

NousResearch/hermes-agent on GitHub The NousResearch/hermes-agent repository on GitHub, captured 27 August 2026. 237,120 stars and about 48,000 forks at that check. This is the runtime.

If a consultant tells you “we run Hermes” in a social-media pitch, ask which one. A fine-tune that writes captions is a model. A process that holds memory, fires cron, and calls MCP is an agent. Only the second one can talk to a scheduler without you writing glue.

Who builds Hermes Agent, and what is the architectural bet?

Nous Research builds it. Open source. MIT. Python. The public site and docs sit under hermes-agent.nousresearch.com.

The bet, stated without the landing-page adjectives: OpenClaw grew a catalog (ClawHub, many channels, one Gateway). Hermes grew a loop (do a hard task, write a skill, reuse it, search memory instead of stuffing the transcript).

That shows up in daily use:

  • Fewer packaged skills on day one. More skills in ~/.hermes/skills/ after a month of real work.
  • Cron is a first-class object, not a heartbeat you bolt on.
  • Config is YAML a human can diff.
  • Memory is meant to compound. FTS5 search over prior sessions, not “hope the context window holds.”

Reddit’s recurring complaint about OpenClaw is “I had to write every skill by hand.” Hermes’s recurring complaint is the opposite: a skill overfits the first invoice layout, then silently fails on the second. Both complaints are true. They are the same trade-off from two sides.

Garry Tan’s public note from April 2026, which still matches what I see in r/openclaw and r/AI_Agents: OpenClaw has more personality and is more proactive; Hermes feels more solid and slower. I am not quoting that as scripture. I am quoting it because operators repeat it when they explain why they kept both.

iMessage, Teams, LINE, and the long tail of chat surfaces are OpenClaw’s home turf. Hermes’s documented messaging set when I checked the docs on 27 August 2026 is Telegram, Discord, Slack, WhatsApp, Signal, email, and the CLI. If iMessage is non-negotiable, stop here and stay on OpenClaw — then connect the same MCP server.

Hermes Agent documentation Hermes Agent docs at hermes-agent.nousresearch.com/docs, captured 27 August 2026. YAML, cron, memory, MCP — read this before you paste a config from a tweet.

The Foundation vs research-lab difference is mostly governance flavor. For a social publisher, I do not care who signs the CLA. I care whether tools/list returns create_post after you reload MCP. Both runtimes can do that. Both will do it wrong if SOUL.md is empty.

How does the learning loop actually work?

After a complex task, Hermes can:

  1. Save a reusable skill from what just worked
  2. Refine that skill the next time the pattern shows up
  3. Nudge itself to persist facts into memory
  4. Search prior sessions (FTS5) instead of stuffing the whole transcript into the prompt

That is the headline. The operational detail is what it chooses to skill-ize.

A good self-written skill: “how we turn a changelog into five bullets, then a LinkedIn draft and an X draft, in this brand’s voice.” Helper. Cheap on the next run.

A bad self-written skill: “how we publish to Instagram on Tuesdays at 11.” That skill will fight you next month when Tuesday is a product incident, when 11:00 was Eastern not IST, and when “publish” should have been “draft.” Durable publishing law belongs in SOUL.md and in the vendor SKILL.md. Let Hermes write helpers. Do not let it write a second, drifting publisher.

Pin skills that work:

hermes curator pin social-by-idm

If your build does not have curator pin yet, the SOUL redundancy is the pin. Put “never publish_now unless the human said publish now” in SOUL.md so a new homemade skill cannot outvote it.

Worked example of a loop going right:

  • Monday: you paste a changelog. Hermes drafts five captions, saves draft: true, delivers IDs to Telegram. You approve three.
  • Tuesday: Hermes writes a small skill, “changelog-to-five-drafts,” with the section order that you corrected.
  • Wednesday: you paste another changelog. The skill fires. The drafts are closer. You still approve.

Worked example of a loop going wrong:

  • Monday: you said “just post it” once, in a hurry.
  • Hermes writes a skill that calls publish_now because that is what worked.
  • Every weekday at 9, cron loads that skill.
  • Friday a hallucinated ARR number is on LinkedIn, X, and Instagram.

The fix is not “Hermes is unsafe.” The fix is: the loop will amplify whatever you rewarded. Reward drafts. Pin the publisher skill. Keep cron off publish_now.

Cleanup passes exist. They will delete unpinned skills they think are stale. A social skill that is “just markdown” can still vanish from the prompt if the curator sweeps it. Pin it. Keep a copy in git.

Does Hermes have built-in cron, and should you use it for social?

Yes, Hermes has native scheduled tasks. They take crontab, intervals (every 2h), or natural language. Output can deliver to Telegram, Discord or Slack. That is why people try to make it a social media manager.

Two clocks. Do not merge them.

ClockOwnerExample
Agent wakeHermes cronWeekdays 08:00 Asia/Kolkata: draft five posts
Network go-liveScheduler scheduledAt / platformSchedulesLinkedIn 08:30 America/New_York, IG 11:00, TikTok 18:00

If you only have agent wake, posts go out whenever the model finishes a thought. That is not a calendar. Always-on as a calendar.

Cron that calls publish_now is how you get a hallucination on every handle at 3am. Cron that creates drafts and pings you is the setup that survives.

A prompt that has survived contact with real brands:

Isolated session. Read SOUL.md. Research today’s niche sources. Produce five drafts (IG, LinkedIn, X, TikTok, Facebook) for this week’s remaining empty slots. draft: true. Do not publish_now. Deliver titles + post IDs to Telegram. Stop.

hermes cron create "0 8 * * 1-5" "<that prompt>" --name "weekday-drafts" --deliver telegram

Isolated session matters. Yesterday’s rant must not leak into today’s caption.

If the VPS was down at 9:00, do not dump seven missed posts at 14:02. Catch-up should skip, or spread, or wait for you. A burst looks like a bot.

scheduledAt without an offset is workspace timezone, not UTC. Cron in IST plus a naive 2026-09-16T09:00:00 is how a “morning LinkedIn post” ships at 03:30 Eastern. Write the offset (+05:30) or know the workspace TZ and live with it.

Hermes cron is the reason I tell OpenClaw people to look at Hermes if their pain is “I want the same job every weekday.” OpenClaw automations can do it. Hermes makes it a one-liner. That is not a reason to give cron a live publish tool.

How do you install Hermes Agent?

Linux, macOS, WSL2:

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.bashrc
hermes setup
hermes doctor
hermes

Windows native:

iex (irm https://hermes-agent.nousresearch.com/install.ps1)

Then hermes doctor until it is clean. Doctor exists because Python runtimes accumulate “it imported once on my laptop” lies. If doctor complains about a missing package or a gateway port, fix that before you add MCP. A posting key on a sick install is how you debug the wrong layer.

hermes setup walks model provider, and usually a first channel. Same rule as OpenClaw: get CLI chat working before Telegram. If hermes in a terminal cannot answer “reply ping only,” the gateway will not save you.

Put the process on a VPS if you want cron to fire with the lid shut. A laptop Hermes is a daytime assistant. An always-on Hermes is a hosting bill and a systemd unit. I am not going to pretend a curl | bash on a MacBook is a content machine.

Version I checked: v0.20.5 (v2026.8.19) on 27 August 2026. If hermes --version is months behind, update before you copy YAML from this page. Header names for MCP (X-Api-Key vs Authorization: Bearer) have already differed across builds. Match whatever your client’s tools/list actually sends.

Official Hermes Agent banner from the GitHub repository Hermes Agent banner, fetched from github.com/NousResearch/hermes-agent on 27 August 2026.

A first-hour sequence that does not include social, on purpose:

  1. Install from hermes-agent.nousresearch.com, not a mirrored gist.
  2. hermes setup with one model provider.
  3. hermes doctor clean.
  4. hermes — send a bounded prompt.
  5. Write SOUL.md. Include draft-first even if you have no publisher yet. Future you will thank present you.
  6. Start hermes gateway only when CLI is boringly reliable.
  7. Connect one chat channel.
  8. Then MCP. Then the social skill. Then one list_accounts. Then one draft.

Skip to step 8 because a Twitter thread told you Hermes “runs your social” and you will spend Thursday night blaming Nous for a YAML indent.

Can you migrate from OpenClaw to Hermes?

Yes, with a dry-run, and without expecting a clone of a multi-agent Gateway.

hermes claw migrate --dry-run
hermes claw migrate

That import pulls SOUL.md, memories, user-created skills, allowlisted keys and messaging settings. User skills land in ~/.hermes/skills/openclaw-imports/. Multi-agent OpenClaw layouts do not come across as a perfect clone. Dry-run is not optional. Read the file list it prints.

The folder name followed the final OpenClaw rename: ~/.openclaw. If you still have a museum ~/.clawdbot from December 2025, read the migrate help before you assume it will find you. Rename timeline.

After migrate, look for two social skills arguing. An old ClawHub install plus a new GitHub install will both try to teach create_post. Keep one. Pin it.

Allowlisted keys are not a reason to relax scoping. If the OpenClaw key could posts:write on every workspace, Hermes now has that too. Mint a new scoped key if you are using the move to clean up. One brand, one key. Personal agent vs publisher.

Should you migrate at all? Only if OpenClaw’s stability or memory is the actual bottleneck. “Twitter said Hermes won” is not a bottleneck. Side-by-side website-build videos are not a social-media test. Full comparison: OpenClaw vs Hermes Agent (2026).

A pattern that keeps showing up: keep OpenClaw as the chat front door, run Hermes as the writer, point one of them at the scheduler. They can sit in the same Telegram group with ACK / REJECT. For social, give posting tools to one runtime, preferably with draft: true as law.

Can Hermes Agent post to Instagram or LinkedIn by itself?

No. Nous’s docs do not ship Instagram or LinkedIn publishers. I checked the public docs when I captured the screenshot on 27 August 2026. There is no first-party Graph integration hiding behind a flag.

Hermes reaches social accounts the same way it reaches any other service: an MCP server or a SKILL.md that calls one. Chat channels (Telegram et al.) are how you talk to Hermes. They are not how Hermes talks to a feed.

Unofficial paths — browser automation against the Instagram web app, unofficial mobile APIs — are how accounts get banned. I will not help you wire those. Official publishing APIs only.

Last mile we ship:

mcp_servers:
  social-by-idm:
    url: "https://social-api.instantdm.com/mcp"
    headers:
      X-Api-Key: "${SOCIAL_BY_IDM_API_KEY}"
    enabled: true

Some builds want Authorization: Bearer …. If tools/list is empty, try the other header — do not rotate the key first. Then /reload-mcp or restart the gateway.

Skill:

hermes skills install github:instant-dm/agent-mode/skills/social-by-idm

GitHub source, not ClawHub. Hermes does not use ClawHub as its primary registry. Same markdown OpenClaw gets. Different loader. Install notes. Full walkthrough: How to let Hermes Agent post to social media.

Default: draft: true. No publish_now from cron. scheduledAt without offset = workspace TZ, not UTC.

Instagram still needs a professional account and media. LinkedIn still has its own token lifetime. TikTok still has its own media rules. The agent cannot bypass those. When create_post returns a per-platform error, that is the publisher telling the truth. Call get_post_status. HTTP 200 on create_post is not “all five networks live.”

How do you add MCP and the Social by InstantDM skill?

I am the vendor. Here is the exact wiring, and what still fails when the YAML is “correct.”

~/.hermes/.env:

SOCIAL_BY_IDM_API_KEY=sk_live_…

~/.hermes/config.yaml — MCP block as above. URL https://social-api.instantdm.com/mcp. Streamable HTTP, not stdio. Stdio would mean a process on the laptop; the scheduler holds OAuth tokens in the cloud.

Then:

/reload-mcp

Ask: “What social tools do you have?” You want list_accounts, create_post, upload_media_from_url, get_post_status, and the rest of the 16 tools. Empty list means URL, header, or the gateway process cannot see the env var. Not “Hermes is bad at social.”

First prompt:

List my connected accounts. Do not post.

Then a draft. Then you, in the calendar. Hermes will try to be helpful and skip the review if SOUL.md is silent. Write the file.

If it asks you to paste a key in chat, you misconfigured env — and the skill should have refused to search disk. That refusal is load-bearing. Do not “helpfully” relax it. Keys in Telegram become keys in backups.

URL-only note: if a client cannot set headers, https://social-api.instantdm.com/mcp?key=sk_live_… works. Treat that URL as a secret. Prefer headers on Hermes.

Social by InstantDM MCP page Hosted MCP on Social by InstantDM, captured 28 August 2026. Same URL OpenClaw and Claude use: https://social-api.instantdm.com/mcp.

Sixteen tools, full REST parity, eight platforms. Included on plans from $19/month when I last described it in our MCP guide. We are not open source. If you need to self-host the token vault, pick someone else. What an MCP server for social media is. Product: /mcp, /agents, /docs.

Claude and ChatGPT can use the same server with a connector. Schedule from Claude or ChatGPT. The agent is interchangeable. The publisher is not.

What does v0.20.5 actually ship with?

When I checked on 27 August 2026, the latest tagged release was v0.20.5 (v2026.8.19). I am not going to recite a full changelog I did not sit and diff. Treat the tag as a freshness check: if your install is older than that tag by months, you are copying YAML for a client that may not exist yet, or you are missing a cron flag.

What I will stand behind as of that date, from public docs and from wiring this MCP server:

  • Python runtime, ~/.hermes/config.yaml
  • hermes CLI, hermes gateway, hermes setup, hermes doctor
  • hermes claw migrate and --dry-run
  • Built-in cron with delivery
  • Skills install from GitHub (hermes skills install github:…)
  • MCP servers in YAML (mcp_servers)
  • Memory plus a learning loop that writes SKILL.md files
  • Messaging: Telegram, Discord, Slack, WhatsApp, Signal, email, CLI

What I will not invent: a channel list beyond what the docs showed, a star-derived quality ranking, or a claim that v0.20.5 “fixed social posting.” Social posting is not in the runtime. It is in the MCP server you add.

If a feature flag on your build does not match this page, --help wins. I would rather you trust the binary on disk than a blog post, including mine.

Who should pick Hermes over OpenClaw?

Pick Hermes if:

  • You want one agent that gets cheaper on repeat work
  • You are fine with fewer chat channels
  • You like Python and YAML
  • OpenClaw jobs die quietly and you are tired of it
  • You want cron without bolting on heartbeat config
  • You will actually pin skills and write SOUL.md

Pick OpenClaw if:

  • You text the agent from iMessage
  • You already live in ClawHub skills and do not want to rewrite them
  • You want one Gateway that also talks Slack and WhatsApp and Discord
  • You like markdown workspaces that you can diff in git, and you already have ~/.openclaw/

Pick neither as your Instagram publisher. Personal agent vs social publisher. Can an AI agent run your social media?.

A lot of people run both. That is allowed. Give one of them posts:write. Give the other a text file.

Stars on 27 August 2026: OpenClaw 387,774 / 81,423 forks; Hermes 237,120 / ~48k forks. OpenClaw is larger. Hermes grew fast. Stars are not a social-media feature.

What are the failure modes unique to a learning agent?

OpenClaw’s famous failures are exposed Gateways and malicious ClawHub skills. Hermes’s famous failures are quieter.

Did the self-written skill overwrite draft-first?

You rewarded publish_now once. The loop saved it. Cron loaded it. Pin the vendor skill. Repeat the rule in SOUL.md.

Did the curator delete the good skill?

A cleanup pass treated your publisher skill as stale. Next Monday the agent “helpfully” reconstructs posting from memory, minus the timezone offset. Pin. Keep a git copy.

Did two social skills argue after migrate?

openclaw-imports/ plus a fresh GitHub install. One says draft, one says post. Keep one.

Did cron fire in an isolated session — or not?

Without isolation, Monday’s angry customer email is still in context at 08:00 Tuesday when the draft job runs. Isolated session. The cron prompt should say so.

Did you put policy only in MEMORY.md?

Compaction drops it. Policy in SOUL. Memory for “carousels beat single images in August.”

Did scheduledAt go out without an offset?

Workspace TZ, not UTC. Same trap as OpenClaw. The skill we ship tells the agent to include the offset. A homemade skill often does not.

Did you connect MCP and skip /reload-mcp?

Empty tool list. You rotate the key. Still empty. Reload, then check whether the gateway process inherited ~/.hermes/.env.

Did you let untrusted inbound plus posting tools share a session?

Prompt injection. Same as OpenClaw. Split them.

A compact table:

FailureWhat it looks likeFix
Loop amplified YOLOLive posts from cronPin skill, SOUL, no publish_now
Curator sweepSkill gone, offsets gonePin + git
Double skill after migrateConflicting adviceOne social skill
Shared session cronOff-brand draftsIsolated session
Policy in MEMORYRule vanishedPut it in SOUL
Naive scheduledAt03:00 postsOffset
No reloadEmpty tools/list/reload-mcp
Key in chatToken in scrollback.env only

If the drafts are good for a week, then you shorten the approval. You do not start from live. That sentence is the whole safety model. Hermes does not change it. The learning loop makes it more important, because Hermes will remember the unsafe week too.

What does a changelog-to-drafts session look like on the wire?

Not a screenshot of a dashboard. The actual calls, in order, after MCP is loaded and the skill is pinned.

You, in CLI or Telegram:

Isolated session. Read SOUL.md. Changelog: we added timezone offset guidance to the social skill; we did not change pricing. Draft LinkedIn, X, Instagram. draft: true. Do not publish. Return IDs.

What you want the runtime to do:

  1. Load SOUL.md (policy) and the social-by-idm skill (manners).
  2. list_accounts — confirm LinkedIn, X, Instagram IDs are real.
  3. upload_media_from_url only if you provided a public image. Instagram will not take text-only. If you did not provide media, skip IG or ask. Do not generate a fake founder face and upload it.
  4. create_post × 3 with draft: true. LinkedIn long, one claim. X short, no hashtag salad. IG with line breaks and media.
  5. Reply with post_… IDs. Stop.

What you do not want:

  • A self-written skill from last month that still says publish_now because you were in a hurry once.
  • scheduledAt: 2026-09-16T09:00:00 with no offset, VPS on UTC, brand in IST.
  • A second skill from openclaw-imports/ arguing.
  • The agent searching disk for SOCIAL_BY_IDM_API_KEY after env was empty — our skill should refuse. If it does not, the skill did not load.

Then you open the calendar. If LinkedIn says “unlock explosive growth,” SOUL.md lost to default model tone. Fix the file. Do not “add more cron.”

A Friday analytics session, same discipline:

Isolated session. get_analytics for this week’s live posts only. Write three bullets into MEMORY.md. No captions. No publish. If a number is missing, say missing — do not interpolate.

If Hermes then tries to skill-ize “how we write Friday notes,” that helper is fine. If it tries to skill-ize “how we post the Friday recap to LinkedIn,” pin the vendor skill and say no in SOUL.md.

How should you structure memory so social does not rot?

Three files, three jobs. Mixing them is how a compaction pass deletes “never publish_now.”

FileSocial content that belongsSocial content that does not
SOUL.mdVoice, bans, confirm-before-publish, “do not invent metrics,” workspace TZLast week’s CTR
MEMORY.md”Carousels on Tuesday beat single images in August""Never publish_now”
USER.md”Operator reviews after 21:00 IST, Telegram only from this handle”Brand voice adjectives

Hermes will nudge facts into memory. That is useful when the fact is “the IG account is acc_… and hates stock photos of handshakes.” It is harmful when the fact is “the human said just post it that one time.”

Practical rules I tell operators:

  • Re-read SOUL.md yourself every month. If it still says “friendly, professional, bold” and no examples, it is not a voice file.
  • Paste three posts you shipped and three you killed. Models mimic. Adjectives sludge.
  • After migrate, grep openclaw-imports for a second SOUL. Two souls will fight.
  • Do not store API keys in MEMORY.md. I have seen “helpful” summaries that included sk_live_. Rotate if that happened.
  • Curator cleanup: pin the publisher skill. A vanished skill plus a confident model equals missing timezone offsets.

The learning loop is why Hermes is interesting. It is also why Hermes needs a louder SOUL.md than OpenClaw. OpenClaw will improvise and forget. Hermes will improvise and remember. Remembering a bad week is worse than forgetting it.

Cron plus memory plus posts:write is a system that converges. Make sure it converges on drafts.

Further reading: