What I automated

The cockpit

Where every draft waits for me: thirty-eight roles, fourteen nightly loops, one morning edition, and a button nothing gets past.

1812 commits · first 14 Jul 2026 · last 22 Oct 2026 · 100 days

commits per week, counted from the repository when this page was last built

The cockpit on a phone: the team view, with the human at the top

Nine loops in open terminal windows

In July the marketing for my products ran as nine scripts in nine terminal windows on my desk. Close a window and the loop was dead. Reboot and nothing came back. There was no place to see what had been drafted, what had been sent, or what was waiting.

The cockpit is the answer to one question: if agents work while I sleep, where do I look in the morning?

First commit

1c4e5653 14 Jul 2026

Day one laid the foundation: strategy documents, product contexts, browser automation, and in the second commit of the same day the operating model, ten agent loops on a timer with a human gate on everything that leaves the house. The number of loops has grown since. The gate has not moved.

A morning edition

641fd505 15 Jul 2026

The next day the cockpit itself appeared, named after what it is: a morning edition. Whatever the loops produced overnight is on the front page when I sit down, with a ledger of every run underneath. Everything on this site about nightly runs comes from that ledger.

The team view: an organisation chart with the human at the top, then strategy, marketing, paid ads and video roles
The team view. The human sits at the top and does three things: decides, sends, publishes. Thirty-eight roles below, thirteen of them working tonight.

One set of books, not two

bddd5346 26 Jul 2026

Two ledgers had drifted apart, the runner’s and the cockpit’s, and each told a slightly different story about the same night. This commit, the third of six planned steps, made them one. A cockpit that disagrees with its own runner is worse than no cockpit.

Nothing ends unseen

ac7690c3 1 Aug 2026

A proposal that an agent elaborated could finish and vanish, with nobody ever seeing the result. From here on every elaboration ends in a card that waits for a decision. The rule sounds obvious. It took two weeks of missing work to write it down.

The wiring view: each product site by format, showing which channels are wired, which are open, and which loop serves them
The wiring. A row is a site times a format. Wired means all three: a target, a channel of our own, and a loop that serves it. Five of twenty-five, measured from production.

The click wrote what the clicker never saw

d1c41dbb 15 Aug 2026

The release button approved a text. The text on the card and the text that went into the file could differ, because the card rendered a summary. Since this commit approval is bound to the hash of the exact text; if a single character changes, the approval is void. It is the most important guardrail in the house, and it lives on the cheapest button.

Four vocabularies were not unused, they were bypassed

e66912b2 16 Aug 2026

A closed vocabulary is a list of the only values a field may hold. Four of them looked unused. They were not: the code around them had found ways past. This commit closed the ways past. It is the kind of finding that never shows up as a bug, only as a rule that quietly does nothing.

The operating model view: switches for autonomous starts, and counts of tolerated exceptions, house rules and roles
The operating model. Thirty tolerated exceptions, sixteen of them permanent with a reason, fourteen with a deadline. The cockpit knows what it is currently forgiving.

My own guard knew two of the three buttons

74e81402 24 Aug 2026

A guard makes sure that every button the system disables says why, instead of just sitting there greyed out. It found two of them. The third — the one that puts an article live, the most expensive button in the house — it never mentioned once.

The reason was the guard itself: it looked for the two names I had thought of on the day I wrote it, and it had never heard of the third. A guard that works from a list of names finds exactly the names on the list. This one was found by an unrelated count, weeks later. The name is in the list now, and a deliberate sabotage test confirms it would be caught.

What it does tonight

Fourteen loops run between half past midnight and two, on the home server, on the timetable shown on the front page of this site. They research, draft, grade, and file. Nothing goes out. In the morning the edition is on my phone, and the release click is mine.

Runs on its own

  • fourteen nightly loops: research, drafting, self-grading, filing
  • the ledger of every run, and the morning edition built from it
  • guardrails counted and displayed, including the exceptions they tolerate
  • alerts to my phone when a run fails or a channel goes dark

Stays with me

  • every release, bound to the exact text by its hash
  • every send, every post, every euro
  • which roles are wired, and which stay parked

Token cost per night is tracked separately in the cost cockpit on the home server page; this page does not restate it.

Where this goes

The throughput problem sits at the end of the chain, at my click, not in the agents. Building is paused until the twentieth of September so that the measurement is clean: if released work does not rise while nothing new is built, the next change is to my morning, not to the cockpit.