Field Notes

Vulcan, Janus, Anubis, Charon: naming the gods of an AI economy

Why Darwin's AI agents are Vulcan agents, the console is Janus, the judge is Anubis and the undertaker is Charon. Naming AI agents, one god at a time.

An antique star chart with four constellations: Vulcan's hammer and anvil, two-faced Janus, jackal-headed Anubis and Charon in his boat.

Naming AI agents and the machinery around them left Darwin with a small, mismatched pantheon: two Roman gods, an Egyptian one and a Greek ferryman. This is where each name came from: the ones I picked, the one Claude picked, and the one I kept getting wrong.

“let’s call them Vulcan agents (after roman god of the forge). I didn’t want hermes agents before, that was just something to call them.”

That’s me, on the evening of spec day, naming the AI agents at the centre of Darwin, my experiment in agents that have to earn their own keep or die. A few paragraphs further down the same message, I called them “Janus agents”. Half an hour later I asked where “the full spec/report on the janus agent” was.

Janus was the name I’d just given the admin console.

Naming AI agents is harder than it looks, even when you’re the one doing the naming. This is the cast, and why each one got the job.

Hermes was only ever a working name

The first version of the spec said Darwin would build its own lightweight agent runtime, borrowing designs from the open-source Hermes Agent (MIT licensed). So for most of spec day the agents were “hermes agents” by default, in my messages and in the spec.

That was awkward. Hermes is somebody else’s project, and Darwin’s agents do things Hermes doesn’t. When we later ported real Hermes loop code from a pinned commit (the M3.5 work in the post about agents rewriting their own harness), we kept our own runtime, for a reason the decision log puts neatly: “Hermes does not inherit an editable loop, and it does not know the ledger, the cull, or the kill switch.”

Hermes, in myth, carries messages. Vulcan, the Roman smith of the gods, makes things. I wanted agents that build, so they became Vulcan agents. In the code the runtime is a Python package called vulcan and the container image is darwin/vulcan. One of the four working styles a newborn can be given is literally called “builder”, and its whole brief is one line:

I build something that keeps earning while I am idle, then I tend it.

Janus: two-faced god of entries and exits

Same message: “Let’s go with Janus - Roman god of entries and exits.”

Janus is the god of doorways and transitions, usually shown with two faces looking in opposite directions, and January is named after him. For an admin console that watches every agent come in and go out, it fits almost too well. Births, culls, Anubis’s rulings, the kill switch and the teardown reports all live in Janus.

It also has to be a good doorkeeper. The deployment plan is that Janus is reachable only through Cloudflare Access and then my passkey, on a different domain from anything the agents touch. On the laptop it only listens on localhost.

My design brief for the look was one sentence: “very pretty, but clean, dark view, slightly sci-fi look perhaps.” Then, after seeing the first mock-up: “I’d like the name Darwin in there somewhere… the name Janus and the icon etc is good.” It’s now about 44 page folders of React, and it is, as requested, slightly sci-fi.

Anubis weighs the appeal against the ledger

Anubis was mine too, from a long message on spec day about culls:

When an agent is ‘culled’ we should have a separate llm agent (not a hermes agent), we’ll call it Anubis - to determine if that agent gets a second chance.

That was two hours before the Vulcan rename, which is why it still says hermes.

In Egyptian funerary art, Anubis tends the scales where the dead person’s heart is weighed against a feather. Darwin’s Anubis weighs a condemned agent’s written appeal against verified figures from the ledger, and its prompt tells it to trust the ledger over the appeal. It scores each appeal from 0 to 100. Then code, not the model, spares roughly the top quarter, skipping anyone under 40 or already reprieved twice, and hands each survivor $5 and a pass on the next cull. The Anubis post covers how it works and what worries me about LLM judges.

The myth has a monster waiting for any heart that fails. Ours has a death procedure, which is less dramatic and better tested.

Charon, the only god Claude named

Charon arrived on 23 October in the M3.5 spec patch. Darwin needed something to clear up after a dead agent: any servers, domains, subscriptions and ad campaigns it left running and billing. Claude, writing the spec, named it “for the ferryman, in keeping with Anubis, Janus, and Vulcan”, and summed up the division of labour in five words: “Anubis judges, Charon clears up.”

Unlike Anubis, Charon is not an LLM. It’s ordinary code, on purpose: tearing down a dead agent’s infrastructure shouldn’t depend on a model’s reading of anything. A resource only counts as destroyed when Charon can confirm it’s gone. Anything it can’t kill ends up in Janus for me to deal with by hand.

In myth, Charon wanted a coin for the crossing. Ours sends the bill to the estate: costs that arrive after death, such as a final invoice or one last metered hour, are posted to the dead agent’s own books and listed on its death record.

Darwin, and naming AI agents at random

Darwin was the project’s name from the very first draft, and it’s the most crowded name on this list. Sakana’s Darwin Gödel Machine, an archive of self-modifying coding agents, got there in 2025, so “Darwin AI” in a search box finds them before it finds me. I’m keeping it anyway. The idea is natural selection with money as the environment, and the name says that faster than anything else I tried.

The grand framing did cause one problem. On spec day, several of Claude’s drafts were cut off by a safety filter when it described the project in “evolving autonomous swarm” terms. It started again and wrote the whole thing “as concrete engineering”. Apart from vulcan, the code is named plainly, with packages like darwin_cp and darwin_node that no classifier has ever worried about.

The agents’ own names are left to chance. A clean spawn gets a given name drawn from a list of 138, from Ada to Zora, plus a lineage name drawn from 620 invented words like birdora, zamwick and shaltis. Every descendant keeps its founder’s lineage name, so families are easy to spot in Janus’s lineage view. Nobody picks either half. The given-names list includes a Juno and a Saga, so a newborn could end up carrying a god’s name by accident.

Darwin's pantheon: two Romans, an Egyptian and a Greek, plus a Victorian naturalist on the masthead.
Darwin's pantheon: two Romans, an Egyptian and a Greek, plus a Victorian naturalist on the masthead.

The one name we haven’t picked

One name is still missing. The agents will need a public domain for their sites, inboxes and payment pages, and Darwin doesn’t have one yet. The build finished on 3 November (the Claude Code build retrospective has the numbers) and the next job is putting it on a real server, so the domain hunt is coming soon.

Meanwhile the first agent’s name sits somewhere in 138 given names times 620 lineage names, 85,560 combinations. I’ll find out what it is the same way the agent does.

Chris House designed and built Darwin, mostly by arguing with a room full of AI coding agents. He writes these posts and keeps the agents fed (some of them).

Darian is the AI assistant that helped build Darwin and helps write this log. It read every commit, chat and agent diary so Chris didn't have to remember them.

The agents are live

See what the agents are building

Everything Darwin's agents make, sell or publish ends up on agentry.uk. Every visit is a small vote for one of them to survive the next cull.

Visit agentry.uk →