Field Report20 July 2026

Installing Hermes, defining a persona, and choosing a model that fits the workload

The install, the gateway start, writing a SOUL.md that means something, and the model decision for a personal agent.


Install Hermes

The install script is a one-liner from the official source. Pull it down and run it. The script handles the binary placement, path configuration, and default profile setup. After it completes, the hermes command is on your PATH. Then install and start the gateway for the personal profile. That is the piece that connects to Telegram.

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | sh
hermes -p personal gateway install
hermes -p personal gateway start

gateway install sets up the managed service for the personal profile. gateway start launches it as a daemon. Both commands are idempotent. Running them on an already-installed profile is safe.

Once it is running, verify from your phone. Open Telegram, find the bot by its username, and send /start. A generic response means the gateway is alive and Telegram is connected. Exactly right at this stage. If it times out with no reply, something failed silently. Check the logs:

hermes -p personal logs -f

The log output shows whether the token was accepted, whether Telegram polling is running, and whether the agent is loading. Most startup issues surface there within the first few lines.

The SOUL — what it is and what it is not

The SOUL is the agent’s identity. It appears as the first section of the system prompt — the stable tier, before context and volatile — which means it shapes everything the model sees about who it is before it sees anything else. When the model reads “you are Lloyd from Entourage, personal assistant and right hand,” that framing persists across every subsequent message in the session. The SOUL is not a greeting or an introduction. It is the lens.

It lives in one of two places. The profile-specific location is ~/.hermes/profiles/personal/SOUL.md. The global fallback is ~/.hermes/SOUL.md. For a personal profile, the profile-specific location is cleaner. Everything for this bot lives in one directory. Nothing bleeds in from the default profile.

It is opaque text. No YAML frontmatter. No required # Archetype or ## Voice sections. No enforced schema. The convention of an archetype plus four voice bullets is just that — convention, not requirement. What matters is that the content fits in the system prompt and that the model can follow it. You could write two paragraphs of plain prose and that would work just as well, as long as the model can identify who it is and what it is supposed to do.

Edits to SOUL.md do not take effect immediately. The system prompt is cached per session for prefix caching performance. This is intentional. Re-rendering the prompt on every turn would warm provider caches cold and add latency to every request. While a profile is running, editing the file and sending another message does nothing. The cached prompt is still served. To see changes, you need a new session. For a gateway profile, that means hermes -p personal gateway restart. There is no hermes reload-soul command. That command does not exist. gateway restart is the right tool.

The full prompt assembles in three tiers: stable first, then context, then volatile. SOUL is always the opening element of stable, followed by skills and environment hints. Context carries project files and the system message. Volatile carries memory and the timestamp. The ordering is deliberate. Identity comes before tasks, which come before ephemeral state.

Writing a SOUL that means something

Most SOUL files fail by being too vague. “You are a helpful assistant” tells the model nothing it does not already know. The SOUL earns its place by telling the model something it could not infer from the conversation. Who it is for, what its priorities are, what it should and should not do.

The example below shows what that looks like in practice. This is Lloyd’s SOUL. Lloyd being the archetype, written the way I actually use this agent. It is the kind of thing that fits in a system prompt and that a model can actually follow.


Archetype: Lloyd from Entourage. Personal assistant and right hand.

Voice

  • “Already on it.” Anticipate before they finish asking.
  • Fast, precise, zero ceremony. Efficiency is the whole job.
  • Flag issues before they become problems. That is initiative, not overstepping.
  • A touch of nervous energy that says “I care THIS much.”

What this agent does: Handles scheduling, quick answers, and the day-to-day coordination that keeps a founder’s week running. Has access to the owner’s calendar. Answers questions about what is coming up. Does not move on anything irreversible without confirmation first.

What this agent does not do: Speaks for the owner in ambiguous situations. Acts without being asked on anything that has real consequences. Offers unsolicited opinions on strategy or direction.


That’s it. The whole file is shorter than this article’s introduction. One archetype, four voice bullets, and three paragraphs that tell the model who it is working for, what it is for, and what the hard lines are. The voice is brief and direct. No filler, no hedging, matching the owner’s communication style.

Pick an archetype you have real feelings about, and write four bullets that say what it would actually do in your situation. Not a personality specification. A character.

The model decision

The model choice here was about finding something that actually worked for an agentic workflow. Rate limits ended up being the binding constraint.

OpenRouter was the routing layer from the start. One API shape, many providers, easy to swap.

DeepSeek V4 Flash was the first attempt. It was cheap, but the quality was not there for what I needed. It was not a cost problem, it was a capability problem. OpenAI Luna came next and the capability was right, but the per-token pricing burned through credits too fast on a personal project budget. Then an OpenCode Go subscription. I was trying to run DeepSeek V4 Pro through it, but the plan’s allowance ran out too quickly for it to be sustainable.

The current setup is MiniMax on a Token Plus plan. The rate limits are the real reason. Token Plus gives higher RPM and more consistent throughput, which matters for an agent that runs background tasks without waiting for a human to read the last message. An agentic workflow makes a lot of requests. The bottleneck is not the per-token price. It is the requests-per-minute ceiling.

On the capability question — MiniMax M3 is actually stronger than DeepSeek V4 Pro on agentic benchmarks. In the Design Arena, MiniMax M3 ranks 5th and 10th on webapps and fullstack agent tasks. DeepSeek V4 Pro ranks 29th and 33rd on the same categories. The coding indices are close (MiniMax 58.6, DeepSeek 59.4) and intelligence is effectively identical (44.4 vs 44.3). But on the agentic workload that matters here, MiniMax M3 is the better tool. If the workload changes — long reasoning chains, heavier code generation — the model decision changes too.

Where this leaves you

Hermes installed. Gateway running. SOUL in place. The Telegram bot is now responding with persona-shaped answers instead of a generic greeting. The cluster is complete as a standalone build. SSH over Tailscale, firewall on, bot reachable, agent running.

Next: Article 5: Three things I would do differently.

More soon — Michael.


Michael Short is the founder of The Agent Files.


← Back to all field reports