Dennis asked for a way to stop burning frontier tokens on batch article nights — Sean Kelly scale — without buying a robot butler. We stood up the night-shift worker the same evening: a lunchbox queue, a RACI lock, and the public SOP.
Name what we already had
This was not a greenfield factory. Sean Kelly already runs as waves: inventory CSV, episode briefs, prose JSON, generate.py HTML, publisher scripts. 2,421 videos in the master inventory. 1,680 published. The leftover is the expensive middle — writing — not a missing philosophy.
The same split already lives in the Content Factory and the video repurposing agent: scripts fetch, a writer drafts, Jennifer grades, WordPress stores a draft, a human promotes. Claude was doing too many of those jobs in one chat because handing off felt like more work than paying.
Handing off felt hard because there was no fridge. Two chats could pick the same episode. So we built the fridge first, not a new agent OS.
Build the lunchbox, not Hermes
The harness is a JSON queue plus a client lock. One laptop writes its name on one client for twelve hours. Each video lease lasts four hours so a crash can resume. A second worker who tries the same client gets BLOCKED. That is the same collision rule as Dennis OS “In flight,” applied to articles.
Accountable humans come from the Basecamp Project Overview labels we already parse. The overnight worker is Responsible. Morning QA stays with the Accountable person. We did not scrape ClientTracker into the queue — that sheet still holds things that must not ride along in a content folder.
The local model is not allowed to hit YouTube or WordPress. Dinner is yt-dlp. Night is Qwen on localhost. Morning is REST drafts with a full Chrome user agent. Live, email, and Facebook stay human.
Measure the actual Mac
This machine is an Apple M3 Max with 128 GB of RAM. yt-dlp and ffmpeg are already here. Ollama, LM Studio, and Whisper are not. Overnight counts in the SOP are therefore conservative versus an M5 Max. Installing the 27B weights is a 20-minute human step. An agent should not silently download them.
Tests for the queue (exclusive claim, lease expiry, client lock, unknown-flag exit 2) run without a model. night.py --dry-run exercises the folder contract the same way.
What we shipped
| Deliverable | Where |
|---|---|
| Team SOP | /overnight-content-worker/ |
| Fifth-grader README + install + contract | Overnight-Content-Worker/ |
| Queue, claim, dinner, night, morning scripts | Overnight-Content-Worker/scripts/ |
| Sean Kelly client pack + remaining-job seed | clients/sean-kelly/ + seed_sean_kelly.py |
THE DELIVERABLE
The SOP the team follows. The fridge that keeps them from colliding.
Open the overnight SOPBuilt Aug 17, 2026, per the meta article prompt against the overnight content worker SOP. Related: Content Factory · persistent agents · four lunch tickets.

