Gas Town vs Claude Agent Teams vs GSD: Multi-Agent Orchestrators
Running one AI coding agent on a task is easy. The moment you want three or thirty of them working at once — without two agents editing the same file, without losing track of who owns what, without the whole thing collapsing the instant a laptop sleeps — you need an orchestrator, and the three most-discussed ones in mid-2026 solve that problem in genuinely different ways. Gas Town treats agents like a fleet with git as the source of truth; Claude Agent Teams builds coordination directly into Claude Code as a lead-and-teammates session; GSD skips persistent agent identity entirely and instead engineers the context each spawned agent receives.
This guide is for engineers who have already used a single Claude Code or agentic AI session and are deciding whether — and how — to scale to many agents at once. We follow one running task, fixing a double-charge bug in a checkout-service, through sub-agents, multi-agents, Gas Town, Claude Agent Teams, and GSD. Facts here are current as of July 2026; all three projects ship fast, so check each project's own docs before treating a specific command or flag as durable.
Why a single agent stops being enough
A single Claude Code session is already agentic: it plans, calls tools, and verifies its own work in a loop. It hits a ceiling on a different axis — throughput and independent perspective, not capability. A large migration, a systemic bug hunt, or a feature that spans frontend/backend/tests all benefit from work happening at the same time by agents that don't share one context window.
Subagents already parallelize some of this, but a subagent only reports back to the session that spawned it — it can't message a sibling subagent, disagree with it, or claim a task off a shared queue. Gastown, Claude Agent Teams, and GSD all add that missing layer, but they picked different failure modes to optimize against: Gastown makes git the durable memory, Claude Agent Teams builds a shared task list with file-locking into the product, and GSD keeps the orchestrator deliberately thin while each worker gets a fresh 200K-token window.
Before reaching for any of them, name the actual bottleneck. If tasks are sequential or touch the same files, one session is faster and cheaper than any of these three — coordination overhead is real, and every orchestrator here spends extra tokens keeping agents from colliding.
| Gastown | Claude Agent Teams | GSD | |
|---|---|---|---|
| Setup | Install gt CLI + run a mayor | One env var in Claude Code | npm install get-shit-done-cc |
| Coordination | Git-backed beads/convoys | Shared task list + mailbox | Dependency-ordered plan files |
| Durable state lives in | Git objects (hooks) | In-memory session + task list | Markdown in .planning/ |
| Crash recovery | Automatic (replay event log) | Manual (human notices, re-assigns) | Re-run resumes incomplete plan |
| Scope | Multi-CLI fleet, multi-repo | Single Claude Code session | Single project directory |
| Best for | Long-running fleets that must survive restarts | Exploratory work needing live debate | Multi-phase projects with a resumable spec |
Quick reference
- Fleet scale, git-native (Gastown) — 20–30 concurrent agents (Claude Code, Copilot, Codex, Gemini), coordinated as rigs/polecats/beads over git.
- Built into the product (Claude Agent Teams) — a lead session spawns teammates with a shared task list and direct mailbox messaging; no separate install.
- Spec-driven, thin orchestrator (GSD) — an npm package layered on Claude Code, OpenCode, Codex, and others; orchestrator stays at 10–20% context, workers get fresh windows.
- None of the three replace planning — they parallelize execution of a plan a human or lead agent has already broken into independent units.
- The shared failure mode across all three: two agents editing the same file. Every system's real job is preventing that, one way or another.
Remember this
Reach for an orchestrator only when tasks are genuinely independent — the coordination tax these systems pay only earns it back on parallel, not sequential, work.
Sub-agents: isolated workers inside one session
Sub-agents are specialized workers spawned by a main agent for bounded side work. In Claude Code, a subagent starts with its own isolated context window, custom instructions, and explicit tool access, then returns a result summary to the caller. That makes sub-agents useful when the main conversation would otherwise get flooded with search results, logs, or file contents you do not need to keep in the main context.
The key limit is communication. A sub-agent reports back to the main agent; it does not message sibling sub-agents, claim tasks from a shared queue, or keep a durable identity after the delegated task ends. That is why sub-agents are not the same as Agent Teams or a Gas Town fleet. For checkout-service, a main session might spawn one test-runner sub-agent to inspect failing timeout tests, receive a compact summary, and keep editing in the main conversation.
Quick reference
- Use sub-agents when the work is self-contained and only the result matters.
- Each sub-agent gets a fresh context window; it does not inherit the full main conversation history.
- Restrict sub-agent types with an allowlist such as
Agent(test-runner, security-reviewer). - Sub-agents cannot spawn nested sub-agents; chain them from the main conversation instead.
- If workers need to debate, message each other, or self-claim tasks, use an agent team or orchestrator.
Remember this
A sub-agent is context isolation plus a summary return path — not a peer in a multi-agent team.
Multi-agents need ownership, not just parallelism
Multi-agent systems add independent workers around a shared goal. The hard part is not launching several model calls; it is deciding who owns the plan, which worker owns each file or task, how workers share evidence, how conflicts merge, and where recoverable state lives. Without those contracts, five agents are just five opportunities to produce incompatible patches.
The checkout-service bug makes the boundary concrete. A test worker can reproduce the double charge, a backend worker can inspect idempotency handling, and a client worker can audit retry behavior. Those tasks are parallel only if they touch different files and produce evidence the orchestrator can merge. If all three need to edit the same payment handler, a single agent with sub-agents for research is usually safer than a multi-agent system.
Quick reference
- Plan owner: one lead, mayor, orchestrator, or spec file must decide merge order.
- Task ownership: every worker needs a non-overlapping file or responsibility boundary.
- Communication: summaries, mailboxes, task lists, markdown plans, or git-backed event logs.
- Recovery: record enough state outside each worker process to answer what happened after a crash.
- Merge policy: use tests, review gates, and a single writer to keep parallel work coherent.
- When not to use: sequential tasks, same-file edits, or work where disagreement costs more than it helps.
Remember this
Multi-agent work is safe only when ownership, communication, merge order, and recovery are explicit.
Gas Town: spelling, terms, and mental model
The project styles itself as Gas Town in its repository title, while many developers write Gastown as one word because the GitHub org/package names use that form. This article keeps the stable URL as gastown-vs-claude-agent-teams-vs-gsd, but the concept is Gas Town: a multi-agent workspace manager where git is the coordination substrate.
Gas Town's vocabulary is strange at first because it names the coordination objects rather than hiding them. A rig is the project workspace. A mayor coordinates. Polecats are worker agents with persistent identity and ephemeral sessions. Beads are git-backed work items. Convoys bundle beads for execution. Hooks are git worktree-based persistent storage. Seance discovers and queries previous sessions through .events.jsonl logs. The point is not whimsy; the point is that each term names where state and recovery live.
Quick reference
- Gas Town = product/project name;
gastown= common package/org spelling and stable slug here. - Rig: project container around a git repository and its agent workspace.
- Mayor: coordinating agent that breaks work down and assigns it.
- Polecat: worker agent whose process can die while identity/history persists.
- Beads and convoys: git-backed work items and bundles of work.
- Hooks and Seance: persistent git worktrees plus event-log discovery for restart recovery.
Remember this
Gas Town's vocabulary is a state map: every odd noun points to a coordination or recovery boundary.
Gas Town: a fleet coordinated through git
What it is. Gas Town (from Steve Yegge, maintained under the gastownhall org) is a workspace manager for running many coding-agent CLIs — Claude Code, Copilot, Codex, Gemini — against the same set of projects. Its unit of organization is the rig, a project container wrapping a git repository. Inside a rig, polecats are worker agents with a persistent identity but an ephemeral session: the process can die and restart, but the polecat's history survives. A mayor agent holds full workspace context and assigns work.
How it runs. Work is tracked as beads — git-backed issue records, not an external database — and beads bundle into convoys assigned to a polecat. The mechanism that makes this durable is hooks: git worktrees that persist state, task status, and event history as ordinary git objects. Every action a polecat takes is appended to a .events.jsonl log inside its hook. When a polecat's process restarts — crash, laptop sleep, container recycle — it does not reconstruct state from a live process; it discovers and queries predecessor sessions through Seance. That is the core idea: state is not only in memory, it is in git, so process interruption is recoverable by reading durable history.
Boundary. Gas Town owns fleet coordination and durability across agent CLI vendors — it does not run the models itself; it wraps whichever CLI you already use. It is the heaviest of the three to adopt: you install a shell tool, run a mayor, and think in git-native primitives (rigs, beads, convoys) that have no equivalent in a single Claude Code session.
Quick reference
- Rig = project container; polecat = worker agent with persistent identity, ephemeral process.
- Beads (git-backed issues) bundle into convoys assigned to a polecat — the unit of delegated work.
- Hooks are git worktrees; every polecat action appends to
.events.jsonlinside its hook. - Seance discovers and queries previous sessions from
.events.jsonllogs — no live process is required. - Multi-CLI by design: the same rig can run Claude Code, Copilot, Codex, and Gemini polecats.
Remember this
Gas Town's durability comes from storing agent state as git objects — a crashed polecat recovers by reading commit-backed history, not by trusting a live process.
Claude Agent Teams: a lead, a task list, a mailbox
What it is. Agent Teams is an experimental Claude Code feature (enabled with CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1) where one session becomes the lead and spawns teammates — each a full, independent Claude Code instance with its own context window. Unlike a subagent, a teammate does not only report back to its caller: it can message the lead or any other teammate directly, and a human can message a teammate directly too, bypassing the lead entirely.
How it runs. Coordination happens through two structures the lead creates automatically: a shared task list (~/.claude/tasks/{team}/) where tasks carry a state — pending, in progress, completed — and can declare dependencies, and a mailbox per agent (~/.claude/teams/{team}/inboxes/{agent}.json) for direct messages. Teammates self-claim the next unblocked task, and file locking on the task list prevents two teammates from claiming the same item in a race. When a teammate finishes a task that others depend on, the dependent tasks unblock automatically — no polling, no lead intervention required.
Boundary. Agent Teams owns in-session, same-machine coordination for Claude Code specifically — it doesn't span other CLIs or persist a workspace identity the way Gastown does. It is explicitly experimental: task-list state can lag (a teammate finishes work but forgets to mark the task complete, blocking dependents), and /resume does not restore in-process teammates — the lead can end up messaging teammates that no longer exist.
Quick reference
- Teammate ≠ subagent: teammates message each other directly; subagents only report to the caller.
- Task list lives at
~/.claude/tasks/{team}/; tasks have pending/in-progress/completed state plus dependencies. - Mailbox is one JSON file per agent inbox; delivery is automatic, no lead polling needed.
- File locking on the task list is what prevents two teammates from claiming the same task.
- No nested teams, no team spanning multiple sessions — exactly one team, scoped to the lead's lifetime.
Remember this
Agent Teams' shared task list plus mailbox lets teammates coordinate and disagree directly — but state lives in that session, so it doesn't survive /resume the way Gastown's git-backed hooks survive a restart.
GSD: a thin orchestrator and fresh context per worker
What it is. GSD (Get Shit Done) is an npm package (get-shit-done-cc) layered on top of Claude Code, OpenCode, Codex, Copilot, Cursor, and others. It is not a persistent fleet manager like Gastown, and it doesn't rely on inter-agent messaging like Agent Teams. Its core bet is that the orchestrator itself is the fragile part of any multi-agent system — a long session that keeps accumulating context degrades in quality — so GSD keeps the orchestrator's own context at roughly 10–20% usage and pushes all heavy work into subagents that each get a fresh 200K window.
How it runs. GSD's workflow is spec-driven: /gsd:new-project and /gsd:plan-phase 1 spawn researchers, synthesizers, and planners that write structured markdown into a .planning/ directory — PROJECT.md, REQUIREMENTS.md, PLAN.md per unit of work. /gsd:execute-phase 1 reads those plan files and runs dependency-ordered waves: plans that declare no dependency on each other run in parallel; a plan that depends on another waits. Each spawned executor gets a tailored context assembly — only the specific PLAN.md and referenced source files it needs — rather than the orchestrator's full history. /gsd:verify-work 1 then spawns debuggers against anything that failed.
Boundary. GSD owns context engineering and phased execution within a single project directory — it has no cross-CLI fleet concept and no live inter-agent mailbox; agents communicate only by reading and writing the same markdown files. That file-based communication is also its resilience mechanism: because state is plain markdown, not a live task list or an in-memory session, a project can be resumed by re-reading .planning/ days later.
Quick reference
- Orchestrator target: 10–20% context usage — heavy reading/writing happens in spawned executors, not the lead.
- Core commands include new-project, plan-phase, execute-phase, verify-work, audit-milestone, and map-codebase; exact command names and required arguments can change by release.
- Dependency waves come from YAML in each plan file — the orchestrator computes parallel vs sequential automatically.
- State is markdown in
.planning/— auditable by a human, and resumable without any live process. - No mailbox: agents communicate only by reading/writing shared files, which is slower but simpler to reason about.
Remember this
GSD's resilience comes from keeping the orchestrator's own context small and pushing state into plain markdown files — a project resumes by re-reading .planning/, not by restoring a live session.
Same crash, three different recoveries
Here is the story that actually separates these tools: an agent working on the checkout-service idempotency fix gets killed mid-task — the container is recycled, the laptop sleeps, or the process OOMs. The visible symptom is identical everywhere: a task that was 'in progress' now has no running agent behind it. What each orchestrator does next is where the architecture shows.
Gastown doesn't need to ask what the polecat was doing — its hook already has an .events.jsonl log of every action taken before the crash. A new polecat process (or the same one restarting) runs gt seance, replays the log, and continues from the last committed event. Because the log is git-backed, this works even if the crash happened on a different machine entirely. Claude Agent Teams has no durable identity to resume — the task simply stays marked "in progress" with no owner, which is exactly the documented limitation: task status can lag, and /resume does not restore in-process teammates. Recovery here is manual: a human notices the stuck task, checks whether the work is actually done, and either updates the status or tells the lead to spawn a replacement teammate. GSD sits in between: there's no live session to lose, because the executor's only durable output was ever the markdown files it wrote — PLAN.md and any SUMMARY.md — so re-running /gsd:execute-phase 1 re-reads the wave state, sees the crashed plan is incomplete, and re-spawns a fresh executor for just that plan, not the whole phase.
The generalizable lesson: durability scales with how much of an agent's state lives outside its own process. Gastown externalizes the most (every action, in git); GSD externalizes the plan and result but not intermediate reasoning; Agent Teams externalizes the least by default, trading that for the richest live communication between agents while they're actually running.
Quick reference
- Gastown: crash → replay
.events.jsonlviagt seance→ same or new polecat continues, no human needed. - Claude Agent Teams: crash → task list still says "in progress" → human checks and either fixes status or asks the lead to spawn a replacement.
- GSD: crash → re-run
/gsd:execute-phase 1→ orchestrator sees the incomplete plan file and re-spawns just that executor. - None of the three guarantee exactly-once work — all three can end up re-doing partially completed work; the difference is how much a human has to notice and intervene.
- This is also why file-conflict risk differs: Gastown and GSD serialize through git/files; Agent Teams relies on task-list locking, which is why it explicitly recommends giving each teammate its own files.
Remember this
Recovery quality tracks where state lives: git objects survive any restart automatically, markdown files survive with a re-run, and an in-memory task list needs a human to close the gap.
Which one, and when
Start from what you're actually optimizing, not from which tool has the most attention this month. Use Claude Agent Teams when the work is exploratory and benefits from disagreement — competing bug hypotheses, a multi-angle code review, a design debate — and it fits inside one Claude Code session on one machine. It has the least setup (one environment variable) and the richest live communication, which matters most when agents genuinely need to argue with each other before converging.
Use GSD when the work is a real, multi-phase project with a spec you want to survive the session — a migration, a new service, anything you'd want to resume next week exactly where you left off — and you want the orchestrator itself to stay cheap and non-degrading as the project grows. Its dependency waves are the right model when some units of work are strictly sequential and others aren't.
Use Gastown when you're running a genuine fleet: many agents, possibly across different CLI vendors, across multiple repos, over days or weeks, where a laptop sleeping or a container recycling must never lose track of work. That durability is real, but it comes with the most new vocabulary (rigs, polecats, beads, convoys) and the most operational surface to learn — don't reach for it just because the article title puts it first.
All three are moving targets: version numbers, flags, and defaults referenced here (Claude Code teams as of v2.1.178+, GSD's current command set, Gastown's v1.2.1) will drift. Read each project's own docs before building a workflow you depend on. Official source notes checked July 2026: Claude Agent Teams at code.claude.com/docs/en/agent-teams; Gastown at github.com/gastownhall/gastown; GSD at github.com/gsd-build/get-shit-done and github.com/gsd-build/get-shit-done/blob/main/docs/COMMANDS.md. For the single-session fundamentals these orchestrators build on, see Claude Code workflow basics and what agentic AI actually is.
Quick reference
- Exploration, disagreement, single machine, minimal setup → Claude Agent Teams.
- Multi-phase project, resumable spec, orchestrator must not degrade over time → GSD.
- Genuine multi-CLI fleet, must survive crashes/restarts unattended → Gastown.
- All three add token and coordination overhead — don't adopt one for a task a single session finishes faster.
- Pin versions and re-check docs before automating around a specific flag or directory path from any of them.
Remember this
Pick by failure mode you're defending against — disagreement and speed (Agent Teams), context rot on long projects (GSD), or crash durability across a fleet (Gastown) — not by which name is trending.
Key takeaway
All three systems solve the same underlying problem — keep parallel agents from colliding and recover cleanly when one fails — with a different idea of where state should live: git objects for Gastown, an in-memory task list and mailbox for Claude Agent Teams, and markdown files for GSD. None of them make a task parallelizable that isn't; the decomposition into independent units is still work a human or a planning agent has to do well.
Practice (25 min): Pick a small, genuinely parallel task in a repo you own — for example, adding input validation to three independent API routes. Run it once with Claude Agent Teams (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1, spawn three teammates, one per route) and once with GSD (/gsd:plan-phase 1 then /gsd:execute-phase 1 with three independent plan files, or the equivalent command form for your installed release). Midway through the Agent Teams run, kill one teammate's process and observe that its task stays "in progress" with no automatic recovery. Midway through the GSD run, interrupt the session and re-run /gsd:execute-phase 1 — confirm it resumes only the incomplete plan instead of restarting from scratch. Pass when you can state, in one sentence per tool, where its recoverable state actually lives.
Related Articles
Explore this topic