Bug Description
Node execution commands (nodes.run and exec host=node) generate duplicate system messages even when tools.exec.notifyOnExit: false is configured.
Expected Behavior
When tools.exec.notifyOnExit: false, no exec-related system events should be generated for node commands.
Actual Behavior
Node exec events are hardcoded and ignore the notifyOnExit setting:
exec.started → always generates "Exec started (node=...)" system event
exec.finished → generates "Exec finished (node=...)" when there's output/error/timeout
This means every nodes.run or exec host=node call produces duplicate messages: the inline tool result AND the system event notification.
Steps to Reproduce
- Configure
tools.exec.notifyOnExit: false
- Run any node command via
nodes.run or exec host=node
- Observe duplicate messages: inline result + system event
Root Cause
The node exec event handler unconditionally calls enqueueSystemEvent() regardless of the notifyOnExit setting. This is separate from the backgrounded exec notification system which properly respects notifyOnExit.
Proposed Fix
Add notifyOnExit check to the node event handler, similar to the backgrounded exec logic.
Environment
- OpenClaw version: 2026.2.15
- Platform: macOS (Apple Silicon)
- Node type: macOS companion app (2026.2.12)
Config
{
"tools": {
"exec": {
"notifyOnExit": false,
"host": "node",
"node": "Sene's Mac mini"
}
}
}
Bug Description
Node execution commands (
nodes.runandexec host=node) generate duplicate system messages even whentools.exec.notifyOnExit: falseis configured.Expected Behavior
When
tools.exec.notifyOnExit: false, no exec-related system events should be generated for node commands.Actual Behavior
Node exec events are hardcoded and ignore the
notifyOnExitsetting:exec.started→ always generates "Exec started (node=...)" system eventexec.finished→ generates "Exec finished (node=...)" when there's output/error/timeoutThis means every
nodes.runorexec host=nodecall produces duplicate messages: the inline tool result AND the system event notification.Steps to Reproduce
tools.exec.notifyOnExit: falsenodes.runorexec host=nodeRoot Cause
The node exec event handler unconditionally calls
enqueueSystemEvent()regardless of thenotifyOnExitsetting. This is separate from the backgrounded exec notification system which properly respectsnotifyOnExit.Proposed Fix
Add
notifyOnExitcheck to the node event handler, similar to the backgrounded exec logic.Environment
Config
{ "tools": { "exec": { "notifyOnExit": false, "host": "node", "node": "Sene's Mac mini" } } }