anthropics / anthropics/claude-code

Background daemon: fresh-spawned (non-spare) --bg workers crash "exit N before init" 100% of the time

オープン
#90,149 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
area:agent-view bug has repro platform:macos
主要言語
Python
スター
145k
フォーク
23.1k
PR マージ指標
PR 指標を取得中

説明

**Version:** 2.1.212 (also observed on 2.1.14x-2.1.15x daemons; macOS 14, Darwin 23.6.0)

**Summary**

The background daemon keeps one pre-warmed spare worker. Jobs that claim the spare (`bg claimed-spare ` in daemon.log) succeed. Jobs dispatched through the fresh-spawn path (`bg spawned `) crash roughly 13 seconds later with `bg settled (crashed): exit N before init`, before session init, every single time. In my full daemon.log history: 394 spare-claimed jobs, almost all successful; 16 fresh-spawned jobs, 16 crashed. Zero fresh-spawn successes on record.

**Reproduction conditions**

A job lands on the fresh-spawn path in two cases, both reproducible on my machine:

1. Two `claude --bg` dispatches arrive in the same second. The first claims the spare and succeeds; the second fresh-spawns and crashes. Observed daily when two scheduled jobs fire at the same minute; the crashing job alternates depending on which dispatch wins the race.
2. Cold daemon start (no spare exists yet). The dispatching job fresh-spawns and crashes.

**Sample log window (2026-08-27, UTC)**

```
14:00:05.726 [bg] bg claimed-spare d8fe41c4 (shell) <- succeeded (ran 7m, done)
14:00:05.745 [bg] bg spawned f6eba5ef (shell) <- fresh spawn
14:00:05.760 [bg] bg spare spawned host pid=16857
14:00:18.794 [bg] bg settled f6eba5ef (crashed): exit 1 before init
```

Auth was healthy in the same window (`auth: scheduling proactive refresh in 28560s`, no failure lines), so this is not the headless OAuth-refresh issue. Immediately after past occurrences, direct `claude -p` and `claude --bg` probes with the identical flag set completed clean, so flags, model, prompt, and credentials are not the cause.

**Impact**

Any consumer that schedules more than one background job at the same minute, or dispatches into a cold daemon, deterministically loses a job. The worker's stderr is not observable from the dispatching side (the launcher's pipes are destroyed at the `backgrounded` banner), so the only diagnostic available is the `exit N before init` detail string.

**Ask**

Either fix the fresh-spawn worker path, or have the daemon queue the second dispatch until the replenishment spare is ready, or surface the worker's early stderr in `state.json` so consumers can see why init failed.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

Start by reproducing the cold-daemon and two-dispatch cases with `claude --bg`, then inspect the daemon log entries for `bg spawned`, `bg claimed-spare`, and `exit N before init`. Trace the fresh-spawn path and the `state.json` reporting path; done means fresh-spawned workers initialize reliably or their early failure is made observable, with queued dispatches handled if that is the chosen behavior.

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
backend, cli
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
活発
明瞭さ
説明が足りない
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。