Hermes Agent for Coding? Even Hermes Hands the Repo to Claude Code
A team I work with codes through a shared Hermes instance in Slack. Hermes' own source explains why that hurts: its coding posture and verify gate stay off on chat surfaces, and it ships skills that hand code to Claude Code, Codex and OpenCode.
Can Hermes Agent write code? Yes. Should your team write code through it? No. And the strongest argument against it isn’t mine. It’s in Hermes’ own source.
Hermes ships a coding posture with a senior-engineer brief, and its authors deliberately keep it off when the agent talks to you through Slack, Telegram or Discord. It also ships skills, installed by default, whose one-line description reads “Delegate coding to Claude Code CLI.” The people who built the harness drew the line themselves. A team I work with crossed it anyway, and what happened next is a harness lesson worth writing down.
A team that codes through a shared Hermes
A team I work with ran its agentic flow through Hermes. One instance, on one person’s laptop, on that person’s API key, up around the clock. The squad prompted it in a shared Slack channel, and drafts and diffs came out the other end. Soon nobody could read the thread.
None of that is the team’s fault. They got further than most teams I talk to: skills in the repo, one AGENTS.md, a judge that scores each PRD against a rubric before a human reads it, a board the agents move on their own. That part is good engineering, and it travels to any harness. The harness is the part that will hurt them.
They are already moving the instance off the laptop and into a pod on the company’s Kubernetes cluster. That fixes the key and the laptop. It doesn’t fix the surface.
Can Hermes Agent code? Its own source says where
Three things in the code settle it.
The coding posture. In agent/coding_context.py, Hermes decides once per session whether it is coding. When it is, it loads a brief that opens with “You are a coding agent pairing with the user inside their codebase. Operate like a careful senior engineer.” The brief tells the model to read before it edits, to change files through tools instead of pasting code into the chat, and to “run the relevant tests/linter/build and confirm they pass before claiming the work is done.” It’s a good brief. It loads on the CLI, the TUI, the desktop app and ACP editors, and only when the working directory looks like a code project. The comment above that list of surfaces says it plainly: “messaging platforms are deliberately absent.” The default, agent.coding_context: auto, follows the rule. You can force it with on. The authors chose not to make that the default.
The verify gate. Hermes can also push the agent to verify after it edits code without fresh passing evidence. The setting is agent.verify_on_stop, and it ships off. Turn it on and you pick between true, which runs everywhere, and auto, the surface-aware mode: on for the CLI, TUI and desktop, off on Slack, Telegram, Discord and every other chat platform, “where the verification summary would reach a human as chat noise.” Read that line with a team channel in mind. In a chat, the test run is noise. In a coding session, it’s the whole point.
The handoff. Under skills/autonomous-ai-agents/, installed by default, Hermes bundles skills for three coding harnesses. Their descriptions: “Delegate coding to Claude Code CLI (features, PRs).” “Delegate coding to OpenAI Codex CLI (features, PRs).” “Delegate coding to OpenCode CLI (features, PR review).” The Claude Code skill prefers print mode, a one-shot claude -p run in the project directory with an allowlist of tools and a turn cap, and it calls the no-prompts mode acceptable “only in a throwaway worktree or isolated container.” For OpenAI models there is an opt-in runtime that goes further: Codex runs the tool loop and the sandbox, and Hermes “becomes the shell around it.”
Same Hermes, two surfaces
| At v0.21.5 | CLI, TUI, desktop, ACP editor | Slack, Telegram, Discord |
|---|---|---|
| Coding posture (auto) | On in a code workspace | Off by design |
| Verify gate (opt-in, auto mode) | On | Off: the summary would be chat noise |
| Working directory | hermes -w gives each session its own git worktree | One directory, set by terminal.cwd in config |
| Who reads the output | The person at the keyboard | A channel |
The harness is the job description
Every harness has four parts: the loop, the tools, the context and the controls. A coding harness tunes all four for one job: a repo, a diff, a test run, a person approving the merge. An assistant harness tunes them for a different job: a schedule, a channel, a memory that lasts for weeks. Hermes is mostly the second kind. The coding posture is its authors carving a bit of the first kind out of it, then fencing it off the chat surfaces.
So when a squad codes through Slack, it gets the assistant’s context and controls applied to a coding job. No senior-engineer brief. No verify gate. One working directory. One person’s key. Nothing on that list is a model problem. Plug in a better model and it inherits every item. That’s the whole case for harness engineering: the model is a commodity, and the harness decides what job the agent can actually do.
The unreadable thread was the spec
When the thread got too long to read, someone on the team raised the obvious fix: make the agent less verbose. I argued the opposite. The thread was long because it was holding the context. Every correction, every “no, the other endpoint”, every decision about the PRD was in there. That’s spec, living in the one place nobody reads twice.
Tuning the agent to talk less would have made it quieter and more wrong. The fix is upstream. The context goes into the PRD, the ticket and the repo before the agent starts. When the agent gets something wrong, the correction goes on the ticket, where it can turn into a lesson in the repo, not into one more reply in a channel. That’s the job a spec does, and a chat surface quietly takes it away.
I said as much in a review with the team: chatting with Hermes all day doesn’t, by itself, make anyone ship faster or better. It depends on what the chatting replaces.
Kubernetes fixes the key, not the surface
The laptop setup has the governance problems you’d expect, and I flagged them. The token bill lands on one person. The agent runs outside the company’s perimeter, with no sandbox and no network isolation. And when that person goes on vacation, the squad’s agent goes with them.
Moving Hermes into a pod fixes all three. The company pays, the pod is isolated, the agent survives a vacation. It’s the right move, and it changes nothing in the table above. Slack in, code out, coding posture off. The governance fix and the harness fix are two different fixes, and only one of them is in flight.
Hermes dispatches, a coding harness builds
Keep Hermes. Give it the job it was built for, the outer loop, and let a coding harness run the inner one.
Outer loop, inner loop
Input
A message in Slack, a voice note on Telegram, a cron job
- outer loopHermes
Reads the ask, pulls context through MCP, and writes the task down where the team can see it: a ticket, a spec file, an issue.
- inner loopCoding harness
Claude Code, Codex, OpenCode or pi, in a fresh worktree or a container, reading the repo's AGENTS.md. Hermes' bundled skills already make this handoff.
- gateChecks
Tests, lint and the build run in CI, not as a summary pasted into a chat.
- humanReview
A person reads the diff in the merge request and decides.
Output
The channel gets a link to the merge request, not the diff.
My own split works this way. Hermes runs on my VPS. I send it a voice note on Telegram and it opens an issue on my agent board through MCP. Code gets written in Claude Code, OpenCode or pi, in a repo, with me reading the diff. I don’t hand Hermes a feature branch.
Make Hermes hand off instead of edit
- 01
Ask for a delegated run in its own worktree, and a link back.
Hermes keeps the conversation and the memory. The coding harness gets the repo, the tests and its own permissions. The channel gets one line instead of a diff.
Type this
Use the claude-code skill: in a new git worktree of the billing repo, run it in print mode on ticket BILL-142, run the tests, open a merge request, and reply here with the link.
If your team already codes through Hermes
- Required:Keep what travelsSkills in the repo, one AGENTS.md, the repo as the source of truth, the judge on the PRD. Hermes, Claude Code, Codex and OpenCode all read AGENTS.md, so none of it is lost.
- Required:Move the spec out of the threadContext goes into the PRD and the ticket before the run. Corrections go on the ticket, not in the channel.
- Required:Put code on a coding surfaceA coding harness in a worktree or a container. Not the messaging gateway.
- Required:Turn Hermes into the dispatcherIts bundled claude-code, codex and opencode skills are the handoff. Hermes reports back with a link.
- Required:Company key, isolated machineThe pod fixes the bill, the perimeter and the vacation problem. Do it, and don't mistake it for the harness fix.
- Required:Gate the merge, not the chatTests in CI and a person on the merge request. The chat only hears the result.
Hermes Agent for coding, quick answers
Can Hermes Agent write code?
Yes. It edits files, runs a shell, and loads a coding posture with a senior-engineer brief on the CLI, TUI, desktop app and ACP editors, plus an opt-in gate that makes it verify its edits. By design, it keeps that posture off on messaging surfaces such as Slack and Telegram.
Is Hermes Agent a coding agent?
Not mainly. Hermes is a self-hosted agent you leave running, with cron jobs, messaging gateways and memory across sessions. It has a coding mode for interactive surfaces and ships skills that delegate coding to Claude Code, Codex and OpenCode.
Should I use Hermes Agent or Claude Code for coding?
Claude Code, or another coding harness such as Codex, OpenCode or pi. Use Hermes for the work around the code: reading channels, writing the task down, dispatching the run and reporting back.
Can Hermes Agent run Claude Code?
Yes. The bundled claude-code skill drives the Claude Code CLI and prefers a one-shot print-mode run (claude -p) in the project directory. There are matching skills for Codex and OpenCode, plus an opt-in Codex app-server runtime for OpenAI models.
How do I make Hermes safer if it touches code?
Run it on the CLI with hermes -w so each session gets its own git worktree, turn on checkpoints with --checkpoints, point the terminal at a container backend instead of the default local one, and add a pre_tool_call shell hook: exit code 2 blocks the call.
The newsletter
Don’t Code, Specify. A weekly dispatch from where AI agents meet real production. No hype, just what shipped and what broke.
Subscribe on Substack (opens in a new tab)