Symptom
In an iMessage self-chat, the agent's own replies come back as new inbound user messages. The is_from_me=1 copy is never matched against the echo cache.
Evidence what you'll see
- Outbound replies are filed under scope
<account>:chat_id:<n>. The inbound check only adds thatchat_idscope for groups, sohasIMessageEchoMatchmisses the reply. - A send that uses a handle logs
dropped inbound message ... reason="agent echo in self-chat". Agent replies never produce that line. Only the reflectedis_from_me=0copy is dropped asself-chat echo. - A gateway
sendwithto: "chat_id:<n>"reproduces it without an agent run.
Why it happens
For a direct chat with a known chat_id, replyTarget is chat_id:<n>, and both send and the persisted echo store use <account>:chat_id:<n>. buildIMessageEchoScope (inlined as echoScope in 2026.10.6) gives direct chats <account>:imessage:<sender>, chat_guid, and chat_identifier, but never chat_id. skipSelfChatHasCheck = true then dispatches the unmatched own-send row.
Affected versions
@openclaw/imessage 2026.9.6. The same inbound echo-scope code is in OpenClaw 2026.10.6.
Fix steps
0 of 2 done
Your check marks stay in this browser only.
How to check it worked
- A
chat_id-targeted send in the self-chat is dropped asreason="agent echo in self-chat", and the agent's reply does not start a new user turn.
If it still fails
- Sends that use a handle (
openclaw message send --target +1...or gatewaysendwithto: "+1...") already match and are dropped. The miss is thechat_idscope used for agent replies. - The linked issue does not name a release that adds the direct-chat
chat_idscope.
Sources and credit
Summarized in our own words from these public reports. Credit goes to their authors.
Provided as is, without warranty. Try changes in a non-production environment and back up first. Security-related steps: verify against the official docs. Terms · Request removal or attribution change
Hit an error we don't cover? Submit it