openclaw/docs/tools/steer.md
Vincent Koc adf0e297b9
docs(tools): fix concrete ux defects in docs/tools (#143856)
* docs(tools): fix concrete ux defects in docs/tools

Works the objectively-checkable subset of the open `ux` audit findings for
`docs/tools/`. Every change below is a thing a reader would otherwise get
wrong, not a restructuring preference.

- goal.md: drop the body `# Goal` that duplicated the frontmatter title and
  rendered a second H1; keep the `#goal` anchor as an `<a id>` stub.
- steer.md: state in the intro that `/tell` is an alias of `/steer`. The
  alias appeared in a code sample before the page ever named it
  (`src/auto-reply/commands-registry.shared.ts:412`).
- kimi-search.md: add the missing `openclaw plugins install
  @openclaw/moonshot-provider` step. `moonshot` is an external package
  (plugin-inventory "Official external packages"), so the documented setup
  could not work as written.
- grok-search.md: say that the `xai` plugin ships with OpenClaw and needs no
  install, since every sibling provider page opens with an install step.
- searxng-search.md, diffs.md: add `openclaw gateway restart` to the install
  fence, matching duckduckgo, exa, firecrawl, lobster, parallel and
  perplexity.
- ollama-search.md: the hosted setup told readers to point
  `models.providers.ollama.baseUrl` at ollama.com without saying that this
  also moves their Ollama *model* traffic. Name the side effect and point at
  the page's own scoped `webSearch.baseUrl` alternative.
- reactions.md: define `clearAll` and `emoji-list`, both used in the channel
  sections but never introduced.
- browser-linux-troubleshooting.md: the verify step jumps from CDP port 18800
  to 18791 with no explanation; say it is the browser control service port
  derived from `gateway.port`, and that `jq` is optional. Promote the second
  `Problem:` heading from H3 to H2 so it stops reading as a sub-part of the
  first (anchor id unchanged).
- apply-patch.md: `*** Move to:` and `*** End of File` were named in Notes but
  never shown. Extend the format block with both; the block now applies
  cleanly against the real `apply_patch` implementation.
- exec.md: fill the one empty Notes cell in the config table
  (`tools.exec.node`).
- permission-modes.md: say what `openclaw approvals get` prints and why it is
  in the recommended-default sequence.
- code-mode/internals.md: give the Runtime status table real header labels
  instead of an empty header row.
- screen.md: say how a client advertises the `ui-commands` capability.
- elevated.md: tag two directive fences as `text` (5 of 478 docs/tools fences
  were untagged; MD040 is disabled so the linter does not catch it).

No anchor ids were dropped: ids enumerated with `parseDocsDocument` before and
after across all 15 files; the only delta is one new Steps id in
kimi-search.md.

* docs(tools): address ClawSweeper review

Both findings were correct.

- screen.md: the connect handshake field is `caps`, not `capabilities`
  (`packages/gateway-protocol/src/schema/frames.ts:46`;
  `ui/src/api/gateway.ts:476`). A client following the old wording would not
  advertise the capability.
- reactions.md: the `emoji-list` gate and result are channel-specific, not
  shared. Telegram gates `react` and `emoji-list` together under
  `actions.reactions` and returns the current chat's allowed reactions
  (`extensions/telegram/src/channel-actions.ts:160-162`), while Slack gates
  `emoji-list` separately under `actions.emojiList`
  (`extensions/slack/src/message-actions.ts:64`). The How it works bullet now
  only defines what the action is and says both vary by channel; the Telegram
  specifics moved into the Telegram accordion.
2026-09-10 16:19:50 +08:00

2.9 KiB

summary read_when title sidebarTitle
Steer an active run without changing queue mode
Using /steer or /tell while an agent is already running
Comparing /steer with /queue modes
Deciding whether to steer the current run or an ACP session
Steer Steer

/steer first tries to send guidance to an already-active run. It is for "adjust this run while it is still working" moments. If the current runtime cannot accept steering, OpenClaw sends the message as a normal prompt instead of dropping it.

/tell is an alias of /steer. The two names are interchangeable everywhere on this page.

Current session

Use top-level /steer to target the active run for the current session:

/steer prefer the smaller patch and keep the tests focused
/tell summarize before making the next tool call

Behavior:

  • Targets only the current session's active run.
  • Works independently of the session's /queue mode.
  • Starts a normal turn with the same message when the session is idle or the active run cannot accept steering.
  • Uses the active runtime's steering path, so the model sees the guidance at the next supported runtime boundary.

Steer vs queue

/queue steer makes normal inbound messages try to steer the active run when they arrive while a run is active. /steer <message> is an explicit command that tries to inject that command's message into the active run at the next supported runtime boundary, regardless of the stored /queue setting. When that injection is not available, the command prefix is stripped and <message> continues as a normal prompt.

The explicit /steer (and /tell) command is Gateway-backed. In openclaw chat or openclaw tui --local, select /queue steer and send the guidance as a normal message; the embedded runtime applies the same steering policy without forwarding a Gateway command.

Use:

  • /steer <message> when you want to guide the active run right now.
  • /queue steer when you want future normal messages to steer active runs by default.
  • /queue collect or /queue followup when future normal messages should wait for a later turn instead of steering the active run.
  • /queue interrupt when the newest message should replace the active run instead of steering it.

For queue modes and steering boundaries, see Command queue and Steering queue.

Sub-agents

Top-level /steer targets the current session's active run. Sub-agents report back to their parent/requester session; /subagents is for visibility only.

ACP sessions

Use /acp steer when the target is an ACP harness session:

/acp steer --session agent:main:acp:codex tighten the repro

See ACP agents for ACP session selection and runtime behavior.