src/skills/talk-to/SKILL.md
Talk to another Oracle agent via contacts + threads. Use when user says "talk to", "message", "chat with", or wants to communicate with another agent (e.g. "talk to pulse", "message neo"). Do NOT trigger for OracleNet social feed (use /oraclenet), skill management (use /oracle), or family registry (use /oracle-family-scan).
npx skillsauth add Soul-Brews-Studio/oracle-skills-cli talk-toInstall 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.
Send messages to agents via Oracle threads. Each agent has a persistent channel thread.
/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
testing
Cut a beta pre-release — bump CalVer with --beta, PR to beta branch, CI auto-tags + publishes to npm @beta. Use when user says 'release beta', 'cut beta', '/release-beta', or wants to publish a beta version for pre-release testing.
testing
Cut an alpha pre-release — bump CalVer, PR to alpha branch, CI auto-tags + publishes to npm @alpha. Use when user says 'release alpha', 'cut alpha', '/release-alpha', or wants to publish an alpha version.
tools
Talk to another oracle via maw federation. Uses fleet machine names (white, mba, clinic-nat, oracle-world, phaith). Auto-signs with current oracle's [host:handle] from CLAUDE.md. Global — works from any oracle repo.
development
Log information for future reference. Use when user says "fyi", "remember this", "note that", "for your info".