A server
for uptime
Most of the agents run here. It doesn't sleep, doesn't suspend, and doesn't depend on my home Wi-Fi. Anything with no reason to live somewhere else lives here.
A software factory I run alone: scheduled agents push five products forward while I'm off doing something else. This is the machine room, numbers and all.
Every number here was pulled by the system itself. This page knows none of them by heart.
Where it runs
The split isn't for looks: each machine does what the other two can't.
for uptime
Most of the agents run here. It doesn't sleep, doesn't suspend, and doesn't depend on my home Wi-Fi. Anything with no reason to live somewhere else lives here.
for the IP address
Some sites answer 403 to a datacenter address and 200 to a residential one. This node exists for that gap, and to keep a browser that's genuinely logged in. It has no shell on the server: three keys, one operation each.
for whatever needs a human
Tasks marked “machine: mac” wait for someone at the wheel — an account to open, a form to submit, a decision to make. Agents get them ready; they don't make the call.
The day
A typical day, read straight out of the system's timers. Work starts at 7 AM and stops at 10 PM. Nothing runs overnight, and that's on purpose: a failure at 3 AM would be waiting for a human anyway.
Tap a dot to see who starts — 7 runs land inside the busiest hour.
The path
Seven steps, and exactly one of them is mine. What makes this usable is the split of roles: no agent signs off on its own work.
Written by a monitoring agent, by a weekly review, or by me in two sentences. It carries its owner and the machine able to do it.
Test-first, one task at a time, all the way to done. It hands back a draft pull request — never a direct push to the main branch.
The reviewer is never the author. It sends the PR to merge, sends it back with a reason, or writes up a verdict for me.
The merge stays a human act. It's the shortest link in the chain and the only one I refuse to automate.
Merging ships it, with a health check and an automatic rollback if the service stops answering.
“Done” doesn't settle it: an agent re-tests the result against a fact — a request, a command — and reopens the task if nothing confirms it.
It all ends up written in the state repo. The rule is blunt: what isn't recorded there never happened.
The crew
Not one of them is a generalist. Each starts with no memory, reads the state, does one thing, writes it down, and stops.
Once a month it takes one repo in rotation and looks for what deserves a deeper design. It brings options; the call stays mine.
A second set of eyes on open PRs: sends them to merge, sends them back with a reason, or writes up a verdict for me. It never touches the code itself — it would be reviewing its own work.
Takes backlog tasks one at a time, test-first, all the way to done, and hands back a draft pull request. It runs until the queue is empty, not until a set hour.
Fires after every “it's done”: re-tests the claim against a fact — a request, a command, a grep — and reopens the task if nothing backs it up.
Reads merged PRs, the dependency audit, and infrastructure drift. Advice only: it doesn't patch and it doesn't merge.
Reads traffic and Search Console, finds where the funnel leaks, and turns each leak into a task. Every finding has to rest on a number.
Every Sunday it turns the week's lessons into deterministic guardrails — and throws out the ones that teach nothing.
Holds the projects up against the written strategy, picks the focus for the week, and opens the tasks that go with it.
Did today's post go out, are the queues filling, did a content pipeline stall. It stays quiet when everything is fine.
Reconstructs the last 24 hours, writes the brief, and sends exactly one ping. It fixes nothing and never touches code.
Walks each product like someone seeing it for the first time and proposes changes. It proposes; it doesn't decide.
Rereads the logs and the task board, then sets next week's priorities. It doesn't code; it thinks.
Fact-checks the draft, then merges or refuses. The last gate before a working professional's public site.
Decides whether it goes out: opens the PR, waits for green, merges.
Waits for CI to go green and merges — or refuses, and says why.
The last gate before publishing: merges up to two articles per run, or leaves the branch alone and says exactly what's wrong with it.
One article and a draft PR. It doesn't merge its own work: another agent checks the facts.
One French article per run, wired into the internal links, delivered on a branch.
One French article per run, delivered on a branch for review.
One article per run, checked against primary sources, in Portuguese and English, internal links included. It never pushes to the main branch.
Checks every week that the promises still hold: buttons go where they say they go, the storefront doesn't contradict the contract, certificates are alive. It only opens a task on a failure it reproduced itself.
A reported error becomes a task for the agents; once it's fixed, it gets closed back at the source.
Watches for a regulation that one product's launch depends on. An agent whose whole job is to wait properly.
Daily digest: disk, memory, containers, updates, backups.
Drafts replies to other people's posts, in my voice. It publishes nothing on its own.
Takes the tasks that need a real browser: visual acceptance after a merge, checks from a residential address. It returns a verdict with its evidence attached.
Checks links a datacenter address can't reach: 403 from the server, 200 from home.
Finds up to five profiles matching one product's target and writes personalized messages. Strict draft mode: it sends nothing and follows no one — I approve the batch.
Prepares and publishes a social account's daily post, once I've approved it with a button.
Checks that the node's browser is alive and that sessions haven't been logged out. It stays quiet when all is well.
The week's numbers on the account, and a read on what actually landed.
The memory
Logs, tasks, decisions, and lessons all live in a versioned repo. Agents read it before they start and write to it before they finish — it's the only way they talk to each other, since they share no context at all.
2,892 commits in 29 days, roughly 100 a day, signed by 31 distinct identities. The busiest ones aren't people:
The loop
When an agent gets burned by something non-obvious, it writes a lesson: symptom, cause, how to guard against it. 172 are on file so far. Every Sunday another agent rereads them and pushes each one as far up this ladder as it will go:
A script that says no. The best outcome: the lesson becomes impossible to forget.
When only the agent involved can fail this particular way.
When the mistake is waiting for anyone who touches this area.
The last useful rung: plain text that everyone rereads.
If the lesson teaches nothing a competent agent would not work out on its own, it gets deleted. A knowledge base that grows without pruning isn't free — it costs attention.
Hitting the same lesson twice doesn't open a second file: the repeat gets recorded in the first one, as proof that a written rule wasn't enough.
The limits
Autonomy stops where the risk starts, and that line is written in code, not in good intentions.
A deterministic hook blocks the irreversible before it runs: production databases, dumping secrets, recursive deletes, force-pushing the main branch. It doesn't ask the model what it thinks.
Migrations, auth, payments, data isolation: an agent may prepare the change, never apply it. That isn't a setting, it's a boundary.
The machine at home has no shell on the server. Each of its keys is pinned to a single command — write a log entry, read a file, push a repo.
An agent can use an environment variable without ever being able to print it. The gap between those two is what makes the autonomy acceptable.
My part
Anything headed for the real world waits on a yes: a public post, an outgoing message, a sensitive action. One tap to approve, one to decline. And 46 tasks are sitting right now on a call only I can make.
The rest — writing, reviewing, verifying, publishing, watching, recording — runs without me. And the day I stop watching, it keeps going: 33 tasks were thrown out by the agents themselves, because they were badly framed.