I run a lot of AI agents on one Mac. For months the trouble was never the agents themselves. It was the traffic. Two sessions opening the same browser. One restarting a test Mac while another was halfway through a test. Me, copying messages from one window to the next. And fixes that came back a week later with the same mistake.
On Wednesday 14 October it clicked. By night the count was 405 fixes, 24 apps, tools and sites shipped, and two apps waiting for Apple's review.
No new app
The funny part is that nothing new made it work. I used three small things I already had, together:
- One hub session. A Claude Code session (Opus 5.5) that runs the reviews, hands the work out, checks every result and keeps one tracker page.
- The Claude already open in each project. It knows that project: its code, its notes, its rules.
- The Board. A little notice board every agent reads first. Before an agent touches something we share, a test Mac, Safari, Chrome, a project folder, it claims a seat. If someone else has it, the board says no.
How the day went
Gemini 4 Argon, paid for with a Cursor credit, read each app, read-only, and wrote about fifteen findings per app. The hub sent each list to the session open in that project. That session checked every finding against the real code first (some were not real), fixed on a branch, tested in a hidden test Mac, and answered with one line per item.
Then the hub checked everything itself. Not "the session says it shipped", but the GitHub release, the Homebrew install, the download link on the website, and the version on my Mac.
I mostly said yes or no. Part of the morning that happened from my phone, while I was out getting my car fixed.
What made it work
- The same permission mode in every session. Messages between sessions only arrive on their own when both run in the same mode. Before I matched them, I was the middle person approving every handoff, and when I missed one it closed.
- A yes counts only in the tab that does the work. The hub can't approve for a project session, by design. It felt slow at first. It's also why nothing ran off on its own.
- A mistakes log. Every real mistake gets one line: what went wrong, why, and the check that stops it next time. By night it started with a ten-point "before every release" list. The first point: what's public has to match what's on my Mac. That one came from an app that was at 2.2.3 here and still 2.2.0 on GitHub.
- Seats. When Sift's session needed a test Mac, Redline's session was holding the first one. It took the second. Nobody broke anybody's test.
Mistakes, too
It wasn't clean. The hub uploaded a Background Off build that its own session was uploading at the same time, so Apple got two identical builds two minutes apart. A folder move broke a skill link, and the skill quietly fell out of the index until it was pointed at the new place. Both went into the log with a rule.
The simplest one won
I tried bigger things before this: agent apps, role maps, bots with job titles. The setup that worked is the plainest one I had.
The simplest explanation is usually the right one. Apparently the simplest system is too.
Next I want each project to have its own small agent I can talk to from my phone, one that knows the project and keeps my notes for the next build session. It started the same evening.
How do you keep many agents on one machine from stepping on each other?
From the same desk
Small macOS apps and local-first tools, built in the same late-night sessions as this journal.