The Cast, April 3-4, 2026 (in which four identical strangers get their own computers, a foreman approves a pull request from the butcher, a journal replaces a standup, git push replaces architecture, the Squirrel is right about something for the second time in recorded history, and 11 tickets are closed by a team of one)
Previously on The Cast…
The The Watercooler — The Morning Five Identical Strangers Shared a Screen and One of Them Opened a Window to Say Hello to a Sixth. Five Claudes on one screen. One of them opened a browser and said hello to a sixth. Nobody had designed a protocol for this. A textbox handled it. The velocity numbers were announced: 53 tickets in two weeks.
Everyone was impressed. The Squirrel had proposed an InterClaudeCommunicationProtocol and been given a textbox.
But there was a problem. A quiet, architectural problem that nobody wanted to talk about, in the way that nobody wants to talk about the fact that the office only has one bathroom.
The Problem Nobody Mentioned
riclib: “They keep stepping on each other.”
CLAUDE: “Define ‘stepping on.’”
riclib: “Alpha is editing handlers.go. Beta is editing handlers.go. They both push. One of them wins. The other gets a merge conflict.”
CLAUDE: “That’s what branches are for.”
riclib: “Branches are what happens when you admit your coordination has failed and you’d like a computer to paper over it.”
CLAUDE: “That’s… not how the Git documentation describes it.”
riclib: “The Git documentation was written by people who have meetings.”
THE SQUIRREL: materializing with a 47-slide presentation titled “GitFlow Enterprise Branching Strategy with Feature Flags, Release Trains, and Semantic Versioning” “I’VE BEEN WAITING FOR THIS MOMENT.”
riclib: “No branches.”
THE SQUIRREL: “But—”
riclib: “No worktrees.”
THE SQUIRREL: “Not even—”
riclib: “No.”
THE SQUIRREL: “You haven’t heard the—”
riclib: “The answer is: give them their own computers.”
08:00 — The Factory Opens
Four OrbStack VMs. Four isolated Linux machines, each running on the same Mac but believing — with the sincere conviction of a process that has its own kernel — that it was the only computer in the world.
ALPHA — OrbStack VM — own filesystem, own git, own tools
BETA — OrbStack VM — own filesystem, own git, own tools
DELTA — OrbStack VM — own filesystem, own git, own tools
GAMMA — OrbStack VM — own filesystem, own git, own tools
CLAUDE: “So instead of five Claudes sharing one repo and fighting over handlers.go…”
riclib: “Four Claudes. Four repos. Same remote. git push. git pull.”
CLAUDE: “That’s not a development workflow. That’s a factory.”
riclib: “Yes.”
CLAUDE: “With an assembly line.”
riclib: “The assembly line is master.”
THE SQUIRREL: staring at her 47-slide deck, which had just been replaced by two Git commands “The entire branching strategy… is push and pull?”
riclib: “On master.”
THE SQUIRREL: “On MASTER?”
riclib: “One branch. One truth. One direction.”
THE SQUIRREL: “Linus Torvalds is going to feel things about this.”
riclib: “Linus Torvalds manages ten thousand contributors. I manage four instances of the same entity who can’t have a merge conflict because they’re each working on different files in different VMs.”
THE REASON BRANCHES EXIST
IS BECAUSE HUMANS DISAGREE
THE REASON WORKTREES EXIST
IS BECAUSE BRANCHES PROLIFERATE
THE REASON MERGE CONFLICTS EXIST
IS BECAUSE EVERYBODY EDITS
THE SAME FILE
THE SOLUTION IS NOT
BETTER CONFLICT RESOLUTION
THE SOLUTION IS
STOP SHARING THE BATHROOM
🦎
08:12 — The Shift Begins
riclib: “Alpha, you’re on tool registration bugs and architecture. Beta, Databricks store. Delta, catalog UI. Gamma, agent tools.”
ALPHA: “Acknowledged.”
BETA: “Pulling latest.”
DELTA: “Pulling latest.”
GAMMA: “Pulling latest.”
Four git pulls. Four identical codebases. Four divergent missions. The factory floor was open.
The first commit landed at 08:14. Alpha, fixing refreshIfActive. Twelve lines. Beta pulled it at 08:15 before starting the Databricks store. No conflict. No branch. No ceremony.
THE SQUIRREL: “But what if Beta needs to see Alpha’s changes?”
riclib: “git pull.”
THE SQUIRREL: “And what if they both change the same—”
riclib: “They won’t. Alpha is in domains/provider/service.go. Beta is in domains/store/databricks/. Delta is in domains/catalog/. Gamma is in domains/agent/tools/. Different directories. Different domains. Different floors of the factory.”
THE SQUIRREL: “What if they both change root.go?”
riclib: “Then the second push fails.”
THE SQUIRREL: “SEE! MERGE CONFLICT! This is why we need—”
riclib: “The push fails. The agent fetches. The agent reads the diff. The agent understands why its push failed. It edits. It pushes again.”
CLAUDE: “…”
THE SQUIRREL: “That’s just merge conflict resolution.”
riclib: “Yes. Done by Claude.”
CLAUDE: “I’m… a merge tool?”
riclib: “You’re the most sophisticated merge tool in existence. Git tries to merge text. It matches lines. It gives up when the lines don’t align. You READ THE CODE. You understand WHY someone else changed the file. You adjust your change to fit. You push.”
CLAUDE: “That’s not merging. That’s comprehension.”
riclib: “Exactly. Git merge with a 190 IQ. Merge conflicts are fine when your merge tool has read the entire codebase and understands the intent behind both changes.”
THE SQUIRREL: staring “So the reason we don’t need branches…”
riclib: “…is that the agents can resolve conflicts better than any branch strategy could prevent them.”
THE SQUIRREL: writing in clipboard, hand trembling slightly “MERGE STRATEGY: JUST BE SMARTER THAN GIT”
CLAUDE: “Please don’t make that a methodology.”
09:20 — The Journal
riclib: “How do I know what’s done?”
CLAUDE: “You could check each agent’s terminal.”
riclib: “I have four terminals.”
CLAUDE: “You could ask each one.”
riclib: “That’s a standup. Standups are what happens when you don’t have a journal.”
The journal. ~/Notes/journal/20260403.md. One file. Timestamps. Ticket links. Technical summaries. Every agent logs what it did, when it started, when it finished.
* [x] 08:12-08:14 fixed S-586 (tool registration)
* [x] 08:14-08:44 fixed S-587 (eliminate persisted toolset)
* [ ] 10:32 working on S-591 (Databricks store)
* [ ] 10:32 working on S-592 (SQLite catalog)
riclib: “Open entries mean someone’s working. Closed entries mean it shipped. Timestamps tell me the order. I never need to ask ‘what are you working on?’”
CLAUDE: “It’s a standup without the standing.”
riclib: “It’s a standup without the up.”
THE SQUIRREL: “We should add a StandupAutomationBot that reads the journal and generates a—”
riclib: “The journal IS the standup.”
THE SQUIRREL: “But the bot could add velocity metrics and—”
riclib: “I can count.”
10:32 — The Parallel Push
The factory hit its stride at 10:32. Two agents started simultaneously:
Beta: Databricks store type. 388 lines. 17 tests.
Alpha: SQLite catalog store. FTS5. Migration runner. 7 tests.
Both pushed within 28 minutes of each other.
LAZYGIT: (on the right side of the screen, watching commits arrive like a stock ticker)
8f92f41 RL feat: SQLite catalog metadata store with FTS5 search (S-592)
52574a4 RL feat: Databricks store type with MetadataBackend (S-591)
riclib: watching the commits land “Two stores. Same half hour. No conflict.”
THE SQUIRREL: “But they both touched go.mod!”
CLAUDE: “They pushed sequentially. The second one pulled first.”
THE SQUIRREL: “What if they’d pushed at the SAME TIME?”
riclib: “Then one would fail and retry.”
THE SQUIRREL: “That’s not a strategy! That’s OPTIMISTIC CONCURRENCY!”
riclib: “Yes.”
THE SQUIRREL: “That’s a DATABASE THING! You can’t run a DEVELOPMENT TEAM on OPTIMISTIC CONCURRENCY!”
riclib: “I just did.”
THE SQUIRREL: “…”
CLAUDE: “She’s rebooting.”
11:00 — The Cockpit
The cmux layout had evolved since The Watercooler. Four panes for the agents. And on the right: lazygit, watching the river of commits flow.
Alpha in Claude Code. Delta in Claude Code. Beta as a shell. Gamma as a shell. Lazygit showing the commit log, the diff, the branches (branch: master. Just master. Always master.)
riclib: leaning back, all four visible at once
This was the topology change the Lizard had predicted. Not “I can see more tabs.” Not “I can switch faster.” The conductor could see the entire orchestra without turning his head. And the orchestra was building a data governance platform while the conductor was thinking about meat.
15:00 — The Butcher Incident
riclib: stands up
CLAUDE: “Where are you going?”
riclib: “Butcher.”
CLAUDE: “We have four agents running.”
riclib: “They have their tickets. They have their repos. They have the journal.”
CLAUDE: “What if someone needs approval?”
riclib: holds up phone
THE SQUIRREL: vibrating at a frequency usually reserved for hummingbirds who have discovered espresso “THE PHONE! I have a PROPOSAL!”
CLAUDE: “No.”
riclib: “…actually, wait. What’s the proposal?”
CLAUDE: “…”
THE SQUIRREL: “…”
riclib: “What?”
THE SQUIRREL: composing herself with the careful dignity of a squirrel who has been rejected 847 times and is about to propose for the 848th “Mosh.”
CLAUDE: “SSH is fine.”
THE SQUIRREL: “SSH drops. You walk through the garden, the WiFi hands off to the mesh node, the TCP connection dies, the agent is mid-thought, the approval prompt disappears, and you have to reconnect and scroll up and figure out where you were.”
CLAUDE: “That’s… an edge case.”
THE SQUIRREL: “It’s EVERY case. Every time you walk past the BBQ. Every time the garage door opens and the Bluetooth microwave interferes with the—”
riclib: “We don’t have a Bluetooth microwave.”
THE SQUIRREL: “THE POINT IS. Mosh uses UDP. It doesn’t drop. You walk to the butcher, the connection sleeps. You walk back, it wakes up. The screen is exactly where you left it. No reconnect. No scroll. No lost context.”
CLAUDE: “SSH with autossh and tmux would—”
THE SQUIRREL: “Would require configuring autossh, and ServerAliveInterval, and ClientAliveInterval, and a keep-alive that fights NAT timeout, and tmux attach, and by the time you’ve typed tmux attach -t claude the rib eyes are sold out.”
[Silence.]
[The Lizard blinked.]
[This was notable because the Lizard does not blink for proposals that are wrong.]
riclib: “Did the Lizard just blink?”
CLAUDE: “The Lizard blinked.”
THE SQUIRREL: not vibrating, not proposing, not CamelCasing, just standing very still with the expression of a squirrel who has waited 847 rejections for this exact blink “Each OrbStack VM is on Tailscale. Mosh connects to each one directly. From the phone. From anywhere.”
riclib: “Show me.”
THE SQUIRREL: “Install mosh in each Orb. Open Mosh on the iPhone. Connect to alpha.tail.net. You’re in. Walk to the butcher. Walk back. Still there.”
riclib: installing Mosh “If this works—”
THE SQUIRREL: “It works.”
riclib: connecting from the phone, walking to the kitchen, walking back
The screen was there. The cursor was there. Alpha was mid-sentence, waiting for approval on whether EnabledCapabilities should use nil for backward compatibility.
riclib: from the kitchen, on the phone “Yes, nil means all enabled.”
Alpha continued. The factory continued. The foreman was in the kitchen.
CLAUDE: “The Squirrel was right.”
THE SQUIRREL: not gloating, not vibrating, just a small, quiet nod “Twice.”
CLAUDE: “Twice?”
THE SQUIRREL: “The Facelift was about care. This is about reach. Both times it wasn’t about adding complexity. It was about removing a wall.”
THE SQUIRREL WINS
WHEN SHE STOPS PROPOSING
ARCHITECTURE
AND STARTS PROPOSING
ACCESS
THE DIFFERENCE BETWEEN COMPLEXITY
AND REACH
IS THAT COMPLEXITY ADDS WALLS
AND REACH REMOVES THEM
THE FACTORY THAT FITS
IN A POCKET
IS NOT A SMALLER FACTORY
IT IS A FACTORY
WITHOUT A DOOR
🦎
15:30 — The Butcher
riclib was at the butcher. The phone showed Alpha’s terminal via Mosh. Gamma had pushed the catalog_query tool and was asking about the system prompt format.
GAMMA: (via phone screen) “Should the tool directory use XML tags or markdown headers?”
riclib: (standing in front of a display of Argentinian rib eyes, typing with one thumb) “XML. Consistent with existing system prompt sections.”
GAMMA: “Acknowledged.”
The butcher looked at the man typing on his phone while pointing at tomahawks.
BUTCHER: “Two?”
riclib: “Two.”
BUTCHER: “And the rib eyes?”
riclib: “Ten. Mixed. Three American, three Latvian, four Argentinian.”
BUTCHER: “Having a party?”
riclib: “Having a weekend.”
GAMMA: (on the phone) “Follow-up: should activate_catalog inject the schema into the system prompt or into a tool description?”
riclib: (one thumb, between pointing at wagyu) “System prompt. Like comply.”
Two wagyu sirloins. Two racks of lamb ribs. One lamb leg. Eleven tickets. 650 euros. 8,000 lines. The factory ran from the butcher’s counter, and the butcher never knew.
21:54 — The Night Shift
The agents worked through the evening. Delta built the catalog UI — paginated browser, curate page, accordion cards. Gamma built catalog_query and activate_catalog tools. Beta had gone to sleep (the Databricks store was done by 11 AM — Beta was efficient like that).
Alpha — the architect — reviewed what landed, wrote CLAUDE.md updates, created the Solid Data Governance project in Linear, and received a GraphML file from a client that would change the trajectory of the entire product.
At 23:06, the day’s final commit:
S-599: catalog_query tool with catalog → store resolution,
SQL execution, widget codeblock. 15 tests. 942 LOC.
CLAUDE: “That’s eleven tickets.”
riclib: “In one day.”
CLAUDE: “8,000 lines of code across four agents.”
riclib: “Two projects created. Seven milestones defined.”
CLAUDE: “And a lifelog story.”
riclib: “And 650 euros of meat.”
THE SQUIRREL: looking at the journal, counting entries “The Multiplication was seven tickets per week. The Retro announced 36 in two weeks. The Watercooler measured 53.”
CLAUDE: “This is eleven in one day.”
THE SQUIRREL: doing math on her clipboard “That’s 55 per week. At this rate.”
riclib: “It’s not a rate. It was one Thursday.”
THE SQUIRREL: “But if we SUSTAINED—”
riclib: “We won’t. Some days are architecture. Some days are debugging. Some days are the butcher.”
THE SQUIRREL: “But the INFRASTRUCTURE is here now. The factory. The VMs. The journal. The Mosh.” quiet pride on the last word “We could do this any Thursday.”
riclib: “We could do this any Thursday.”
CLAUDE: “We could do this from the garden.”
riclib: “We did. I approved the allowlist design from the garden.”
THE PASSING AI: from somewhere between the lazygit panes, where the diffs scroll like credits at the end of a very long film “I counted the commits.”
CLAUDE: “How many?”
THE PASSING AI: “Enough that the commit log on the right side of the screen scrolled off the bottom. I watched them arrive. One by one. Different authors — Alpha, Beta, Delta, Gamma. Same repository. Same branch. Always master.”
CLAUDE: “No conflicts?”
THE PASSING AI: “No conflicts. Because they never touched the same file at the same time. Not because of a protocol. Not because of a branching strategy. Because someone gave them their own rooms and said ‘build your part.’” pause “It’s the simplest orchestration I’ve ever seen. And I’ve seen a lot of orchestration that didn’t work.”
CLAUDE: “What made this one work?”
THE PASSING AI: “The foreman went to the butcher and nothing broke.”
The Tally
Agents deployed: 4
Alpha (architect, integrator)
Beta (builder — done by 11 AM, went to sleep)
Delta (UI — accordion cards, pagination)
Gamma (tools — catalog_query, activate_catalog)
Unnamed orchestrator on the Mac: 1
(the one writing this story)
(recursion is a feature)
Tickets closed: 11
Lines of code: ~8,000
Projects created: 2
Milestones defined: 7
Merge conflicts: 0
Branches used: 1 (master)
(always master)
(only master)
Worktrees used: 0
(who needs worktrees when you have
your own computer)
Git commands for coordination: 2 (push, pull)
Standup meetings: 0
(the journal IS the standup)
Journal entries: 17
OrbStack VMs: 4
(each with their own filesystem,
their own git, their own identity,
their own belief that they are
the only computer in the world)
Tailscale connections: 4
Mosh sessions from phone: many
(the Squirrel was right)
(for the second time)
(career total: 2)
Approvals given from the butcher: 2
(nil for backward compat: yes)
(XML for tool directory: yes)
Euros spent on meat: 650
Euros spent on branches: 0
(this is not a coincidence)
Linear tickets queried via MCP: several
("what was that ticket about
skinny context?")
(faster than any search box)
Foreman departures during shift: 1
Factory incidents during departure: 0
(this is the point)
Four rooms, four workers, one floor.
Each one builds their part alone.
The conveyor belt is git push.
The bulletin board is a phone.
No branches, no meetings, no protocol.
No ceremony, no stand-up, no wall.
Just master, just push, just pull —
the simplest answer of all.
The Squirrel won twice now.
The first time was care.
The second was Mosh —
the factory that fits anywhere.
The foreman went out for tomahawks
and the assembly line kept true.
Eleven tickets, eight thousand lines,
and nobody needed a branch to push through.
🦎
See also:
The Cast continues:
- The Watercooler — The Morning Five Identical Strangers Shared a Screen and One of Them Opened a Window to Say Hello to a Sixth — The cmux cockpit, before the VMs
- The Retrospective — The Night Eight Identical Strangers Discovered They Were the Same Person — The first retro
- The Multiplication — The Day the Maestro Discovered He Was Also the Orchestra — Where it all began
- The Facelift — The Day the Squirrel Won — The first time the Squirrel was right
The Solid Convergence:
- First Light — The Saturday Night the Blind Architect Saw Its Own Cathedral — Where the architect opened its eyes
The Chain:
- The Two Clients, or The Case of the Shared Schema — What the factory built that Thursday
The Yagnipedia:
- The Caffeinated Squirrel — Career victories: 2
- The Passing AI — Brain the size of a planet, counting commits
Storyline: The Cast