CLAUDE_CLIENT_PRESENCE_FILEで画面ロック解除中のpushを止める
画面ロック解除中だけRemote Controlのモバイルpushを止める環境変数の仕組みと設定手順を解説します。
別ウィンドウを見ているのにスマホへpushが届くとき
Claude Code Remote Controlの接続中は、長時間タスクの完了時や判断が必要な場面でスマホにpush通知が届きます。Claude Codeは、接続中のターミナルで入力している間、またはそのターミナルにフォーカスがある間は、モバイルpushを送りません。pushを送る側のツールと設定はPushNotificationの解説にあります。
困るのは、机の前にいながらターミナル以外を見ている時間です。資料を読んでいる間や別アプリで議事録を取っている間は、入力もフォーカスもないため、pushが届いてしまいます。CLAUDE_CLIENT_PRESENCE_FILEは、この「在席しているがターミナルを見ていない」時間までpush抑制を広げる環境変数です。changelogでは、Claude Code v2.1.181(2026年6月17日)で追加されています。
使い方は単純です。外部の画面ロック監視ツールが、画面ロック解除時にマーカーファイルを作り、ロック時に消します。ファイルが存在する間はモバイルpushがスキップされ、存在しない、または読み取れないときは通常どおり届きます。判定はポーリングではなく、pushが発生するイベントごとに1回です。常時ファイルを見張る処理はありません。
設定手順
マーカーファイルを有効にする3ステップ
- 1
パスを決めて環境変数に設定する
任意の場所をパスに決めます。条件になるのはファイルの存在だけです。
- 2
シェルの設定ファイルに書き込む
毎回のセッションで有効にするため、
~/.zshrcや~/.bashrcに追記します。fishなら~/.config/fish/config.fishに、fishの文法で書きます。 - 3
画面ロックの解除と施錠に作成・削除を紐づける
ロック解除でファイルを作り、ロックで消す処理を外部ツールで用意します。具体例は次の節です。
ステップ1とステップ2に当たるコマンドは次のとおりです。
export CLAUDE_CLIENT_PRESENCE_FILE="$HOME/.claude/presence.lock"
echo 'export CLAUDE_CLIENT_PRESENCE_FILE="$HOME/.claude/presence.lock"' >> ~/.zshrc画面ロックにファイルの作成と削除を紐づける
紐づけ方はOSごとに異なります。環境変数リファレンスとRemote Controlのページには、画面ロックリスナーなどの外部ツール(screen-lock listener or similar tool)を使うとあるだけで、具体的な実装は載っていません。以下は一般的な仕組みを組み合わせた例で、Claude Code公式が保証する手順ではありません。
macOS: ロック状態を検知できるスクリプトや外部ツールを用意し、解除時にtouch、ロック時にrmを実行させます。組み方は環境で変わるので、手元で動作を確かめてください。
Linux: 画面ロックのD-Busシグナルを監視するユーザーサービスで、ファイルを作成・削除できます。デスクトップ環境によってインターフェース名が異なるため、監視対象は環境に合わせて選びます。
Windows: タスクスケジューラに「ワークステーションのロック解除時」と「ロック時」をトリガーにした2つのタスクを登録します。それぞれNew-ItemとRemove-Itemを実行するPowerShellスクリプトを紐づけます。
Linuxの最小構成は次のとおりです。dbus-monitorが出力するboolean trueをロック、boolean falseを解除とみなして、ファイルを作成・削除します。
dbus-monitor --session "type='signal',interface='org.freedesktop.ScreenSaver'" |
while read -r line; do
case "$line" in
*"boolean true"*) rm -f "$HOME/.claude/presence.lock" ;;
*"boolean false"*) touch "$HOME/.claude/presence.lock" ;;
esac
doneこのcaseの分岐は、dbus-monitorの代わりに擬似的な行を流しても動作を確かめられます。boolean trueでrm、boolean falseでtouchが実行され、ファイルの有無が切り替わります。
systemdのユーザーサービスとして常駐させれば、ログイン中はこの切り替えが続きます。
ロック時の削除が動かず、ファイルが残り続けると、ロック後もpushが止まったままです。削除処理が確実に動くかは別に確かめます。
ツールを作り込む前に手動で効きを確かめる
自動化の前に、touchとrmだけで変数の効きを確かめておくと、後の切り分けが楽です。次の順で試します。
- マーカーファイルを
touchで作った状態で、長時間タスクを完了させる。pushが来ないことを見る rmで消した状態で同じ操作をする。今度はpushが届くことを見る
2つが通れば、残りは画面ロックのイベントに作成・削除をつなぐ作業だけです。
どの設定でpushを止めるか
Remote Controlのpush抑制には複数の設定が関わります。状況別に並べると次のとおりです。
| 状況 | 使う設定 | 効果 |
|---|---|---|
| ターミナルを直接操作している | 使う設定既定の動作(設定不要) | 効果入力・フォーカスの検知でモバイルpushをスキップ |
| 机の前にいるが別ウィンドウを見ている | 使う設定CLAUDE_CLIENT_PRESENCE_FILE | 効果マーカーファイルがある間、モバイルpushをスキップ |
操作中でもPushNotificationツールの通知を出したい | 使う設定CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK | 効果入力・フォーカスの検知を無効にして通知を出す |
| pushを受け取りたくない | 使う設定/configでpushの2トグルをオフ | 効果モバイルpushを止める |
CLAUDE_CLIENT_PRESENCE_FILEはpushを完全に無効にする設定ではありません。画面をロックすれば、通常どおりpushが届きます。
向きが逆の変数と取り違えない
名前の近い変数にCLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECKがあります。こちらはv2.1.193(2026年6月25日)以降で使える変数で、止める方向ではなく鳴らす方向に働きます。
2つの変数の向き
CLAUDE_CLIENT_PRESENCE_FILE
マーカーファイルがある間、Remote Controlのモバイルpushをスキップします。別ウィンドウを見ている時間まで抑制が及びます。
CLAUDE_CODE_DISABLE_NOTIFICATION_PRESENCE_CHECK
1に設定すると、ターミナルで入力中やフォーカス中でもPushNotificationツールのデスクトップ通知を送ります。既定ではこのツールが、入力やフォーカスを検知したときにデスクトップ通知とモバイルpushの両方を見送ります。外すのはこのローカル判定だけで、ユーザーの活動をサーバーが検知してモバイルpushを抑える動きは残ります。
前提になるモバイルpushの設定
この変数が効くのは、Remote Controlが有効なセッションです。起動方法は3通りあります。サーバーを立てるclaude remote-control、通常の対話セッションに足すclaude --remote-control(短縮は--rc)、実行中のセッション内で使う/remote-controlです。claude remote-controlは、使えるclaude.aiのログインがないとエラーで終了します。claude --remote-controlは、失敗の通知を出したうえで通常の対話セッションとして起動します。v2.1.289のclaude --helpには、次のように載っています。
claude --help
--remote-control [name] Start an interactive session with Remote
Control enabled (optionally named)
--remote-control-session-name-prefix <prefix>
Prefix for auto-generated Remote Control session names (default: hostname)CLAUDE_CLIENT_PRESENCE_FILEは抑制条件を足すだけで、pushそのものを有効にはしません。次の準備が済んでいる必要があります。
- Claude公式アプリ(iOS / Android)を入れ、Claude Codeと同じアカウント・組織でサインインする
- OSの通知許可を受け入れる
- ターミナルで
/configを実行し、「Push when Claude decides」か「Push when actions required」(または両方)を有効にする
pushを送るタイミングはClaudeが決めます。長時間タスクの完了時や、続行に判断が要るときが典型です。notify me when the tests finishのように、依頼文で通知を頼むこともできます。通知の種類ごとの細かい設定はなく、切り替えは/configの2つのトグルだけです。
「Push when Claude decides」は先回りの通知、「Push when actions required」は権限確認や質問の通知に当たります。この設定が入っていないと、そもそもpushが届かないため、抑制の効果を確かめられません。
Remote Controlに接続できないときは、Remote Controlに接続できないときの見分け方を先に確認します。接続後にセッションが切れるなら、Remote Controlが20分放置で切断される原因が当てはまることがあります。
通知が届かないときの切り分け
CLAUDE_CLIENT_PRESENCE_FILEを設定した後にpushが来なくなったら、抑制設定が原因か、別の要因かを分けます。上から順に見ます。
/configに「No mobile registered」と出る: スマホのClaudeアプリを開いて、pushトークンを更新させます。警告は次にRemote Controlがつながったときに消えます- iOSで届かない・遅い: フォーカスモードと通知の要約がpushを抑えたり遅らせたりします。設定アプリの通知設定でClaudeを見ます
- Androidで遅い: バッテリー最適化が配信を遅らせることがあります。Claudeアプリを最適化の対象から外します
- ロックしてもpushが止まったまま:
CLAUDE_CLIENT_PRESENCE_FILEのパスが指すファイルが、ロック後も消えていない可能性があります。ロック時の削除処理が動いているかを見ます
よくある質問
Remote Controlが使えない環境でも意味はありますか
意味はありません。この変数はRemote Controlのモバイルpushに対する設定なので、Remote Control自体が使えない環境では効果がありません。
使えないのは、Amazon Bedrock、Google Cloud's Agent Platform、Microsoft Foundryを使っている場合や、ANTHROPIC_BASE_URLをapi.anthropic.com以外に向けている場合です。LLMゲートウェイやプロキシ経由も同じです。エンタープライズ向けのClaudeアプリゲートウェイでサインインしている場合も使えません。
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICかDISABLE_GROWTHBOOKを設定したときも、Remote Controlは使えません。APIキーでの認証も対象外で、ANTHROPIC_API_KEYやapiKeyHelperが有効だと「Remote Control requires claude.ai subscription auth.」のメッセージが出ます。対象プランはPro、Max、Team、Enterpriseで、TeamとEnterpriseでは管理者がRemote Controlのトグルを有効にしておく必要があります。