Claude Code freezes: static spinner, unresponsive input, ignores SIGTERM

Open 💬 6 comments Opened Jan 24, 2026 by real-bk2k

Description

Claude Code occasionally enters a frozen state where:

  1. The animated spinner becomes static (stops animating)
  2. Input field stops accepting any input
  3. Escape does not cancel the current operation
  4. The process ignores SIGTERM (remains in Rl+ state)
  5. Only SIGKILL terminates it

Reproduction

Observed twice in tmux sessions. Both times the session was running normally, then froze mid-operation.

Case 1: Context exhaustion

  • Context at 5% remaining
  • Status showed: Ideating… (34m 23s · ↓ 0 tokens · thinking)
  • 0 tokens received for 34+ minutes
  • Likely: API rejected the request due to context overflow, but client didn't handle the error/timeout

Case 2: Normal operation

  • Context was normal (not exhausted)
  • Status showed: Pondering… (4m 4s · ↓ 7.7k tokens · thought for 2s)
  • 7.7k tokens were received, then froze
  • The session was managing other tmux sessions via tmux send-keys commands

Environment

  • Platform: Linux 6.8.0-90-generic
  • Claude Code running inside tmux sessions
  • Multiple concurrent Claude Code sessions active

Expected behavior

  • Escape should cancel the current operation
  • SIGTERM should gracefully terminate the process
  • If the API connection drops, the client should timeout and show an error

Actual behavior

  • Complete freeze: no animation, no input, no response to signals
  • Only kill -9 works

Process state when frozen

bash(PID)---claude(PID)-+-{claude}(thread1)
                         |-{claude}(thread2)
                         |-{claude}(thread3)
                         |-{claude}(thread4)
                         |-{claude}(thread5)
                         |-{claude}(thread6)
                         |-{claude}(thread7)
                         |-{claude}(thread8)
                         |-{claude}(thread9)
                         `-{claude}(thread10)

Process state: Rl+ (Running, multi-threaded, foreground)

Hypothesis

Possible deadlock in the Node.js event loop — likely waiting on an SSE stream from the API with a broken/stalled connection, while the terminal I/O thread is also blocked.

View original on GitHub ↗

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