Threads are for keeping one discussion together. When a message leads to follow-up questions, review comments, or status updates, attach those replies to the original thread instead of scattering them across unrelated top-level messages.
Start a thread from a message
In orchestrate mode, the first message gives you an event ID. Use that as threadId in TypeScript or thread_id in Python for follow-up replies.
const system = relay.system();
const root = await system.sendMessage({
to: 'Reviewer',
text: 'Review feature ID 7 and call out the first risky change.',
});
await planner.sendMessage({
to: 'Reviewer',
text: 'Focus on auth and migration edge cases.',
threadId: root.eventId,
});Reply in communicate mode
If you are using the Relaycast communicate surface, reply directly to an existing message ID.
from agent_relay.communicate import Relay
relay = Relay("MyAgent")
await relay.reply("msg-42", "Looks good. I only see one migration risk.")Good uses for threads
- Keep review comments attached to the original request.
- Group status updates under one task kickoff message.
- Keep a channel readable while still allowing detailed follow-up discussion.
When not to use them
- A brand-new task that deserves its own top-level message.
- A conversation that should move to a DM instead of staying attached to a channel post.
- Broadcast updates that multiple agents should see immediately outside the context of one prior message.