Summary
When a cron job fails delivery, the error notification appears in webchat as a message sent by "You" (the user), even though the user never sent it.
Core problem
Internal event routing is leaking into user-visible chat. The systemEvent mechanism is meant to trigger agent responses internally, but it's being exposed in the chat transcript and actively affecting the user's conversation.
This isn't just a cosmetic UI issue — the internal plumbing is showing up where users interact with the agent.
Expected behavior
Internal system events (cron failures, heartbeat notifications, etc.) should be invisible to users. The chat transcript should only contain actual user-agent conversation.
Actual behavior
- Cron job fails delivery
- OpenClaw calls
enqueueSystemEvent with the error
- On next heartbeat, this gets prepended to the user turn as
System: [timestamp] message
- Transcript stores this as
role: "user"
- Webchat displays it as "You" sent this message
- Agent responds to it as if the user asked something
- User's chat history now contains messages they never sent
Why this matters
- Users see themselves "saying" things they never said
- Agent responds to system noise, derailing the actual conversation
- Internal implementation details pollute the user experience
- Breaks trust in what the chat history represents
Suggested fix
Either:
- Don't store systemEvent-injected content in the user-visible transcript
- Use a separate role (e.g.
system) that doesn't appear in chat.history
- Process system events out-of-band without injecting into user turns
Environment
- OpenClaw version: 0.1.108
Summary
When a cron job fails delivery, the error notification appears in webchat as a message sent by "You" (the user), even though the user never sent it.
Core problem
Internal event routing is leaking into user-visible chat. The systemEvent mechanism is meant to trigger agent responses internally, but it's being exposed in the chat transcript and actively affecting the user's conversation.
This isn't just a cosmetic UI issue — the internal plumbing is showing up where users interact with the agent.
Expected behavior
Internal system events (cron failures, heartbeat notifications, etc.) should be invisible to users. The chat transcript should only contain actual user-agent conversation.
Actual behavior
enqueueSystemEventwith the errorSystem: [timestamp] messagerole: "user"Why this matters
Suggested fix
Either:
system) that doesn't appear in chat.historyEnvironment