[小ネタ] Claude Codeにタスクを投げて離席するならcmuxの「Macをスリープさせない」をONにしておく
こんにちは。サービス開発部の武田です。
ターミナルアプリケーションのcmuxを使っています。先日、アプリケーションメニューを開いたら見慣れない「Macをスリープさせない」という項目が増えていました。

名前だけ見ると、「Claude Codeなどにタスクを投げて離席」しても動き続けてくれる機能でしょうか。気になったので調べてみました。
cmuxそのものについては酒井の記事をご覧ください。
いつ追加されたのか
英語名は Keep Mac Awake で、次のPRで追加されています。マージは2026年8月15日、リリースに含まれたのはv0.64.23(2026年9月15日)からです。
同じPRでiOS側の設定画面にもMacをスリープさせないトグルが入っていて、想定している使い方はiOS版cmuxです。iPhoneやiPadからMac上のcmuxに接続してターミナルを操作する機能で、Macがスリープするとつながらなくなります。公式ドキュメントのiOS版セットアップ手順にも「Mac がスリープ、シャットダウン、または切断されると、スマートフォンからターミナルに接続できません」とあります。続けて「設定中にスリープ防止の選択肢が表示された場合は、Mac を接続可能にしておくために利用できます」とも書かれています。iOS版は執筆時点でTestFlightベータです。
トグルはアプリケーションメニューとメニューバーアイコンの両方にあり、どちらも同じ状態を共有しています。

中身はアサーション1本
実装はSources/CaffeineController.swiftにあり、本体は数十行です。有効にするとFoundationのProcessInfo.beginActivityでアクティビティを1つ保持し、無効にすると解放します。
ProcessInfo.processInfo.beginActivity(
options: [.idleSystemSleepDisabled],
reason: "cmux Keep Mac Awake"
)
ソース冒頭のコメントに「意図的に永続化しない。cmuxを終了すれば必ず解放される」と書かれていて、アプリケーション終了処理の中でも明示的に無効化しています。cmuxを再起動するとOFFに戻ります。
有効にした状態でpmset -g assertionsを実行すると、cmuxが保持しているアサーションが見えます。
$ pmset -g assertions
...
Listed by owning process:
pid 1234(cmux): [0x...] 00:09:49 PreventUserIdleSystemSleep named: "cmux Keep Mac Awake"
cmuxのソケット経由でも操作できます。caffeine.statusで状態を取得し、caffeine.setで切り替えます。メニューで切り替えた結果と連動していました。
$ cmux rpc caffeine.status
{
"enabled" : true
}
$ cmux rpc caffeine.set '{"enabled":false}'
{
"enabled" : false
}
防ぐのはアイドルスリープだけ
.idleSystemSleepDisabledは、IOKitのPreventUserIdleSystemSleepアサーションに対応します。名前のとおり防ぐのは「ユーザーが操作しないことによるスリープ」だけです。IOKitのヘッダーファイルIOPMLib.hには次のように書かれています。
The display may dim and idle sleep while kIOPMAssertPreventUserIdleSystemSleep is enabled, but the system may not idle sleep. The system may still sleep for lid close, Apple menu, low battery, or other sleep reasons.
ディスプレイは消えてもシステムはアイドルスリープしない、ただし蓋を閉じたとき、Appleメニューからのスリープ、バッテリー残量低下などでは変わらずスリープする、と書かれています。
自分のMacがどの理由でスリープしていたかは、pmset -g logに記録されています。
$ pmset -g log | grep "Entering Sleep state"
(抜粋)
2026-11-01 02:22:00 +0900 Sleep Entering Sleep state due to 'Clamshell Sleep':TCPKeepAlive=active Using Batt (Charge:50%) 254 secs
2026-11-01 12:57:00 +0900 Sleep Entering Sleep state due to 'Idle Sleep':TCPKeepAlive=active Using AC (Charge:100%) 937 secs
2026-11-01 14:21:00 +0900 Sleep Entering Sleep state due to 'Idle Sleep':TCPKeepAlive=active Using AC (Charge:100%) 908 secs
電源につないだまま離席した日中はIdle Sleep、蓋を閉じたときはClamshell Sleepです。pmset -g customで見ると私の設定はAC給電時もsleep 15です。蓋を開けたまま15分放置するとIdle Sleepに入ります。「Macをスリープさせない」をONにしておけば、このIdle Sleepは起きなくなります。
ログに大量に出てくるMaintenance SleepやSleep Service Back to Sleepは、スリープ中にDarkWakeで短時間起きた後に再び眠った記録です。最初にスリープへ入った理由ではありません。
おやすみモードとの違い
メニューバーアイコンのメニューには「おやすみモード」(英語名はSleepy Mode)も並んでいます。こちらは2026年6月に追加された全画面のスクリーンセーバーです。IOKitのIOPMAssertionCreateWithNameで、システムスリープとディスプレイスリープの両方のアサーションを取ります。画面を点けたまま、Macを放置する前提の機能です。
「Macをスリープさせない」のほうはディスプレイが消えます。離席中にターミナルを見せておく必要はないので、私にはこちらで十分です。
Claude Code自身もcaffeinateしている
Claude Codeも自分でcaffeinateを起動しています。pmset -g assertionsの出力にcaffeinate command-line toolという行が複数あり、親プロセスをたどるとそれぞれclaudeでした。
claude
└── caffeinate -i -t 300
-iはアイドルスリープの抑止、-t 300は300秒のタイムアウトです。5分ごとに起動し直しているのを何度か見ました。CHANGELOGに載っているのは2.1.83の「終了時にcaffeinateプロセスが残る」不具合の修正だけで、どの条件で起動し、どの条件で起動し直すのかは書かれていません。オプトアウトを求めるissueもありますが、メンテナーからの返答がないままstaleとしてクローズされています。
手元では、前日から起動したままのセッションが翌日になってもcaffeinateを起動し直し続けていました。一方で、同じセッションが生きていた前日の日中、Macは2回Idle Sleepへ入っています。Claude Codeのcaffeinateだけでは、離席中のスリープを防げていませんでした。cmuxの「Macをスリープさせない」はONの間ずっと保持されるので、こうした条件を考えずに済みます。
3つのしくみの違いは次のとおりです。
| 取得方法 | システムのアイドルスリープ | ディスプレイスリープ | 保持される期間 | |
|---|---|---|---|---|
| cmux「Macをスリープさせない」 | ProcessInfo.beginActivity |
防ぐ | 防がない | ONにしてからOFFまたはcmux終了まで |
| cmux「おやすみモード」 | IOPMAssertionCreateWithName |
防ぐ | 防ぐ | モードを抜けるまで |
Claude Codeのcaffeinate -i -t 300 |
caffeinateコマンド |
防ぐ | 防がない | 起動から5分、起動し直す条件は未確認 |
まとめ
離席中にスマートフォンから指示を出す使い方でも、Claude Codeにタスクを投げて席を離れる使い方でも、「Macをスリープさせない」をONにして蓋は開けたままにしておきます。cmuxを終了すると設定はOFFに戻ります。再起動した日はメニューのチェックを見るか、cmux rpc caffeine.set '{"enabled":true}'を起動時に流しておくと確実です。蓋を閉じて持ち歩く場合は、このトグルがあってもスリープします。






