[Bug]: Using Explanatory Output Style plugin in CC causes broken output#10711

openedSep 8, 2026bySskyfallwastaken

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/web

Steps to reproduce

  1. Install Claude Code and enable the Explanatory Output Style plugin
  2. Send the "Use the explanatory output style plugin to show an example of how it works" whilst using the Claude Code provider

Expected behavior

Insight block is cleanly rendered as a separate UI element

Actual behavior

Output is slightly garbled (see images below)

Impact

Minor bug or occasional failure

Version or commit

0.0.41-nightly.20260908.1387

Environment

macOS Sequoia

Logs or stack traces

N/A

Screenshots, recordings, or supporting files

image.png image.png

Workaround

Disabling the Explanatory Output Style plugin (but I want to keep it!)

Triage

Confirmed as a web/desktop markdown rendering bug (minor / cosmetic). The Explanatory Output Style plugin is doing what it is supposed to: a SessionStart hook tells Claude to emit ASCII-art insight fences like:

1★ Insight ─────────────────────────────────────
2[2–3 educational points]
3─────────────────────────────────────────────────

Claude Code’s own CLI special-cases that into a boxed callout. T3 does not. We persist the text as a normal assistant message and run it through ChatMarkdown.

We already tried to meet this halfway in #4344 (closed #3652) by turning on lineBreaks when the message matches ★ Insight. That restored newlines so the block no longer collapses to one paragraph, but the ─ box-drawing still wraps (overflow-wrap: anywhere) and draws a rule through the first insight line — matching the second screenshot. This is leftover from that fix, not a duplicate of #3652.

Not the same class of issue as #7644 (terminal), #3747 (error JSON), or #1147 (tool metadata leak).

Where to fix

  • Web/desktop: MessagesTimeline.logic.ts / AssistantTimelineRow / ChatMarkdown
  • Mobile also missing: ThreadFeed AssistantMarkdownContent has no insight detection and does not preserve soft breaks for these blocks

Suggested fix

Parse the ★ Insight / trailing ─ fences out of assistant text and render a dedicated callout (title + body). Do not send the box-drawing through markdown. Same split on web and mobile. The learning-output-style plugin uses the same fence, so one parser covers both.

Workaround for now: disable the plugin.

Reproduced on Linux in the web dev app at ed9b7ca9c5, using Claude Code 2.1.303 with explanatory-output-style@anthropic-plugin-directory enabled locally and the reported prompt. Insight fences render as inline code, with explanatory text running into the rules instead of a separate block.

Existing fix candidate: #22239. No competing PR opened; leaving this issue open pending that work. Its fix has not been independently verified here.

Current-main reproduction, web at 1280×800