mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-28 18:38:13 +00:00
Summary: - The PR adds `openclaw agent --session-key`, normalizes explicit session keys through Gateway and embedded agent execution, and updates docs, tests, and changelog. - Reproducibility: yes. Current main's `openclaw agent` registration and gateway CLI option type lack `--sessi ... Gateway agent protocol already accepts `sessionKey`; this is source-reproducible without executing the CLI. Automerge notes: - PR branch already contained follow-up commit before automerge: fix(agent): support explicit CLI session keys Validation: - ClawSweeper review passed for head2c76dd339f. - Required merge gates passed before the squash merge. Prepared head SHA:2c76dd339fReview: https://github.com/openclaw/openclaw/pull/85121#issuecomment-4513508932 Co-authored-by: Kaspre <kaspre@gmail.com> Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com> Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com> Approved-by: takhoffman Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
131 lines
5.5 KiB
Markdown
131 lines
5.5 KiB
Markdown
---
|
|
summary: "Run agent turns from the CLI and optionally deliver replies to channels"
|
|
read_when:
|
|
- You want to trigger agent runs from scripts or the command line
|
|
- You need to deliver agent replies to a chat channel programmatically
|
|
title: "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
|
|
|
|
<Steps>
|
|
<Step title="Run a simple agent turn">
|
|
```bash
|
|
openclaw agent --agent main --message "What is the weather today?"
|
|
```
|
|
|
|
This sends the message through the Gateway and prints the reply.
|
|
|
|
</Step>
|
|
|
|
<Step title="Target a specific agent or session">
|
|
```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"
|
|
```
|
|
|
|
</Step>
|
|
|
|
<Step title="Deliver the reply to a channel">
|
|
```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"
|
|
```
|
|
|
|
</Step>
|
|
</Steps>
|
|
|
|
## Flags
|
|
|
|
| Flag | Description |
|
|
| ----------------------------- | ----------------------------------------------------------- |
|
|
| `--message \<text\>` | Message to send (required) |
|
|
| `--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.
|
|
- 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](/cli/agent#json-delivery-status).
|
|
|
|
## Examples
|
|
|
|
```bash
|
|
# 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
|
|
|
|
# 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"
|
|
```
|
|
|
|
## Related
|
|
|
|
<CardGroup cols={2}>
|
|
<Card title="Agent CLI reference" href="/cli/agent" icon="terminal">
|
|
Full `openclaw agent` flag and option reference.
|
|
</Card>
|
|
<Card title="Sub-agents" href="/tools/subagents" icon="users">
|
|
Background sub-agent spawning.
|
|
</Card>
|
|
<Card title="Sessions" href="/concepts/session" icon="comments">
|
|
How session keys work and how `--to`, `--agent`, and `--session-id` resolve them.
|
|
</Card>
|
|
<Card title="Slash commands" href="/tools/slash-commands" icon="slash">
|
|
Native command catalog used inside agent sessions.
|
|
</Card>
|
|
</CardGroup>
|