From admin
Sets up a proper agent team using TeamCreate so that spawned agents share a communication channel and can coordinate via SendMessage. Use whenever the user asks to use agent teams, coordinate agents, have agents work together, or collaborate across parallel tasks — outside of a full sprint context. Trigger phrases: "use agent teams", "spin up a team", "create an agent team", "have agents coordinate", "agents that talk to each other", "parallel agents with shared context". ALWAYS use this skill before spawning agents when inter-agent communication or shared task state is needed. Do NOT use for single background agents, solo research tasks, or when sprint:run is already active.
How this skill is triggered — by the user, by Claude, or both
Slash command
/admin:agent-teamThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Coordinate multiple agents that share a communication channel and a task list.
Coordinate multiple agents that share a communication channel and a task list. The key step that makes this work — and that Claude will skip without this skill — is TeamCreate first. Without it, agents are isolated workers with no shared channel. SendMessage between them will not work.
Always do this before spawning any agents.
TeamCreate(
team_name = "descriptive-slug", # kebab-case, reflects the work
description = "What this team is doing"
)
This creates a shared task list at ~/.claude/tasks/{team-name}/ and registers the channel agents will communicate through.
Create one task per unit of work. Tasks are visible to all agents on the team.
TaskCreate(subject="...", description="...")
Set up dependencies if needed:
TaskUpdate(taskId="2", addBlockedBy=["1"])
Use the Agent tool with both team_name and name parameters. Without these, agents do not join the team.
Agent(
subagent_type = "general-purpose",
team_name = "descriptive-slug", # must match TeamCreate name exactly
name = "agent-name", # used for SendMessage addressing
prompt = "..."
)
Spawn all agents whose work can proceed in parallel in a single message — multiple Agent tool calls in one response run concurrently.
Each agent needs:
~/.claude/teams/{team-name}/config.jsonTaskUpdate(taskId="N", owner="agent-name", status="in_progress")SendMessage(type="message", recipient="other-agent", ...)TaskList for next available work before going idleAs agents work, they send findings and status via SendMessage. You (team-lead) receive these automatically as new conversation turns.
When an agent goes idle after sending a message, that is normal — they are waiting for input. Send them their next task or a shutdown request.
Assign tasks dynamically as work completes:
TaskUpdate(taskId="N", owner="agent-name", status="in_progress")
SendMessage(type="message", recipient="agent-name", content="Take task N next — ...")
When an agent has no remaining tasks, send a shutdown request:
SendMessage(type="shutdown_request", recipient="agent-name", content="All tasks complete. Wrap up.")
Wait for approval before calling TeamDelete.
After all agents have shut down:
TeamDelete()
This removes the team channel and task list directory.
team_name or name from Agent tool call — agent does not join the teamrun_in_background=true without a team — creates isolated workers, not teammates# 1. Create team
TeamCreate(team_name="gap-analysis", description="Investigating 3 API gaps in parallel")
# 2. Create tasks
TaskCreate(subject="Gap A: createFrame naming")
TaskCreate(subject="Gap B: version exposure")
TaskCreate(subject="Gap C: flex align baseline")
TaskCreate(subject="Synthesize all findings")
TaskUpdate(taskId="4", addBlockedBy=["1","2","3"])
# 3. Spawn agents in one message (parallel)
Agent(team_name="gap-analysis", name="researcher-a", subagent_type="general-purpose", prompt="Your name is researcher-a. Take task 1...")
Agent(team_name="gap-analysis", name="researcher-b", subagent_type="general-purpose", prompt="Your name is researcher-b. Take task 2...")
Agent(team_name="gap-analysis", name="researcher-c", subagent_type="general-purpose", prompt="Your name is researcher-c. Take task 3...")
Agent(team_name="gap-analysis", name="synthesizer", subagent_type="general-purpose", prompt="Your name is synthesizer. Wait for messages from researcher-a, -b, -c then take task 4...")
# 4. Receive updates via SendMessage, reassign as needed
# 5. Shutdown + cleanup
SendMessage(type="shutdown_request", recipient="synthesizer", ...)
TeamDelete()
npx claudepluginhub cosmicdreams/claude-plugins --plugin adminCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.