
TL;DR
Notes from a single session running 200+ Claude Code subagents in parallel across 35 repos. What worked, what broke, and the patterns I codified into a skill so the recipe replays.
I run a small empire: 35 apps under the developersdigest org, each one a separate repo, most of them deployed on Coolify, a few stragglers still on Replit and Vercel. Migrations across that many repos used to mean a week of context-switching. This week I tried something different: spawn one subagent per repo, fan out, let them work in parallel, then come back and review.
The session shipped 219 pull requests in one day. Here is the honest breakdown - the patterns that survived contact with reality, the ones that exploded, and the fixes that turned chaos into a repeatable workflow.
The work was embarrassingly parallel by nature. Same migration, 35 different codebases, no shared state. A sequential loop would have taken eight hours of agent time and probably twelve hours of me babysitting tool calls. A parallel fan-out is bounded by the slowest agent, not the sum of them.

The pitch is simple: if your task decomposes into N independent units of work, the wall-clock time should be dominated by the longest unit, not N times the average. That is the whole shape of the speedup. Three sequential searches are slower than three parallel agents. Three hundred sequential migrations are catastrophically slower than three hundred parallel ones.
Tight scope per agent. Every agent got one repo, one branch, one PR target. No agent was allowed to touch shared infra. No agent could decide its own scope. The prompt was a checklist, not a goal. When I gave agents room to interpret, they invented work - extra refactors, README rewrites, dependency bumps nobody asked for. When I gave them a checklist, they finished and stopped.
The honest-skip rule. I baked into every prompt: if this repo does not match the migration profile, return SKIPPED with a one-line reason and exit cleanly. This was the single most useful pattern. Without it, agents will hallucinate work to look productive. With it, ~40 of the 200+ runs returned honest skips - repos already migrated, repos that were docs-only, repos with no deploy target. Those skips saved hours of cleanup.
/tmp/<slug>/ isolation. The first thing I tried was running multiple agents against the same local checkout. Catastrophic. Branch switches collided, working trees got tangled, two agents committed to each other's branches. The fix: every agent clones fresh into /tmp/<repo-slug>/, works there, pushes, opens its PR, and never touches the canonical local copy. Disposable working directories are non-negotiable for parallel work.
Get the weekly deep dive
Tutorials on Claude Code, AI agents, and dev tools - delivered free every week.
From the archive
May 5, 2026 • 6 min read
May 5, 2026 • 9 min read
May 5, 2026 • 8 min read
May 5, 2026 • 8 min read
Rogue pkill collisions. A few agents had build steps that ran pkill -f next to clean up dev servers. With twenty agents running simultaneously, one agent's cleanup killed another agent's build mid-compile. Builds failed for reasons that had nothing to do with their code. I lost an hour chasing ghost failures before I traced it.
Disk fill. Two hundred clones of medium-sized Next.js repos plus 200 node_modules installs blew through 60GB. Coolify started returning 500s on unrelated apps because the host disk was full. docker builder prune -f fixes this after the fact, but the better answer is to never let it happen.
False-empty remotes. Several agents reported "nothing to commit, branch is clean" when in fact they had simply failed to detect modified files because they had cd'd into the wrong directory after a clone. The PR opened but contained zero diff. From the dispatch log it looked like a successful run. I caught these only by spot-checking PR diffs by hand.
Build-lock script. A simple flock-based wrapper around any command that touches a shared resource. Builds serialize through the lock, everything else stays parallel. Crude but it works.

