`<suggestion skip>` tag leaks into rendered output instead of becoming a UI chip
What happened
While a backgrounded tool call (a long-running Bash build in my case) was still running, Claude Code's "you can skip waiting" affordance rendered as literal text in the assistant turn instead of as a clickable chip / status pill:
<suggestion skip>build is running</suggestion skip>
I saw the exact string above in the conversation transcript, not a rendered widget.
Expected
The <suggestion skip>...</suggestion skip> tag should be intercepted by the UI and rendered as an affordance (button / chip / status pill) — not surface as raw markup in the message body.
Repro
Not reliably reproduced — it happened once during a session where a backgrounded Bash command was running (a npm run tauri:build taking a few minutes). Subsequent backgrounded calls in the same session did not leak the tag, so it may be a race or first-occurrence-only thing.
Steps that produced the state:
- Launched a
Bashtool call withrun_in_background: true. - Continued working with foreground tools (other
Bash,Edit, etc.). - At some point during the background task, the assistant turn contained the literal
<suggestion skip>build is running</suggestion skip>text.
Environment
claude --version: 2.1.150 (Claude Code)- Terminal: WezTerm 20260117-154428-05343b38
TERM=xterm-256color- macOS 26.5 (build 25F71)
- Working in a jj-colocated git repo (likely irrelevant, but flagging in case the status-line/hook code paths matter)
Why this matters
The leaked tag suggests there's a code path that should be stripping/transforming it but didn't. Worth checking:
- Whether it can happen with other suggestion variants (
<suggestion …>for other actions). - Whether it appears in saved/exported transcripts as well (data hygiene).
- Whether copy-paste of that turn copies the literal tag (it would, in my session).
Happy to grab a transcript snippet if useful — let me know what'd help.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