Hermes, the messenger, speaks any model

Hermes Agent is Nous Research's agent, and it takes a model from any local runtime as well as a hosted one. Link installs it, keeps it in a sandbox and up to date, and runs it as your agent's harness.

lnk agent start               # your agent: paste your Anthropic key when it asks
lnk agent use --harness hermes          # installs it, then starts it with your settings
lnk agent connect telegram    # text it from your phone

Use a hosted model

Anthropic, OpenAI and OpenRouter work with your own key.

ANTHROPIC_API_KEY=sk-ant-... lnk agent start

Use a local model

Hermes takes any local runtime lnk model list finds, such as Ollama, LM Studio and llama.cpp. It needs a context of 64k tokens, and Troubleshooting shows how to set that for Ollama.

lnk up models
lnk agent start --model qwen3

Move from OpenClaw to Hermes

use hands Hermes your model and files folder, and Link's bridge carries your connections to it, the same Telegram bot, Slack app, Discord bot and Signal account, so it answers the same chats and Hermes itself holds no bot's credential. What you send while it's stopped, starting or moving is answered once it's up, and lnk agent chat send reaches it too.

lnk agent use --harness hermes
lnk agent status
lnk agent use --harness openclaw        # and back

What it carries

use carries your agent's state over ASP: switching away, Hermes's conversations, files, skills and memory are kept in your agent's folder; switching to it, every conversation that went on elsewhere since is taken into Hermes's own sessions, each chat going on in its own.

Its memory, exported

Its MEMORY.md and USER.md go along at each switch away, kept in your agent's folder as Hermes left them, and reach every other harness your agent runs on after.

What others remember

At each start, what your agent remembers elsewhere, Link's notes and what OpenClaw remembered, becomes entries of Hermes's MEMORY.md, each opening (from link) or (from openclaw), after its own and within 1,600 of its 2,200 characters, so its memory tool can still add. Those entries are never exported back.

When it reads them

Hermes puts its memory into a conversation's prompt once, as the conversation starts, and keeps that prompt while it goes on, so its model's cache stays warm. An entry from elsewhere reaches Hermes's model from its next conversation, and the start says so when it writes new ones.

Each chat's thread

Each chat Link's bridge carries is the thread its session names (telegram:42), on Telegram, Slack, Discord and Signal.

Who your agent is

Your agent's persona, owner and standing instructions go into a block of Hermes's SOUL.md at each start, the rest of the file as it was, and its skills are one of Hermes's skills folders.

Switching away

What SOUL.md holds besides, unless it's the one Hermes wrote, and the skills Hermes made, neither bundled with it nor from its hub, come into your agent's folder wherever it has none. Native history and memory files stay in Hermes's home. Hermes's hermes claw migrate remains a separate one-way import that Link does not run.

Its state, over ASP

Asked over ASP, as a switch asks, Hermes gives and takes its conversations through its own SessionDB, run by its own Python: one that comes in becomes a session of hermes acp's, once, so it's listed and goes on. Its SOUL.md, its own skills, its memory and the MCP servers you added to its config.yaml are carried both ways; its settings are Link's.

Imported sessions

Completed tool records and images become native conversation records without executing historical effects. Exact imported updates stay in .hermes/link-imports.json and return unchanged on export, with later native work appended. Divergent native history keeps both branches. Thinking and unsupported content remain archival, named before switching and in the import response.

How it runs

lnk agent start installs the Hermes release Link pins, with its own Python and Node, in ~/Link/Agents/<agent>/Harnesses/hermes, and runs hermes acp there, in the sandbox, behind lnk-hermes serve, its endpoint.

Each message

Link's bridge sends it each message over ACP, with Link's key for this start, each chat a Hermes session of its own. Its terminal starts in your files folder. Security lists what it installs and the ports it uses.

Its scheduled jobs

Link's scheduler runs them: each reaches Hermes as a message from the schedule, and its answer goes to the chat the schedule names.

Files it keeps

What Link writes in the harness's home for it, beside Hermes's own files.

.hermes/.lnk-tools.json

The MCP servers Link added to Hermes's settings, one per tool, in <harness home>, so it removes only its own.

.hermes/link.env

The key of its endpoint for this start, ENDPOINT_KEY, mode 600, which only Link's bridge sends: kept beside Hermes's .env, never in it, so Hermes never reads it.

Which Hermes session is each chat's thread, so a chat goes on where it was after a restart.

More about it

Troubleshooting says what to do when it fails, Decisions why it works this way and Security what it may do. Compare Harnesses sets it beside the other harnesses, and the other lnk agent commands are on the Agents page.

Work on its code

How to build and test lnk-hermes, and how it's released and licensed.

Build and test

It depends on link-plugin from the core, beside it in the public workspace.

cargo fmt --check
cargo clippy --all-targets --locked -- -D warnings
cargo test --locked

Release

Link's release builds lnk-hermes from this folder and ships it as one of Link's plugins, at the core's version, signed with Link's key.

License

MIT or Apache-2.0, at your option.

Docs

  • Security: What lnk-hermes installs and runs, beyond what Link's sandbox guarantees every harness (Link's Agents Security page)
  • Decisions: Why lnk-hermes runs Hermes Agent the way it does
  • Troubleshooting: What to do when Hermes Agent doesn't install, start or remember (Hermes Agent)