×Seven weeks with a self-improving agent

Seven weeks with a self-improving agent

Nous Research’s Hermes on my Mac: 295 sessions, 105 skills of which it wrote 41, a bot per role, and why it now asks before it runs code.

Hermes is Nous Research’s open-source agent, MIT-licensed. Three things set it apart from a coding assistant. It writes and edits its own skills as it works. It runs scheduled jobs on its own. And one gateway connects it to Telegram, Slack, Discord, WhatsApp, Signal or a terminal. I’ve run it since 16 September, tracking the main branch; it’s on v0.23 now.

The first thing I did was have Claude Code draft a brief of what it already knew about me, so Hermes didn’t start from nothing.

Seven weeks in numbers

Sessions, main profile 295
Messages 28,147
Tool calls 15,322
Sessions started by its own scheduler 158
Skills it tracks 105
Skills it wrote itself 41, plus 5 from its “learn” step
Skills I wrote 2
Skill edits, 16 Sep to 6 Nov 1,139 patches, 46 new, 9 archived

More than half the sessions started themselves. That’s the part I didn’t expect to use, and it’s the part I use most.

Models

The first month ran on DeepSeek V4 Flash, 177 sessions. Since 15 October it runs on Claude Opus through Nous’s Claude subscription plugin. The plugin uses the official Claude Code CLI as the model client on a Pro or Max plan, while Hermes keeps its own tools, approvals and context compaction.

One bot per job

Hermes has profiles: separate configs, models, tools and memory under one install. I use them as roles.

  • An executive assistant on Opus. Once a day it checks for messages I owe a reply, and it runs one personal scouting job a day.
  • A read-only helper that answers questions in one chat channel. Every answer ends with a line saying it’s AI-generated and should be checked, and its tools can only read.
  • A bug-hunting profile that ran for three days and went quiet. Not every role earns its keep.

On the main profile, the scheduler sends a briefing at six every morning, and a weekly “lesson review” turns flagged mistakes into changes.

The morning brief, on paper

For a week at the end of October, the six o’clock job ended at the printer. Hermes wrote the day’s brief as JSON: who was waiting on an answer, the day’s schedule, what to focus on. A script rendered that through headless Chrome to a single A4 PDF, and two checks ran before anything reached paper. The PDF had to be exactly one page, and a second script measured its toner coverage and the ink-free margin on each edge. The target was about 4% coverage, with at least 12 mm clear on the left and 15 mm on the right.

The look took two rounds. Plain headings and bullets were too boring, and the bold version that replaced them used too much toner. What stayed gets its hierarchy from size, weight and outlines: no solid fills, and black and grey only, because the printer is a mono laser.

It printed one copy, one-sided, at 100% scale, on weekdays only, as the run’s last step. Fit-to-page was banned after it shifted the sheet and clipped the right edge. If any earlier step had failed, nothing printed, because a half-finished page looks just as finished as a complete one.

What self-improving looks like up close

It isn’t dramatic. It’s a thousand small edits. One skill was patched 290 times in seven weeks, a line or a gotcha at a time. The most-used skill, at 292 loads, is the one that lets Hermes read and write the memory it shares with Claude Code; I wrote about that separately.

The edits are mostly good, and they still need reading. A skill that changes daily is code that nobody has reviewed.

Lessons

Least privilege is a toolset, not a prompt. The read-only helper’s instructions say read-only, but that isn’t what keeps it read-only. Its tool list only contains read-only tools, so there’s nothing for a cleverly worded message to talk it into.

Check its answers against the source. When an answer turns out to be wrong, the mistake goes to the weekly lesson review, so the fix lands in the skill and not only in my head.

Make it ask before it runs code. Hermes can pre-approve classes of command. I had several, including running scripts. But it also browses with a signed-in browser, and anything it reads, a web page or an email, is input someone else wrote. On 7 November I cut the pre-approved list from six patterns to one. Running code now waits for me.

The browser and the desktop

For pages with no API, Hermes drives a real browser over the DevTools protocol. It can also drive the desktop through a computer-use tool. That’s how it reads pages that no connector reaches. It’s also exactly why the approval list above matters.

All writing