openclaw - 💡(How to fix) Fix [Bug]: Dashboard bug, injected copies

Official PRs (…)
ON THIS PAGE

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…

Dashboard rendering appears to inject literal Copy text into multiline shell/heredoc commands after message submission.

The pasted command appears correct in the composer before sending, but the rendered conversation message becomes corrupted after submit.

This breaks Python heredocs and multiline shell commands and may also contribute to misleading model/tool behavior because the agent receives malformed commands.

Root Cause

This breaks Python heredocs and multiline shell commands and may also contribute to misleading model/tool behavior because the agent receives malformed commands.

Fix Action

Fix / Workaround

Current Workaround

Current Workaround

Code Example

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
    print(f"--- {ws.title} ---")
    rows = 0

    for row in ws.iter_rows(values_only=True):
        vals = [str(v) for v in row if v is not None]

        if vals:
            print(" | ".join(vals))
            rows += 1

        if rows >= 5:
            break
PY

---

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
print(f"--- {ws.title} ---")
rows = 0

Copy
for row in ws.iter_rows(values_only=True):
    vals = [str(v) for v in row if v is not None]

    if vals:
        print(" | ".join(vals))
        rows += 1

    if rows >= 5:
        break
PY

---

python3 /home/rhq/.openclaw/workspace/script.py

---

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
print(f"--- {ws.title} ---")
rows = 0

Copy
for row in ws.iter_rows(values_only=True):
    vals = [str(v) for v in row if v is not None]

    if vals:
        print(" | ".join(vals))
        rows += 1

    if rows >= 5:
        break
PY

---

python3 /home/rhq/.openclaw/workspace/script.py

---
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

Dashboard Markdown Rendering Corrupts Multiline Shell/Heredoc Commands

Steps to reproduce

Dashboard Markdown Rendering Corrupts Multiline Shell/Heredoc Commands

Environment

  • OpenClaw: 2026.5.18
  • Ubuntu 24.04 under WSL
  • Dashboard UI
  • Reproduced after Dashboard restart
  • Reproduced with normal paste and paste-as-plain-text

Summary

Dashboard rendering appears to inject literal Copy text into multiline shell/heredoc commands after message submission.

The pasted command appears correct in the composer before sending, but the rendered conversation message becomes corrupted after submit.

This breaks Python heredocs and multiline shell commands and may also contribute to misleading model/tool behavior because the agent receives malformed commands.

Expected Behavior

Submitted command text should remain byte-faithful after send/render.

Example input:

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
    print(f"--- {ws.title} ---")
    rows = 0

    for row in ws.iter_rows(values_only=True):
        vals = [str(v) for v in row if v is not None]

        if vals:
            print(" | ".join(vals))
            rows += 1

        if rows >= 5:
            break
PY

Actual Behavior

After submit/render, Dashboard injects literal Copy text and damages indentation:

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
print(f"--- {ws.title} ---")
rows = 0

Copy
for row in ws.iter_rows(values_only=True):
    vals = [str(v) for v in row if v is not None]

    if vals:
        print(" | ".join(vals))
        rows += 1

    if rows >= 5:
        break
PY

Notes

  • The corruption occurs after submit/render, not during paste into the composer.
  • Restarting Dashboard did not resolve the issue.
  • Paste-as-plain-text did not resolve the issue.
  • This appears related to Markdown/code-block rendering and injected Copy-button UI chrome.
  • The issue reproduces even when attempting to wrap the entire shell snippet in a fenced code block.

Operational Impact

  • Python heredocs become unusable from Dashboard.
  • Multiline shell commands become unreliable.
  • Agents may receive malformed commands and produce misleading execution results.
  • Makes debugging tool execution significantly more difficult.

Current Workaround

Avoid multiline code in Dashboard chat entirely.

Instead:

  • create scripts directly in the workspace filesystem
  • execute them using single-line commands such as:
python3 /home/rhq/.openclaw/workspace/script.py

Expected behavior

I expected copy not to be injected

Actual behavior

Actual Behavior

After submit/render, Dashboard injects literal Copy text and damages indentation:

python3 - <<'PY'
import openpyxl

path = "/home/rhq/.openclaw/workspace/myfile.xlsx"
wb = openpyxl.load_workbook(path, read_only=True, data_only=True)

for ws in wb.worksheets:
print(f"--- {ws.title} ---")
rows = 0

Copy
for row in ws.iter_rows(values_only=True):
    vals = [str(v) for v in row if v is not None]

    if vals:
        print(" | ".join(vals))
        rows += 1

    if rows >= 5:
        break
PY

Notes

  • The corruption occurs after submit/render, not during paste into the composer.
  • Restarting Dashboard did not resolve the issue.
  • Paste-as-plain-text did not resolve the issue.
  • This appears related to Markdown/code-block rendering and injected Copy-button UI chrome.
  • The issue reproduces even when attempting to wrap the entire shell snippet in a fenced code block.

Operational Impact

  • Python heredocs become unusable from Dashboard.
  • Multiline shell commands become unreliable.
  • Agents may receive malformed commands and produce misleading execution results.
  • Makes debugging tool execution significantly more difficult.

Current Workaround

Avoid multiline code in Dashboard chat entirely.

Instead:

  • create scripts directly in the workspace filesystem
  • execute them using single-line commands such as:
python3 /home/rhq/.openclaw/workspace/script.py

OpenClaw version

2026.5.18

Operating system

Ubuntu 24.04

Install method

npm global

Model

llama-3.1-8b-instruct

Provider / routing chain

OpenClaw Dashboard UI → local Gateway → LM Studio local OpenAI-compatible endpoint → local model (Qwen / Llama-family)

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Impact and severity

No response

Additional information

No response

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

I expected copy not to be injected

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 [Bug]: Dashboard bug, injected copies