Two Ravens, Two Wolves, and a High Seat
How I run a whole GitHub estate from a single command.
Every repository you own is a small, well-kept house. The trouble starts when you own thirty of them.
I have somewhere north of two dozen: infrastructure projects, command-line tools, a couple of web apps, the site you’re reading this on. Each one, on its own, is tidy. Together, they had quietly become a neighborhood nobody was zoning. One repo’s branch protection had drifted out of step with another’s. A tool had shipped a release I never wrote down. A dependency somewhere carried a security advisory I hadn’t seen, and half a dozen repos were still holding merged branches from months back that no one had swept. Nothing was on fire. Everything was just accumulating.
GitHub is excellent at helping you manage a repository. It is not built to help you manage an estate: the whole sprawl of them, as one thing, held to one standard. For that, most of us do what I did for too long: open each repo one at a time and hope we remember what the last one looked like.
I wanted a control room instead. What I built, half as a joke and half because the joke kept working, was a pantheon.
An operating model, borrowed from a one-eyed god
Odin never patrolled the nine realms on foot.
In the myth, the Allfather sits in a high seat called Hliðskjálf, and from it he can see across every realm at once. Each morning he sends out two ravens, Huginn (“thought”) and Muninn (“memory”), to fly the world and bring back everything they’ve seen. At his feet wait two wolves, Geri and Freki, names that both translate to something close to “the ravenous one.” The ravens observe. The wolves act. And the god watches all of it from a single seat, without getting up.
That, it turns out, is a genuinely good architecture for running a lot of repositories. Two instruments that only look, and are therefore safe to let loose anywhere. Two that have teeth, and therefore default to caution. And one seat you actually sit in. I named the tools after the myth, and somewhere in the building I noticed the names had stopped being decoration and started being documentation.
Here’s the pack.
The ravens only look
huginn is thought: the present state of the estate. It’s the raven that flies out and reports back what it sees right now. One command shows me every repository at a glance, which are compliant and which have drifted out of standard. Another audits a single repo against the one convention every project in the estate is measured against. And when I start something new, huginn scaffolds it already compliant: branch protection, license, CI guardrails, the whole checklist, in one command, so a fresh repo is born to spec instead of being dragged up to it later.
muninn is memory: what the estate has actually shipped. Where huginn reports the present, muninn keeps the past, and it’s read-only by design, because memory doesn’t get to rewrite anything. Ask it, and it lays out a reverse-chronological timeline of activity across every repo, or gathers every tag and release into one changelog-of-changelogs. It answers a question no single repository can: across everything I own, what shipped, and when?
The wolves have teeth
geri is the hunter. It ranges across the whole estate looking for what’s dangerous or going stale: open security advisories, dependencies drifting out of date, CI actions left unpinned. One command, and the estate’s entire risk surface arrives in a single view. Geri finds; it doesn’t touch. A hunter that only points is exactly what you want when the thing it’s pointing at is a vulnerability you didn’t know you had.
freki is the reaper, and it’s the only tool in the pack that deletes. Merged branches, abandoned pull requests, old CI artifacts quietly eating your storage quota, dead draft releases: the cruft every active estate grows. And precisely because it has teeth, freki is built to be the most cautious thing in the collection. Every command is a dry run by default: it shows you exactly what it would remove, then stops. Nothing is deleted until you add --apply, and even then it asks first. The most dangerous tool in the pack is the one most reluctant to act. That isn’t timidity; it’s the entire design.
The high seat
grimnir is the seat you sit in. It’s an old byname for Odin himself, and it’s the command center over the other four. One word, grimnir survey, and it sends out the whole pack: huginn’s compliance read, muninn’s recent history, geri’s hunt, freki’s tally of cruft, all synthesized into a single briefing of the entire estate. Another command reaches out to GitHub and pulls down every repository I own, so the estate on my disk matches the estate in the cloud. It’s the seat from which I send out the ravens and command the wolves without standing up.
Why a pantheon beats a pile of scripts
Strip the mythology off and what’s left is five small command-line tools written in Bash, each doing exactly one job. They share one configuration and one standard: a single file that defines what a good repo looks like, plus a list of the ones deliberately exempt from it (a profile page, something personal; presence in the estate doesn’t mean everything has to march in step). The tools that only look can run anywhere without a second thought. The tools with teeth refuse to bite until told twice. And one command sits on top of all of them.
If that sounds less like Norse legend and more like a checklist a security engineer would nod along to — separation of concerns, least privilege, one source of truth, a single control surface — then you’ve found the point. The pantheon is just good operational hygiene wearing a better costume. The myth didn’t shape the engineering; it described engineering I’d have wanted anyway, and handed me names I could actually remember at the terminal.
The point under the costume
I wrote a while back about giving a single over-eager AI agent a seatbelt: guardrails on one agent’s pull requests so its enthusiasm can’t get you hurt. This is the altitude directly above that one. Not one agent on one pull request, but the whole estate, kept to one standard, watched from one seat. The two ideas are the same instinct at two scales: build the instruments that keep things clean, and make the dangerous operations safe by default.
And that instinct is exactly what I bring to the people I work with. An estate (of repositories, of servers, of cloud resources) never stays clean because everyone’s being careful. It stays clean because someone built the tools that keep it clean and the guardrails that make the risky moves safe to run. Whether the thing in front of me is a mythology of Bash scripts or a fleet of Terraform-managed infrastructure, the move is the same: sit in the high seat, send out something to see, and keep the things with teeth on a leash.
The neighborhood’s zoned now. The ravens fly out at dawn and tell me what changed overnight; the wolves stay leashed until I say the word; and I watch all of it from a single seat, without opening thirty repos to do it. Two to see, two to act, one to watch.
Most days, I barely have to leave the chair.