[BUG] v2.1.204: `claude --resume` hangs forever before rendering the session picker (regression from 2.1.202; agent-view/daemon startup path)

Open 💬 0 comments Opened Jul 9, 2026 by tkyan-hupro

Environment

  • Claude Code: 2.1.204 (native install, autoUpdatesChannel: latest, BUILD_TIME 2026-07-07T23:19:03Z)
  • OS: macOS (Darwin 24.6.0, Apple Silicon)
  • Terminals tested: Ghostty, iTerm2, Terminal.app — all reproduce
  • Shell: zsh
  • Claude Desktop app is installed and running (possibly relevant — daemon/agents integration)

Description

claude --resume hangs forever before rendering anything. The terminal shows no output at all and becomes completely unresponsive — Esc / q / Ctrl+C are all ignored (SIGINT is never processed). The process must be killed with kill -9.

This is a regression introduced by the auto-update to 2.1.204:

| When | Version | claude --resume |
|---|---|---|
| Until 2026-07-07 | 2.1.202 | ✅ works (picker renders) |
| 2026-07-08 09:53 JST auto-update | 2.1.204 | ❌ hangs 100% of the time |

Still working on 2.1.204: plain claude, and in-session /resume (picker renders fine there).

Reproduces in every directory (not project-specific) and every terminal.

Investigation (root cause narrowed down)

  1. Not transcript-related: lsof on the hung process shows no session .jsonl files open. Moving all large transcripts (17MB, 500KB+ single lines) out of ~/.claude/projects/ changes nothing.
  2. Not CPU-bound: sample <pid> shows the main thread sitting in kevent64 at ~0–3% CPU — it is waiting for an event that never arrives, not parsing.
  3. The hang is in the agent-view / on-demand daemon startup path:
  • The client spawns claude daemon run --origin transient --spawned-by {"label":"claude","cwd":...,"pid":<client>}
  • The daemon starts successfully, writes ~/.claude/daemon.status.json ({"supervisorPid":...,"workers":{}}) and listens on /tmp/cc-daemon-501/<id>/control.sock
  • Both processes then sit idle forever. The client never renders the picker; the daemon stays at workers: {}.
  • The internal 45s "did not become reachable within 45s" timeout (daemon_ensure_running) never fires — the socket is reachable, so presumably a later request/response over the control socket is what never completes.
  1. Several TCP connections to Anthropic endpoints are ESTABLISHED while hung, so it may also be waiting on a remote listing that never resolves.

Workaround (confirmed)

CLAUDE_CODE_DISABLE_AGENT_VIEW=1 claude --resume   # works instantly, classic picker

or equivalently "disableAgentView": true in ~/.claude/settings.json.

Expected behavior

claude --resume should render the session picker (or at least time out with an error), and Ctrl+C should always be able to interrupt startup.

View original on GitHub ↗