reply
Send a message to the user in the current conversation. Supports rich content including cards, interactive elements, and polls.The message content to send. You can use markdown formatting. Mentions like
@Username are automatically converted to platform-specific syntax.Create a new public thread with this name and post the reply inside it. Thread names are capped at 100 characters.
Formatted cards (e.g., Discord embeds) to attach to the message. Great for structured reports, summaries, or visually distinct content. Maximum 10 cards.Each card can include:
title(string)description(string)color(integer) - Decimal color codeurl(string)fields(array) - Each field hasname,value, and optionalinline(boolean)footer(string)
Interactive components like buttons or select menus. Button clicks are sent back as InteractionEvent with the corresponding
custom_id. Maximum 5 element rows.Each element can be:- Buttons:
type: "buttons"with array of button objects containinglabel,custom_id,style(“primary”, “secondary”, “success”, “danger”, “link”), and optionalurl - Select menu:
type: "select"withcustom_id,optionsarray (each withlabel,value, optionaldescriptionandemoji), and optionalplaceholder
A poll to attach to the message.Poll object includes:
question(string, required)answers(array of strings, required)allow_multiselect(boolean)duration_hours(integer, defaults to 24)
Whether the reply was sent successfully
The conversation identifier
The final content that was sent (after mention conversion)
Example
In email conversations, this sends an actual outbound email. Use
branch + skip for internal thinking without sending.branch
Fork the current conversation context to think independently. The branch gets a clone of your full conversation history and can use memory tools to recall and save information.What the branch should investigate or think about. Be specific about what conclusion you want. The branch sees your full context but works independently.
The UUID of the created branch
Whether the branch was created successfully
Status message about the branch
Example
spawn_worker
Create a new worker process to execute a task. Workers can be fire-and-forget (run once) or interactive (accept follow-up messages).Clear, specific description of what the worker should do. Include all context needed since the worker can’t see your conversation history.
If true, the worker stays alive and accepts follow-up messages via
route. If false, the worker runs once and returns.List of skill names from available skills that are relevant to this task. The worker sees all skills and can read any of them, but suggested skills are flagged as recommended.
Worker type:
"builtin" runs a Rig agent loop with shell/file/exec tools. "opencode" spawns an OpenCode subprocess with full coding agent capabilities. Use "opencode" for complex coding tasks.Working directory for the worker. Required for
"opencode" workers. The OpenCode agent operates in this directory.The UUID of the spawned worker
Whether the worker was created successfully
Whether this is an interactive worker
Status message
Example: Fire-and-forget worker
Example: Interactive coding session
route
Send a follow-up message to an interactive worker. Only works with workers spawned withinteractive: true.
The worker ID (UUID format) from the
spawn_worker resultThe message to send to the worker
Whether the message was delivered
The worker ID
Status message
Example
cancel
Stop a running worker or branch. Use when the process is no longer needed or has gone off track.Type of process to cancel:
"worker" or "branch"The UUID of the worker or branch to cancel
Optional reason for cancellation (logged)
Whether the cancellation was successful
The type of process that was cancelled
The process ID
Status message
Example
skip
Produce no response to the user. Use when a message doesn’t warrant a reply (e.g., lurking in group chat, message wasn’t directed at you).Brief internal reason for skipping (logged but not sent to the user)
Always true when the tool succeeds
Example
Calling
skip suppresses all output for this turn and cancels the typing indicator.react
Add an emoji reaction to the message. Quick, non-verbal acknowledgment.A single unicode emoji character (e.g., ”👍”, ”😂”, ”🔥”, ”👀”)
Whether the reaction was added
The emoji that was used
Example
send_file
Send a file attachment to the user. Reads a file from the agent’s workspace and delivers it in the conversation.Path to the file to send, relative to the workspace directory
Optional caption or description for the file
Whether the file was sent successfully
Status message
File access is restricted to the agent’s workspace boundary for security. Attempting to send files outside the workspace will fail.
Example
send_message_to_another_channel
Send a message to a different platform channel. Useful for cross-platform notifications or multi-channel workflows.The messaging adapter name:
discord, slack, telegram, webhookThe target channel identifier (Discord channel ID, Slack channel name, Telegram chat ID, webhook URL)
The message content to send
Whether the message was sent successfully
Status message
Example
send_agent_message
Send a message to another agent through the agent communication graph. Currently validates that a link exists between agents.Target agent ID or display name
Message content to send to the target agent
Specific link ID to use if multiple links exist to the same agent
Whether the link was validated and message queued
Status message
This tool currently validates that the communication link exists in the agent graph. Full cross-agent task delegation will be implemented in a future release.
Example
cron
Manage scheduled recurring tasks. Create, list, or delete cron jobs that run at specified intervals or on cron schedules.The operation:
"create", "list", or "delete"For create: a short unique ID (e.g., “check-email”, “daily-summary”). For delete: the ID to remove. Must be 1-50 characters, alphanumeric with hyphens and underscores only.
For create: the instruction to execute on each run. Maximum 10,000 characters.
For create: strict wall-clock cron expression (5-field syntax, e.g., “0 9 * * *” for daily at 09:00). Takes precedence over interval_secs.
For create: seconds between runs (minimum 60). Examples: 3600 = hourly, 86400 = daily.
For create: where to send results, format “adapter:target” (e.g., “discord:123456789” for DM, “discord:channel_id” for server). Defaults to current conversation.
For create: hour (0-23) when the job becomes active
For create: hour (0-23) when the job becomes inactive
For create: maximum seconds to wait for the job to complete. Use larger values (e.g., 600) for long-running research or writing tasks.
For create: if true, run this job once and auto-disable after the first execution.
For delete: the ID of the cron job to remove (alternative to
id)Whether the operation succeeded
Status message
For list: array of cron job entries with id, prompt, interval_secs, delivery_target, run_once, and active_hours