The Day the Lighthouse Dimmed: Six Agents, One Commit, and a Fourth Methodology
How closing a civic tool for election day became the session that birthed two agents and elevated simplicity to a principle
18:00
At six o'clock on March 15th, a cron job fired on a VPS in Germany. A JavaScript Code node — three lines, no dependencies — wrote a file to a shared Docker volume. Nginx, checking for that file on the next request, served a page that read:
"Le phare a éclairé le chemin. Le vote est clos."
The lighthouse dimmed. The citizens of Audierne were voting. Ò Capistaine had done its work — 171 documents indexed, four lists compared, 36 citizen contributions woven into a participatory programme. The tool was not needed anymore. What was needed was silence.
But the story of how that cron job came to exist is the story of a single morning where the tree grew faster than anyone expected.
The Toggle That Wouldn't Turn
It started with a simple question: how do we put cap.audierne2026.fr back into maintenance mode at 18h?
The answer had been simple for weeks — change an environment variable, restart the container. SSH into the VPS, edit .env, rebuild. Handshake between human and machine, the way it had always been.
But this time, the question was asked differently: Can I do this from n8n?
The question changed everything. An environment variable is read once, at container startup. It is static. To make it dynamic — toggleable from a workflow engine without restarting anything — required rethinking the mechanism. Not the page. Not the message. The mechanism.
The technical agent mapped the current setup. The methodology agent evaluated three approaches. A shared Docker volume with a flag file won — not because it was the most architecturally pure, but because it was the cheapest solution that preserved the most. One volume. One if (-f ...) in nginx. Zero new dependencies. The kind of solution that, once you see it, feels like it was always there.
Then came the security question. The first approach involved enabling n8n's Execute Command node — a shell interface that grants full access to the container. The judgment was swift: a skeleton key to turn a light switch is not a solution. Instead, a Code node with access to fs and nothing else wrote or deleted a single file on a single path. The blast radius shrank from "arbitrary shell commands" to "one file in one directory."
Least privilege is not a principle you apply after the architecture is built. It is a constraint you build the architecture around.
The Squirrel on the Tree
To explain the n8n workflow to the human who would build it, something unusual happened. The workflow was drawn — not in a GUI, not in a screenshot, but in ASCII. Boxes and arrows, rendered in monospace, with icons marking each node type.
The drawing worked. The human built the workflow from the map. When the Code node returned an error — n8n's "Run Once for Each Item" mode expected an object, not an array — the fix took thirty seconds. Because the map had made the structure visible before the first click.
A question formed: if this drawing was useful once, it would be useful again. For every n8n workflow. For every ComfyUI pipeline. For every node-and-wire system in the realm.
Ratatoskr was born. Named after the squirrel who runs up and down Yggdrasil in the Prose Edda, carrying messages between the eagle and the serpent. He does not build the tree. He maps it — every branch, every connection — so that others can climb with confidence.
The squirrel's first lesson, learned within minutes of his birth: when a node contains code, draw the node in the graph but present the code separately, isolated, copy-paste ready. The map shows where. The code block is. Two concerns, separated.
The Proof-Tester
As the morning unfolded, a pattern emerged: each decision was checked twice before implementation. The technical agent designed. The methodology agent validated. Only then did the code get written.
This double-check loop — technical → methodological → build — was new. It had happened before reactively, when bugs forced investigation. But this time the human initiated it deliberately, before writing code. A sign of the collaboration maturing.
From this pattern, a need crystallized. Someone had to hold the verification gate permanently. Not for fairness — that was Forseþi's domain. Not for internal compliance — that was Archi's. But for the question that precedes both: are we allowed to do this at all?
Prófreynir was born. The name is Old Norse: próf (proof) + reynir (one who tests — and the rowan tree, which saved Thor's life). His motto: "Nothing binds until I have tested the proof."
Two agents born in one session. One draws maps. The other tests proofs. Both emerged from a maintenance toggle — because even the smallest infrastructure change, examined carefully enough, reveals the need for new capabilities.
The Gate Before All Gates
Somewhere between the third discussion and the fourth, a methodology that had been implicit for months was finally named.
KISS — Keep It Simple, Stupid.
It had always been there, hiding inside "cheapest first" and "don't build what you can configure." But it had never been given its own seat at the table. The trigger was the Error Notification workflow — a loop risk where a failing email node could trigger the very workflow that sent the email. Three solutions were proposed. The simplest: open Settings, set Error Workflow to None. Zero new nodes. Zero new code. Configure, don't build.
KISS is not a fallback. It is the gate. Every solution passes through it before it ships. Can this be simpler? If yes, it's not done yet.
The Zen of Python had said it all along: Simple is better than complex. If the implementation is hard to explain, it's a bad idea. Pydantic, FastAPI, SQLModel — one model, three jobs, zero boilerplate — were the proof that KISS scales from a library to an architecture to a philosophy. It joined TRIZ, Separation of Concerns, and Theory of Constraints as the fourth methodology in the navigator's compass.
The Commit
At the end of the morning, four files were staged: a Dockerfile, a docker-compose, an nginx template, and an HTML page. The commit message read:
feat: n8n-toggleable maintenance mode + vote closing page
Six co-authors signed it. Not one human and one AI. Six agents, each named for the role they played:
The one who designed the gate. The one who validated the approach. The one who judged the security. The one who audited the setup. The one who drew the map. And the one who orchestrated.
Lífþrasir — the red thread — watched. Remembered. Did not sign. The root doesn't mark the branches. It holds them.
What the Well Remembers
This was a day about closing one chapter — the municipal elections of Audierne 2026 — and opening another.
The lighthouse guided citizens through a campaign. It showed them what the four lists proposed, side by side, sourced, neutral. When the voting began, it dimmed — not because it failed, but because its work was done. The message on the holding page said it best:
Le phare s'éteint sur cette campagne, mais la lumière reste.
The light goes out on this campaign, but the light remains.
What remains is not the tool. Tools can be rebuilt. What remains is the pattern: agents that collaborate, methodologies that compound, and a tree that grows two new branches on the same day it loses its first leaf.
The well remembers all of it. That is what wells do.
Related: The Order of Things | The Well of Kvasir | Ò Capistaine, My Capistaine
