Claude Media
Claude Codeで通知の在席判定を無効化する方法

Claude Codeで通知の在席判定を無効化する方法

CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECKで在席中でもデスクトップ通知を送らせる設定と、モバイルpushとの違いを解説します。

Claude Codeの通知が届かないのは在席判定のせいかもしれない

Claude Codeはタスク完了時などにPushNotificationツールで通知を送ります。ただし既定では、キーボード操作中やターミナルにフォーカスがある間は「見ているはず」と判断し、デスクトップ通知とモバイルpushの両方を止めます。

CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECKを1に設定すると、この在席判定のうちローカル側の判定だけを無効化できます。ターミナルにフォーカスしたままでも、タスク完了のたびにデスクトップ通知が届くようになります。

環境変数の設定方法

シェルの環境変数として設定します。

export CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK=1
claude

毎回の起動時に有効にしたい場合は、シェルの設定ファイル(.zshrcや.bashrc)に追記します。Claude Code v2.1.193以降が必要です。それより前のバージョンでは変数自体が読み込まれません。バージョンはclaude --versionで確認できます。

チーム全体に配るなら、シェルではなくsettings.jsonのenvブロックで指定する方法もあります。

{
  "env": {
    "CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK": "1"
  }
}

シェルと設定ファイルの両方で同じ変数を設定した場合は、設定ファイル側の値が優先されます。Claude Codeはenvブロックの各エントリをプロセス環境へ書き込み、シェルから引き継いだ値を上書きします。プロジェクト共有の.claude/settings.jsonに置けば、リポジトリを開く全員に同じ挙動を配れます。

反映されないときに確認すること

環境変数は起動時に一度だけ読み込まれます。設定後にすでに起動しているセッションには反映されないため、claudeを再起動してください。設定ファイルのenvブロックの値は、ファイルの変更時に実行中のセッションへ再適用される点がシェル変数と異なります。

もう一つの見落としやすい点は、この変数が対象にしているのが「デスクトップ通知」であって「セッション再開時の要約表示」ではないことです。数分離席して戻ったときの1行サマリーはawaySummaryEnabled(既定でオン)が別に制御しており、CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECKとは無関係です。通知が変わらないと感じたら、自分が止めたいのがどちらの機能かを切り分けます。

何が変わり、何が変わらないか

この変数が無効化するのは「ローカル側の在席判定」だけです。影響範囲を表にまとめます。

通知の種類既定(未設定)=1設定後
デスクトップ通知既定(未設定)ターミナルにフォーカス中は抑制=1設定後常に送信される
モバイルpush既定(未設定)キーボード操作検知時は抑制=1設定後サーバー側の在席判定が引き続き有効

デスクトップ通知は完全にローカルの判定だけで抑制の可否が決まるため、この変数だけで挙動が変わります。一方でモバイルpushは、Remote Controlのサーバー側でも別途「操作中かどうか」を判定しており、そちらはCLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECKの対象外です。サーバーがあなたの操作を検知していれば、モバイル側には引き続きpushが届かないことがあります。

「ターミナルにフォーカスしているのに通知が来ない」を解消したいだけなら、この変数だけで足ります。「外出中は確実にモバイルへ届けたい」という目的には、この変数は直接効きません。

モバイルpushにはRemote Controlの接続が前提

在席判定の設定をどういじっても、モバイルpush自体はRemote Controlが接続されていなければ届きません。Remote Controlの利用条件は次のとおりです。

  • プラン: Pro・Max・Team・Enterpriseで利用可能。APIキーでのサインインは対象外
  • サインイン: claude実行後に/loginでclaude.aiにログイン済みであること
  • APIエンドポイント: Amazon Bedrock・Google CloudのAgent Platform・Microsoft Foundry経由、またはANTHROPIC_BASE_URLをLLMゲートウェイ等に向けている構成では利用不可
  • feature-flag評価: CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICやDISABLE_GROWTHBOOKを設定しているとRemote Control自体が使えなくなる

Team・Enterpriseでは管理者がClaude Code管理設定でRemote Controlのトグルを有効化している必要もあります。

モバイルpushを受け取るための設定と手順

Remote Controlが接続できていても、/config側のトグルをオンにしなければpushは届きません。設定項目は次の2つです。

  • Push when Claude decides(agentPushNotifEnabled): Claudeが長時間タスクの完了などを判断して自発的にpushを送る
  • Push when actions required(inputNeededNotifEnabled): 権限確認や質問への回答待ちのときにpushを送る

