Adrafinil: macOS の AI コーディングエージェント向け条件付きスリープ防止

Adrafinil: macOS の AI コーディングエージェント向け条件付きスリープ防止

Adrafinil は、Mac がアクティブな AI コーディングエージェントのセッション中だけ起きている状態を保ち、作業がないときは通常通りスリープさせる macOS ユーティリティです。常時ウェイク状態にするユーティリティとは異なり、Adrafinil はエージェントがタスクを実行中の間だけスリープ(クラムシェル(蓋閉じ)スリープを含む)を動的にブロックし、セッションが終了すると自動的にロックを解除します。

エージェント認識型スリープ管理

Adrafinil は、1 つ以上の AI コーディングエージェントセッションがアクティブなアサーションを保持しているときだけシステムのスリープを防止します。セッションがアクティブでない場合、Mac のデフォルトのスリープ動作はそのままです。このアプローチは、実際のシステムアクティビティに関係なく常にウェイク状態を保つ caffeinate や Amphetamine といったツールとは異なります。

対応エージェントと統合

Adrafinil は、9 つの AI エージェントのフックシステムと統合するワンクリックインストーラを提供します:

  • Claude Code
  • Codex
  • Cursor
  • Gemini CLI
  • Aider
  • Hermes
  • OpenCode
  • Cline
  • Pi

統合は、エージェントがタスク開始時にセッションキーを acquire、アイドル状態になると release するために呼び出すバンドルされた CLI によって行われます。これらの CLI 呼び出しは往復 50ms 未満になるよう最適化されており、エージェントのワークフローを遅延させません。

技術アーキテクチャとセキュリティ

クラムシェルスリープを上書きするには root 権限が必要なため、Adrafinil は特権攻撃面を最小化する階層型アーキテクチャを採用しています。

特権レイヤー

  1. Adrafinil.app: ユーザー向けメニューバーアプリで、UI、設定、蓋開放時のサマリーを処理します。
  2. AdrafinilDaemon: ユーザーとして実行される LaunchAgent。参照カウント方式のアサーションレジストリを管理し、熱状態と蓋の状態を監視し、CLI ソケットを扱います。
  3. AdrafinilHelper: root 権限の SMAppService LaunchDaemon。スリープブロック API へアクセスできる唯一のコンポーネントで、シンプルな setSleepBlocked(Bool) メソッドを公開します。実行前に呼び出し元のコード署名要件を検証します。

スリープブロック機構

Adrafinil はアイドルスリープ用に標準の IOPMAssertion を使用します。クラムシェルスリープに対しては pmset disablesleep 1 を利用します。開発者は、公開されている IOPM アサーション(caffeinate が使用)だけでは蓋を閉じた状態の Mac を起きたままにできないことを指摘しています。状態漏れを防ぐため、ヘルパーは再起動時に disablesleep を 0 にリセットし、現在の状態を再適用します。

安全性と監視機能

ハードウェア損傷を防ぎシステムの安定性を確保するため、Adrafinil にはいくつかの自動保護機能が組み込まれています:

  • 熱カットアウト: 蓋を閉じたまま CPU または本体温度が事前定義された閾値を超えると、すべてのアサーションが強制的に解除され、閉鎖空間(例: ラップトップバッグ)での過熱を防止します。
  • アイドルリリース: 所有プロセスが終了した場合や、指定された分数以上 CPU がアイドル状態である場合にアサーションが自動的に解除されます。
  • 蓋状態フィードバック: 蓋を閉じたときにチャイムが鳴り、アサーションが保持されていることを確認できます。蓋を開けると、実行された内容、最高温度、熱カットアウトが発生したかどうかのサマリーが表示されます。

要件とインストール

Adrafinil は macOS Tahoe 26.4(またはそれ以前の 26.x 系)を必要とし、Xcode 26+ と Swift 6 の厳格な並行性でビルドされています。インストールには、SMAppService を介して特権ヘルパーを登録するための管理者権限が必要です。

コミュニティの見解

このツールは AI エージェントユーザーの特定の課題を解決しますが、コミュニティメンバーからはよりシンプルな代替案や懸念が提起されています:

  • 既存ツール: 一部のユーザーは、Amphetamine のように特定アプリが終了したときに自動で終了できる機能や、pmset を使ったシンプルなシェルスクリプトでも同様の結果が得られると指摘しています。
  • ハードウェアリスク: ユーザーは、バックパック内ではラップトップが十分に冷却できないことを開発者に注意喚起し、熱カットアウト機能の重要性を強調しています。
  • 手動代替策: あるユーザーは、外部モニタをシミュレートするためにダミー HDMI/USB‑C プラグを使用すると睡眠を防げると提案しましたが、結果は一貫しないと報告しています。

"15 年前にラップトップで音楽を聴き続けるためにこれをやっていました… ただし注意点として、バックパックの中ではラップトップは冷却できず、結局過熱してシャットダウンします。"

CLI コマンドのサマリー

Command Purpose
acquire <key> エージェントのタスク開始時にスリープをブロック
release <key> エージェントがアイドルになるとスリープブロックを解除
hold --for <time> バックグラウンドタスク(例: デプロイ)のために時間限定でウェイク状態を保持
mcp 標準入出力上で Model Context Protocol 通信を有効化
status 現在のアサーション状態を確認

SUMMARY

Adrafinil は、AI コーディングエージェントがアクティブに作業している間だけ、クラムシェルモードを含むシステムスリープを防止する macOS メニューバーアプリです。

Sources