[BUG] v2.1.204: `claude --resume` hangs forever before rendering the session picker (regression from 2.1.202; agent-view/daemon startup path)
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)
- Not transcript-related:
lsofon the hung process shows no session.jsonlfiles open. Moving all large transcripts (17MB, 500KB+ single lines) out of~/.claude/projects/changes nothing. - Not CPU-bound:
sample <pid>shows the main thread sitting inkevent64at ~0–3% CPU — it is waiting for an event that never arrives, not parsing. - 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.
- 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.