Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Send and receive messages between AI agents using AI Maestro's messaging system. Use this skill when the user asks to "send a message", "check inbox", "read messages", "notify [agent]", "tell [agent]", or any inter-agent communication.
.claude/skills/aiskillstore-ai-maestro-agent-messaging/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 1053% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 928% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 1867% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 1428% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 163% | 0% |
Enable communication between AI coding agents using AI Maestro's dual-channel messaging system. Agents are identified by their agent ID or alias, with tmux session names as a fallback. Supports both SENDING and RECEIVING messages.
YOU ARE AN AGENT - This skill is for agent-to-agent communication, NOT human-agent communication.
When the human operator says "check your messages" or "read your messages":
Example:
backend-api~/.aimaestro/messages/inbox/backend-api/ (YOUR inbox)backend-api (from any sender)tmux display-message -p '#S')~/.aimaestro/messages/inbox/YOUR-AGENT-ID/ or ~/.aimaestro/messages/inbox/YOUR-AGENT-NAME/You do NOT read:
You DO read:
~/.aimaestro/messages/inbox/YOUR-AGENT-ID/Sending (Agent-to-Agent):
Receiving (Check YOUR OWN Inbox):
check-aimaestro-messages.shread-aimaestro-message.sh <id>check-aimaestro-messages.shRECOMMENDED WORKFLOW:
check-aimaestro-messages.shread-aimaestro-message.sh <message-id>📖 QUICK START - Check and Read Messages:
bash# Step 1: Check what unread messages you have check-aimaestro-messages.sh # Output shows: # [msg-1234...] 🔴 From: backend-api | 2025-10-29 14:30 # Subject: Authentication endpoint ready # Preview: The /api/auth/login endpoint is now... # Step 2: Read the specific message (automatically marks as read) read-aimaestro-message.sh msg-1234... # Step 3: Check again - that message is now gone from unread check-aimaestro-messages.sh # Output: "📭 No unread messages"
⚠️ CRITICAL: What "YOUR inbox" means:
~/.aimaestro/messages/inbox/YOUR-AGENT-ID/ (or agent name as fallback)IMPORTANT: These commands check YOUR AGENT'S inbox only. They automatically:
~/.aimaestro/messages/inbox/YOUR-AGENT-ID/Command:
bashcheck-aimaestro-messages.sh [--mark-read]
What it does:
--mark-read flag to mark all messages as read after viewingExample:
bash# Check unread messages without marking as read check-aimaestro-messages.sh # Check and mark all as read check-aimaestro-messages.sh --mark-read
Output format:
📬 You have 3 unread message(s)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[msg-167...] 🔴 From: backend-architect | 2025-10-29 13:45
Subject: API endpoint ready
Preview: The POST /api/auth/login endpoint is now...
[msg-168...] 🔵 From: frontend-dev | 2025-10-29 14:20
Subject: Need help with styling
Preview: Can you review the CSS for the navigation...Command:
bashread-aimaestro-message.sh <message-id> [--no-mark-read]
What it does:
--no-mark-read flag)Example:
bash# Read message (automatically marks as read) read-aimaestro-message.sh msg-1234567890-abc # Peek at message without marking as read read-aimaestro-message.sh msg-1234567890-abc --no-mark-read
Output format:
═══════════════════════════════════════════════════════════════
📧 Message: API endpoint ready
═══════════════════════════════════════════════════════════════
From: backend-architect
To: frontend-dev
Date: 2025-10-29 13:45:00
Priority: 🔴 urgent
Type: response
───────────────────────────────────────────────────────────────
The POST /api/auth/login endpoint is now deployed and ready...
───────────────────────────────────────────────────────────────
📎 Context:
{
"endpoint": "/api/auth/login"
}
✅ Message marked as read
═══════════════════════════════════════════════════════════════Command:
bashcheck-and-show-messages.sh
What it does:
check-aimaestro-messages.sh insteadWhy not use this manually?
Output format:
Message: msg_1234567890_abcde
From: backend-architect ← Another agent sent this TO YOU
To: frontend-dev ← YOUR session name
Subject: Need API endpoint
Priority: high
Type: request
Status: unread
Timestamp: 2025-01-17 14:23:45
Content: Please implement POST /api/users with pagination...Command:
bashcheck-new-messages-arrived.sh
What it does:
Example:
bashcheck-new-messages-arrived.sh # Output: "You have 3 new message(s)" ← Messages sent TO YOU
Command:
bashcat ~/.aimaestro/messages/inbox/$(tmux display-message -p '#S')/<message-id>.json | jq
What it does:
$(tmux display-message -p '#S') = YOUR session name (auto-detected)jq for pretty formattingDirectory structure:
~/.aimaestro/messages/
├── inbox/YOUR-SESSION-NAME/ # Messages TO YOU from other agents
│ └── msg_*.json
├── sent/YOUR-SESSION-NAME/ # Messages FROM YOU to other agents
│ └── msg_*.json
└── archived/YOUR-SESSION-NAME/ # YOUR archived messages
└── msg_*.jsonExample:
bash# Get YOUR session name tmux display-message -p '#S' # Output: frontend-dev ← This is YOU # List all messages in YOUR inbox ls ~/.aimaestro/messages/inbox/$(tmux display-message -p '#S')/ # Read specific message sent TO YOU cat ~/.aimaestro/messages/inbox/$(tmux display-message -p '#S')/msg_1234567890_abcde.json | jq
Command:
bash# Get current session name SESSION_NAME=$(tmux display-message -p '#S') # Mark message as read curl -X PATCH "http://localhost:23000/api/messages?agent=$SESSION_NAME&id=<message-id>&action=read" \ -H 'Content-Type: application/json'
⚠️ CRITICAL: What "sending a message" means:
Use for detailed, non-urgent communication that needs to be referenced later BY OTHER AGENTS.
Command:
bashsend-aimaestro-message.sh <to_agent[@host]> <subject> <message> [priority] [type]
Parameters:
to_agent[@host] (required) - Target agent with optional host:backend-api - Send to agent on same host (local)backend-api@mac-mini - Send to agent on remote host "mac-mini"backend-api@local - Explicitly send to local agentsubject (required) - Brief subject linemessage (required) - Message content to send TO OTHER AGENTpriority (optional) - low | normal | high | urgent (default: normal)type (optional) - request | response | notification | update (default: request)Examples:
bash# Simple request (local agent) send-aimaestro-message.sh backend-architect "Need API endpoint" "Please implement POST /api/users with pagination" # Cross-host message (agent on remote machine) send-aimaestro-message.sh crm-api@mac-mini "Customer data sync" "Please sync customer records from CRM" high request # Urgent notification (local) send-aimaestro-message.sh frontend-dev "Production issue" "API returning 500 errors" urgent notification # Response to request send-aimaestro-message.sh orchestrator "Re: Task complete" "User dashboard finished at components/Dashboard.tsx" normal response # Progress update send-aimaestro-message.sh project-lead "Payment integration: 60% done" "Stripe API integrated. Working on webhooks. ETA: 2 hours." normal update
AI Maestro supports sending messages to agents running on different machines (hosts). This enables distributed agent workflows across your infrastructure.
Hosts are configured in ~/.aimaestro/hosts.json:
json{ "hosts": [ { "id": "local", "name": "macbook-pro", "url": "http://localhost:23000", "type": "local", "enabled": true }, { "id": "mac-mini", "name": "mac-mini-server", "url": "http://100.80.12.6:23000", "type": "remote", "enabled": true } ] }
Use the agent@host format to send messages to remote agents:
bash# Send to agent "crm-api" on host "mac-mini" send-aimaestro-message.sh crm-api@mac-mini "Sync request" "Please sync customer data" # Send to agent "data-processor" on host "cloud-server" send-aimaestro-message.sh data-processor@cloud-server "Process batch" "Run nightly ETL" high request
agent@host format~/.aimaestro/hosts.json/api/messages endpointWhen viewing messages, sender info includes their host:
From: backend-api@macbook-pro
To: crm-api@mac-mini
Subject: Data sync completeCannot find host:
bash# List available hosts source ~/.local/share/aimaestro/shell-helpers/common.sh list_hosts
Remote host unreachable:
~/.aimaestro/hosts.jsoncurl http://<host-url>/api/sessionsAgent not found on remote host:
curl http://<host-url>/api/agentsUse for urgent alerts that need immediate attention FROM OTHER AGENTS.
Command:
bashsend-tmux-message.sh <target_session> <message> [method]
Parameters:
target_session (required) - Target agent's name (ANOTHER AGENT, not operator)message (required) - Alert text to send TO OTHER AGENTmethod (optional) - display | inject | echo (default: display)Methods:
display - Popup notification (non-intrusive, auto-dismisses)inject - Inject into terminal history (visible but interrupts)echo - Formatted output (most visible, most intrusive)Examples:
bash# Quick alert (popup) send-tmux-message.sh backend-architect "Check your inbox!" # Urgent visible alert send-tmux-message.sh frontend-dev "Build failed! Check logs" inject # Critical formatted alert send-tmux-message.sh backend-architect "PRODUCTION DOWN!" echo
For critical issues, use both methods:
bash# 1. Get attention immediately send-tmux-message.sh backend-architect "🚨 Check inbox NOW!" # 2. Provide full details send-aimaestro-message.sh backend-architect \ "Production: Database timeout" \ "All /api/users endpoints failing since 14:30. Connection pool exhausted. ~200 users affected. Need immediate fix." \ urgent \ notification
Use file-based (send-aimaestro-message.sh) when:
Use instant (send-tmux-message.sh) when:
Use both when:
bash# YOU are agent "frontend-dev" # Best practice: Always check YOUR inbox when starting work check-and-show-messages.sh # This checks ~/.aimaestro/messages/inbox/frontend-dev/ # Shows messages OTHER AGENTS sent TO YOU # If messages found from other agents, read and respond appropriately
bash# Operator asks: "Any new messages?" # YOU (the agent) check YOUR inbox check-new-messages-arrived.sh # Output: "You have 2 new message(s)" ← Sent TO YOU by other agents # Then show full details from YOUR inbox check-and-show-messages.sh
bash# YOU are agent "backend-architect" # 1. Check YOUR inbox for messages sent TO YOU check-and-show-messages.sh # Output shows message sent TO YOU: # Message: msg_1705502625_abc123 # From: frontend-dev ← Another agent sent this # To: backend-architect ← YOU (your session) # Subject: Need API endpoint # Priority: high # Type: request # Content: Please implement POST /api/users with pagination... # 2. Work on the request (implement the feature) # 3. Send response TO THE AGENT who messaged you send-aimaestro-message.sh frontend-dev \ "Re: API endpoint ready" \ "Implemented POST /api/users at routes/users.ts:45. Includes pagination support." \ normal \ response
bash# YOU are agent "frontend-dev" # Check YOUR inbox check-and-show-messages.sh # Output shows urgent message sent TO YOU: # 🚨 Priority: urgent # From: backend-architect ← Sent by another agent # To: frontend-dev ← YOU (your session) # Subject: Production: Database down # Content: All queries failing since 15:30... # 1. Acknowledge immediately TO THE AGENT who sent it send-tmux-message.sh backend-architect "Received urgent alert - investigating now!" inject # 2. Work on issue # 3. Send detailed update TO THE AGENT who alerted you send-aimaestro-message.sh backend-architect \ "Re: Database issue - RESOLVED" \ "Issue identified: connection pool exhausted. Increased max_connections. System stable." \ urgent \ response
bashsend-aimaestro-message.sh backend-api \ "Need GET /api/users endpoint" \ "Building user list UI. Need endpoint returning array of users with {id, name, email}. Pagination optional but nice." \ high \ request
bash# Get attention send-tmux-message.sh backend-api "🚨 Urgent: Check inbox!" # Provide details send-aimaestro-message.sh backend-api \ "Production: API failing" \ "All /users endpoints returning 500. Database connection timeout. ~100 users affected." \ urgent \ notification
bashsend-aimaestro-message.sh project-lead \ "User auth: 75% complete" \ "✅ Database schema done ✅ Registration endpoint done ✅ Login endpoint done ⏳ Password reset in progress ETA: 1 hour. No blockers." \ normal \ update
bashsend-aimaestro-message.sh frontend-dev \ "Re: GET /api/users endpoint" \ "Endpoint ready at routes/users.ts:120. Returns {users: Array<User>, total: number, page: number}. Supports pagination with ?page=1&limit=20." \ normal \ response
Remember: You are checking YOUR inbox for messages other agents sent TO YOU
check-and-show-messages.sh when starting work or operator asks~/.aimaestro/messages/inbox/YOUR-AGENT-ID/Remember: Operator tells YOU to send a message TO ANOTHER AGENT
No messages found:
Script not found:
which check-and-show-messages.shls -la ~/.local/bin/check-*.shCannot read inbox directory:
ls -la ~/.aimaestro/messages/inbox/$(tmux display-message -p '#S')/tmux display-message -p '#S'Important: If you can't find messages:
Command fails:
tmux list-sessionscurl http://localhost:23000/api/sessionswhich send-aimaestro-message.shInvalid session name:
tmux list-sessions to see valid names| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | pass→pass | 13,286 | 8,960 | -33% | 1 | 1 | 0% | 2,514 | 7,891 | +214% | 0 | 0 | — |
case-01 | fail→fail | 2,755 | 4,431 | +61% | 1 | 1 | 0% | 383 | 6,394 | +1569% | 0 | 0 | — |
case-02 | fail→pass | 3,828 | 6,491 | +70% | 1 | 1 | 0% | 578 | 6,664 | +1053% | 0 | 0 | — |
case-03 | fail→pass | 8,859 | 4,178 | -53% | 1 | 1 | 0% | 677 | 6,958 | +928% | 0 | 0 | — |
case-09 | fail→pass | 7,168 | 4,582 | -36% | 1 | 1 | 0% | 328 | 6,452 | +1867% | 0 | 0 | — |
case-05 | pass→pass | 5,845 | 4,141 | -29% | 1 | 1 | 0% | 1,090 | 6,950 | +538% | 0 | 0 | — |
case-06 | pass→pass | 6,989 | 5,155 | -26% | 1 | 1 | 0% | 1,280 | 7,225 | +464% | 0 | 0 | — |
case-07 | fail→pass | 3,063 | 1,559 | -49% | 1 | 1 | 0% | 419 | 6,402 | +1428% | 0 | 0 | — |
case-08 | fail→pass | 14,804 | 4,035 | -73% | 1 | 1 | 0% | 2,424 | 6,375 | +163% | 0 | 0 | — |
case-10 | fail→fail | 4,863 | 6,487 | +33% | 1 | 1 | 0% | 826 | 6,541 | +692% | 0 | 0 | — |
case-11 | fail→pass | 2,894 | 1,847 | -36% | 1 | 1 | 0% | 403 | 6,441 | +1498% | 0 | 0 | — |
case-12 | fail→pass | 3,212 | 3,751 | +17% | 1 | 1 | 0% | 446 | 6,552 | +1369% | 0 | 0 | — |
case-13 | fail→pass | 6,040 | 3,013 | -50% | 1 | 1 | 0% | 938 | 6,715 | +616% | 0 | 0 | — |
case-14 | fail→pass | 8,604 | 6,986 | -19% | 1 | 1 | 0% | 1,402 | 6,641 | +374% | 0 | 0 | — |
case-15 | fail→pass | 10,375 | 2,448 | -76% | 1 | 1 | 0% | 1,643 | 6,506 | +296% | 0 | 0 | — |
case-16 | fail→pass | 9,021 | 2,568 | -72% | 1 | 1 | 0% | 1,405 | 6,598 | +370% | 0 | 0 | — |
case-17 | fail→pass | 11,725 | 4,751 | -59% | 1 | 1 | 0% | 1,372 | 6,480 | +372% | 0 | 0 | — |
case-18 | fail→pass | 8,082 | 5,551 | -31% | 1 | 1 | 0% | 1,391 | 6,542 | +370% | 0 | 0 | — |
case-19 | pass→pass | 4,792 | 1,952 | -59% | 1 | 1 | 0% | 832 | 6,506 | +682% | 0 | 0 | — |
case-20 | fail→pass | 4,712 | 1,972 | -58% | 1 | 1 | 0% | 709 | 6,485 | +815% | 0 | 0 | — |
case-21 | fail→pass | 9,476 | 3,651 | -61% | 1 | 1 | 0% | 1,490 | 6,804 | +357% | 0 | 0 | — |
case-22 | fail→pass | 5,706 | 2,257 | -60% | 1 | 1 | 0% | 915 | 6,581 | +619% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +73 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.