2.1.178: native team-management tools TeamCreate / TeamDelete no longer surfaced (regression from 2.1.177)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
On Claude Code 2.1.178, the native agent-team tools TeamCreate and TeamDelete are missing from the session, even though CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 is set (the flag the docs say gates them). They cannot be loaded or called: ToolSearch select:TeamCreate,TeamDelete returns "No matching deferred tools found,"
and a broad search turns up SendMessage, TaskCreate, TaskList, TaskUpdate, and Agent but no Team* tool of any spelling. The session also reports these two tools as coming from an "MCP server" that "disconnected," even though they are native Claude Code tools, not MCP-provided.
The result: there is no way to create a named agent team on 2.1.178. Agent with a team_name still runs, but it ignores the name and drops the member into the implicit session-<id> team. Only TeamCreate/TeamDelete are affected — the rest of the agent-teams surface (messaging, tasks, Agent spawning) still works, so
it's a targeted drop of the two team-management tools, not the whole feature.
The exact same machine, user, settings.json, and flag work correctly on 2.1.177 — TeamCreate/TeamDelete are present and functional — so this is a regression introduced in 2.1.178.
What Should Happen?
With CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 set, TeamCreate and TeamDelete should be present and callable in the session — exactly as documented in the tools reference, and exactly as they behave on 2.1.177. ToolSearch select:TeamCreate,TeamDelete should resolve and return their schemas, and calling TeamCreate {
team_name: "..." } should create the named team on disk (~/.claude/teams/<name>/config.json plus its task-list dir) and bind the session as that team's lead, so members can then be added with Agent using that team_name.
They are native Claude Code tools, so they should be surfaced as native tools that are reliably present whenever the flag is set — never reported as an "MCP server" that can "disconnect," and never silently dropped while the rest of the agent-teams surface (SendMessage, Task*, Agent) stays available.
Error Messages/Logs
On 2.1.178, attempting to load the tools:
ToolSearch query: select:TeamCreate,TeamDelete
-> No matching deferred tools found
On 2.1.178, the session announced the tools as a disconnected MCP server (these are native tools, so this message itself is part of the defect):
The following deferred tools are no longer available (their MCP server disconnected).
Do not search for them — ToolSearch will return no match:
TeamCreate
TeamDelete
mcp__ide__executeCode
mcp__ide__getDiagnostics
A broad keyword search on 2.1.178 returned the rest of the agent-teams surface but no Team* tool:
ToolSearch query: TeamCreate TeamDelete create agent team roster member
-> returns: TaskCreate, SendMessage, TaskList, agent_persona_launcher, ... (no TeamCreate / TeamDelete)
After rolling back to 2.1.177 (no other change), the same load succeeds:
ToolSearch query: select:TeamCreate,TeamDelete
-> resolves; returns full JSON schemas for both TeamCreate and TeamDelete
And the call that was impossible on 2.1.178 succeeds on 2.1.177:
TeamCreate { "team_name": "xxxxx_test" }
-> {"team_name":"xxxxx_test",
"team_file_path":"/home/xxxxx/.claude/teams/xxxxx-test/config.json",
"lead_agent_id":"team-lead@xxxxx_test"}
Note: there is no stack trace or thrown exception — the failure mode is a silent absence of the tools (and the misleading "MCP server disconnected" notice), not an error code. The "proof" is the presence/absence contrast between 2.1.177 and 2.1.178 on identical config.
Steps to Reproduce
- Use a native Claude Code install with tool search enabled (tools loaded via ToolSearch).
- Set CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 (in ~/.claude/settings.json env, or exported in the launching shell).
- Launch Claude Code 2.1.178.
- Run ToolSearch with query select:TeamCreate,TeamDelete. Observe: "No matching deferred tools found."
- Ask the session to create an agent team (e.g. "create a team called xxxxx_test"). Observe: it cannot — TeamCreate is absent from the tool surface. (Agent with a team_name still runs but ignores the name and binds to the implicit session-<id> team.)
- Exit. Repoint the version to 2.1.177 without changing anything else:
ln -sfn ~/.local/share/claude/versions/2.1.177 ~/.local/bin/claude
- Relaunch Claude Code (now 2.1.177; confirm with claude --version).
- Run ToolSearch select:TeamCreate,TeamDelete again. Observe: it resolves and returns both schemas.
- Create the team (TeamCreate { team_name: "xxxxx_test" }). Observe: success — ~/.claude/teams/xxxxx-test/config.json and ~/.claude/tasks/xxxxx-test/ are created.
- (Optional) Repoint back to 2.1.178 and relaunch to confirm the tools disappear again.
Net: identical machine, user, settings.json, and flag — the only variable is the binary version. 2.1.178 = tools absent; 2.1.177 = tools present.
Claude Model
Opus
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.177
Claude Code Version
2.1.178
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
VS Code integrated terminal
Additional Information
- Scope of the regression is narrow and specific: only TeamCreate and TeamDelete are dropped. The rest of the agent-teams surface stays functional on 2.1.178 — SendMessage, TaskCreate/TaskList/TaskUpdate, and Agent (including spawning foreground members into the implicit session-<id> team) all work. So a session can
join/operate within a team but cannot create or delete a named one.
- The "MCP server disconnected" framing is itself suspect. These are native tools per the docs, yet 2.1.178 surfaces and drops them as if they were provided by an MCP server. Within a single 2.1.178 session the pair flickered — announced as "disconnected," then later "reconnected" — which suggests the team-management
tools are being routed through a connection/registration path that can fail, rather than being statically present when the flag is set.
- Version window: 2.1.177 is correct; 2.1.178 is broken. Installed builds available for bisecting on this machine: 2.1.170, 2.1.172, 2.1.173, 2.1.174, 2.1.177 (all believed good — agent teams ran on these across ~30 prior sessions), and 2.1.178 (first broken). 2.1.176 was never installed here.
- Real-world impact: this silently broke a multi-agent workflow that had worked for ~30 prior runs. Because the failure is a silent absence plus a misleading "missing/disconnected" notice (no error code, no stack trace), it presents as a configuration or environment problem and is very hard to diagnose — it cost
hours before the version was identified as the only changed variable. A clearer signal (e.g., "agent-teams tools unavailable in this build" vs. an MCP-disconnect message) would help.
- Flag was verified present, not the cause: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 was confirmed in both user and project settings.json and reaching the process; autoUpdates is false; no shadowing/global install; no CLAUDE_CONFIG_DIR redirect. The only differing variable between working and broken was the binary
version.
- Environment: native install (~/.local/share/claude/versions/, symlinked from ~/.local/bin/claude), Linux 6.17.0-14-generic, tool search enabled.
- Workaround in place: pinned to 2.1.177 and moved the 2.1.178 binary out of the version pool so the launcher can't re-select it (editing the symlink alone wasn't enough — it got re-pointed to the newest build in versions/ on launch).
17 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Have the same issue - TeamCreate, TeamDelete tools no longer available in 2.1.178:
Same call in 2.1.177:
I also experienced this issue, and it broke my entire development system, thought I was going crazy.
Yep, we use agent teams heavily and 2.1.178 broke all our flows. Hoping for a fast-follow fix :)
same happened here, rolled back to 2.1.177 until anthropic solves the issue.
│ Symlink ~/.local/bin/claude → versions/2.1.177 ✅
│ Quarantined 2.1.178/179/181 → versions-quarantine-2.1.178-regression/ (recoverable) ✅
│ Version pool now contains → only 2.1.177 ✅ (launcher picks newest-in-pool, so this is what makes the pin hold)
│DISABLE_AUTOUPDATER=1 → added to settings.json.env ✅ (native auto-update is "protected", so autoUpdates:false alone is ignored)
│ 2.1.177 --version → runs ✅
│Recheck note → reference_claude_code_2178_teamcreate_regression.md + MEMORY.md index ✅
┌───────────────────────┬────────────────────────────────────────────┐
│ Check │ Result │
├───────────────────────┼────────────────────────────────────────────┤
│ Running CLI version │ 2.1.177 ✅ │
├───────────────────────┼────────────────────────────────────────────┤
│ ~/.local/bin/claude │ → versions/2.1.177 ✅ │
│ symlink │ │
├───────────────────────┼────────────────────────────────────────────┤
│ Version pool │ only 2.1.177 (launcher can't pick a newer │
│ │ broken build) ✅ │
├───────────────────────┼────────────────────────────────────────────┤
│ Quarantine │ versions-quarantine-2.1.178-regression/ │
│ │ intact ✅ │
├───────────────────────┼────────────────────────────────────────────┤
│ TeamCreate / │ │
│ TeamDelete / │ loadable (absent in the broken session) ✅ │
│ SendMessage │ │
├───────────────────────┼────────────────────────────────────────────┤
│ tmux │ 3.4, and we're inside session claude-001 │
│ │ (attached) ✅ │
└───────────────────────┴────────────────────────────────────────────┘
Confirmed same on 2.1.178. Rolling back to 2.1.177 is the right immediate move.
For anyone who needs to stay on 2.1.178 while waiting for a patch: the workaround is to set CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 and then fall back to the Agent tool directly (no explicit TeamCreate call). The lead session will operate in the implicit team scope. You lose named teams and the clean TeamDelete teardown, but SendMessage, TaskCreate, TaskList, and TaskUpdate all still work, so a hub-and-spoke coordination pattern can keep running.
One thing worth noting for the Anthropic team: the failure mode here (team-management tools silently reported as disconnected MCP tools rather than simply absent) suggests the native tool surface is being initialized through the same injection path as MCP-provided tools. If the two initialization paths share a registration step that changed in 2.1.178, that explains why only TeamCreate/TeamDelete dropped out while the rest of the agent-teams surface stayed intact.
Watching for the fix here.
Hi all, we're intentionally simplifying agent teams and merging them into subagents, so subagents are team members by default.
In practice, a session has one agent team almost always, so we unshipped the team create/delete machinery to make it automated. For folks that rely on explicit tool calls, could you share what exactly you rely on -- is it that you want a visual indicator of the current team name? or that you want multiple concurrent teams that cannot communicate with one another? or something else?
@bcherny The main issue here is that the breaking change was silent - no announcement, and the documentation was still listing non-existing tools and broken conventions. I see that the docs are updated now, but that was some wasted time for me.
Suggestion: include breaking changes in the changelog
@bcherny this has completely broken my workflow, i used to have a team with an agent being the planner/orchestrator and specialist subagents doing the actual work .. this meant that I could actually connect to the team pane and send message directly in case there was an issue.. now everything is dropped without any notification.. please claude needs to give us workaround before making such breaking change
---
Confirming this on 2.1.181 (macOS), and flagging the downstream impact for orchestration that relied on
TeamCreate.With
TeamCreate/TeamDeletegone,Agent(name, run_in_background: true)is the only way to fan out persistent, message-driven workers — but those are background subagents, not teammates, and they have no termination path:shutdown_requestviashutdown_response, and that is rejected with: "Structured team-protocol messages (shutdown/plan responses and requests) are acts of the session itself and cannot be sent by a background subagent. Send a plain text message instead."TaskStop/TaskListcannot reach it. It idles and emitsidle_notifications until the parent session exits.The deeper loss is that
TeamCreateteammates were the only worker type that was both coordinable and closable. The replacements force an either/or:| Worker | Coordinable mid-flight | Closable |
|---|---|---|
|
run_in_backgroundsubagent | yes | no || synchronous subagent | no (blocks caller, dies on return) | yes (self-closes) |
|
TeamCreateteammate (removed) | yes | yes |So restoring
TeamCreate/TeamDelete— or any spawn that yields a persistent, lead-terminable worker — is what unblocks closable fan-out orchestration. The shutdown side has a separate pre-existing bug even for real teammates (#60199). Happy to provide a minimal repro if useful.---
Thanks @bcherny — that the team→subagent merge is intentional is genuinely clarifying, and the auto-team simplification is a good direction. To answer "what exactly you rely on": it's not a team-name indicator or multiple concurrent teams. It's a team member the lead can terminate.
TeamDelete+ the per-member shutdown handshake gave lead-initiated teardown of persistent members once their work was done.In the merged model the members are
run_in_backgroundsubagents — which is great for orchestration (persistent, message-driven: push → wait for review → fix on a lead nudge → push again). But they currently have no termination path:shutdown_response— "Structured team-protocol messages … cannot be sent by a background subagent. Send a plain text message instead."shutdown_requestisn't honored;TaskStop/TaskListcan't reach them.So they idle and emit
idle_notifications until the whole session exits. A long orchestration run spawns ~14 workers across waves; each lingers after completing, flooding the lead with idle pings, unreapable. There's also an asymmetry: spawning is not session-gated (a background subagent can freely spawn its own subagents on 2.1.181), but termination is — you can create non-closable workers at any depth and can't end them.We don't want
TeamCreate/TeamDeleteback. What's needed is close-down to work for subagent team members in the merged model — either let the lead'sshutdown_requestactually reap a background member, or give a background member a self-exit (allowshutdown_response, or a "done/exit" affordance). Today: creation unrestricted at any depth, termination impossible.(Related pre-existing shutdown bug even for real teammates: #60199. Downstream tracker: bjcoombs/ai-native-toolkit#211.)
Following up to correct my two comments above — and it's good news for the merge direction.
Version mis-stamp. The repro I posted was from a session I believed was 2.1.181 (
claude --version), but/statusshowed it was actually running 2.1.179. Sessions keep their launch version while the on-disk binary auto-updates, so everything I'd stamped "2.1.181" was 2.1.179 behaviour.Re-tested on 2.1.181 — the shutdown path I complained about is resolved:
run_in_backgroundteammate received a lead-initiatedshutdown_request, replied withshutdown_response {approve:true}, and the runtime returned "Shutdown approved. Sent confirmation to team-lead. Agent … is now exiting." — it exited cleanly.So the "subagent team members can't be shut down" problem was 2.1.179-specific; on 2.1.181 subagents are closable team members, which is exactly the intended end state of the team→subagent merge. The capability appears to have landed between 2.1.179 and 2.1.181.
To be clear on scope: this only corrects the shutdown/closability concern I raised. The
TeamCreate/TeamDeleteremoval itself is intentional per your note above; the live concerns others have raised here (the change was silent, and the docs still referenced the removed tools /CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS) are separate and still worth addressing. Apologies for the noise from the mis-stamped version. Downstream tracker updated accordingly: bjcoombs/ai-native-toolkit#211.TL;DR — independent testing on 2.1.181 (merged model, in-process backend): the lead's
shutdown_requestdoes reap background teammates, the roster is flat (no background grandchildren), and the channel works flag-free, including headless-p. So the "no termination path / non-closable workers at any depth" picture looks better on current builds — with one caveat (I didn't test tmux-pane-backed members).Three notes on the termination/lifecycle discussion:
SendMessage(to=<name>, {type: shutdown_request}) → teammate shutdown_approved → teammate_terminated, and the member drops frommembers[]. A background subagent can only emitshutdown_responseas a reply to an inboundshutdown_request— so "can't sendshutdown_response" is expected when no request was sent first (norequest_idto echo). ⚠️ All my probes werein-process; tmux-pane-backed members untested.Agent(name=…, run_in_background=true)from a teammate → "Teammates cannot spawn other teammates — the team roster is flat"; nameless bg → "In-process teammates cannot spawn background agents. Use run_in_background=false…". So background depth is bounded to 1.TaskList/TaskStopcan't reach them — confirmed, but~/.claude/teams/session-<id>/config.jsonmembers[]is a live, pruned roster you can read.What changed, 2.1.177 → 2.1.181 (2.1.181 col = live probes; 2.1.177 col = the legacy
TeamCreatemodel as recorded, not re-tested here)| | 2.1.177 (legacy) | 2.1.181 (merged) |
|---|---|---|
| Team tools |
TeamCreate/TeamDeletepresent | absent (by design) || Establish membership |
TeamCreate, then named members | named backgroundAgent, noTeamCreate|| Lead reap |
TeamDelete(whole team) + per-member shutdown | per-membershutdown_requestonly (no bulk teardown) || Enable flag |
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1needed | flag-free || Team dir | caller-named | auto,
session-<id>|| Headless
-pteam mode | ❌ | ✅\* (merged channel stays resident) |\* headless
-prow is from a nestedclaude -pstream-json probe; re-confirming. Unchanged across both: teammate self-exit is reply-only; the on-diskconfig.jsonschema is the same shape.Full notes / capability matrix: https://github.com/spacedock-dev/spacedock/blob/spacedock-state/dev/using-claude-team-merged-model-support.md#capability-matrix--claude-code-21181-merged-auto-team-model
@bcherny I've tested this a bit more and can confirm this is a good simplification that allows bi-directional messaging for subagents. the only thing i'd ask is the steerability of the team members when getting messages from the main agent or the user. right now the message is sent but not read until the subagents are "free", which requires manually interrupting them.
that's terrible news, I for example use Agent Teams for spawning a complete 8 x Opus 8 [1m] context each + Team Lead, each one with a specific agent role devised for my project workflow and they talk with eachother and answer to teamlead, everything running under tmux multiple panes, it's really the best way to drive multiple teams, i also do this with subtree so i can have multiple agent teams running specific worktrees and each agent has a full 1m context window because the current state of the production project is quite heavy.
please maintain current Agent Teams configuration because subagents are really bad for longrunning sessions and heavy complexity stuff because they're quite dumb and also subagents fills context quite extensively for enterprise projects. the best tmux usage of live agents is seeing what they're actually doing instead of waiting for subagents in background processes that can`t be verified and having separate context windows for longrunning work.
take a look at my current team topology & lifecycle
🧭 Team topology & lifecycle (GOLDEN RULE: all work via this team)
┌───────────────────────┐
│ TEAM-LEAD │ orchestrates · runs DB pushes,
│ (this Claude loop) │ EF deploys, git, execute_sql gates
└──────────┬────────────┘
│ TeamCreate / Agent(spawn) / SendMessage / TaskUpdate
┌──────────────┬─────────────┼─────────────┬──────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐
│architect│ │ db │ │ hooks │ │ infra │ │frontend │ │ reviewer │
│ design │ │migrations│ │src/hooks│ │EF·lib· │ │components│ │ SPLIT │
│drop-safe│ │(authors)│ │ ** │ │functions│ │app·msgs │ │ audit │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └──────────┘
read-only: architect, reviewer, ui-auditor · write: db/hooks/infra/frontend
Lifecycle: spawn(on-demand) → work-1-turn → idle(stays alive) → dismiss → respawn
Every agent = a REAL attachable tmux pane running 2.1.177 (gated-visibility rule).
⚙️ The wave-orchestration workflow we ran
PER WAVE: architect-first ──▶ parallel executors ──▶ TEAM-LEAD GATE ──▶ verify
(no unilateral fixes) (domain-split, (push/deploy/ (probes,
no file races) live probe) build green)
Specialized agent roster
┌─────┬────────────────────┬─────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ # │ Agent │ Class │ Description (genericized) │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 │ architect │ read-only + │ [Platform] architect — deep architectural analysis, schema design, ADRs, system-design decisions. Produces architectural statements for stakeholder decisions. Read-only code access; writes to │
│ │ │ planning │ .planning/. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 2 │ researcher │ read-only │ [Platform] researcher — deep codebase exploration, DB analysis, production-data analysis, best-practices research. Produces research docs that inform planning & architecture. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 3 │ planner │ write .planning/ │ [Platform] GSD planner — maintains ROADMAP, STATE, PROGRESS, phase directories, verification tracking. Owns .planning/ exclusively. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 4 │ db (executor) │ write migrations │ [Platform] database executor — creates migration files with proper SQL. Never runs db push/execute_sql for schema changes; team-lead handles all DB ops. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 5 │ hooks (executor) │ write src/hooks/ │ [Platform] hooks executor — writes/modifies React Query hooks, mutations, data-layer code. Owns src/hooks/ exclusively. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 6 │ infra (executor) │ write lib/EF/config │ [Platform] infrastructure executor — cache-invalidation graph, edge functions, config, cross-cutting utilities. Owns src/lib/, supabase/functions/, src/config/. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 7 │ frontend │ write UI │ [Platform] frontend executor — components, pages, styling, i18n. Owns src/components/, src/app/, messages/. Follows the design system. │
│ │ (executor) │ │ │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 8 │ reviewer │ read-only │ [Platform] code reviewer — audits code quality, security, data integrity, architectural consistency. Read-only; never modifies files. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 9 │ debugger │ read-only │ [Platform] debugger — systematic hypothesis-driven debugging for financial, RLS, orchestrator, and data-integrity issues. Persistent debug state across sessions. │
└─────┴────────────────────┴─────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Tools per agent
WRITERS (Read·Write·Edit·Grep·Glob·Bash·SendMessage + extras)
db + memory(search·open)
hooks + memory(search·open)
infra + memory(search·open) (leanest writer — no extra MCP)
frontend + memory(search·open) · magic(searchRegistryItems·getRegistryItem) ◀ shadcn/UI registry
planner + memory(search·open) · sequential-thinking · context7(resolve·query)
READ-ONLY / ANALYSIS (Read·Grep·Glob·Bash·SendMessage + extras)
architect + Write·Edit (to .planning only) · execute_sql · memory(search·open·read_graph)
· context7 · firecrawl(search·scrape) · sequential-thinking · WebSearch · WebFetch
researcher+ execute_sql · memory(search·open·read_graph) · context7
· firecrawl(search·scrape·agent·agent_status) · sequential-thinking · WebSearch · WebFetch
reviewer + execute_sql · memory(search·open)
debugger + execute_sql · memory(search·open) · sequential-thinking · WebSearch
Capability patterns worth noting
pushes route through team-lead (the I-10 / "team-lead owns execute_sql verification" doctrine).
@bcherny that's terrible news, I for example use Agent Teams for spawning a complete 8 x Opus 8 [1m] context each + Team Lead, each one with a specific agent role devised for my project workflow and they talk with eachother and answer to teamlead, everything running under tmux multiple panes, it's really the best way to drive multiple teams, i also do this with subtree so i can have multiple agent teams running specific worktrees and each agent has a full 1m context window because the current state of the production project is quite heavy.
please maintain current Agent Teams configuration because subagents are really bad for longrunning sessions and heavy complexity stuff because they're quite dumb and also subagents fills context quite extensively for enterprise projects. the best tmux usage of live agents is seeing what they're actually doing instead of waiting for subagents in background processes that can`t be verified and having separate context windows for longrunning work.
take a look at my current team topology & lifecycle
🧭 Team topology & lifecycle (GOLDEN RULE: all work via this team)
┌───────────────────────┐
│ TEAM-LEAD │ orchestrates · runs DB pushes,
│ (this Claude loop) │ EF deploys, git, execute_sql gates
└──────────┬────────────┘
│ TeamCreate / Agent(spawn) / SendMessage / TaskUpdate
┌──────────────┬─────────────┼─────────────┬──────────────┬───────────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌──────────┐
│architect│ │ db │ │ hooks │ │ infra │ │frontend │ │ reviewer │
│ design │ │migrations│ │src/hooks│ │EF·lib· │ │components│ │ SPLIT │
│drop-safe│ │(authors)│ │ ** │ │functions│ │app·msgs │ │ audit │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └──────────┘
read-only: architect, reviewer, ui-auditor · write: db/hooks/infra/frontend
Lifecycle: spawn(on-demand) → work-1-turn → idle(stays alive) → dismiss → respawn
Every agent = a REAL attachable tmux pane running 2.1.177 (gated-visibility rule).
⚙️ The wave-orchestration workflow we ran
PER WAVE: architect-first ──▶ parallel executors ──▶ TEAM-LEAD GATE ──▶ verify
(no unilateral fixes) (domain-split, (push/deploy/ (probes,
no file races) live probe) build green)
Specialized agent roster
┌─────┬────────────────────┬─────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ # │ Agent │ Class │ Description (genericized) │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 1 │ architect │ read-only + │ [Platform] architect — deep architectural analysis, schema design, ADRs, system-design decisions. Produces architectural statements for stakeholder decisions. Read-only code access; writes to │
│ │ │ planning │ .planning/. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 2 │ researcher │ read-only │ [Platform] researcher — deep codebase exploration, DB analysis, production-data analysis, best-practices research. Produces research docs that inform planning & architecture. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 3 │ planner │ write .planning/ │ [Platform] GSD planner — maintains ROADMAP, STATE, PROGRESS, phase directories, verification tracking. Owns .planning/ exclusively. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 4 │ db (executor) │ write migrations │ [Platform] database executor — creates migration files with proper SQL. Never runs db push/execute_sql for schema changes; team-lead handles all DB ops. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 5 │ hooks (executor) │ write src/hooks/ │ [Platform] hooks executor — writes/modifies React Query hooks, mutations, data-layer code. Owns src/hooks/ exclusively. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 6 │ infra (executor) │ write lib/EF/config │ [Platform] infrastructure executor — cache-invalidation graph, edge functions, config, cross-cutting utilities. Owns src/lib/, supabase/functions/, src/config/. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 7 │ frontend │ write UI │ [Platform] frontend executor — components, pages, styling, i18n. Owns src/components/, src/app/, messages/. Follows the design system. │
│ │ (executor) │ │ │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 8 │ reviewer │ read-only │ [Platform] code reviewer — audits code quality, security, data integrity, architectural consistency. Read-only; never modifies files. │
├─────┼────────────────────┼─────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 9 │ debugger │ read-only │ [Platform] debugger — systematic hypothesis-driven debugging for financial, RLS, orchestrator, and data-integrity issues. Persistent debug state across sessions. │
└─────┴────────────────────┴─────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Tools per agent
WRITERS (Read·Write·Edit·Grep·Glob·Bash·SendMessage + extras)
db + memory(search·open)
hooks + memory(search·open)
infra + memory(search·open) (leanest writer — no extra MCP)
frontend + memory(search·open) · magic(searchRegistryItems·getRegistryItem) ◀ shadcn/UI registry
planner + memory(search·open) · sequential-thinking · context7(resolve·query)
READ-ONLY / ANALYSIS (Read·Grep·Glob·Bash·SendMessage + extras)
architect + Write·Edit (to .planning only) · execute_sql · memory(search·open·read_graph)
· context7 · firecrawl(search·scrape) · sequential-thinking · WebSearch · WebFetch
researcher+ execute_sql · memory(search·open·read_graph) · context7
· firecrawl(search·scrape·agent·agent_status) · sequential-thinking · WebSearch · WebFetch
reviewer + execute_sql · memory(search·open)
debugger + execute_sql · memory(search·open) · sequential-thinking · WebSearch
Capability patterns worth noting
pushes route through team-lead (the I-10 / "team-lead owns execute_sql verification" doctrine).
The greatest value of the Team feature was that it provided a reliable communication channel between CC sessions running as independent processes. Within CC, it was also used as a channel for delivering events originating outside the session.
This made it possible to build orchestration systems around CC. If this capability is removed, it will become difficult to use CC as an orchestration platform.