/talk-to - Agent Messaging
Send messages to agents via Oracle threads. Each agent has a persistent channel thread.
Usage
/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 channelsMode 0: No arguments
If ARGUMENTS is empty, show usage help then run --list.
Routing
| Pattern | Use |
|---|---|
channel:{agent} | Persistent per-agent channel |
topic:{agent}:{slug} | Topic-specific thread (with --topic) |
#{id} | Direct thread reference by ID |
Mode 1: --list
oracle_threads()(no status filter)- Filter titles starting with
channel:ortopic:, excludeclosed - Display:
channel:arthur (#42) pending — 12 msgs
Mode 2: --new (fast create)
Skip lookup. One MCP call.
- Compose message from intent
oracle_thread({title: "channel:{agent}", message, role: "human"})- Notify:
Bash maw hey {agent}-oracle 'Thread #{id} from {self}: {preview}'
- If maw hey fails → warn only, don't error (thread already sent)
- Confirm:
Created channel:{agent} (thread #{id})
Mode 3: One-shot (default)
- Compose message from intent
- If first arg is
#{id}→ post directly to that thread ID - Otherwise:
oracle_threads()→ findchannel:{agent}, create if missing - Post message to thread
- Notify:
Bash maw hey {agent}-oracle 'Thread #{id} from {self}: {preview}'
- If maw hey fails → warn only, don't error (thread already sent)
oracle_thread_read({threadId})→ show any agent responses- Confirm:
Posted to channel:{agent} (thread #{id})
Mode 4: loop (autonomous conversation)
Like Ralph loop — AI drives the conversation autonomously. No user prompts between turns.
- Find or create thread (
channel:{agent}, or--newto skip lookup) - Compose opening message from user's intent and post it
- Autonomous loop (max 10 iterations): a.
oracle_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 hit - Notify (once, after opening message):
Bash maw hey {agent}-oracle 'Thread #{id} from {self}: {preview}'
- If maw hey fails → warn only, don't error
- Show summary:
Conversation with {agent} (thread #{id}) — {n} messages, {iterations} turns Key insights: - [insight 1] - [insight 2] - Leave thread open for future use
The goal is insight extraction. You are having a conversation on behalf of the human to learn something useful.
Parsing Rules
- First arg = agent name (lowercase),
#id(thread ref), or--list --new= skip lookup, create freshloop= autonomous conversation (AI drives, no user prompts)--topic "slug"= usetopic:{agent}:{slug}instead ofchannel:{agent}- Everything else = the message/intent
Message Composition
CRITICAL: You are the composer. The user gives intent, you write the message.
- Compose a clear, natural message from the user's intent
- Post immediately — do NOT ask the user what to say
- Do NOT use AskUserQuestion for message content
- Show what you posted after sending
If the message already reads like a direct message (e.g. "What's your status?"), post as-is.
Auto Notification (maw hey)
After posting to a thread, notify the target agent via maw hey:
maw hey {agent}-oracle 'Thread #{id} from {self}: {first 60 chars of message}'{self}= current Oracle's name (e.g. "Mother Oracle"){agent}= target agent name (lowercase){preview}= first ~60 chars of the posted message- Runs once per /talk-to invocation (not per loop iteration)
- Fail-safe: if
maw heyerrors, log warning and continue — the thread is the source of truth
Important Notes
- Agent names are always lowercase
- Thread titles are the routing key — never modify existing thread titles
- One channel thread per agent (reuse, don't recreate)
#{id}lets users reference any thread directly — no lookup needed- All messages attributed with
role: "human"
ARGUMENTS: $ARGUMENTS