Skip to content

Gas Town vs Claude Agent Teams vs GSD: Multi-Agent Orchestrators

Core Concept LearningJuly 25, 202616 min readUpdated July 26, 2026

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.

Multi-agent orchestration: three coordination mechanisms branching from one problem
Multi-agent orchestration: three coordination mechanisms branching from one problem

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.

At a glance: how the three orchestrators differ
GastownClaude Agent TeamsGSD
SetupInstall gt CLI + run a mayorOne env var in Claude Codenpm install get-shit-done-cc
CoordinationGit-backed beads/convoysShared task list + mailboxDependency-ordered plan files
Durable state lives inGit objects (hooks)In-memory session + task listMarkdown in .planning/
Crash recoveryAutomatic (replay event log)Manual (human notices, re-assigns)Re-run resumes incomplete plan
ScopeMulti-CLI fleet, multi-repoSingle Claude Code sessionSingle project directory
Best forLong-running fleets that must survive restartsExploratory work needing live debateMulti-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.

Sub-agents isolate focused work and return summaries to the main agent
Sub-agents isolate focused work and return summaries to the main agent

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.
Claude Code subagent definition
1---2name: test-runner3description: Runs focused test investigation and returns only evidence.4tools: Read, Bash(npm test *)5---6 7Find the smallest failing checkout timeout test.8Return:9- command run10- failing assertion11- suspected production file12- no unrelated refactor suggestions
Allow a coordinator to spawn only known workers
1---2name: coordinator3description: Coordinates safe specialist work in this repo.4tools: Agent(test-runner, security-reviewer), Read, Bash(git *)5---6 7Delegate only bounded checks. Keep final editing and commit decisions8in the main conversation.

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.

Multi-agent safety depends on ownership, communication, merge order, and recovery
Multi-agent safety depends on ownership, communication, merge order, and recovery

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.

Gas Town terms map: rig, mayor, beads, convoy, polecat, hook, seance
Gas Town terms map: rig, mayor, beads, convoy, polecat, hook, seance

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.

Gastown flow: Mayor assigns beads into a convoy for a polecat, persisted through a git hook
Gastown flow: Mayor assigns beads into a convoy for a polecat, persisted through a git hook

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.jsonl inside its hook.
  • Seance discovers and queries previous sessions from .events.jsonl logs — no live process is required.
  • Multi-CLI by design: the same rig can run Claude Code, Copilot, Codex, and Gemini polecats.
Install and start a fleet
1# Install Gas Town, then start from the mayor2brew install gastown3# or: npm install -g @gastown/gt4 5# Attach to the coordinating agent6gt mayor attach
Inspect fleet state after a restart
1# Beads = git-backed work items; list what's in flight2gt beads list --rig checkout-service3 4# A polecat's history survives its process dying —5# replay its event log instead of asking "what was it doing?"6gt seance --polecat polecat-07 | tail -n 20

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.

Claude Agent Teams flow: lead decomposes work, teammates claim tasks and message directly
Claude Agent Teams flow: lead decomposes work, teammates claim tasks and message directly

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.
Enable teams and spawn from a prompt
1// .claude/settings.json2{3  "env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }4}
Natural-language spawn — no manual task list authoring
1> Spawn three teammates to fix the checkout-service double-charge bug:2> one reproducing it with a failing test, one tracing the idempotency-key3> path, one checking the retry client for duplicate submits. Have them4> challenge each other's theory before we pick a fix.

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.

GSD flow: plan phase produces dependency-ordered plans, execute runs them in parallel waves, then verify
GSD flow: plan phase produces dependency-ordered plans, execute runs them in parallel waves, then verify

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.
Plan a phase, then execute it in parallel waves
1npm install -g get-shit-done-cc2/gsd:new-project "Fix checkout-service double-charge bug"3/gsd:plan-phase 1
Independent plans run together; dependents wait
1# plans/01-reproduce.plan.yaml — no dependencies, runs immediately2# plans/02-idempotency-fix.plan.yaml3#   depends_on: [01-reproduce]         # waits for the failing test first4# plans/03-retry-client-audit.plan.yaml — no dependencies, runs immediately5 6/gsd:execute-phase 17# Wave 1: 01-reproduce + 03-retry-client-audit run in parallel8# Wave 2: 02-idempotency-fix starts once 01 completes9/gsd:verify-work 1

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.

Zoom: same mid-task crash, three different recovery mechanisms
Zoom: same mid-task crash, three different recovery mechanisms

Quick reference

  • Gastown: crash → replay .events.jsonl via gt 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.

Decision map: match your actual need to the right orchestrator
Decision map: match your actual need to the right orchestrator

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.

Share:

Related Articles

A single AI agent session has one context window, and that window is the scarcest resource it has. Ask it to grep forty

Read

Claude Code is a terminal coding agent — useful only when the repo teaches it how you work. That teaching lives in CLAUD

Read

Tell an agent to book a one-way flight from Seattle to Austin and the airline has no public booking API — the only way i

Read

Keep learning

Follow a structured path or browse all courses to go deeper.