Claude CodeのEUNKNOWNとEACCESでバックグラウンドセッションが起動しない原因
/backgroundやclaude --bgで出るEUNKNOWN・EACCESの原因を、Windowsの制限ポリシーとnpm更新中の差し替えに分けて、バージョン別に切り分けます。
/backgroundやclaude --bgを実行すると、Couldn't reach the background service (spawn background service: EUNKNOWN: unknown error, uv_spawn)と出てセッションが始まらない。Windowsでこのエラーを見たなら、疑う先は2つです。グループポリシーやAppLockerのようなソフトウェア制限ポリシーと、npmがClaude Codeのバイナリを差し替えている最中のタイミングです。
前者は管理者に確認する話で、後者は待って再実行すれば直ります。どちらかはバージョンとメッセージの文面でほぼ切り分けられます。以下、原因ごとの見分け方と対処を順に説明します。
EUNKNOWNは「名前のないエラーコード」
EUNKNOWNは、Windowsがプログラムの起動を拒否したものの、そのエラーコードに標準的な名前がなかったときに表示です。Claude Codeは、バックグラウンドセッションを預かるバックグラウンドサービス(supervisor)を別プロセスとして起動します。その起動が止められると、uv_spawnの失敗としてEUNKNOWNが表面化します。
典型的な引き金は、グループポリシーやAppLockerによるソフトウェア制限ポリシーです。起動しようとしたプログラムが許可リストに無いと、OSが黙って拒否します。メッセージの文面には2通りあります。
Couldn't reach the background service (spawn background service: EUNKNOWN: unknown error, uv_spawn) — run 'claude daemon status'アカウントによっては、background serviceの部分がdaemonになります。意味は同じです。
PowerShell 7が優先される仕組みと、v2.1.212より前の失敗
Claude Codeは、ターミナルを閉じてもサービスが生き残るように、PowerShell経由でバックグラウンドサービスを起動します。使うPowerShellの順序は次のとおりです。
サービス起動時のPowerShell選択
- 1
PowerShell 7があれば使う
インストールされていれば、これが最優先です。
- 2
無ければWindows PowerShell 5.1
標準で入っているほうです。
- 3
どちらも動かせなければ直接起動
PowerShellを経由せずにサービスを起動します。PowerShellだけを止めるポリシーなら、このエラーにはなりません。
v2.1.212より前は、Windows PowerShell 5.1だけを使っていました。そのため、グループポリシーで5.1が禁止されているマシンでは、PowerShell 7を入れていてもCouldn't start the session — EUNKNOWN: unknown error, uv_spawnで失敗しました。changelogでは、v2.1.212(2026年7月17日)に「グループポリシーがPowerShell 5.1をブロックしている環境で/backgroundとclaude --bgが失敗する問題を修正。daemonはPowerShell 7を優先する」という項目が入っています。
メッセージの出だしがCouldn't start the sessionなら、この古い挙動の可能性が高いと言えます。出だしがCouldn't reach the background serviceで始まるのは、新しいバージョンの文面です。
対処をバージョンとメッセージで分ける
| 状況 | 対処 |
|---|---|
Couldn't start the sessionと出る | 対処v2.1.212以降へ更新する |
| 更新できない古い環境 | 対処別のターミナルでclaude daemon runを先に実行してから、バックグラウンドセッションを開始し直す |
| npmでインストール中に出た | 対処インストールの完了を待って、もう一度実行する |
| v2.1.212以降で、npmの更新も走っていない | 対処実行ファイルを止める制限ポリシーがないか、Windowsの管理者に確認する |
| ターミナルを閉じるとサービスも止まる | 対処PowerShell 7を入れるか、PowerShellのブロック解除を管理者に頼む |
claude daemon runは、バックグラウンドサービスを、そのターミナルの前面で動かすコマンドです。ログもそのまま流れます。サービスが生きているのはそのターミナルを開いている間だけなので、あくまで更新までの一時しのぎです。
# 別のターミナルを開いて実行し、開いたままにする
claude daemon run
# 元のターミナルで、サービスの状態を確かめる
claude daemon statusclaude daemon statusは、サービスに到達できるか、プロセスID、バージョン、ソケットのディレクトリ、生きているバックグラウンドセッションの数を表示します。エラー文の末尾に出る案内どおり、最初に見る場所です。
最後の項目が意味すること
表の最後の行は見落としやすい点です。ターミナルを閉じたらサービスも止まる場合、Claude CodeはPowerShellを使わずに直接サービスを起動しています。つまりPowerShell 7が無く、5.1もブロックされているマシンです。エラーにはならず、動いてはいる状態なので、バックグラウンドセッションが閉じた途端に消える、という形で気づきます。
管理者に伝えること
v2.1.212以降でもEUNKNOWNが続くなら、Claude Code自身の実行ファイルが制限ポリシーに止められている可能性があります。管理者に渡せる情報は次の3点です。
- 止められているのは、Claude Codeが起動する実行ファイル自体である可能性がある
- 許可の対象には、
claude.exeが起動する子プロセスも含まれる - 症状は、
/backgroundとclaude --bgの実行時に出る
インストール関連のトラブルシューティングには、エンドポイントセキュリティ製品が干渉する例として、AppLocker・グループポリシーのソフトウェア制限ポリシー・EDRが挙がっています。その対処は、claude.exeと、それが起動するcmd.exeやbash.exeなどのプロセスを許可リストに加えるよう、IT部門に依頼することです。インストールまわりの前提はWindowsインストールの記事にまとめています。
PowerShellの起動方法を切り替える環境変数は、CLAUDE_CODE_DISABLE_WINDOWS_SHELL_LAUNCHERの記事にあります。バックグラウンドサービスの起動経路との関係は、エラー関連のdocsに記載がありません。
npm更新中のEACCESとEUNKNOWN
もう1つの原因は、制限ポリシーと関係がありません。npmでインストールしたClaude Codeを、npm install -g @anthropic-ai/claude-codeが差し替えている最中に、サービスを起動しようとした場合です。自分で実行した更新でも、自動更新(auto-updater)でも起こります。
エージェントビューからセッションを開くと、次の形で出ます。
Couldn't start the background service — spawn background service: EACCES: permission denied, posix_spawn '/usr/local/lib/node_modules/@anthropic-ai/claude-code/bin/claude'/backgroundやclaude --bgで開始したときは、同じ理由がCouldn't reach the background service (...)の中に入ります。バイナリが書き換わっている間は、その場所の実行ファイルが実行できず、起動が拒否されます。
差し替えの最中に出るコードはEACCESだけではありません。ENOENTやENOEXEC、WindowsではEUNKNOWNやEPERMになることもあります。つまりWindowsのnpm環境で、更新中に出たEUNKNOWNは、ポリシーの問題ではありません。インストールが終わってから再実行すれば消えます。逆に、再試行しても消えないEUNKNOWNは、前節の制限ポリシーを疑う側です。
Claude Code側の待機と、バージョンによる違い
npmでインストールした環境では、Claude Codeは再インストールの完了を自動で待ち、再試行します。待つ長さはバージョンで変わりました。
| バージョン | 挙動 |
|---|---|
| v2.1.246より前 | 挙動待たずに、すぐ失敗する |
| v2.1.246以降 | 挙動10秒まで待つ |
| v2.1.257以降 | 挙動10秒に加え、npmでのClaude Codeのインストールが実行中に見えている間は最大2分まで待つ |
v2.1.257より前は、10秒で待ちをやめていました。別のClaude Codeプロセスが更新をダウンロードしている途中でも、このエラーが出ていたことになります。待ちきれなかったときは、エラーコードの代わりに更新中であることを示す文面が出ます。
Claude Code is being updated by npm on this machine (still not runnable after 2 min, EACCES) — try again when the update finishesこの文面が出たら、原因は更新です。更新が終わってから、同じ操作をもう一度実行します。数秒待つだけで足りる場合も多いです。
待っても直らないEACCES
npmのインストールが走っていないのにEACCESが続くなら、実行しているユーザーがインストール済みのバイナリを実行できません。バイナリとそのディレクトリの権限を確認するか、Claude Codeを再インストールします。
「exited before it became reachable」との見分け
似たエラーにbackground service exited before it became reachableがあります。こちらは、サービスのプロセスは起動できたものの、接続を受け付ける前に終了した場合です。括弧の中に、終了コードと、サービスが最初に出力した行が入ります。
Error: claude native binary not installed.なら、npmがバイナリを差し替えている最中で、プレースホルダーが動いたのが原因です。完了後に再実行し、続くようならnpmのインストールを最後まで終わらせます- Windowsで
nothing on stderr、終了コード1が毎回続くなら、daemon.lockが問題です。ロックに書かれたプロセスにシグナルを送れず、消えたことも確認できないとき、新しいサービスは他に動いていると判断して終了します
後者は、~/.claude/daemon.lockを削除してから、もう一度セッションを開始します。v2.1.257より前は、起動前にマシンが再起動していたのに古いロックが残り、そのたびに失敗していました。v2.1.257以降は、そうしたロックが自動で置き換えられます。
EUNKNOWNとの境目は、エラー文の先頭です。spawn自体が失敗していればspawn background service: ...、起動後に終了していればexited before it became reachableが出ます。
切り分けの順番
実際に切り分けるときは、次の順で進めると遠回りが少なくなります。
claude --versionでバージョンを見る。v2.1.212より前なら、まず更新する- メッセージの出だしを確認する。
Couldn't start the sessionなら、上の古い挙動の可能性が高い - npmでインストールしているなら、
npm install -gが走っていないかを確かめ、走っていれば終わるのを待つ - 待っても出る場合は
claude daemon statusでサービスの状態を見る - v2.1.212以降で原因が見つからないなら、
claude.exeの許可を管理者に依頼する
claude --version
claude daemon statusバックグラウンドセッションの停止とコマンドの扱いは/backgroundと/stopの使い方に、Homebrew経由の更新で似た症状が出る場合はHomebrewアップグレード後のENOENTに書いています。
まとめ
EUNKNOWNは、WindowsがプログラムのOS起動を名前のないエラーで拒否したときの表示で、典型的な原因は制限ポリシーです。v2.1.212より前は、PowerShell 5.1がブロックされているだけで失敗しました。更新するか、別のターミナルでclaude daemon runを動かして、一時的にしのげます。
npmの更新中に出るEACCESやEUNKNOWNは、バイナリの差し替えが終わってから再実行すれば直ります。再試行しても消えないEUNKNOWNだけが、管理者に確認する案件です。