[Bug] bash_progress logging writes excessive null bytes to session JSONL

Resolved 💬 4 comments Opened Feb 13, 2026 by pathakmukul Closed Mar 14, 2026

Bug Description
Bug: Claude Code bash_progress logging writes 13.96 GB of
null bytes to session JSONL

Session: 41b7aa54-bd34-4f9c-b12e-03b1a28998f6
File: ~/.claude/projects/-Users-mukulpathak-VibeMaker003/41b
7aa54-bd34-4f9c-b12e-03b1a28998f6.jsonl
Version: 2.1.31
Date: Feb 4, 2026
Branch: HEAD

What happened:

A bash command during this session produced a broken PTY
buffer. Instead of truncating or discarding it, Claude Code
logged the raw output — which was entirely null bytes (\x00)
— into the fullOutput field of bash_progress JSONL entries.

This was logged every second as a progress snapshot, each
time dumping the full accumulated buffer:

  • 100 progress entries over 10 MB each
  • Largest single entry: 144 MB
  • Each fullOutput field contains ~20 MB of \x00 null bytes
  • Total progress entries: 621, totaling 12.93 GB
  • Total file size: 13.96 GB

The actual useful data in thle (assistant messages with
token usage, tool calls, etc.) is only 645 KB.

This single file consumed 93% of my entire ~/.claude/
directory (14 GB total).

Expected behavior:

  • fullOutput should be capped at a reasonable size (e.g. 1

MB)

  • Null-byte-only buffers should be detected and skipped
  • Progress snapshots should not re-log the full accumulated

output every second

Workaround: Deleting the file manually frees 13 GB with no
impact on other sessions.

Environment Info

  • Platform: darwin
  • Terminal: cursor
  • Version: 2.1.41
  • Feedback ID: 17097224-7bc6-4ff7-92e9-6f9f3628f235

Errors

[{"error":"Error: NON-FATAL: Lock acquisition failed for /Users/mukulpathak/.local/share/claude/versions/2.1.41 (expected in multi-process scenarios)\n    at $wR (/$bunfs/root/claude:3477:2098)\n    at tjA (/$bunfs/root/claude:3477:1209)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T17:54:23.459Z"},{"error":"AbortError: The operation was aborted.\n    at unknown\n    at abortChildProcess (node:child_process:935:42)\n    at onAbortListener2 (node:child_process:35:24)\n    at abort (unknown)\n    at <anonymous> (/$bunfs/root/claude:7544:4515)","timestamp":"2026-02-13T17:54:28.878Z"},{"error":"RipgrepTimeoutError: Ripgrep search timed out after 20 seconds. The search may have matched files but did not complete in time. Try searching a more specific path or pattern.\n    at D (/$bunfs/root/claude:66:189)\n    at <anonymous> (/$bunfs/root/claude:66:403)\n    at exitHandler (node:child_process:109:27)\n    at errorHandler (node:child_process:118:16)\n    at emitError (node:events:43:23)\n    at abortChildProcess (node:child_process:935:17)\n    at onAbortListener2 (node:child_process:35:24)\n    at abort (unknown)\n    at <anonymous> (/$bunfs/root/claude:7544:4515)","timestamp":"2026-02-13T17:54:28.879Z"},{"error":"Error: File does not exist.\n    at call (/$bunfs/root/claude:1309:6225)\n    at async <anonymous> (/$bunfs/root/claude:5815:1669)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:00:53.346Z"},{"error":"Error: File does not exist.\n    at call (/$bunfs/root/claude:1309:6225)\n    at async <anonymous> (/$bunfs/root/claude:5815:1669)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:04:08.904Z"},{"error":"Error: File does not exist.\n    at call (/$bunfs/root/claude:1309:6225)\n    at async <anonymous> (/$bunfs/root/claude:5815:1669)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:04:13.594Z"},{"error":"FileTooLargeError: File content (512KB) exceeds maximum allowed size (256KB). Please use offset and limit parameters to read specific portions of the file, or use the GrepTool to search for specific content.\n    at o37 (/$bunfs/root/claude:1141:348)\n    at emit (node:events:95:22)\n    at addChunk (internal:streams/readable:264:47)\n    at readableAddChunkPushByteMode (internal:streams/readable:242:18)\n    at <anonymous> (internal:fs/streams:147:16)\n    at <anonymous> (node:fs:190:82)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:04:18.490Z"},{"error":"Error: File does not exist.\n    at call (/$bunfs/root/claude:1309:6225)\n    at async <anonymous> (/$bunfs/root/claude:5815:1669)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:04:26.012Z"},{"error":"Error: File does not exist.\n    at call (/$bunfs/root/claude:1309:6225)\n    at async <anonymous> (/$bunfs/root/claude:5815:1669)\n    at processTicksAndRejections (native:7:39)","timestamp":"2026-02-13T18:05:52.983Z"},{…

Note: Content was truncated.

View original on GitHub ↗

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