Mid-turn assistant text messages are not persisted to the session JSONL (fullscreen TUI users permanently lose them)
Environment
- Claude Code v2.1.216 / v2.1.217 (also reproduced on later builds)
- macOS (Darwin), zsh
~/.claude/settings.json:"tui": "fullscreen"
Description
Assistant text blocks emitted mid-turn (between tool calls) are not written to the session transcript JSONL under ~/.claude/projects/<project>/<session-id>.jsonl. Only the turn-ending assistant message is persisted.
For users of the fullscreen TUI this compounds into permanent data loss: the focus view "shows only your last prompt, a one-line summary of tool calls, and the final response" (per the fullscreen docs), so mid-turn text is never displayed — and because it is also absent from the JSONL, it cannot be recovered via Ctrl+O scrollback after the fact, resume, or transcript tooling. If the model answers a queued user question mid-turn and then continues working, that answer is unrecoverable.
Reproduction
- Set
"tui": "fullscreen"in~/.claude/settings.jsonand start a session. - Give the model a multi-step task involving several tool calls.
- While it works, send a question (it gets queued; queued messages are injected at the next tool boundary — the JSONL records these as
queue-operationenqueue/remove pairs). - Have the model answer the question in a text block mid-turn and then continue with more tool calls before ending the turn.
- Grep the session JSONL for a distinctive phrase from the mid-turn answer.
Expected: every assistant text block appears in the session JSONL.
Actual: greps for mid-turn text return 0 matches; only the final turn-ending message is present. Status-line texts emitted between tool calls (e.g. "Deploy is live") are likewise absent.
Impact
- Fullscreen-TUI users silently lose any answer the model gives mid-turn (nothing on screen, nothing on disk).
- Transcript-based tooling (session forensics,
--resumecontext reconstruction, compliance/audit trails) sees an incomplete record of what the assistant actually said. - The v2.1.101 changelog ("Claude now writes more self-contained summaries since it knows you only see its final message") mitigates the display side but not the persistence side.
Related issues
- #46110 — only the final text response shown inline; intermediate work hidden
- #42824 — all output hidden in main view, only visible via Ctrl+O (closed not-planned)
- #41814 / #41907 — disappearing messages (fixed in 2.1.101; this looks like the same class recurring at the persistence layer)
- #49373 — queued messages flush at the next LLM pause rather than end-of-turn
Suggested fix
Persist every assistant text block to the session JSONL regardless of position in the turn (display policy can stay fullscreen-focused; persistence should be lossless).