Mid-turn assistant text messages are not persisted to the session JSONL (fullscreen TUI users permanently lose them)

Status Open
Reported on v2.1.101
Maintainer reply None cached
Activity 0 comments · opened Jul 23, 2026

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

  1. Set "tui": "fullscreen" in ~/.claude/settings.json and start a session.
  2. Give the model a multi-step task involving several tool calls.
  3. While it works, send a question (it gets queued; queued messages are injected at the next tool boundary — the JSONL records these as queue-operation enqueue/remove pairs).
  4. Have the model answer the question in a text block mid-turn and then continue with more tool calls before ending the turn.
  5. 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, --resume context 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).

View original on GitHub ↗