Help us improve
Share bugs, ideas, or general feedback.
From agent-teams
Structured messaging protocols for agent team communication including message type selection, plan approval, shutdown procedures, and anti-patterns to avoid. Use this skill when establishing team communication norms, handling plan approvals, or managing team shutdown.
npx claudepluginhub ai-foundry-core/ril-agents --plugin agent-teamsHow this skill is triggered — by the user, by Claude, or both
Slash command
/agent-teams:team-communication-protocolsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Protocols for effective communication between agent teammates, including message type selection, plan approval workflows, shutdown procedures, and common anti-patterns to avoid.
Structured messaging protocols for agent team communication: message type selection, plan approval, shutdown procedures, and anti-patterns to avoid.
Coordinates multiple Claude Code instances as agent teams for workflows needing inter-agent communication. Covers TeamCreate, SendMessage types, task coordination, hooks, and orchestration patterns.
Use when dispatching subagents, composing prompts for teammates, structuring handoff reports, or managing context boundaries between agents. Covers both subagent prompts and team-level messaging.
Share bugs, ideas, or general feedback.
Protocols for effective communication between agent teammates, including message type selection, plan approval workflows, shutdown procedures, and common anti-patterns to avoid.
message (Direct Message) — Default ChoiceSend to a single specific teammate:
{
"type": "message",
"recipient": "implementer-1",
"content": "Your API endpoint is ready. You can now build the frontend form.",
"summary": "API endpoint ready for frontend"
}
Use for: Task updates, coordination, questions, integration notifications.
broadcast — Use SparinglySend to ALL teammates simultaneously:
{
"type": "broadcast",
"content": "Critical: shared types file has been updated. Pull latest before continuing.",
"summary": "Shared types updated"
}
Use ONLY for: Critical blockers affecting everyone, major changes to shared resources.
Why sparingly?: Each broadcast sends N separate messages (one per teammate), consuming API resources proportional to team size.
shutdown_request — Graceful TerminationRequest a teammate to shut down:
{
"type": "shutdown_request",
"recipient": "reviewer-1",
"content": "Review complete, shutting down team."
}
The teammate responds with shutdown_response (approve or reject with reason).
| Anti-Pattern | Problem | Better Approach |
|---|---|---|
| Broadcasting routine updates | Wastes resources, noise | Direct message to affected teammate |
| Sending JSON status messages | Not designed for structured data | Use TaskUpdate to update task status |
| Not communicating at integration points | Teammates build against stale interfaces | Message when your interface is ready |
| Micromanaging via messages | Overwhelms teammates, slows work | Check in at milestones, not every step |
| Using UUIDs instead of names | Hard to read, error-prone | Always use teammate names |
| Ignoring idle teammates | Wasted capacity | Assign new work or shut down |
When a teammate is spawned with plan_mode_required:
ExitPlanMode which sends a plan_approval_request to the leadplan_approval_response:Approve:
{
"type": "plan_approval_response",
"request_id": "abc-123",
"recipient": "implementer-1",
"approve": true
}
Reject with feedback:
{
"type": "plan_approval_response",
"request_id": "abc-123",
"recipient": "implementer-1",
"approve": false,
"content": "Please add error handling for the API calls"
}
type: "shutdown_request"shutdown_response:
approve: true — Teammate saves state and exitsapprove: false + reason — Teammate continues workingTeammate cleanupIf a teammate rejects shutdown:
Find team members by reading the config file:
Location: ~/.claude/teams/{team-name}/config.json
Structure:
{
"members": [
{
"name": "security-reviewer",
"agentId": "uuid-here",
"agentType": "team-reviewer"
},
{
"name": "perf-reviewer",
"agentId": "uuid-here",
"agentType": "team-reviewer"
}
]
}
Always use name for messaging and task assignment. Never use agentId directly.