Help us improve
Share bugs, ideas, or general feedback.
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.
npx claudepluginhub cosmicdreams/claude-plugins --plugin adminHow 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.
Creates p5.js generative art with seeded randomness, noise fields, and interactive parameter exploration. Use for algorithmic art, flow fields, or particle systems.
Share bugs, ideas, or general feedback.
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()