Announce
Sub-agents report back via an announce step:- The announce step runs inside the sub-agent session (not the requester session).
- Runs spawned with
expectsCompletionMessage: falseskip the announce step entirely; the run registry records their delivery as not required. - An exact
ANNOUNCE_SKIPresponse suppresses announce output. - For completion-required runs, an exact child
NO_REPLYresponse or no output is a missing deliverable handed to the requester/parent for visible representation or retry; it is not credited as silent delivery. - Optional, duplicate, already-visible, or otherwise non-required paths may use exact
NO_REPLYfor intentional silence.
- Top-level requester sessions use a follow-up
agentcall with external delivery (deliver=true). - Nested requester subagent sessions receive an internal follow-up injection (
deliver=false) so the orchestrator can synthesize child results in-session. - If a nested requester subagent session is gone, OpenClaw falls back to that session’s requester when available.
Private parent completion
SetcompletionTarget: "parent" on sessions_spawn to return the result in a
private turn of the original requester session. The parent can inspect the result,
start another child, or reply NO_REPLY. OpenClaw does not automatically send the
child result, parent final, or generated media to a channel. The parent can still
choose to send a message through its permitted tools.
This option supports hidden, native, one-shot runs only. It cannot be combined
with ACP, collect: true, visible: true, thread: true, mode: "session", or
expectsCompletionMessage: false. It does not change the default completion mode.
Finished private results remain in the registry until the spawning parent turn
settles. A normal parent finish releases each ready result for private review;
sessions_yield hands the results to its existing child batch instead. A reset or
removed parent does not transfer the result to another session. When a settled
batch contains a private result, its combined review stays private; ordinary
siblings retain their individual completion delivery.
Waiting for the spawning parent turn does not consume a private result’s delivery
retry window. A normal parent finish starts that window when it releases the
result. After sessions_yield, the yielded batch owns delivery; individual child
cleanup cannot expire or suspend that batch’s result.
Use a build that supports this option throughout the run. Older builds cannot
resume private completion handoffs and may discard them after a downgrade;
existing session transcripts remain separate.
Announce context
Announce context is normalized to a stable internal event block:
The result is the child’s complete visible final answer for the completed run.
OpenClaw preserves prompt-data escaping and stable order when it delivers several
results together. It does not shorten an answer to fit the former announce
projection limits. The bounded lifecycle snapshot remains separate from the
complete answer sent to the parent.
For nested work, descendant findings help the child form its answer. The child’s
own final answer is what travels onward to its parent. If the child sends its
final answer through the message tool and then returns
NO_REPLY, that final
answer remains authoritative.
Completion delivery can read an existing registered archive when child cleanup
finishes before the parent resumes. This does not add a post-cleanup retrieval
feature.
Terminal failed runs report failure status without replaying captured
reply text. Tool/toolResult output is not promoted into child result text.
Stats line
Default announce payloads include a stats line at the end (even when wrapped). Private parent completions omit mutable usage statistics so a retried handoff keeps the same input:- Runtime (e.g.
runtime 5m12s). - Token usage (input/output/total).
- Estimated cost when model pricing is configured (
models.providers.*.models[].cost). sessionKey,sessionId, and transcript path so the main agent can fetch history viasessions_historyor inspect the file on disk.
Why prefer sessions_history
sessions_history is the safer orchestration path for reading a child’s
transcript from within an agent turn:
- Redacts credential/token-like text even when general-purpose log redaction is disabled.
- Truncates long text blocks (4000 chars per block) and drops thinking signatures, reasoning replay payloads, and inline image data.
- Caps returned messages at 80 KB; older rows can be dropped or an oversized row replaced with
[sessions_history omitted: message too large]. - Use
nextOffsetwhen present to page backward through older transcript windows. - Returns structured history rather than
/subagents log’s plain chat lines. Reasoning tags,<relevant-memories>/<relevant_memories>scaffolding, and tool-call XML can remain in message text:sessions_historydoes not apply the log command’s assistant prose sanitizer. See Session tools for the recall guarantees. - Raw on-disk transcript inspection is the fallback when you need the full byte-for-byte transcript.