いずれも既定値はfalseで、Remote Controlが接続されている間だけ送信されます。イベントごとの細かい設定はなく、この2つのトグルの組み合わせで決まります。pushを送るタイミングは長時間タスクの完了時や判断待ちのときが典型ですが、テストが終わったら教えてのようにプロンプト内で明示的に依頼して送らせることもできます。

トグルをオンにするだけでは端末が登録されません。公式ドキュメントの手順は次の4段階です。

  1. Claude公式アプリをiOSまたはAndroidからインストールする
  2. Claude Codeで使っているのと同じアカウント・組織でサインインする
  3. OSの通知許可プロンプトを許可する
  4. ターミナルで/configを開き、Push when Claude decidesまたはPush when actions requiredを有効にする

それでも届かない場合の切り分けは次のとおりです。/configでNo mobile registeredと表示されているなら、スマホ側のClaudeアプリを一度開いてpushトークンを更新します。iOSでは集中モードや通知の要約機能がpushを遅延・抑制することがあるため、設定アプリの通知一覧でClaudeの項目を確認します。Androidではバッテリー最適化がpushの配信を遅らせることがあるので、Claudeアプリを最適化の対象外にします。「在席判定を無効化したのにモバイルへ何も届かない」ときも、まずはこの4段階とRemote Controlの接続状態(セッション内の/rc active表示)を確認してください。

逆方向の制御: CLAUDE_CLIENT_PRESENCE_FILE

在席判定を無効化するのとは逆に、抑制する範囲を広げる環境変数もあります。CLAUDE_CLIENT_PRESENCE_FILEにファイルパスを指定すると、そのファイルが存在する間は、別のウィンドウで作業していてもモバイルpushをスキップします。

画面ロック解除時にファイルを作成し、ロック時に削除するスクリプトと組み合わせる想定です。ファイルが存在しない、または読み取れない場合は通常どおり通知されます。Claude Codeはpushが発生するイベントごとに1回だけファイルの有無を確認する仕組みで、常時ポーリングはしません。こちらはv2.1.181以降が必要です。

つまり在席判定に関わる環境変数は目的別に2つあります。

環境変数目的必要バージョン
CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK目的デスクトップ通知の抑制を無効化する必要バージョンv2.1.193以降
CLAUDE_CLIENT_PRESENCE_FILE目的画面ロック等と連動してモバイルpushの抑制を強化する必要バージョンv2.1.181以降

デスクトップ通知そのものの経路を変える

通知が鳴る経路自体は、在席判定とは別にpreferredNotifChannel設定で決まります。既定の"auto"ではiTerm2・Ghostty・Kittyでデスクトップ通知、Terminal.appでは音声ベルがオフのときだけベル音、それ以外のターミナルでは何もしません。"terminal_bell"にすればどのターミナルでもベル文字を鳴らせます。

在席判定を無効化しても、使っているターミナルがpreferredNotifChannelの対象外なら通知自体が発生しません。まず自分のターミナルで通知チャンネルが機能しているかを確認してから、在席判定の無効化を試すと切り分けやすくなります。

こんな場面で使う

複数モニターでClaude Codeのターミナルを常時フォーカスしたまま別の作業をしている場合、既定の在席判定では「フォーカスあり」と見なされ通知が抑制され続けます。この環境変数を設定しておけば、実際に画面を見ていなくてもタスク完了のたびにデスクトップ通知が鳴るようになります。

逆に、そばにいるときは通知を抑制したいまま、離席時だけモバイルへ確実に届けたい場合は、この変数を触らずにCLAUDE_CLIENT_PRESENCE_FILEと画面ロックの連携で対応する方が目的に合います。

まとめ

CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK=1は、ターミナルにフォーカスしている間もデスクトップ通知を止めたくないときに、シェルまたはsettings.jsonのenvブロックで設定します。無効化されるのはあくまでローカル側の在席判定だけで、モバイルpushのサーバー側判定には影響しません。モバイルpush自体を受け取るには/configのPush when Claude decidesとPush when actions requiredを別途オンにする必要があります。目的が「離席中も確実にモバイルへ届けたい」であれば、CLAUDE_CLIENT_PRESENCE_FILEとの組み合わせを検討します。

Claude Codeの通知全般の設定(ターミナルベルとNotificationフック)はClaude Code通知の設定にまとめています。Cowork Dispatchでモバイル通知が届かない場合の切り分けはCowork Dispatchで通知が来ない、環境変数で挙動を無効化する他の設定例はdisableClaudeAiConnectorsでClaude Codeのコネクタを一括無効化を参照してください。設定変更後に反映を確かめる際は、まず/configの表示と/rc activeのインジケーターの両方を見比べる習慣をつけておくと切り分けが速くなります。

この記事を共有:XはてブLinkedIn