openclaw - 💡(How to fix) Fix messages.suppressToolErrors does not suppress mutating tool failure warning payloads [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#84257Fetched 2026-05-20 03:42:03
View on GitHub
Comments
1
Participants
2
Timeline
4
Reactions
1
Timeline (top)
labeled ×2closed ×1commented ×1

messages.suppressToolErrors is documented as suppressing user-visible tool-error warnings, but mutating tool failures still bypass the setting and can be delivered as standalone chat replies such as:

  • ⚠️ 🛠 run python3 inline script (agent) failed
  • ⚠️ 🛠 gh pr checks ... (agent) failed
  • ⚠️ 🛠 osascript ... (agent) failed

This creates noisy user-facing error cards even when operators have explicitly configured tool-error warning suppression.

Error Message

messages.suppressToolErrors is documented as suppressing user-visible tool-error warnings, but mutating tool failures still bypass the setting and can be delivered as standalone chat replies such as: This creates noisy user-facing error cards even when operators have explicitly configured tool-error warning suppression. 2. Trigger an agent turn where the last tool error is a mutating or exec-like tool failure, for example exec, write, osascript, or an inline Python script.

Root Cause

messages.suppressToolErrors is documented as suppressing user-visible tool-error warnings, but mutating tool failures still bypass the setting and can be delivered as standalone chat replies such as:

  • ⚠️ 🛠 run python3 inline script (agent) failed
  • ⚠️ 🛠 gh pr checks ... (agent) failed
  • ⚠️ 🛠 osascript ... (agent) failed

This creates noisy user-facing error cards even when operators have explicitly configured tool-error warning suppression.

Code Example

{
  "messages": {
    "suppressToolErrors": true
  }
}

---

if (params.suppressToolErrorWarnings) return suppressed;
if (normalizedToolName === "sessions_send") return suppressed;
if (isMutatingToolError) return showUnlessAcknowledged;
if (isExecLikeToolName(...) && !includeDetails) return suppressed;
if (params.suppressToolErrors) return suppressed;
RAW_BUFFERClick to expand / collapse

Summary

messages.suppressToolErrors is documented as suppressing user-visible tool-error warnings, but mutating tool failures still bypass the setting and can be delivered as standalone chat replies such as:

  • ⚠️ 🛠 run python3 inline script (agent) failed
  • ⚠️ 🛠 gh pr checks ... (agent) failed
  • ⚠️ 🛠 osascript ... (agent) failed

This creates noisy user-facing error cards even when operators have explicitly configured tool-error warning suppression.

Expected behavior

When messages.suppressToolErrors: true is configured, OpenClaw should suppress generated ⚠️ ... failed warning payloads for all tool classes, including mutating/exec-like tools. The agent already receives tool failures in context and can retry or explain naturally.

Actual behavior

Non-mutating tool failures are suppressed, but mutating tool failures are still surfaced unless suppressToolErrorWarnings is set on the individual run options. General chat/Discord runtime config does not appear to expose that stronger per-run flag, so the documented config does not prevent these final warning messages.

Reproduction

  1. Configure:
{
  "messages": {
    "suppressToolErrors": true
  }
}
  1. Trigger an agent turn where the last tool error is a mutating or exec-like tool failure, for example exec, write, osascript, or an inline Python script.
  2. Observe a user-visible ⚠️ ... failed payload still being posted to the chat surface.

Suspected cause

In src/agents/pi-embedded-runner/run/payloads.ts, resolveToolErrorWarningPolicy() checks params.suppressToolErrors only after the mutating-tool branch. That means mutating failures return before the documented suppression flag is honored.

The policy roughly behaves like:

if (params.suppressToolErrorWarnings) return suppressed;
if (normalizedToolName === "sessions_send") return suppressed;
if (isMutatingToolError) return showUnlessAcknowledged;
if (isExecLikeToolName(...) && !includeDetails) return suppressed;
if (params.suppressToolErrors) return suppressed;

Moving the params.suppressToolErrors check before the mutating-tool branch makes the implementation match the config help text.

Version

Observed on v2026.5.18.

Notes

This issue is separate from the underlying tool command failures. Those failures may still need normal agent/tool handling, but messages.suppressToolErrors should prevent raw warning payloads from being delivered as final user-facing messages.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

When messages.suppressToolErrors: true is configured, OpenClaw should suppress generated ⚠️ ... failed warning payloads for all tool classes, including mutating/exec-like tools. The agent already receives tool failures in context and can retry or explain naturally.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix messages.suppressToolErrors does not suppress mutating tool failure warning payloads [1 comments, 2 participants]