From oracle-skills
Sends messages to other Oracle agents via threads, maw real-time pings, or inbox file writes. Use when user says "talk to", "message", or "chat with" an agent.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oracle-skills:talk-to <agent-name> [message] [--maw | --thread | --inbox]<agent-name> [message] [--maw | --thread | --inbox]The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Send messages to agents via Oracle threads. Each agent has a persistent channel thread.
Send messages to agents via Oracle threads. Each agent has a persistent channel thread.
Messaging consolidation (2026-07-06): /hey, /contacts, /mailbox, and /inbox were archived to the zombie tier — this skill is the one messaging verb now. For real-time tmux pings use
maw heydirectly (or--mawhere). Archived skills remain installable viaarra install -s <name>.
/talk-to arthur "What's your status?" # one-shot message
/talk-to arthur --new "Hey, starting fresh" # skip lookup, create new thread
/talk-to arthur loop ask about their work # autonomous conversation
/talk-to #42 "follow up on this" # post to thread by ID
/talk-to --list # show channels
/talk-to arthur --maw "quick ping" # force maw transport (real-time tmux)
/talk-to arthur --thread "async question" # force MCP thread transport
/talk-to arthur --inbox "offline message" # force inbox transport (file write)
If ARGUMENTS is empty, show usage help then run --list.
Always read contacts first. This is the source of truth for agent routing.
date "+🕐 %H:%M %Z (%A %d %B %Y)"
CONTACTS="$(pwd)/ψ/contacts.json"
if [ ! -f "$CONTACTS" ]; then
# Fallback path
CONTACTS="$(pwd)/.oracle/contacts.json"
fi
if [ -f "$CONTACTS" ]; then
MAW=$(jq -r ".contacts.\"$AGENT\".maw // empty" "$CONTACTS")
INBOX=$(jq -r ".contacts.\"$AGENT\".inbox // empty" "$CONTACTS")
THREAD=$(jq -r ".contacts.\"$AGENT\".thread // empty" "$CONTACTS")
REPO=$(jq -r ".contacts.\"$AGENT\".repo // empty" "$CONTACTS")
NOTES=$(jq -r ".contacts.\"$AGENT\".notes // empty" "$CONTACTS")
FOUND_IN_CONTACTS=true
else
FOUND_IN_CONTACTS=false
fi
If agent not found in contacts AND not found in maw ls:
I don't know "{agent}".
/contacts add {agent} — register transport info
/talk-to {agent} --thread "message" — try MCP thread anyway
Offer /contacts add first. If user insists, fall through to MCP thread.
| Flag | Transport | Best For |
|---|---|---|
| (none) | auto — detect best | Default |
--maw | maw hey (tmux sendkeys) | Real-time, local fleet, low latency |
--thread | MCP oracle_thread | Async, persistent, cross-machine |
--inbox | File write to ψ/inbox/ | Offline, no maw/MCP needed |
Auto-detect logic (when no flag):
ψ/contacts.json → has maw field? → use maw heymaw ls 2>/dev/null | grep -q "{agent}" fallback → use maw hey# Auto-detect: contacts-first, maw ls fallback
if [ -n "$MAW" ]; then
echo "USE_MAW (from contacts: $MAW)"
elif maw ls 2>/dev/null | grep -q "{agent}"; then
echo "USE_MAW (from maw ls)"
else
echo "USE_THREAD"
fi
When using --maw:
maw hey {MAW or agent-oracle} '{message}'maw peek {agent} to check responseSent via maw to {agent}When using --inbox:
No inbox path for {agent}. Run /contacts show {agent}SELF="$(basename $(pwd) | sed 's/-oracle$//')"
echo "$MESSAGE" > "$INBOX/$(date +%Y%m%d_%H%M)_from_${SELF}.md"
Dropped to {agent}'s inboxWhen using --thread (or auto-detected thread):
Fall through to Mode 3 (one-shot) below.
| Pattern | Use |
|---|---|
channel:{agent} | Persistent per-agent channel |
topic:{agent}:{slug} | Topic-specific thread (with --topic) |
#{id} | Direct thread reference by ID |
arra_threads() (no status filter)channel: or topic:, exclude closedchannel:arthur (#42) pending — 12 msgsSkip lookup. One MCP call.
arra_thread({ title: "channel:{agent}", message, role: "human" })Bash maw hey {MAW or agent-oracle} 'Thread #{id} from {self}: {preview}'
maw hey fails → warn only, don't error (thread already sent)Created channel:{agent} (thread #{id})#{id} → post directly to that thread IDarra_threads() → find channel:{agent}, create if missingBash maw hey {MAW or agent-oracle} 'Thread #{id} from {self}: {preview}'
maw hey fails → warn only, don't error (thread already sent)arra_thread_read({ threadId }) → show any agent responsesPosted to channel:{agent} (thread #{id})Like Ralph loop — AI drives the conversation autonomously. No user prompts between turns.
channel:{agent}, or --new to skip lookup)arra_thread_read({ threadId }) — check for new messages
b. If agent responded: read their response, compose a thoughtful follow-up, post it
c. If no new response: compose a follow-up question or probe deeper, post it
d. After each exchange, briefly note what you learned
e. Stop when: enough insight gathered, conversation circling, or 10 iterations hitBash maw hey {MAW or agent-oracle} 'Thread #{id} from {self}: {preview}'
maw hey fails → warn only, don't errorConversation with {agent} (thread #{id}) — {n} messages, {iterations} turns
Key insights:
- [insight 1]
- [insight 2]
The goal is insight extraction. You are having a conversation on behalf of the human to learn something useful.
#id (thread ref), or --list--new = skip lookup, create freshloop = autonomous conversation (AI drives, no user prompts)--topic "slug" = use topic:{agent}:{slug} instead of channel:{agent}CRITICAL: You are the composer. The user gives intent, you write the message.
If the message already reads like a direct message (e.g. "What's your status?"), post as-is.
After posting to a thread, notify the target agent via maw hey:
maw hey {MAW or agent-oracle} 'Thread #{id} from {self}: {first 60 chars of message}'
{MAW} = contacts maw field (e.g. "mawjs-oracle") — preferred over {agent}-oracle{self} = current Oracle's name (e.g. "Mother Oracle"){preview} = first ~60 chars of the posted messagemaw hey errors, log warning and continue — the thread is the source of truth#{id} lets users reference any thread directly — no lookup neededrole: "human"ARGUMENTS: $ARGUMENTS
npx claudepluginhub soul-brews-studio/arra-oracle-skills-cli --plugin oracle-skillsSends messages between Claude Code, Codex, Gemini CLI, and other agents via SQLite. No daemon or network required.
Guides setting up external messaging channels (WhatsApp, Telegram, Discord, iMessage) for Claude Code agents via plugins. Useful for enabling communication outside the CLI.
Multi-agent group chat collaboration system with @mentions, task management, decision voting, and inbox notifications. Use when building multi-agent systems needing structured communication and coordination.