Summary
In the web chat view, a Claude session's assistant turn rendered raw tool-call markup as literal text instead of being parsed into a tool card. The <function_calls> / <invoke name="..."> / <parameter ...> block leaked directly into the message bubble.
What I saw
The chat bubble showed literal text like:
<invoke name="TaskUpdate">
<parameter name="taskId">8</parameter>
<parameter name="status">completed</parameter>
</invoke>
<invoke name="Bash">
<parameter name="command">git add CLAUDE.md && git commit -q -m "docs: add project CLAUDE.md" && git log --oneline -5</parameter>
<parameter name="description">Commit CLAUDE.md</parameter>
</invoke>
Expected: this is a TaskUpdate + Bash tool call and should render as tool cards (like #480), not as raw XML-ish text in the message body.
Environment
- hapi version: 0.20.2 (latest at time of report)
- Agent flavor: Claude (Claude Code CLI)
- Surface: web PWA chat view
- Deployment: self-hosted hub (container) + host runner
Notes / suspected cause
The leaked markup is Claude Code's internal tool-call serialization. Two candidate causes:
- The CLI streamed the tool-call block into the assistant text channel (partial/mis-tagged event), and the web renderer passed it through verbatim.
- The web renderer received a well-formed tool-use event but failed to recognize/strip this markup shape, falling back to plain-text render.
Either way, the web side should detect and either render a tool card or suppress the raw markup rather than displaying it as message text.
Repro
Not yet reliably reproduced — appeared during a normal Claude session that emitted TaskUpdate + Bash tool calls. Will add exact steps / session export if it recurs.
Severity
Cosmetic — session state and execution were unaffected; only the rendered transcript was wrong.
Summary
In the web chat view, a Claude session's assistant turn rendered raw tool-call markup as literal text instead of being parsed into a tool card. The
<function_calls>/<invoke name="...">/<parameter ...>block leaked directly into the message bubble.What I saw
The chat bubble showed literal text like:
Expected: this is a
TaskUpdate+Bashtool call and should render as tool cards (like #480), not as raw XML-ish text in the message body.Environment
Notes / suspected cause
The leaked markup is Claude Code's internal tool-call serialization. Two candidate causes:
Either way, the web side should detect and either render a tool card or suppress the raw markup rather than displaying it as message text.
Repro
Not yet reliably reproduced — appeared during a normal Claude session that emitted
TaskUpdate+Bashtool calls. Will add exact steps / session export if it recurs.Severity
Cosmetic — session state and execution were unaffected; only the rendered transcript was wrong.