
2026/06/28 5:34
Show HN: Adrafinil ~エージェントが作業している間だけ、Mac の Lid を開きっぱなしにしません~
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
Adrafinil は、Claude Code、Codex、Cursor、Gemini CLI、Aider、Hermes、OpenCode、Cline、および Pi といった AI コーディングエージェントがアクティブセッションを持っている間のみシステムスリープをブロックする macOS のメニューバーアプリケーションです。AI エージェントのセッションがアクティブでないときは、通常の動作(蓋を閉じたクラムシェルモードを含む)に自動的に戻ります。
caffeinate や Amphetamine などの常時オン型ユーティリティとは異なり、Adrafinil は AI エージェントが完了した後、安全にスリープを復元します。標準的なインストールには macOS 26.4 以降(現在はこのバージョンでのみ検証済み)と、SMAppService を介した特権ヘルパーの登録を行うための管理権限が必要です。非管理者によるインストールでは、CLI は ~/.local/bin に配置されます。Adrafinil は、ユーザー向け Adrafinil.app、ポリシーロジックを処理する非特権 AdrafinilDaemon、setSleepBlocked(Bool) を使用してスリープを制御する(pmset disablesleep を使用し、プライベートな IOPMrootDomain パスが干渉しないことを確認してから)ルートレベルの AdrafinilHelper からなる安全な 3 ティヤーのアーキテクチャを採用しています。Swift 6 厳密並行性で構築され、MIT ライセンス(ソースは https://github.com/kageroumado/adrafinil.git)下で提供されており、低レイテンシのパフォーマンスと明確なサーマルフィードバックを提供します。主要な機能には、蓋が閉じられた状態で CPU またはスキン温度が安全閾値を超える場合にスリープアサーションを強制リリースするサーマルカットアウトがあり、またプロセスがクラッシュした場合または不活性のままの場合にアサーションをダンプするイードルリリースがあります。CLI コマンド(acquire、release、hold)は、デーモンへの往復レイテンシを 50ms 以下に提供します。追加のユーザー向け機能としては、蓋閉じのアラウドチャ임と、ピーク温度、サーマルカットアウト状態、実行履歴を表示する蓋開きサマリーがあります。クリーンなアンインストールは、残留状態を残さないまますべてのエージェントフックエントリを削除するため、システムのスチュービリティおよび蓋閉じによる過熱事象からの安全性を確保します。本文
Adrafinil: マシンのためのユージェノイド♡
⚠️ 服用上の注意とコンセプト
Adrafinil は、カフェインやアンフェタミンなどの「常時覚醒」タイプの刺激剤とは異なります。AI エージェントが作業中のみシステムを起動し続け、終了時は自動で休ませる「必要な時のみ起きる」コンセプトを持っています。
- 目的: AI エージェントがアクティブなセッションを持つ間だけ Mac を睡眠モードから阻止する。
- 仕組み: アーギュメント(タスク)の途中のみ介入し、完了すると即座に身を引く。
- 重要: Mac を覚醒させるのは、AI エージェントが作業している間だけです。
🚀 主な機能
- エージェント検知型起動
- AI エージェントがアサーションを持っている間のみ睡眠阻止を行う。
- セッション数が 0 の場合(idle)は通常通り lid を閉じても Mac が睡眠します。
- 9 つの主要エージェント統合
- ワンクリックインストールで、以下のツールと連携可能です。
Claude CodeCodexCursorGemini CLIAiderHermesOpenCodeClinePi
- ワンクリックインストールで、以下のツールと連携可能です。
- 超低遅延通信
- クライアントインターフェースの往復時間は50ms 未満。
- エージェントのワークフローを停滞させません。
- 安全性と最適化
- 参照カウント付きアサーション: 重複タスクはスタックされ、最後に解放されるまで休眠は解除されない。
- 熱的カットアウト (Thermal Cut-out): CPU 温度が閾値を超えると、全アサーションを強制的に解放し(焼き尽くすのを防ぐ)、Mac を保護する。
- アイドル時リリース: プロセス終了または一定時間 CPU-idle の場合、アサーションは自動解除される。
- プロセス嗅探: フックが未インストールでも、既知のエージェントバイナリを検知し起動可能。
- 通知システム
- Lid 閉時チャイム: 画面オフ時のため通知が出ませんが、lid を閉じた際のアサーション保持を確認できる音が出る。
- Lid 開きサマリー: アバウト中に実行された内容、ピーク温度、熱カットアウトの有無を表示。
- クリーンアンインストール
- すべてのエージェント設定からフックエントリを完全削除する。
📋 システム要件と入手方法
必要条件
- OS: macOS Tahoe 26.4 (ビルドおよびテスト済みのバージョン)。おそらく以前Versionsでも動作します。
- 開発環境: ビルドには Xcode 26+ と Swift 6 の厳密並行性が必要です。
- 権限: 標準インストールには Admin 権限が必要です(特権ヘルパーは
を介してインストール)。SMAppService
ダウンロードと初期設定
- サイン済み、notarized のディスクイメージをダウンロードしてください。
- 開き、Adrafinil.app を Applications フォルダにドラッグして起動します。
- 最初の起動時に特権ヘルパーを登録するため、一度 Admin 権限 を要求されます。
注意:
は macOS 26.4 またはそれ以降が必要です。自分でビルドする場合は「# ビルド」セクションを参照してください。Adrafinil
💻 ビルド方法
ソースコードの取得
git clone https://github.com/kageroumado/adrafinil.git cd adrafinil open Adrafinil.xcodeproj
実行と署名設定
- Xcode でプロジェクトを開き、Run をクリックします。
- 開発チームを設定する必要があります(コード署名のため)。
- デーモンとヘルパーはアプリバンドルに埋め込まれており、起動時にシステムに登録されます。
- ソースにはチーム ID が焼き付けられておらず、XPC 呼び出しチェックはランタイムで署名チームを読み取るため、任意の開発者 ID で再ビルド可能です。
ローカル署名なしでのコンパイル確認
xcodebuild -project Adrafinil.xcodeproj -scheme Adrafinil -configuration Debug \ -destination 'generic/platform=macOS' \ CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY='' build
共有ロジックの独立テスト
cd AdrafinilShared swift test
⚙️ 動作原理とコマンドライン
AI エージェントは Adrafinil と直接通信せず、各ツールのフックシステムがバンドルされた CLI を呼び出します。
コマンド例
- セッション開始時(turn begin):
adrafinil acquire <session-key> --tool claude-code --reason "long build" - セッション終了時(idle):
adrafinil release <session-key>
アクション単位制御
保持は「セッション数」ではなく「アクティビティ」単位で行われます。
時にUserPromptSubmitacquire
時にStoprelease- 結果: Mac はエージェントが実際に作業している間のみ起動したままです。
Time-boxed Hold (時間制限保持)
背景タスク(長期ビルドやデプロイなど)のために、一定時間 awake にする機能:
adrafinil hold --for 30m --reason "deploy"
- 最大 30 分間 awake で、その後自動解放されます。
Model Context Protocol (MCP)
: stdio を介してエージェントとの対話を行うためのもので使用します。adrafinil mcp
その他のサブコマンド
statusinstall-hooksuninstall-hooksdaemon-statusversion
🏗️ アーキテクチャ構成
Adrafinil は特権階級を 3 つにわけた 4 つのプロダクトで構成されます(詳細は
Docs/ARCHITECTURE.md)。
┌──────────────────────────────────────────────────────────────┐ │ Adrafinil.app (メニューバーアプリ、ユーザー向け) │ │ • ステータス項目、設定、インストーラー GUI、lid 開きサマリー │ └─────────────────────────────┬────────────────────────────────┘ │ XPC ▼ ┌──────────────────────────────────────────────────────────────┐ │ AdrafinilDaemon (LaunchAgent、ユーザーとして常に実行) │ │ • 参照カウント付きアサーションレジストリ │ │ • プロセスウォッチャー(kqueue NOTE_EXIT +定期スキャン) │ │ • 熱モニター(SMC)• lid 状態モニター(IORegistry) │ │ • lid 閉きチャイム • CLI ソケット …/Adrafinil/cli.sock │ └─────────────────────────────┬────────────────────────────────┘ │ XPC (特権 Mach サービス) ▼ ┌──────────────────────────────────────────────────────────────┐ │ AdrafinilHelper (SMAppService LaunchDaemon、root) │ │ • sleep ブロック API に触れる唯一のコンポーネント │ │ • setSleepBlocked(Bool) + read-only ステート/バージョン │ │ • コールサージャのコード署名要件を検証 │ └─────────────────────────────┬────────────────────────────────┘ adrafinil (CLI、.app に同梱され PATH へのシンボルリンク) • acquire / release / hold / mcp / status / install-hooks / uninstall-hooks • デーモンソケットに接続;往復時間 <50ms AdrafinilShared — すべてのターゲットで共有される Swift パッケージ: - データモデル(AgentKind, Assertion) - IPC ワイアフォーマット - AssertionRegistry - CallerVerifier - フックインストール仕様 - CLI アジェンマパースャー
設計上の原則:
- Helper は監査用にシンプルに保たれており、ポリシーやロジックは全て
内にあります。Daemon - Daemon が事実源であり、アプリは純粋なビューレイヤーです(自由に終了・再起動してもアサーションに影響なし)。
💡 デベロッパー向けのクイックスピードガイド
- Public IOPM アサーションの限界: 従来の
(例:caffeinate)は lid を閉じた Mac を醒めさせることができません。Adrafinil はこれを回避するためにIOPMAssertionCreateWithName
を使用しています。pmset disablesleep 1 - デーモンハンドラーの実行キュー: XPC とソケットコールバックは任意の dispatch キューで到着するため、並列性を変更する際は注意が必要です。
- CLI のレイテンシ最適化: エージェントセッションのホットパスにあるため、静的ルックアップとソケットプロトコルの薄いもののみを使用しています(フル XPC を使用せず)。
📜 ライセンスと謝辞
- ライセンス: MIT (自由に何でも可能、保証なし)
- 提供元: kagerou.glass
- 構築者: @kageroumado
名称由来: Adrafinil という名前は、「覚醒促進プロ薬物」である Adrafinil にオマージュされています。同様に、本アプリも「仕事がある間だけマシンを醒めさせる」というコンセプトから命名されました。