skills/23blocks-os/ai-maestro-agent-messaging/SKILL.md
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.
npx skillsauth add aiskillstore/marketplace ai-maestro-agent-messagingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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:
# 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:
check-aimaestro-messages.sh [--mark-read]
What it does:
--mark-read flag to mark all messages as read after viewingExample:
# 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:
read-aimaestro-message.sh <message-id> [--no-mark-read]
What it does:
--no-mark-read flag)Example:
# 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:
check-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:
check-new-messages-arrived.sh
What it does:
Example:
check-new-messages-arrived.sh
# Output: "You have 3 new message(s)" ← Messages sent TO YOU
Command:
cat ~/.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_*.json
Example:
# 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:
# 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:
send-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:
# 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:
{
"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:
# 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 complete
Cannot find host:
# 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:
send-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:
# 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:
# 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:
# 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
# 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
# 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
# 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
send-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
# 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
send-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
send-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 YOUR inbox proactively - Run check-and-show-messages.sh when starting work or operator asks
~/.aimaestro/messages/inbox/YOUR-AGENT-ID/Read message content - Display full message details
Assess urgency - Check priority level (urgent = respond immediately TO THAT AGENT)
Take action - Work on the request that was sent TO YOU
Respond TO THE AGENT who messaged you - Send reply using appropriate method
Mark as read - (Optional) Update YOUR message status via API
Remember: Operator tells YOU to send a message TO ANOTHER AGENT
Understand the request - What does the operator want YOU to communicate TO ANOTHER AGENT?
Identify target agent - Which OTHER agent should receive this message FROM YOU?
Choose method - Urgent? Use instant. Detailed? Use file-based. Both? Use both.
Select priority - How urgent is this for THE OTHER AGENT?
Choose type - Is it a request, response, notification, or update TO THE OTHER AGENT?
Execute command - Run the appropriate send-* script
Confirm - Tell operator: "Message sent to [other-agent-name]"
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 namesdevelopment
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.