تصور کنید یک برنامهنویس برای افزایش سرعت کار، دسترسی ترمینال خود را به یک عامل هوش مصنوعی میدهد، اما یک خطای کوچک در پرامپت باعث حذف کل پوشه Home او میشود. این همان قمار خطرناکی است که RunOnMine برای پایان دادن به آن طراحی شده است. وقتی بهرهوری مبتنی بر هوش مصنوعی در برابر ریسک از دست دادن کل سیستمعامل قرار میگیرد، توازن به هم میخورد. دادن دسترسی ترمینال به یک عامل، یک ریسک بزرگ است؛ به همین دلیل RunOnMine — یک گیتوی (Gateway) امنیتی متنباز — مرزی سختگیرانه میان عامل و ماشین ایجاد میکند تا بهرهوری با امنیت سیستمعامل معاوضه نشود.
این پروژه که با زبان Rust نوشته شده و تحت لایسنس Apache-2.0 منتشر شده است، در حال حاضر در نسخه بتای عمومی برای سیستمهای macOS، ویندوز و لینوکس در دسترس است. اکثر عاملهای هوش مصنوعی فعلی با یک انتخاب دوتایی روبرو هستند: یا در محیط محدود یک جعبه چت (Chat box) محبوس بمانند یا اعتبارنامههای گستردهای دریافت کنند که به آنها همان دسترسیهایی را میدهد که کاربر وارد شده به سیستم دارد. طبق مستندات این پروژه، این وضعیت یک حفره امنیتی عظیم ایجاد میکند؛ جایی که یک تزریق پرامپت (Prompt Injection) — شبیه به فریب دادن یک نگهبان برای باز کردن درهای بسته — میتواند منجر به حذف دایرکتوریهای خانگی یا سرقت کلیدهای SSH شود. وقتی به یک مدل دسترسی به فایلها، ترمینال، مرورگر و اتوماسیون دسکتاپ داده میشود، جریان کاری مفید میشود، اما یک شل (Shell) خام یا اعتبارنامههای گسترده میتواند کل حساب سیستمعامل را به یک مجوز واحد تبدیل کند. RunOnMine با تکیه بر تغییر رویکرد صنعت به سمت پروتکل زمینهٔ مدل (MCP)، لایهای را معرفی میکند که مرز دسترسی را نه به عنوان یک ویژگی جانبی، بلکه به عنوان هسته اصلی محصول تعریف میکند.
معماری کنترل
این ابزار برخلاف محیطهای ایزوله یا سندباکسهای سنتی عمل نمیکند. در واقع RunOnMine مانند یک گیتوی امنیتی است که هر درخواست را بر اساس مجموعهای از معیارهای محلی، پیش از اجرا، ارزیابی میکند. این رویکرد در راستای جابجایی پردازش از ابر به محیطهای محلی است، مشابه آنچه در سیستمعامل HART برای استنتاج توزیعشده در دستگاههای محلی مشاهده کردیم. مرز محصول در اینجا مجموعهای از ابزارهای MCP نیست که بعداً یک دیالوگ تأیید به آن اضافه شده باشد؛ بلکه خودِ مرز دسترسی، محصول اصلی است.
بر اساس مستندات پروژه، سیستم برای هر اقدام، چندین پرسش را بهطور همزمان پاسخ میدهد:
- کدام کانکتور درخواست را ارسال کرده است؟
- چه کسی (کدام درخواستکننده) پشت این کانکتور است؟
- کدام ابزار در حال فراخوانی است؟
- هدف کدام منبع است؟
- سیاست محلی مالک ماشین در این مورد چه میگوید؟
- آیا این اقدام دقیقاً نیاز به تأیید دارد؟
جریان سادهشدهی عملیاتی از یک مسیر سختگیرانه پیروی میکند: درخواست هوش مصنوعی $\rightrightarrows$ شناسایی هویت درخواستکننده و کانکتور $\rightrightarrows$ بررسی سیاست منبع محلی. از این نقطه به بعد، سیستم یا اجازه اجرای فوری میدهد، یا پیش از اجرا/رد کردن، درخواست تأیید محلی میکند و یا درخواست را بهطور کامل متوقف میکند. نکته حیاتی این است که این تصمیم روی خودِ ماشینی که کنترل میشود گرفته میشود. اگرچه احراز هویت از راه دور میتواند دامنه اختیارات را محدود کند، اما هرگز نمیتواند سیاستهای محلی را گسترش دهد.
تفکیک قابلیت ابزار از مجوز دسترسی
RunOnMine قابلیت ابزار را از مجوز محلی جدا میکند، زیرا نام یک ابزار به معنای تصمیم برای اعطای مجوز نیست. برای مثال، یک درخواست نوشتن در سیستمفایل (fs_write) به سیستم میگوید که چه کلاسی از عملیات درخواست شده است، اما تعیین نمیکند که آیا این درخواست باید پذیرفته شود یا خیر. تصمیم نهایی به مسیر خاص فایل، هویت درخواستکننده، کانکتور و اقدام دقیق بستگی دارد.
این منطق در اجرای دستورات شل نیز جاری است. سیستم تضمین میکند که اجرای دستور git status در یک مخزن منتخب، با اجرای یک دستور مخرب از طریق یک کانکتور دوردست، در یک سطح دسترسی یکسان قرار نگیرند؛ صرفاً به این دلیل که هر دو از ابزار shell_exec استفاده میکنند، نباید به یک مجوز بولی (Boolean) ساده تبدیل شوند.
دسترسی جزئی به منابع
به جای دادن دسترسی به کل سیستمفایل در سطح حساب کاربری، RunOnMine از ریشههای انتخابی (Selected Roots) استفاده میکند. یک عامل کدنویسی معمولاً به کل پوشه Home نیاز ندارد و ممکن است فقط به یک مخزن (Repository) خاص نیاز داشته باشد.
- انتخاب ریشه: مالک سیستم مسیرهای خاصی از سیستمفایل را انتخاب میکند و سیستم تمام عملیات فایل را در همان مرزها نگه میدارد.
- پیادهسازی: سیستم از عملیاتهای مبتنی بر قابلیت (Capability-oriented) و نسبی با توصیفگر (Descriptor-relative) استفاده میکند.
- جلوگیری از فرار: هرگونه تلاش برای استفاده از مسیرهایی که سعی در خروج از مرزهای پیکربندیشده دارند، بهطور فعال رد میشود.
این رویکرد سطح شکست (Failure Surface) را تغییر میدهد. یک اشتباه در پرامپت یا تزریق پرامپت در یک پروژه نباید بهطور خودکار باعث دسترسی به مخازن نامرتبط، متریالهای SSH، وضعیت مرورگر و اسناد شخصی شود، صرفاً به این دلیل که پردازش با همان کاربر سیستمعامل اجرا میشود. قانون راهنما این است: «پروژه را اعطا کن، نه حساب کاربری را». این تمرکز بر محیطهای محلی با یافتههای اخیر همسو است که نشان میدهد اپلیکیشنهای دسکتاپ به دلیل حذف محیطهای ابری، عملکرد بهتری در کاهش تأخیر اجرای عاملها دارند.
امنیت با حضور انسان
تأیید در RunOnMine به بستر عملیاتی اقدام گره خورده است. امنیت «انسان در حلقه» (Human-in-the-loop) زمانی ضعیف میشود که تأیید به معنای «اعتماد ابدی به این ابزار» باشد. اگر یک عامل درخواست اجرای یک دستور خاص را بدهد و کاربر آن را تأیید کند، این تأیید به معنای اعطای مجوز دائمی برای اجرای هر دستور شل نیست. اگر ماهیت اقدام تغییر کند، تأیید قبلی بهطور خاموش به مجوز برای اقدام جدید تبدیل نمیشود.
علاوه بر این، تأییدات فقط محلی هستند. هیچ ابزاری در MCP به نام approve_my_request وجود ندارد که یک عامل دوردست بتواند پس از درخواست چیزی خطرناک، آن را فراخوانی کند. نگه داشتن اختیار تأیید کاملاً خارج از سطح ابزارهای دوردست، یک الزام بنیادی در طراحی است.
مرزهای ترمینال و مرورگر
RunOnMine صراحتاً اعلام کرده است که یک گیتوی امنیتی و سیستم تأیید است، نه یک سندباکس. اگر یک دستور شل تأیید شود، با اختیارات حساب سیستمعامل RunOnMine اجرا میشود. اگرچه سیستم نمیتواند یک دستور مجاز دلخواه را به کدی بیضرر تبدیل کند، اما چندین لایه کاهش ریسک را فراهم میکند:
- محدودسازی (Scoping): میتواند دایرکتوری کاری را محدود کند.
- اتصال (Binding): تصمیم را به درخواستکننده خاص گره میزند.
- کنترل: الزام به تأیید، محدود کردن خروجیهای ذخیرهشده و قطع درختهای پردازشی در صورت اتمام زمان (Timeout).
یک Helper دارای امتیاز (Privileged Helper) اختیاری به عنوان یک مرز نصب جداگانه وجود دارد. این بخش در نصب معمولی نصب نمیشود و کانکتورهای دوردست از طریق پروفایلهای سیاست استاندارد، دسترسی اجرای Administrator دریافت نمیکنند.
برای اتوماسیون وب، این ابزار یک مسیر مرورگر محافظتشده را پیاده میکند. استفاده از یک پروفایل مرورگر مجزا مفید است، اما مشکل مرز شبکه را حل نمیکند. اگر یک مرورگر که از راه دور هدایت میشود بتواند آزادانه به localhost یا شبکههای خصوصی دسترسی داشته باشد، به پلی برای دسترسی به سرویسهایی تبدیل میشود که درخواستکننده خارجی در حالت عادی به آنها دسترسی ندارد. RunOnMine دسترسی به مقصد را بخشی از مرز سیاستها میداند و از یک پروفایل ایزوله و یک مسیر پروکسی کنترلشده برای اتوماسیون محافظتشده استفاده میکند. به همین دلیل است که اتصال به یک مرورگر موجود دلخواه از طریق CDP به عنوان یک تصمیم اعتمادی متفاوت تلقی میشود؛ زیرا حفاظتهای زمان اجرا (Launch-time) را نمیتوان بهطور عطف به retroactive بر روی پردازشی که خارج از آن مرز شروع شده است، اعمال کرد. در بحث مدیریت حافظه و ایزولاسیون، مقایسه V8 Isolate با سندباکسهای لینوکسی نشان میدهد که انتخاب لایه ایزولاسیون تأثیر مستقیمی بر سرعت و امنیت عاملها دارد.
اتصال و بازیابی اضطراری
برای جلوگیری از قرار گرفتن ماشین در معرض اینترنت عمومی، شنونده HTTP MCP در حالت loopback باقی میماند. دسترسیهای دوردست به جای متصل کردن سرور MCP به 0.0.0.0 از طریق مدلهای کانکتور/تونل پشتیبانی شده مدیریت میشوند. نسخهی بتا در حال حاضر از موارد زیر پشتیبانی میکند:
- stdio محلی
- HTTP loopback احراز هویت شده (Opt-in)
- حالتهای کانکتور Cloudflare
- یکپارچگی با OpenAI Secure MCP Tunnel
فراخوانهای دوردست همچنان تابع سیاستهای محلی هستند. اقدامات خطرناک دوردست نمیتوانند خودشان را تأیید کنند و اجرای Administrator از راه دور توسط سقف ایمنی (Safety Ceiling) رد میشود.
برای شکستهای بحرانی، سیستم شامل یک «قفل اضطراری» (Emergency Lock) است. این یک عملیات زمان اجراست — متمایز از جریان حذف نصب — که به مالک اجازه میدهد بدون حذف پیکربندیها بگوید «همین الان متوقف شو». این قابلیت فوراً تمام عاملها و کانکتورهای فعال را متوقف میکند، تأییدهای در انتظار را رد میکند، مجوزهای موقت را حذف میکند، وضعیت OAuth مربوطه را باطل کرده و اعتبارنامههای موقت استفاده شده در مسیرهای کانکتور را نامعتبر میسازد.
شفافیت در بازرسی و انتشار
برای جلوگیری از تبدیل شدن لاگهای سیستم به یک مخزن دوم برای اسرار، RunOnMine از تشخیصهای سانسورشده (Redacted Diagnostics) استفاده میکند. ثبت سادهلوحانه همه چیز میتواند مشکل امنیتی جدیدی ایجاد کند که در آن محمولههای خام دستورات، اعتبارنامهها، URLها و مسیرهای ماشین بهصورت متن ساده ذخیره شوند. RunOnMine یک زنجیره حسابرسی مقاوم در برابر دستکاری (Tamper-evident) را حفظ میکند در حالی که از ذخیرهسازی اسرار خام اجتناب میکند. مطالب پشتیبانی از تشخیصهای محدود ساخته شدهاند، نه از کپی کورکورانه وضعیت داخلی.
برای انتشار نسخه v0.1.0-beta.1 توسعهدهنده چکسامهای SHA-256 و SBOMهای CycloneDX مخصوص هر هدف را ارائه کرده است تا شواهد بتای منتشر شده قابل بازرسی باشد. مخزن پروژه، کاندیدای منبع منجمد شده و گیتهای انتشار را در فایلهای ماشینخوان ثبت میکند و شواهد پذیرش پلتفرم، بازبینی منبع و هشهای آرتیفکت را نامگذاری میکند.
محدودیتهای نسخه بتا
RunOnMine یک نرمافزار پیشانتشار با محدودیتهای عمدتاً مشهود است. توسعهدهنده این شکافها را مستند کرده است زیرا یک ابزار امنیتی نباید محدودیتهای اعتماد در توزیع خود را پنهان کند:
- نسخه macOS دارای امضای ad-hoc است (نه امضای Developer ID یا notarized).
- نصاب ویندوز امضای Authenticode ندارد.
- بازبینی امنیتی مستقل خارجی هنوز در جریان است.
این تغییر در رویکرد نشان میدهد که آینده هوش مصنوعی عاملمحور، نه در ساخت سندباکسهای بزرگتر، بلکه در ایجاد گیتویهای هوشمندتر است. با جداسازی قابلیت ابزار از مجوز محلی، RunOnMine صنعت را به سمت فلسفه «پروژه را اعطا کن، نه حساب کاربری را» سوق میدهد.
برای کسانی که عاملهای MCP را مستقر میکنند، گام بعدی ارزیابی این است که کدام اقدامات ماشین میتوانند خودکار شوند و کدام یک باید پشت یک گیت تأیید محلی باقی بمانند. شما میتوانید پیادهسازی این پروژه را در مخزن گیتهاب در https://github.com/ademisler/RunOnMine بررسی کنید یا از وبسایت https://runonmine.github.io/ بازدید نمایید.
گام بعدی شما
- اگر از عاملهای مبتنی بر MCP استفاده میکنید، لیست عملیاتهای ترمینال خود را بررسی کنید و موارد حساس را به لایه تأیید محلی منتقل کنید.
- مخزن گیتهاب پروژه را برای بررسی نحوه تعریف سیاستهای دسترسی (Policy) مطالعه کنید.
- در صورت استقرار در محیطهای حساس، از قابلیت Emergency Lock برای مدیریت بحران استفاده کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو