Files
openclaw/docs/tools/agent-send.md
ooiuuii a0fedcfb7e feat(cli): add --message-file to openclaw agent
Merges the Clownfish-repaired contributor branch for #93351. The latest repair preserves inline --message whitespace, adds --message-file coverage for gateway and local embedded runs, and the PR is clean/mergeable on head 4897f2fc20.
2026-06-22 20:13:57 +08:00

6.0 KiB

summary, read_when, title
summary read_when title
Run agent turns from the CLI and optionally deliver replies to channels
You want to trigger agent runs from scripts or the command line
You need to deliver agent replies to a chat channel programmatically
Agent send

openclaw agent runs a single agent turn from the command line without needing an inbound chat message. Use it for scripted workflows, testing, and programmatic delivery.

Quick start

```bash openclaw agent --agent main --message "What is the weather today?" ```
This sends the message through the Gateway and prints the reply.
```bash openclaw agent --agent ops --message-file ./task.md ```
This reads a valid UTF-8 file as the agent message body.
```bash # Target a specific agent openclaw agent --agent ops --message "Summarize logs"
# Target a phone number (derives session key)
openclaw agent --to +15555550123 --message "Status update"

# Reuse an existing session
openclaw agent --session-id abc123 --message "Continue the task"

# Target an exact session key
openclaw agent --session-key agent:ops:incident-42 --message "Summarize status"
```
```bash # Deliver to WhatsApp (default channel) openclaw agent --to +15555550123 --message "Report ready" --deliver
# Deliver to Slack
openclaw agent --agent ops --message "Generate report" \
  --deliver --reply-channel slack --reply-to "#reports"
```

Flags

Flag Description
--message \<text\> Inline message to send
--message-file \<path\> Read the message from a valid UTF-8 file
--to \<dest\> Derive session key from a target (phone, chat id)
--session-key \<key\> Use an explicit session key
--agent \<id\> Target a configured agent (uses its main session)
--session-id \<id\> Reuse an existing session by id
--local Force local embedded runtime (skip Gateway)
--deliver Send the reply to a chat channel
--channel \<name\> Delivery channel (whatsapp, telegram, discord, slack, etc.)
--reply-to \<target\> Delivery target override
--reply-channel \<name\> Delivery channel override
--reply-account \<id\> Delivery account id override
--thinking \<level\> Set thinking level for the selected model profile
--verbose \<on|full|off\> Set verbose level
--timeout \<seconds\> Override agent timeout
--json Output structured JSON

Behavior

  • By default, the CLI goes through the Gateway. Add --local to force the embedded runtime on the current machine.
  • Pass exactly one of --message or --message-file. File messages preserve multiline content after removing an optional UTF-8 BOM.
  • If the Gateway is unreachable, the CLI falls back to the local embedded run.
  • Session selection: --to derives the session key (group/channel targets preserve isolation; direct chats collapse to main).
  • --session-key selects an explicit key. Agent-prefixed keys must use agent:<agent-id>:<session-key>, and --agent must match that agent id when both are supplied. Bare non-sentinel keys are scoped to --agent when supplied; for example, --agent ops --session-key incident-42 routes to agent:ops:incident-42. Without --agent, bare non-sentinel keys are scoped to the configured default agent. Literal global and unknown remain unscoped only when no --agent is supplied; in that case, embedded fallback and store ownership use the configured default agent.
  • Thinking and verbose flags persist into the session store.
  • Output: plain text by default, or --json for structured payload + metadata.
  • With --json --deliver, the JSON includes delivery status for sent, suppressed, partial, and failed sends. See JSON delivery status.

Examples

# Simple turn with JSON output
openclaw agent --to +15555550123 --message "Trace logs" --verbose on --json

# Turn with thinking level
openclaw agent --session-id 1234 --message "Summarize inbox" --thinking medium

# Multiline prompt from a file
openclaw agent --agent ops --message-file ./task.md

# Exact session key
openclaw agent --session-key agent:ops:incident-42 --message "Summarize status"

# Legacy key scoped to an agent
openclaw agent --agent ops --session-key incident-42 --message "Summarize status"

# Deliver to a different channel than the session
openclaw agent --agent ops --message "Alert" --deliver --reply-channel telegram --reply-to "@admin"
Full `openclaw agent` flag and option reference. Background sub-agent spawning. How session keys work and how `--to`, `--agent`, and `--session-id` resolve them. Native command catalog used inside agent sessions.