The $100/Month Agent Fleet That Works While I Sleep
Richmond works while I sleep.
The basement
There is a doorless basement where Richmond stays. The only ways into the basement are a Tailscale network or a Signal chat. When I wake up, Richmond answers the main questions before I finish my morning tea: Will it rain or hail today? What insights did it uncover during the night? What regulatory changes do I need to be aware of? What does it need from me to proceed?
Richmond is a fleet of agents running on top of Hermes, an open-source agent runtime from Nous Research, installed on a VPS in a data centre far away from home. Richmond is named after the forgotten goth in the basement server room of The IT Crowd, who surfaces at odd intervals only to disappear again.
At three in the morning, it reads through whatever PDFs have arrived in my Zotero library since the last pass, pulls three to five claims from each, and attaches a page number to each direct quote. Half an hour later, a backup script snapshots the whole setup and pushes it to GitHub, just in case the basement floods. By four, the arXiv digest is triaging that night’s preprints on various topics of interest. Once a month, it surfaces interesting research papers on archaeology, which does not require a daily scan. At nine, a briefing with the night’s insights arrives in the same Signal chat together with a custom weather forecast that adapts based on feedback from previous days and, soon, a WiFi-connected weather station in the backyard. On Mondays, a regulatory digest accompanies it all.
Most mornings none of it needs me. A task that succeeds and finds nothing worth my attention sends nothing at all, because an empty report is just noise.
I hand Richmond goals, and, before it can work independently, it must ask clarifying questions and obtain approval of the plan.
The questions are necessary to avoid wasting time on an implementation or research task that misses the point.
All decisions are recorded alongside an open-request list, so everything survives a session refresh or reboot.
The agent maintains the list, in which items are deleted the moment they are done and every open item names its next step.
Context windows in the chat automatically refresh after an hour of inactivity or whenever I type /new in Signal.
A handover skill ensures nothing valuable is lost when the context window is about to overflow.
A separate watchdog plugin warns me before compression kicks in.
Crossfire, an adversarial review loop I built, is callable as a skill, and the agents use it whenever they see fit. I use agents to expand inputs, never to compress output. Nothing another person could see ever leaves the basement before I have verified it. My five-version drafting rule is codified as a skill: no agent is permitted to blurt out the first thing that pops into its artificial neurons.
Richmond monitors other agent runtimes (e.g. Computer, Dots, Duet, GrokBot, Lindy, Muse) and checks Hacker News for ideas worth adopting. After it discovered a regression check on the latter, it implemented it upon my OK. Within moments it found and fixed issues with credentials in the daily sync.
Richmond is also an executive assistant. I type in “Thursday ten Clínica del Sol” and by the time I put the phone down the event exists in my calendar and my partner’s, with the location set to the car park around the corner instead of the hospital entrance. It sets the reminders based on the fact that I need at least one hour to drive there. What is more, it adds an out-of-office blocker in my work calendar with one hour before and after the event. I never entered an address, added a guest, set a reminder time, or even opened a calendar app. Richmond has all that info on file from earlier sessions.
The entire setup was bootstrapped from my OpenCode setup. As of now, Richmond sports 34 skills and 30 active recurring tasks, excluding system health checks. Last week, it crunched through 1.5 billion tokens (94% cache hit rate) across 372 sessions with 1,493 messages from me.
Into the basement
Everything reaches the agent through a Signal chat on my phone, so I do not need to be behind my desk and SSH’d into the VPS. The 30 recurring tasks are separate scripts that can call a model when judgement is needed. Some run on a cron, such as the digests, the reports, the backups, the syncs, and the watchdog. Others are whatever I type in the moment: a one-liner runs now or queues on a background worker when the job will take hours instead of minutes, and either way the answer comes back in the same conversation. I can view the status of jobs or provide more context through a dashboard:
Lessons learned the hard way
Every ten minutes a watchdog sniffs the fleet looking for jobs that stalled or failed. On a transient error or time-out, it retries without my asking or doubles the time-out. Because failure is expected, the default is a silent retry. Recurring failures often hint at misconfigurations, so they may require my attention, though Richmond can often fix those by itself too.
A recent Sunday evening, Richmond failed to respond, and I was unable to SSH into the VPS, so I had to reset the machine from the control panel. CPU usage went through the basement’s ceiling as a retry storm raged: half a dozen long-running tasks that looked stuck had taken the server down. Although the automatic retries with exponential back-off seemed like a good idea at the time, there was no limit on the number of concurrent tasks yet. So now only three background workers run at once. The cap exists because rate limiting makes the inference service appear down, which to the retry logic looks like a good reason to fire off fresh instances of every in-flight task. Additional tasks are now on hold until slots free up.
As more recurring tasks are added, a quarterly task audits each task, because we all have a tendency to add and not to subtract: what each produced, what it cost, and whether anything or anyone read the output. The verdict is one of three words: keep, alter, or kill. Each kill comes with a lesson, which flows into the file with all lesson learned, so the same idea is not reinvented six months later. That file also records every failure with its root cause and resolution. As lessons learned become encoded in skills or rules, the file remains lean.
The price of a good night’s sleep
Richmond runs on a $10/month Netcup VPS with a subscription to Synthetic’s Big Plan at $90/month. That plan comes with an “infinite mode” that offers unlimited tokens against DeepSeek V4.1 Flash. The only downside is that it may take hours rather than minutes, which suits nightly tasks or massive research initiatives. I have a $10/month OpenCode Go subscription as a fallback, but most of the fleet runs on Synthetic’s infinite mode or on GLM-5.3 Flash.
For $100 (or $110 if you include the fallback) per month, which is less than one hour of contract work at typical rates, Richmond does hours of work every day. Most of it I used to skip for lack of time, or grind through anyway. The silent-by-default mode means I do not have to read through pages of reports and can focus on what is relevant. For instance, Richmond scans hundreds of job ads each week and surfaces perhaps one every few weeks worth applying for. That alone pays for itself in time saved, never mind my sanity.
Richmond costs me less than a quarter of what it would at API rates. Because of it, I am always up to date on research and regulations before the swirls above my tea vanish.