Now all channels can duplicate outbound replies when the agent proactively sends visible content via message(action=send).
Summary
If the agent successfully sends an image/file/text via message.send(...), OpenClaw should suppress the normal main reply / delivery-mirror path for that turn.
Right now both paths can fire:
- The agent calls
message.send(...)
- The attachment / visible content is delivered successfully
- The system then also runs a follow-up layer with:
provider=openclaw
model=delivery-mirror
- A second extra message appears, often just mirroring text like the filename (for example
cat-fresh.png)
Observed behavior
This causes duplicate sends across channels:
- first: attachment/image/file is sent by
message.send
- then: an extra text message is posted afterward by
delivery-mirror
From session history, the chain looks like:
message.send(...) succeeds
- the system later emits another outbound message through
provider=openclaw, model=delivery-mirror
Expected behavior
If the current assistant turn has already successfully delivered user-visible content via message(action=send), then OpenClaw should fully suppress the normal mirrored/main reply path for that same turn.
Suggested fix:
- mark the turn as
externally_delivered = true after successful message.send
- skip
delivery-mirror for that turn
- or discard any non-
NO_REPLY main reply output once external delivery already happened
One-line version
message.send and delivery-mirror are currently both active for the same turn, so proactive sends get mirrored and users see duplicate messages.
Now all channels can duplicate outbound replies when the agent proactively sends visible content via
message(action=send).Summary
If the agent successfully sends an image/file/text via
message.send(...), OpenClaw should suppress the normal main reply /delivery-mirrorpath for that turn.Right now both paths can fire:
message.send(...)provider=openclawmodel=delivery-mirrorcat-fresh.png)Observed behavior
This causes duplicate sends across channels:
message.senddelivery-mirrorFrom session history, the chain looks like:
message.send(...)succeedsprovider=openclaw,model=delivery-mirrorExpected behavior
If the current assistant turn has already successfully delivered user-visible content via
message(action=send), then OpenClaw should fully suppress the normal mirrored/main reply path for that same turn.Suggested fix:
externally_delivered = trueafter successfulmessage.senddelivery-mirrorfor that turnNO_REPLYmain reply output once external delivery already happenedOne-line version
message.sendanddelivery-mirrorare currently both active for the same turn, so proactive sends get mirrored and users see duplicate messages.