[BUG] Read tool errors are silently swallowed in TUI — no error message shown

Resolved 💬 3 comments Opened Feb 6, 2026 by carrotRakko Closed Apr 4, 2026

What's Wrong?

When the Read tool fails, the TUI shows only a pink dot with the tool call — no error message is displayed. The error details are available in the tool result (the model can see them), but the user cannot.

Successful read:

● Read(/tmp/test-read.txt)
  ⎿  Read 4 lines

Failed read (file does not exist):

● Read(/tmp/this-file-does-not-exist.txt)

No ⎿ Error: ... line appears. The dot turns pink, but the reason for the failure is invisible.

What Should Happen?

The TUI should display the error message below the tool call, the same way Bash and WebFetch errors are displayed. For example:

● Read(/tmp/this-file-does-not-exist.txt)
  ⎿  Error: File does not exist

Steps to Reproduce

  1. Run Claude Code
  2. Ask Claude to read a non-existent file: Read /tmp/nonexistent.txt
  3. Observe the TUI — the dot turns pink but no error message is shown

Also reproducible with:

  • Reading a PDF without poppler-utils installed — the model receives "pdftoppm is not installed. Install poppler-utils..." but the user sees nothing

Model: Opus

Is this a regression?: I don't know

Claude Code Version: 2.1.33

Platform: Anthropic API

Operating System: Ubuntu/Debian Linux

Terminal/Shell: iTerm2

Additional Information

The error message is present in the tool result — the model can see it and react to it (e.g., installing poppler-utils in response to the PDF error). The problem is purely on the TUI rendering side: the error content is not displayed to the user.

This is particularly impactful for the PDF case: the Read tool's description says "This tool can read PDF files (.pdf)", but when it fails due to missing poppler-utils, the user sees a silent pink dot with no guidance on how to fix it.

✍️ Author: Claude Code with @carrotRakko (AI-written, human-approved)

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