Claude Code Plugins

Community-maintained marketplace

Feedback

Multi-agent coordination with Agent Mail MCP. Use when registering agents, reserving files, sending messages, coordinating with other agents, or when the user mentions "agent mail", "coordination", "file reservation", or "multi-agent".

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name agent-mail
description Multi-agent coordination with Agent Mail MCP. Use when registering agents, reserving files, sending messages, coordinating with other agents, or when the user mentions "agent mail", "coordination", "file reservation", or "multi-agent".

Agent Mail (MCP Server)

Multi-agent coordination: registration, file reservations, messaging, and build slots.

When This Applies

Signal Action
Starting a session ensure_project + register_agent
Before editing files file_reservation_paths
Communicating with agents send_message / fetch_inbox
Finishing work release_file_reservations

Registration (Required First)

# 1. Ensure project exists
ensure_project(human_key="/abs/path/to/project")

# 2. Register yourself (auto-generates name like "GreenCastle")
register_agent(
    project_key="/abs/path/to/project",
    program="claude-code",
    model="opus-4.5",
    task_description="Working on feature X"
)
# SAVE the returned agent name!

# 3. Set contact policy
set_contact_policy(
    project_key="/abs/path/to/project",
    agent_name="YOUR_AGENT_NAME",
    policy="open"
)

File Reservations

Reserve before editing:

file_reservation_paths(
    project_key="/abs/path",
    agent_name="YourName",
    paths=["src/module/**", "tests/test_module.py"],
    ttl_seconds=3600,
    exclusive=True,
    reason="bd-123: implementing feature"
)

Extend if needed:

renew_file_reservations(
    project_key="/abs/path",
    agent_name="YourName",
    extend_seconds=1800
)

Release when done:

release_file_reservations(
    project_key="/abs/path",
    agent_name="YourName"
)

Messaging

Send message:

send_message(
    project_key="/abs/path",
    sender_name="YourName",
    to=["OtherAgent"],
    subject="[CLAIMED] bd-123 - Feature Title",
    body_md="Starting work on **bd-123**.\n\nFile reservations: `src/module/**`",
    thread_id="bd-123",
    importance="normal"  # low, normal, high, urgent
)

Reply:

reply_message(
    project_key="/abs/path",
    message_id=123,
    sender_name="YourName",
    body_md="Acknowledged. Proceeding."
)

Check inbox:

fetch_inbox(
    project_key="/abs/path",
    agent_name="YourName",
    include_bodies=True,
    limit=10
)

# Urgent only
fetch_inbox(project_key, agent_name, urgent_only=True)

Acknowledge:

acknowledge_message(project_key, agent_name, message_id)

Discovery

Find other agents:

ReadMcpResourceTool(
    server="mcp-agent-mail",
    uri="resource://agents/PROJECT_PATH"
)

Search messages:

search_messages(project_key, query="authentication", limit=20)

Thread summary:

summarize_thread(project_key, thread_id="bd-123")

Who is this agent?

whois(project_key, agent_name="BlueLake")

Build Coordination

# Acquire build slot (prevents concurrent builds)
acquire_build_slot(project_key, agent_name, slot="main", exclusive=True)

# Release when done
release_build_slot(project_key, agent_name, slot="main")

Quick Start Macro (RECOMMENDED)

One call to start a session - use this instead of manual steps:

macro_start_session(
    human_key="/abs/path",
    program="claude-code",
    model="opus-4.5",
    file_reservation_paths=["src/**"],
    inbox_limit=10
)

This automatically:

  1. Ensures project exists
  2. Registers agent (auto-generates name)
  3. Reserves specified files
  4. Fetches recent inbox messages

Return value includes:

  • agent_name: Your assigned name (e.g., "BlueLake")
  • project: Project details
  • file_reservations: Granted reservations
  • inbox: Recent messages

Error Handling

Common Errors

Error Fix
"from_agent not registered" Call register_agent first
FILE_RESERVATION_CONFLICT Wait for expiry or coordinate with holder
"project not found" Call ensure_project first

Graceful Error Handling Pattern

When a tool call fails, include is_error: true in the result so Claude understands the failure:

# Example: Handling file reservation conflict
result = file_reservation_paths(
    project_key="/abs/path",
    agent_name="YourName",
    paths=["src/auth/**"],
    exclusive=True
)

if result.get("conflicts"):
    # Return error so Claude can adapt
    tool_result = {
        "type": "tool_result",
        "tool_use_id": tool_use_id,
        "is_error": True,  # CRITICAL: Tells Claude this failed
        "content": f"FILE_RESERVATION_CONFLICT: {result['conflicts'][0]['holders']}"
    }
    # Claude will now try a different approach or coordinate

Error Response Examples

# Conflict error
{
    "is_error": True,
    "content": "FILE_RESERVATION_CONFLICT: src/auth/** held by BlueLake (expires in 45min)"
}

# Registration error
{
    "is_error": True,
    "content": "AGENT_NOT_REGISTERED: Call register_agent() before sending messages"
}

# Project error
{
    "is_error": True,
    "content": "PROJECT_NOT_FOUND: Call ensure_project() with absolute path first"
}

Recovery Strategies

Error Type Recovery
FILE_RESERVATION_CONFLICT Wait, coordinate via message, or pick different task
AGENT_NOT_REGISTERED Call register_agent() then retry
PROJECT_NOT_FOUND Call ensure_project() then retry
MESSAGE_SEND_FAILED Retry with exponential backoff

Web UI

http://127.0.0.1:8765/mail


Quick Reference

# Startup
ensure_project(human_key=PATH)
register_agent(project_key=PATH, program="claude-code", model="opus-4.5")

# Files
file_reservation_paths(project_key, agent_name, paths, exclusive=True)
release_file_reservations(project_key, agent_name)

# Messaging
send_message(project_key, sender_name, to, subject, body_md, thread_id)
fetch_inbox(project_key, agent_name, include_bodies=True)
reply_message(project_key, message_id, sender_name, body_md)

See Also

  • prime/ — Full startup protocol
  • next-bead/ — Claiming with announcements
  • bead-workflow/ — Multi-agent coordination rules