Claude CodeがCLAUDE_CODE_ENABLE_CFCを無視する理由と対処
プロジェクトの設定にCLAUDE_CODE_ENABLE_CFCを書くと「a project can't turn on Claude in Chrome」と出て無視されます。理由と/chrome・--chromeでの有効化手順を示します。
起動時に次の警告が出て、Chromeのブラウザ操作ツールが使えない。原因は、プロジェクトの設定ファイルに書いた CLAUDE_CODE_ENABLE_CFC が意図的に捨てられていることです。
Claude Code ignored CLAUDE_CODE_ENABLE_CFC in this project's settings: a project can't turn on Claude in Chrome. To turn it on yourself, run /chrome or start with --chrome.バグでも設定の書き間違いでもありません。チェックアウトしたリポジトリが、あなたのブラウザにClaude Codeを勝手に接続できないようにするための仕様です。
何が起きているのか
CLAUDE_CODE_ENABLE_CFC は、CLIセッションをChrome連携ありで始めるかを決める環境変数です。1 で連携オン、0 でオフ。後述する claudeInChromeDefaultEnabled 設定より優先され、--chrome と --no-chrome フラグはその両方より優先されます。
ここで問題になるのが書き場所です。プロジェクトの .claude/settings.json か .claude/settings.local.json の env ブロックで 1 にすると、Claude Codeはその値を適用しません。env-varsの説明にも、プロジェクト設定とローカル設定の 1 は無視すると書かれています。
結果として、そのセッションではChrome連携がオフのままです。Claudeにブラウザ操作ツールは渡りません。警告以外に、ほかの機能が止まることはなく、作業はそのまま続けられます。
警告が出たときの状態
- 警告が指す設定は、プロジェクトの設定ファイル内の
envのCLAUDE_CODE_ENABLE_CFC - Chrome連携はそのセッションでオフ
- コーディングなど、ほかの作業には影響しない
なぜプロジェクトには許されないのか
プロジェクトの設定ファイルは、リポジトリの中に入っています。つまり git clone で手元に来たものが、そのまま設定として読まれます。
Chrome連携が有効になると、Claudeはあなたのブラウザに新しいタブを開き、ログイン済みのサイトにもアクセスできます。ドキュメントによれば、ブラウザの共有するログイン状態でGoogle DocsやGmailのようなアプリも操作できる機能です。この接続をリポジトリの書き換えだけで有効にできてしまうと、見知らぬリポジトリを開いた瞬間にブラウザへの経路が開きます。
そのため、接続するかどうかは、リポジトリ側ではなく操作する本人が決める設計になっています。同じ考え方は、ほかの環境変数にもあります。設定リファレンスには、保存先の変更やテレメトリの送信先など、リポジトリが握るべきでない変数をプロジェクト設定とローカル設定では適用しない節があります。CLAUDE_CODE_ENABLE_CFC はその一覧とは別に、env-varsの個別の説明で同じ扱いが明記されています。
直し方は3通り
目的で選び分けます。警告を消すだけなら、設定行を消せば済みます。
目的別の選び方
今回だけ使う
シェルから claude --chrome で起動し直します。起動済みのセッションを切り替えることはできないので、一度終了します。
今後は毎回使う
/chrome を実行し、Enabled by defaultを選びます。次回以降に始めるセッションに効きます。
使わない
プロジェクトの設定ファイルから CLAUDE_CODE_ENABLE_CFC の行を消します。
今回だけ: --chromeで起動する
claude --chrome初回は、連携の紹介と権限の仕組みを説明するダイアログが一度だけ出ます。Enterで進みます。起動後は /chrome で状態を確認できます。パネルに「Status: Enabled」と「Extension: Installed」が出ていれば、つながっています。
今後は毎回: Enabled by default
Claude Codeのプロンプトで /chrome を実行し、Enabled by defaultを選びます。VS Code拡張でも同じ名前のスイッチがあり、CLIとVS Codeは設定を共有します。どちらかで入れれば両方に効きます。
この操作で書き込まれるのは、claudeInChromeDefaultEnabled というキーです。このキーはグローバル設定の扱いで、/config ではClaude in Chrome enabled by defaultと表示されます。保存先と書き方はclaudeInChromeDefaultEnabledなど3キーの記事にまとめています。
注意点が1つあります。既定で有効にすると、ブラウザツールとその説明が常にコンテキストに載ります。コンテキストの消費が増えたと感じたら、設定をオフに戻し、必要なときだけ --chrome を付ける使い方に切り替えられます。
警告だけ消す: 設定行を削除する
ブラウザ操作が要らないのに、誰かが入れた行が残っているだけなら、削除します。
{
"env": {
"CLAUDE_CODE_ENABLE_CFC": "1"
}
}上の CLAUDE_CODE_ENABLE_CFC の行を消せば、警告は出なくなります。env にほかの変数がなければ、env ブロックごと削除して構いません。
どのファイルが原因かを探す
警告は「this project's settings」としか言いません。行がプロジェクトの共有ファイルにあるのか、自分のローカルファイルにあるのかは、リポジトリのルートで探すと分かります。
grep -n "CLAUDE_CODE_ENABLE_CFC" \
.claude/settings.json .claude/settings.local.jsonsettings.json に出たなら、チームの誰かがコミットした設定です。settings.local.json に出たなら、自分か自分のツールが書いたものです。どちらも扱いは同じで、1 は適用されません。Gitで追跡されている settings.json の行を消すと、チーム全員の警告が一緒に消えます。コミットする前に、その行を入れた人が何を期待していたかを一言確認すると、手戻りが減ります。
チームで共有したいときはどうするか
プロジェクトの設定ファイルで全員のChromeを有効にする方法は、この仕様では用意されていません。それを望む場合の現実的な形は次のとおりです。
- READMEや手順書に書く: 「ブラウザ検証をする人は
claude --chromeで起動する」のように、各自の操作として案内する - 各自が
/chromeで設定する: 設定はユーザー単位で、本人の判断で入る - 組織の管理者は別の仕組みを使う:
managed-mcp.jsonやdeniedMcpServersといった管理者向けの設定で、Claude in Chromeの許可と拒否が決まる
管理者側の制御は、本件とは別のエラーになります。managed-mcp.json を配っている組織でClaude in Chromeが止まるときは、allowClaudeInChromeWithManagedMcpの記事を見てください。deniedMcpServers で claude-in-chrome を拒否している場合、拡張機能の導入を促すプロンプトも表示されません。
また、/login を使わずAPIキーや claude setup-token で作った長期トークンで認証しているときは、--chrome を付けてもClaude CodeはChrome連携をオフにしたままにします。ブラウザ拡張がそれらの認証情報では認証できないためです。v2.1.216より前は、この状態でも連携を有効にできましたが、拡張への接続はすべて403エラーで失敗していました。ドキュメントでは、Chrome連携を使う前提に、/login による直接のAnthropicプラン(Pro、Max、Team、Enterprise)が挙げられています。
有効にしたのに動かないとき
警告が消えても、ブラウザ操作が通らないことがあります。切り分けの順番は次のとおりです。
Chrome連携がつながらないときの確認順
- QChromeは起動していて、拡張機能は有効ですか?答えがいいえのとき答えがはい
chrome://extensionsで拡張が入っているか、有効かを確かめます。拡張はバージョン1.0.36以降が必要です。 - Q`/chrome` のStatusは「Not connected」ではありませんか?答えがはいのとき答えがはい
「Reconnect extension」を選びます。v2.1.290より前のバージョンは、この項目が再接続用のページを開くだけで、失敗した接続を立て直しません。古いなら更新してください。
- Q拡張と Claude Code は同じclaude.aiの組織にサインインしていますか?答えがいいえのとき答えがはい
/statusでOrganizationの行を確かめ、拡張側のログインをそれに合わせます。
それでも駄目なとき
Claude CodeとChromeの両方を再起動します。詳しい原因別の対処はChrome接続の切り分け記事にあります。
よくある混同
「ENABLE_CFC」「DEFAULT_ENABLED」「--chrome」は似て見えますが、効く範囲が違います。
| 手段 | 書き場所 | プロジェクトの設定ファイルで有効か |
|---|---|---|
--chrome / --no-chrome | 書き場所起動時のフラグ | プロジェクトの設定ファイルで有効か対象外(起動時に本人が付ける) |
CLAUDE_CODE_ENABLE_CFC=1 | 書き場所環境変数 | プロジェクトの設定ファイルで有効か無視される |
claudeInChromeDefaultEnabled | 書き場所グローバル設定 | プロジェクトの設定ファイルで有効か書いても反映されない |
2行目と3行目は意味が違います。2行目は「書いたが警告つきで捨てられる」、3行目は「そもそも保存先が別」です。どちらも、リポジトリ側からは有効にできません。CLAUDE_CODE_ENABLE_CFC を 0 にした場合の扱いは、ドキュメントに記載がありません。無効にしたい意図なら、--no-chrome を起動時に付ける方が確実です。
Chromeのシステムプロンプトだけ外したいという別の目的には、CLAUDE_CODE_DISABLE_CFC_PROMPT を使います。こちらはChrome連携そのものを切り替える変数ではありません。CFC_PROMPTの記事で扱っています。
まとめ
リポジトリの設定ファイルに書いた CLAUDE_CODE_ENABLE_CFC=1 が捨てられるのは、見知らぬリポジトリにブラウザを触らせないための安全側の仕様です。使いたい人が自分の端末で --chrome か /chrome のEnabled by defaultを選ぶ、という分担になります。チームには「各自でこの1手を入れてください」と案内するのが、いまの仕様に沿った形です。