تصور کنید یک مهاجرت پیچیده در کدها را به یک عامل هوش مصنوعی سپردهاید، اما مکبوک شما درست در میانه راه، با وجود فعال بودن عامل AI، به خواب میرود و تمام پردازشها متوقف میشود. ابزار Adrafinil که در ۲۷ ژوئن ۲۰۲۶ عرضه شد، دقیقاً همین مشکل «خواب در حالت Clamshell» (بسته بودن درب لپتاپ) را حل میکند. این ابزار با قلاب شدن به جریانهای کاری AI، مسدود کردن خواب سیستم را تنها زمانی فعال میکند که واقعاً کاری در حال انجام باشد. اکنون میتوانید درب لپتاپ خود را ببندید و با خیال راحت از دستگاه دور شوید، در حالی که یک عامل در حال تکمیل یک مهاجرت پیچیده در پایگاه کد است، بدون اینکه نگران خواب رفتن سیستم یا گرم شدن بیش از حد آن باشید.
ابزارهای رایج بیداری مانند caffeinate یا Amphetamine ابزارهایی کلی و کند هستند؛ آنها دستگاه را بدون توجه به اینکه آیا پردازشی فعال است یا خیر، بیدار نگه میدارند و ماشین را در وضعیتی همیشه روشن قرار میدهند. برای توسعهدهندگانی که از عاملهای هوش مصنوعی (AI Agents) — شبیه دستیارهایی که میتوانند بهطور مستقل ابزارها را اجرا کنند و هدف را دنبال نمایند — استفاده میکنند، این یک بنبست است: یا باید مک را کاملاً باز و در معرض آسیب رها کنند یا ریسک خواب رفتن سیستم در میانه «تفکر» مدل را بپذیرند. Adrafinil رویکردی «یوژروئیک» (Eugeroic) را برای ماشینها معرفی میکند؛ نامی که اشارهای به پیشداروی ارتقادهنده بیداری در انسان است. در اینجا، بیداری دستگاه دقیقاً و صرفاً به فعالیت عامل گره خورده است. طبق مستندات این پروژه، سیستم تا زمانی که عاملی دسترسی بیداری را به دست نیاورد هیچ کاری انجام نمیدهد، مک شما را در حالت درب-بسته تنها تا زمانی که آن کار زنده است بیدار نگه میدارد و به محض اینکه آخرین جلسه کاری دسترسی را رها کند، وضعیت بیداری پاک میشود.
زمینه و منطق عملیاتی
Adrafinil بر این اصل استوار است که ماشین باید برای انجام کار بیدار بماند و سپس هر دو (کاربر و ماشین) بخوابند. برخلاف تنظیمات عمومی بیداری، این ابزار «عامل-آگاه» (Agent-aware) است و همواره روشن نیست. خواب سیستم تنها زمانی مسدود میشود که یک یا چند جلسه عامل، یک «ادعای بیداری» (Assertion) را در اختیار داشته باشند. زمانی که صفر جلسه فعال باشد، رفتار استاندارد خواب سیستم دستنخورده باقی میماند: درب را میبندید و مک بهطور طبیعی میخوابد.
برای اینکه توسعهدهنده در حالی که لپتاپ بسته است از وضعیت دستگاه مطلع شود، Adrafinil یک صدای هشدار (Audio Chime) مخصوص برای بستن درب پخش میکند تا تأیید کند که قفل بیداری فعال است. پس از باز کردن درب، کاربر با یک خلاصه (Summary) مواجه میشود که جزئیات زیر را ارائه میدهد: چه مواردی در زمان نبود کاربر اجرا شده است، حداکثر دمای رسیده چقدر بوده و آیا سیستم قطعکن گرمایی (Thermal Cutout) فعال شده است یا خیر.
مکانیسم عملکرد
به نقل از مستندات رسمی در github.com، Adrafinil از ادعاهای عمومی استاندارد IOPM استفاده نمیکند، زیرا اینها در جلوگیری از خواب در حالت Clamshell شکست میخورند (فراخوانیهای استاندارد IOPMAssertionCreateWithName نمیتوانند بر خوابِ ناشی از بسته شدن درب غلبه کنند). در عوض، این ابزار از یک معماری سهلایه در سطوح مختلف دسترسی استفاده میکند:
- Adrafinil.app: یک رابط کاربری در نوار منو (Menu Bar) برای تنظیمات، رابط گرافیکی نصبکننده و نمایش خلاصههای پس از باز کردن درب. این بخش صرفاً یک لایه نمایشی (View Layer) است که میتواند بدون تأثیر بر ادعاهای بیداری فعال، مجدداً اجرا شود.
- AdrafinilDaemon: یک LaunchAgent که در سطح کاربر اجرا میشود. این بخش مدیریت دفتر ثبت ادعاهای شمارشمرجع (Reference-counted assertion registry) را بر عهده دارد، SMC را برای دادههای گرمایی رصد میکند، IORegistry را برای وضعیت درب لپتاپ مانیتور میکند و سوکت CLI را در مسیر
…/Adrafinil/cli.sockمدیریت میکند. - AdrafinilHelper: یک LaunchDaemon از نوع SMAppService با دسترسی Root. این تنها مؤلفهای است که APIهای مسدودکننده خواب را لمس میکند و برای خواب در حالت Clamshell از
pmset disablesleepو برای خواب در حالت بیکاری (Idle sleep) از یکIOPMAssertionاستاندارد استفاده میکند.
این تفکیک لایهها تضمین میکند که دسترسی سطح بالای Root تنها در یک کمکی (Helper) کوچک و بازبینیشده ایزوله شود که فقط متد setSleepBlocked(Bool) و اطلاعات خواندنی وضعیت و نسخه را ارائه میدهد. این کمکی پیش از اجرا، الزامات امضای کد (Code-signing) فراخوان را تأیید میکند تا مطمئن شود Daemon تنها کنترلکننده مجاز است.
یکپارچگی عمیق با ابزارهای هوش مصنوعی
Adrafinil یک ناظر عمومی نیست، بلکه برای پشتههای مدرن عاملمحور طراحی شده است. یک نصبکننده تککلیکی، این ابزار را به سیستمهای قلاب (Hook) نه عامل اصلی متصل میکند:
- Claude Code
- Codex
- Cursor
- Gemini CLI
- Aider
- Hermes
- OpenCode
- Cline
- Pi
وقتی یک عامل تکلیفی را شروع میکند، دستور adrafinil acquire <session-key> را فراخوانی میکند. به دلیل اینکه مسیر رفت و برگشت CLI به Daemon در کمتر از ۵۰ میلیثانیه رخ میدهد، جریان کاری عامل هرگز دچار توقف (Stall) نمیشود. سیستم از ادعاهای شمارشمرجع استفاده میکند؛ به این معنی که اگر سه عامل مختلف در حال کار باشند، مک تا زمانی بیدار میماند که آخرین جلسه با دستور adrafinil release <session-key> دسترسی خود را رها کند.
ویژگیهای ایمنی و هوشمند
برای جلوگیری از فاجعه «مک در کیف» — وضعیتی که در آن لپتاپ در حالی که در کیف قرار دارد و مانع خواب سیستم میشود، خودش را میپزد — Adrafinil یک قطعکن گرمایی داخلی دارد. اگر دمای CPU یا دمای بدنه (Skin temperature) در حالت درب-بسته از یک آستانه پیشفرض فراتر رود، Daemon تمام ادعاهای بیداری را بهصورت اجباری رها میکند تا سیستم بخوابد و خنک شود.
علاوه بر این، ابزار شامل منطقهای مدیریتی پیشرفته است:
- رهاسازی بیکار (Idle Release): اگر پردازش مالکِ ادعا بمیرد یا برای N دقیقه در وضعیت CPU-idle قرار گیرد، ادعاها بهطور خودکار حذف میشوند.
- شناسایی پردازش (Process Sniffing): یک حالت اختیاری که در آن Daemon با مشاهده اجرای یک باینری شناختهشده از عاملهای AI، حتی بدون نصب قلابها، بهطور خودکار قفل بیداری را میگیرد.
- شمارش مراجع (Reference Counting): جلسات همپوشان بهطور منظم روی هم قرار میگیرند (Stack) و تضمین میکنند سیستم تنها زمانی بخوابد که آخرین تکلیف فعال به پایان برسد.
- حذف پاکیزه: این ابزار هنگام حذف، تمام ورودیهای قلابی که در پیکربندیهای مختلف عاملها اضافه کرده بود را بهطور کامل پاک میکند.
استقرار و الزامات فنی
این نرمافزار برای macOS Tahoe 26.4 با استفاده از Xcode 26+ و Swift 6 با فعالسازی سختگیرانه Concurrency ساخته شده است. کاربران میتوانند آن را از طریق یک ایمیج دیسک امضاشده و Notarized نصب کنند که برای ثبت Helper ویژه از طریق SMAppService، یکبار نیاز به دسترسی Admin دارد. برای کسانی که مسیر غیر-مدیریتی را ترجیح میدهند، CLI بهجای /usr/local/bin در مسیر ~/.local/bin قرار میگیرد.
برای توسعهدهندگانی که ترجیح میدهند از روی سورس بسازند، پروژه نیازمند تعیین یک تیم توسعه برای امضای کد است. بررسی فراخوان XPC در زمان اجرا، تیم امضاکننده را میخواند تا اجازه دهد هر Rebuild تحت هر Developer ID، مؤلفههای خود را احراز هویت کند. کامپایل بدون سر (Headless) با استفاده از xcodebuild و غیرفعال کردن CODE_SIGNING_REQUIRED امکانپذیر است. منطق مشترک به عنوان یک پکیج Swift با نام AdrafinilShared نگهداری میشود که شامل فرمتهای ارتباطی IPC و AssertionRegistry است.
کنترل پیشرفته جریان کاری
این ابزار اساساً رابطه توسعهدهنده با تکالیف طولانیمدت AI را تغییر میدهد. بهجای مدیریت دستی تنظیمات برق، وضعیت ماشین به بازتابی از بار شناختی (Cognitive load) عامل تبدیل میشود. قفلها بهجای session-scoped، بهصورت activity-scoped هستند. برای مثال، Claude Code در لحظه UserPromptSubmit بیداری را فعال و در لحظه Stop رها میکند؛ بنابراین وقتی عامل در انتظار پاسخ کاربر در پرامپت است، مک بهطور طبیعی میخوابد.
اگر در حال اجرای استقرارهای پیچیده یا بیلدهای طولانی از طریق عاملهای سازگار با پروتکل زمینهٔ مدل (MCP) هستید، میتوانید از دستور adrafinil hold برای حفظ بیداری در یک بازه زمانی مشخص، صرفنظر از وضعیت بیکاری عامل، استفاده کنید. نمونه استفاده:
adrafinil hold --for 30m --reason "deploy"
برای عاملهایی که از MCP استفاده میکنند، ابزار MCP bundled درخواستها را از طریق adrafinil mcp سرو میکند. سایر زیردستورات موجود عبارتند از: status ،install-hooks ،uninstall-hooks ،daemon-status و version.
برای جزئیات بیشتر در مورد نحوه مدیریت پروتکل سوکت توسط Daemon و جستجوهای استاتیک (مانند AgentKind.allBinaryNames) برای حفظ بودجه سختگیرانه تأخیر، فایل ARCHITECTURE.md پروژه را دنبال کنید.
گام بعدی شما
- اگر از عاملهای کدنویسی مانند Cursor یا Claude Code استفاده میکنید، این ابزار را برای حذف نگرانی از خواب رفتن سیستم در تکالیف سنگین امتحان کنید.
- تنظیمات قطعکن گرمایی را با توجه به محیط کاری خود بررسی کنید تا از سلامت باتری و سختافزار مطمئن شوید.
- دستورات CLI را برای اتوماسیون بیداری در اسکریپتهای استقرار (Deployment) به کار ببرید.
اما مدیریت حافظه در این عاملها چالش بزرگ بعدی است — در تحلیل ما دربارهی پنجرههای متنی گسترده بخوانید.




گفتگو