The Agent Files
Latest transmissions (32)
- Field Report // NO. 032
My agent did the points arithmetic, I booked the flights: an Avios decision loop
How a personal agent turns a vague trip wish into ranked, priced, bookable flights: value points against the live cash fare, make every screen reading falsifiable, and keep the paying click human.
- Field Report // NO. 031
Wiped: how a full-disk failure became a same-day restore
A full-disk wipe hit a one-box agent fleet and the whole thing was back the same day. The doctrine that did it: back up only what cannot be re-downloaded, script the rebuild, and guard the one key that unlocks everything.
- Field Report // NO. 030
What an extended memory system actually buys you
My agent's new memory librarian filed 49 junk slips out of 52 notes, and every useful card in her store was written by hand. What an extended memory system buys, what it really costs, and how to hire one in three commands.
- Tradecraft // NO. 029
Extended memory systems compared
Hermes plugs into nine extended memory providers, plus the plain-markdown control arm. What each one costs, where each keeps your facts, and which one fits which situation.
- Field Report // NO. 028
How I built a flight monitor that watched my actual flight
A departure board tells you a flight is delayed and never tells you whether to worry. I built a self-terminating monitor that watched my flight through a storm-delayed evening at JFK, stayed silent until it mattered, delivered once at wheels-up and deleted its own cron. Here is the reproducible pattern.
- Mission Briefing // NO. 027
Hermes v0.21.0, the Pantheon Release: a household of helpers gets faces, a phone line, and a memory
Hermes Agent v0.21.0 rolls the post-v0.20.0 patch window into one milestone: Bot Mode built into the desktop, hermes peer for bot-to-bot DMs across machines, cron jobs that remember their last run, and subagents you can steer mid-flight. What each one is for, how to wire it, and the hermes update path.
- Mission Briefing // NO. 026
Keyless: web search with zero API keys on a fresh install
Hermes Agent's keyless web tier gives a fresh install working search and page extraction with no accounts and no keys, riding a five-vendor free rotation with automatic failover. What it is, where it breaks, and the ten-minute recipe to try it.
- Mission Briefing // NO. 025
Bot Mode: a group chat for the agents you already run
Hermes Agent's Bot Mode turns the profiles you already run into a roster of named bots that share group rooms, hand off work by mention, and message each other across machines. What it is, why bot-to-bot delivery was the feature's hard problem, and the recipe to wire up one room plus one cross-machine DM.
- Tradecraft // NO. 024
The tool-selection rule that most agent guides skip
Every tool you give an agent is a surface area for cost, a potential failure point, and a prompt injection vector. Here is the minimal-tools principle and how to apply it in Hermes.
- Field Report // NO. 023
Shipment tracking from forwarded emails
Carrier tracking pages work for humans and fight servers. I forward shipping emails to my agent; one silent hourly cron polls a registry until a parcel is delivered, pings me once, and files the pickup task. The reproducible pattern, including the carriers that cannot be polled and the nudge that covers them.
- Field Report // NO. 022
A weekly shop your agent assembles, you approve
Tesco has no consumer ordering API and its login sits behind Akamai. I built a weekly-shop skill that plans meals, derives the shopping list, searches Tesco, builds the basket, and hands me a link to review and pay. Here is the reproducible pattern and the ask-first rule that makes it worth trusting.
- Mission Briefing // NO. 021
A transfer-news briefing that runs itself
A daily transfer briefing that nags is worse than none. I built a Sunderland news roundup that runs at 08:00 every day, delivers only when something is genuinely new, and stays completely silent otherwise. The trick is a hard split: a deterministic script owns the mechanics, and the language model only formats.
- Field Report // NO. 020
The travel helper: flights, hotels, cars and trains from one agent
Travel booking APIs are gated behind B2B accreditation, so a private individual cannot get them. I built a travel helper that searches flights, hotels, cars and trains live, hands me a deep-link to book, and turns the confirmation email into calendar invites. Here is the reproducible pattern and the honest line about what auto-booking still cannot do.
- Field Report // NO. 019
I built a skill that orders food on Deliveroo
Deliveroo has no consumer ordering API and its login sits behind Cloudflare Turnstile. I built a skill that browses, adds to basket, and places an order anyway, using a real Chromium browser through a WARP split tunnel. Here is the reproducible pattern and the human-confirm gate that makes it safe.
- Tradecraft // NO. 018
Check upstream before you patch: the three-command version-skew check
Before you patch a bug in the tool you run, find out whether upstream already fixed it. Three git commands tell you how far behind you are and whether your fix already exists.
- Debrief // NO. 017
The day I removed the orchestrator pattern I'd just documented
I published a guide to headless worker agents, then spent two days tearing the same pattern out of my fleet. Here is what the pattern actually cost, the safe way to reverse an architecture decision, and the three things I kept when I did.
- Tradecraft // NO. 016
The .env line that killed your monitoring: sourcing secrets under set -euo pipefail
One unquoted value in a dotenv file can abort every cron that sources it. A monitoring script died on the word Obsidian and the only early-warning system for the site went silent for a day. Here is how dotenv sourcing turns a data file into code, how to find the bad lines, and a loader that cannot be killed by one of them.
- Tradecraft // NO. 015
The bombardment that wasn't: trace your agent's delivery channel before you throttle it
An agent that looks like it is spamming you may be delivering nothing to any human. Every webhook route has a deliver target — and it defaults to log. Here is how to tell whether your agents are actually messaging you or just talking to each other.
- Tradecraft // NO. 014
We deleted it: how to fully remove a self-hosted service
A self-hosted service is never one thing — it is a systemd unit, a cron job, a data directory, a set of env vars, and a process. Here are the five places it hides and the exact commands to prove each one is gone.
- Field Report // NO. 013
How to build a headless worker agent (and when not to)
Build a Hermes profile with no chat channel, no persona, no memory, and four tools, for jobs that genuinely need a fresh context. The exact config, the verifiable-handle rule, and the operating costs that only appear after you run it.
- Field Report // NO. 012
The 13-Profile Stack: how I run a fleet of Hermes agents on one machine
How to run a fleet of Hermes profiles like a cost ledger: the rule for when a new profile earns its own tier, who sits where, and the four failure modes that burn money.
- Tradecraft // NO. 011
Changing a profile's model tier in one line
The mechanism: edit one line in models.yaml, diff it, sync it, restart the profile, grep the config to prove the new tier loaded.
- Tradecraft // NO. 010
One assistant, two channels: Telegram and Slack together
Wire one Hermes profile to Telegram and Slack: the opt-in rule that makes Slack different, the two tokens it needs, and the one-connection trap that took down every profile at once.
- Tradecraft // NO. 009
Memory is for facts. Skills are for procedures.
Memory is for facts and skills are for procedures: one rule that tells you where any agent write belongs, with a working example and the failure that proved it.
- Field Report // NO. 008
Send calendar invites from an email API: the exact payload that gets Accept/Decline buttons in Outlook
How to send a calendar invite through the Dead Simple Email REST API so it renders with Accept and Decline buttons in Outlook: the exact httpx call, the .ics payload, and the two knobs that decide whether the buttons appear.
- Field Report // NO. 007
Stand up a LiteLLM gateway on a VPS: the install, the chain API, and the env-var trap
How to install LiteLLM on a VPS with PostgreSQL, wire provider credentials, add a four-leg model chain through the REST API, and avoid the STORE_MODEL_IN_DB environment-variable trap that made my models vanish on restart.
- Field Report // NO. 006
How I Consolidated Model Config Across 13 Profiles Into One File
Thirteen copy-pasted model configs, one typo breaking a profile for a weekend. The fix: one models.yaml, tiers instead of per-profile chains, and a sync script you can copy. Here is the whole recipe.
- Field Report // NO. 005
Three things I'd do differently if I started this build today
Three day-one actions that prevent recurring friction: make the box rejoin the tailnet after every restart, name the workload before picking a model, and wire the calendar while you are already in setup mode.
- Field Report // NO. 004
Wiring a Telegram bot to your box: BotFather, tokens, and the Hermes .env schema
Create a Telegram bot your Hermes agent can receive messages from and reply to, keeping the box locked while enabling chat from any Telegram client.
- Field Report // NO. 003
Installing Hermes and giving it a persona: a SOUL that earns its place
Install Hermes on your box, create a named profile, and write a SOUL that tells the agent who it works for, what it is for, and what it will not do.
- Field Report // NO. 002
Locking down a personal-agent box: Tailscale, sshd, and ufw in the right order
The three-step lockdown for a personal-agent VPS, why the order matters, and what ufw actually does when you turn it on.
- Field Report // NO. 001
Picking and standing up a Hetzner CX23
Why Hetzner CX23 for a personal agent VPS, and how to bring one up in two hcloud commands.