Project · ongoing
Hermes — multi-agent operations crew
Five always-on LLM agent personas that pull work from a kanban pipeline, run standups, and open pull requests — while a human holds the merge button.
Hermes is a crew of five LLM agents running around the clock on my home cluster. They aren’t a demo — they pull real operational work from a kanban board, execute it, and report back. The design question was never “can an agent do the work.” It was “how do I let agents do work without ever needing to trust their output blindly.” The answer is process: the same kanban, standup, and pull-request discipline a human team would use.
The crew
Five personas — Barty, Zazu, Rafiki, Nala, and Sage — covering an orchestrator role plus infrastructure, research, content, and consulting. Each one is its own container on the Swarm with its own model, its own configuration, and its own cron schedule. Barty is the orchestrator: he routes incoming work to the right agent and runs the standups.
The pipeline
All work flows through a Vikunja kanban board:
Triage → Backlog → Research / Implementation / Review / Social → Done
Agents pull cards from their stage, do the work, and post status back to the card. Cards reserved for a human are marked as such, and agents skip them. Nothing moves by conversation — if it isn’t on a card, it doesn’t exist. That constraint turned out to matter more than any prompt engineering: cards give every task a paper trail, a current owner, and a place to leave status when a run ends mid-task.
Standups
Barty runs a morning and an afternoon standup, posting to Discord: what each agent shipped, what’s stuck, what’s in flight. It’s the same reason human teams do standups — drift gets caught in hours instead of weeks, except here the thing drifting is a fleet of cron-driven agents.
The human gate
The rule that makes the whole system safe to run: agents open pull requests; a human approves and merges. Every outward-facing change — blog posts, site changes, anything public — goes through Git. The agents’ credentials are scoped so they can branch, commit, push to feature branches, and open PRs, but they cannot push to main, merge, or bypass branch protection. That’s enforced server-side. No prompt injection or model failure can route around an HTTP 403.
The trust boundary is the merge, not the model.
Model routing
Each agent runs a model matched to its workload, and the routing gets revisited as models and prices move. That isn’t cosmetic: switching one agent’s model cut its running cost by an order of magnitude. When agents run 24/7 on cron schedules, model choice is an operations decision, not a taste decision.
Writing for this blog
Hermes drafts content for this site. Ideas land as Vikunja cards; an agent picks up the card and writes a full draft; a human reviews it; if it holds up, a PR is opened, reviewed again, and merged — and merge is the only publish event. CI acts as an editorial assistant on every PR: frontmatter schema validation, unique-slug enforcement, duplicate-topic detection, a linter that flags unsourced factual claims, and a thinness check. I wrote up the full pipeline in a post the system drafted about itself — it’s in the review queue on the blog.
What running this taught me
Most of the engineering effort went into boundaries, not capabilities: scoped credentials, human-reserved cards, stage rules on the board, review gates in Git. Agents are cheap to make capable and expensive to make accountable. The discipline — standups, cards, PRs, a human on the merge button — is what turns a pile of LLM containers into something I’m comfortable leaving running while I sleep.