DEV Community

Christian Anderson
Christian Anderson

Posted on

AEDINOSAUR: what a declassified naming convention taught me about naming agents

I have a lot of agents running on my homelab, and they were all called things like
writer, coder, sec. Fine. Boring, but fine.

Then I went looking at how a real service names things, and found out that one flat
name is not how it's done at all. You get several, and they do different jobs. That
turned into a small single-file web toy — Cryptonym Desk
— and the interesting parts were not the ones I expected.

Let me start with the honest bit, because it shapes everything after it.

This is not a market gap

Name generators are one of the most crowded categories on the web. I knew that
before I wrote a line. I have ten products on a store with effectively no sales,
and the lesson I keep re-learning is that the bottleneck is distribution, not
ideas
.

So this was built on a stated basis: a cheap, shareable link. Not revenue. Not a
product. Something with one good detail in it that someone might pass on. If you
are building your fifteenth side project this year, it is worth writing that
sentence down before you start, because it changes what you optimise for.

What follows is what actually turned out to be interesting.

Three names, because one name is wrong

The convention I borrowed from is the cryptonym system in declassified US
intelligence files. The shape is:

A two-letter digraph, then a word chosen to mean nothing.

AEDINOSAUR. QKACTIVE. LIENVOY.

The digraph is the part people miss. It isn't decoration — it encodes which
office or country the material belongs to, and the word after it is deliberately
meaningless, because a meaningful codename leaks. If you call an operation
NIGHTFALL you've already told me something about the mood of it. AEDINOSAUR
tells you nothing, which is the whole point.

The digraphs on the page are real ones pulled from declassified material, which is
the detail that makes it feel grounded rather than generated.

Then two more names, because the cryptonym can't do every job:

  • A working alias — a human-looking name, for when the agent has to appear as a person in a log or a commit.
  • A field codenameADJECTIVE NOUN, for traffic that must not carry the alias at all.

Three names, three purposes. That structure is what makes it not-another-generator,
and it came entirely from reading how the real thing works instead of guessing.

The alias is a mashup, and the seams are ugly on purpose

This is the part I'd want to read about, so here it is properly.

The working alias is not picked from a list. It is a graft: two source names are
split at their vowel groups and the front of one is joined to the tail of the other.

Spiegel  +  Kusanagi   ->   Spienagi
Enter fullscreen mode Exit fullscreen mode

The card shows you which two names were cut, because the join is most of the fun.

Now the bit that surprised me. My splitter is crude. It finds vowel groups with a
blunt regex and cuts there, with no understanding of onsets, codas, or where a
syllable legally breaks in English. My first instinct was to fix that — pull in a
proper syllabifier, get the linguistics right.

I tried it. The names got worse.

A correct syllabifier gives you tidy, well-formed seams, and a tidy seam produces a
name that sounds like it was always going to exist: plausible, forgettable, dull. The
crude cut sometimes lands mid-cluster and produces something with a slight wrongness
to it — and that is what makes a name sound like a codename rather than a
colleague. The bad algorithm is the feature.

The only correction I kept is collapsing a tripled letter at the join, so you get
Rippley and not Ripppley. That one is just a typo, not a texture.

There's a general lesson hiding in there: when you're generating something whose
purpose is to feel a certain way, "more correct" and "better" can point in opposite
directions. Measure the output, not the algorithm's respectability.

The records are seeded, and everyone finds this weird

Type the same inputs in twice and you get the same record back. Same cryptonym,
same alias, same codename.

That's deliberate — the inputs plus a salt seed the generator, so a given set of
material always rebuilds the same identity. It means a record is reproducible: you
can hand someone the inputs instead of the output. Variety comes from an explicit
"Issue new record" action, not from mashing the same button and hoping.

Every single person who has used it has hit this and assumed it was broken. I put it
in the README, and I'd now argue that if a design decision reliably surprises users,
the README is not where the explanation belongs — the UI should say it. That's the
next change.

The deployment trap: an artifact is not a web page

The thing also exists as a Claude artifact, and I assumed the artifact HTML and the
GitHub Pages HTML would be the same file. They are not, and the difference cost me
a confusing ten minutes.

The artifact host supplies things I'd taken for granted:

  • the doctype
  • the charset and viewport meta tags
  • a small CSS reset

Copy that file to a static host and it renders subtly wrong — wrong scaling on
mobile, a mystery margin round the edge. The standalone version needed all of the
above added back plus an explicit body { margin: 0 }.

So if you publish a page in both places, don't copy one to the other. Keep the
standalone file as the real one and re-wrap for the artifact, not the reverse.

What it's made of

One index.html. No dependencies, no build step, no framework, no network calls —
nothing you type leaves the browser. Three fonts doing three jobs: Antonio for
display, Share Tech Mono for file numbers, and Public Sans for body text, which is
an actual government typeface and therefore exactly right for the subject.

It's MIT, it's about a screen and a half of JavaScript, and you can read all of it
in one sitting: github.com/casareanderson/cryptonym-desk

Go and issue yourself a record. If the alias it grafts for you is slightly wrong in
a way you like, that's the crude splitter doing its job.

Top comments (0)