Fallback to local copies. When a /tmp/<slug>/ clone failed for billing or network reasons, fall back to copying from a local cache directory rather than failing the run. Saved a dozen agents during a brief GitHub API blip.
Narrow filters. Instead of "run this on every repo," I now generate the target list explicitly with a query - "repos with nixpacks.toml and no coolify.yml, modified in the last 90 days." Smaller, sharper target list, fewer wasted runs, fewer false-empty PRs.
219 pull requests opened. Maybe 70% of them are mergeable as-is. The rest need small edits - a wrong env var name, a stale port number, a missing health check. The bottleneck now is not agent capacity. It is human review bandwidth and, embarrassingly, a GitHub Actions billing cap I hit around PR 180.
Two non-code lessons came out of this:
Devin review is the new rate limit. I tag @devin-ai-integration on every DD PR for a second-pass review before merge. With 200+ open PRs that queue is now the choke point. Parallelizing the agent does nothing if the reviewer is serial.
GitHub billing scales with your agents. I tripped a private-repo Actions minute cap I had never come close to before. Worth budgeting for if you plan to run anything like this regularly.
The whole recipe - the clone pattern, the honest-skip rule, the build lock, the PR-and-tag-Devin flow - is now a single skill called replit-to-coolify. I trigger it with one phrase and a target repo, and the same well-debugged prompt runs every time. That is the actual outcome of a session like this. Not the 219 PRs. The 219 PRs are the artifact. The skill is the asset.
Next time I have a many-repos-one-change job, I do not have to re-derive the patterns. I run the skill, fan out, and review. The whole cycle from "I should migrate these" to "PRs are open" collapses from a week to an afternoon.
If you are sitting on a portfolio of repos that need the same change, the leverage is real. Just budget for the disk, the billing, and the reviewer queue before you press go.
Read next
The DevDigest blog is no longer just a folder of markdown files. It is becoming a small content operating system: posts, tags, RSS, search, llms.txt, route discovery, content expansion reports, and app-linked build logs.
9 min readOne dev, one CLI, 24 subdomains, and a lot of parallel agents. The playbook for shipping an AI app portfolio.
9 min readHow we ported 38 apps off Replit and onto Coolify in a single day, using parallel Claude Code subagents, gh, and neonctl. The honest stats: stubs, monorepos, false-empties, and ~120 PRs.
8 min readTechnical content at the intersection of AI and development. Building with AI agents, Claude Code, and modern dev tools - then showing you exactly how it works.
Mac app for running parallel Claude Code, Codex, and Cursor agents in isolated workspaces. Watch every agent work at onc...
View ToolAnthropic's agentic coding CLI. Runs in your terminal, edits files autonomously, spawns sub-agents, and maintains memory...
View ToolMulti-agent orchestration framework built on the OpenAI Agents SDK. Define agent roles, typed tools, and directional com...
View ToolAnthropic's Python SDK for building production agent systems. Tool use, guardrails, agent handoffs, and orchestration. R...
View ToolSpec out AI agents, run them overnight, wake up to a verified GitHub repo.
View AppEvery coding agent in one window. Stop alt-tabbing between Claude, Codex, and Cursor.
View AppTurn a one-liner into a working Claude Code skill. From idea to installed in a minute.
View AppConfigure Claude Code for maximum productivity -- CLAUDE.md, sub-agents, MCP servers, and autonomous workflows.
AI AgentsDeep comparison of the top AI agent frameworks - LangGraph, CrewAI, Mastra, CopilotKit, AutoGen, and Claude Code.
AI AgentsIsolated git worktrees for parallel Claude Code sessions.
Claude Code
The DevDigest blog is no longer just a folder of markdown files. It is becoming a small content operating system: posts,...

One dev, one CLI, 24 subdomains, and a lot of parallel agents. The playbook for shipping an AI app portfolio.

How we ported 38 apps off Replit and onto Coolify in a single day, using parallel Claude Code subagents, gh, and neonctl...

I told an agent to improve the site every 10 minutes and went to sleep. Here is what 12 new repos, 60 PRs, and three goo...

Anthropic's Claude containment writeup points to the next security layer for coding agents: deterministic capability led...

31 deployed apps. 7 down. Favicons missing on 20 of 24 reachable hosts. Sentry on zero. Here is how a single audit turne...

New tutorials, open-source projects, and deep dives on coding agents - delivered weekly.