Bug type
Regression (worked before, now fails)
Summary
After upgrading to 2026.3.22, the message tool schema marks components as required for Discord channels. Models have no guidance on how to use components with media, causing media attachments to be silently dropped or rendered as file downloads instead of inline images.
Steps to reproduce
- Upgrade to OpenClaw 2026.3.22.
- Have the agent send a Discord message with
media parameter (e.g. message(action="send", media="/path/to/image.png", to="channel:...")).
- The tool call is rejected:
must have required property 'components'.
- Add minimal
components: {"text": "..."} to satisfy validation + media parameter.
- Message is sent without the attachment — media is silently dropped.
- To actually send media, you must use a
file block (renders as download) or media-gallery block (renders inline), but neither pattern is documented in the tool description or system prompt.
Expected behavior
Pre-3.22 behavior: media parameter alone triggers inline image display without needing components. Models could send images without any special knowledge of components v2.
Actual behavior
components is required in the tool schema → models must always include it.
components: {"text": "..."} + media → media silently dropped (no attachment in sent message).
components with file block + media → file attachment (download link, not inline image).
components with media-gallery block + media → inline image (correct, but undocumented).
The correct invocation pattern (media-gallery with attachment://filename.ext URL scheme) is not discoverable from the tool schema or system prompt.
OpenClaw version
2026.3.22 (4dcc39c)
Operating system
Debian 13 (Linux 6.12.43+deb13-amd64)
Install method
npm global
Model
anthropic/claude-opus-4-6
Provider / routing chain
openclaw -> anthropic
Additional provider/model setup details
NOT_ENOUGH_INFO
Logs, screenshots, and evidence
Tool schema in system prompt shows:
"required": ["action", "components"]
The components property contributed by the Discord plugin is non-Optional in the TypeBox schema, causing it to appear in the required array for all message tool calls.
Impact and severity
Affected: All Discord users on 2026.3.22 sending media via the message tool.
Severity: Medium (breaks inline image sends, workaround exists but undiscoverable).
Frequency: Every media send attempt on Discord.
Consequence: Models either fail validation or silently lose attachments. Workaround requires external documentation (skill files or manual instructions).
Additional information
Last known good: pre-3.22 (components was optional). First known bad: 2026.3.22.
Suggested fix — either:
- Option A: Make
components optional again and preserve the pre-3.22 media-only path.
- Option B: Keep
components required but add guidance in the tool description so models know to use media-gallery for inline images and file for download attachments, including the attachment://filename.ext URL scheme.
Bug type
Regression (worked before, now fails)
Summary
After upgrading to 2026.3.22, the
messagetool schema markscomponentsas required for Discord channels. Models have no guidance on how to usecomponentswithmedia, causing media attachments to be silently dropped or rendered as file downloads instead of inline images.Steps to reproduce
mediaparameter (e.g.message(action="send", media="/path/to/image.png", to="channel:...")).must have required property 'components'.components: {"text": "..."}to satisfy validation +mediaparameter.fileblock (renders as download) ormedia-galleryblock (renders inline), but neither pattern is documented in the tool description or system prompt.Expected behavior
Pre-3.22 behavior:
mediaparameter alone triggers inline image display without needingcomponents. Models could send images without any special knowledge of components v2.Actual behavior
componentsis required in the tool schema → models must always include it.components: {"text": "..."}+media→ media silently dropped (no attachment in sent message).componentswithfileblock +media→ file attachment (download link, not inline image).componentswithmedia-galleryblock +media→ inline image (correct, but undocumented).The correct invocation pattern (
media-gallerywithattachment://filename.extURL scheme) is not discoverable from the tool schema or system prompt.OpenClaw version
2026.3.22 (4dcc39c)
Operating system
Debian 13 (Linux 6.12.43+deb13-amd64)
Install method
npm global
Model
anthropic/claude-opus-4-6
Provider / routing chain
openclaw -> anthropic
Additional provider/model setup details
NOT_ENOUGH_INFO
Logs, screenshots, and evidence
Tool schema in system prompt shows:
The
componentsproperty contributed by the Discord plugin is non-Optional in the TypeBox schema, causing it to appear in therequiredarray for allmessagetool calls.Impact and severity
Affected: All Discord users on 2026.3.22 sending media via the
messagetool.Severity: Medium (breaks inline image sends, workaround exists but undiscoverable).
Frequency: Every media send attempt on Discord.
Consequence: Models either fail validation or silently lose attachments. Workaround requires external documentation (skill files or manual instructions).
Additional information
Last known good: pre-3.22 (components was optional). First known bad: 2026.3.22.
Suggested fix — either:
componentsoptional again and preserve the pre-3.22media-only path.componentsrequired but add guidance in the tool description so models know to usemedia-galleryfor inline images andfilefor download attachments, including theattachment://filename.extURL scheme.