تصور کنید برنامهنویسی هستید که هر بار برای اجرای یک دستور ساده توسط هوش مصنوعی، باید منتظر کلون شدن کدها و نصب پیشنیازها در یک سرور دوردست بماند. اگر همچنان به محیطهای ایزوله ابری برای اجرای عاملهای خود متکی هستید، باید بدانید که «مالیات زیرساختی» ابری در حال تبدیل شدن به گلوگاه بهرهوری شماست. یک عامل هوش مصنوعی تککاربره زمانی بهترین عملکرد را دارد که به جای یک سندباکس ابری دوردست، روی سختافزار خود کاربر قرار گیرد.
بر اساس مستندات فنی منتشرشده تا ۱۵ ژوئیه ۲۰۲۶، روند معماری عاملهای حرفهای بهشدت به سمت ادغام محیطهای اجرای سنگین مانند Codex App Server مستقیماً در اپلیکیشنهای دسکتاپ تغییر یافته است. هدف این چرخش، حذف تأخیرهای ناشی از مدیریت زیرساخت در فضای ابری است.
همانطور که در تحلیل قبلی ما دربارهی سنگین شدن «رپرهای» هوش مصنوعی اشاره کردیم، اکنون با انتخابی روبرو هستیم که رانتایم این ابزارها دقیقاً کجا قرار گیرد. آنچه زمانی یک لایه نازک (Thin Wrapper) در اطراف مدل بود، حالا به یک محیط اجرای کامل تبدیل شده است که شامل یک فضای ایزوله (Sandbox)، یک حلقه عملیاتی عامل (Agent Loop) و «جذابیت وضعیت» (State Gravity) است. سالها پیش، استاندارد صنعت استفاده از کانتینرهای مجزا برای هر کاربر از طریق سرویسهایی مثل AWS، Cloudflare یا Vercel بود. این ابزارها مشکل اجرای کدهای نامطمئن را حل میکنند، اما برای ابزارهای بهرهوری تککاربره، سرباری عظیم ایجاد میکنند.
اصطکاک یک عامل مبتنی بر ابری را تصور کنید: این عامل باید در هر بار شروع جلسه، مخزن کد را کلون کند، وابستگیها را نصب نماید و اسرار (Secrets) را همگامسازی کند. اما در دسکتاپ، عامل بهسادگی در دایرکتوری جاری اجرا میشود. او بدون نیاز به حتی یک آپلود شبکهای، به تاریخچه Git، پایگاههای داده محلی و پیکربندیهای موجود IDE کاربر دسترسی فوری دارد.
بار طراحی محیطهای ایزوله ابری
به گزارش تحلیلگران زیرساخت، محیطهای ایزوله ابری بار طراحی سنگینی بر دوش توسعهدهنده میاندازند. در این حالت، چالش اصلی نه APIهای بوت، بلکه ارکستراسیون سیستمی است. برای ساخت یک محصول واقعی، توسعهدهنده باید برای موارد زیر راهکار بیابد:
- مدیریت چرخه حیات (Lifecycle Management): طراحی دقیق برای رویدادهای شروع (Start)، خواب (Sleep)، بازگشت (Resume)، تخریب (Destroy) و رویدادهای Time-out.
- پایداری وضعیت (State Persistence): مدیریت اسنپشاتها، کشینگ و ذخیرهسازی بادوام. برای مثال، کاربران SDK سندباکس Cloudflare باید وضعیت پایدار را به R2 منتقل کنند، زیرا وضعیت دیسک محلی پس از ۱۰ دقیقه بیکاری کاملاً پاک میشود.
- لایههای انتقال (Transport Layers): مدیریت WebSocket یا SSE برای استریم کردن لاگها و Diffها، مدیریت بازاتصالها و استریم خروجی برای جلوگیری از قطع شدن جلسه.
- راهاندازی سرد و جایگذاری (Cold Starts & Placement): غلبه بر تأخیر شروع microVM. حتی AWS AgentCore Runtime که از Firecracker KVM با سربار کمتر از ۵ مگابایت استفاده میکند، برای جلوگیری از راهاندازی سرد و تضمین «چسبندگی» (Stickiness) درخواستها به همان microVM، به Session ID نیاز دارد. این تلاش برای کاهش تاخیر یادآور بهبودهای اخیر AWS در حالت Express است که زمان استقرار عاملها را به نصف کاهش داد.
- امنیت و عملیات (Security & Ops): پیادهسازی محدودیتهای شبکه، مدیریت اسرار، جلوگیری از ارتقای دسترسی (Privilege Escalation) و ردیابی لاگها، متریکها و بازیابی پس از کرش.
- هزینه و تجربه کاربری (Cost & UX): موازنه بین هزینههای CPU، حافظه، ذخیرهسازی و خروجی شبکه (Egress) در برابر تجربه کاربری در بخش تاییدات، نوارهای پیشرفت و تلاشهای مجدد (Retries).
نمونههای پیادهسازی در ابزارهای ابری
طبق اعلام AWS، سرویس AgentCore Runtime برای هر جلسه یک microVM اختصاصی میسازد. هر جلسه دارای کرنل، حافظه و فایلسیستم مخصوص به خود است و پس از اتمام، microVM تخریب شده و حافظه آن پاکسازی (Sanitize) میشود. زیرساخت مورد استفاده در اینجا Firecracker است که یک microVM سبک بر پایه KVM میباشد. اگرچه این ابزارها پیچیده هستند، اما در بسیاری از موارد زیرساختهای صریح AWS عملکرد بهتری نسبت به پلتفرمهای سادهشده در مدیریت مقیاسپذیری عاملها نشان دادهاند.
SDK سندباکس Cloudflare امکان اجرای دستورات، عملیات فایل، پردازشهای پسزمینه و فورواردینگ پورتها را بهعنوان یک API ارائه میدهد. با این حال، این ابزار نیازمند درک دقیق از چرخه حیات است: بهطور پیشفرض، پس از ۱۰ دقیقه بیکاری متوقف شده و در دفعات بعدی از نو شروع میشود.
سرویس Velcel Sandbox نیز یک microVM لینوکسی ایزوله (Firecracker) با قابلیت استریم، مدیریت فایل، سیاستهای شبکه و اسنپشات در SDK فراهم میکند. در اینجا سندباکسهای پایدار (Persistent) پیشفرض هستند؛ به این معنا که هنگام توقف، فایلسیستم اسنپشات شده و هنگام بازگشت، مجدداً بازیابی میشود.

بهرهگیری از محیط اجرای محلی
در سیستم یک توسعهدهنده، محیط از پیش یک رانتایم کامل است. ماشین کاربر دارای مخزن کد، تاریخچه و اعتبارنامههای Git، رانتایمهای زبان، کشهای وابستگی، داکر، پایگاههای داده محلی، تنظیمات SSH و یک IDE است. رویکرد ابری باید تمام اینها را دوباره بازسازی کند، آنها را همگام نگه دارد و از طریق چرخههای پیچیده «کلون-و-تزریق» (Clone-and-Inject) پایداری ببخشد.
در دسکتاپ، عامل فقط در دایرکتوری پروژه اجرا میشود. هیچ نیاز به همگامسازی فایلهای شبکه یا بیلد کردن Imageها نیست. CPU، حافظه و ذخیرهسازی دیگر هزینههای متریشدهای نیستند که به فروشنده اپلیکیشن صورتحساب شوند؛ بلکه منابعی هستند که کاربر از پیش مالک آنهاست.
یک تمایز مهم این است که در حالی که عملیات فایل و دستورات محلی هستند، استنتاج LLM همچنان روی شبکه رخ میدهد. GPU محلی مدل را نمیچرخاند، اما کارهای سنگینی را که عامل شروع میکند (مانند بیلدهای ML، پردازش تصویر یا کامپایلهای سنگین) شتاب میدهد. دستاوردهای اصلی در اینجا بدیهی اما حیاتی هستند: ایندکسگذاری سریع، پارس کردن و جستوجوی فایلهای محلی حجیم روی SSD با استفاده از Toolchain موجود کاربر.
اجرای تعاملی از طریق PTY
برای تبدیل این سازوکار به یک اپلیکیشن صیقلخورده، توسعهدهندگان از PTY (پسیودو-ترمینال) استفاده میکنند. فراخوانی ساده child_process.exec() برای CLIهای مدرنی که پیشرفت را استریم میکنند، با عرض ترمینال سازگار میشوند یا سیگنالهایی مثل Ctrl+C را مدیریت میکنند، کافی نیست. این ابزارها برای رفتار صحیح به توالیهای کنترلی ANSI و پردازشهای طولانیمدت نیاز دارند.
با استفاده از ابزارهایی مثل node-pty (که در macOS/Linux از forkpty و در ویندوز از ConPTY استفاده میکند)، اپلیکیشن میتواند به یک پروسه فرزند بقبولاند که به یک ترمینال واقعی متصل است. برای لایه نمایش نیز معمولاً از xterm.js استفاده میشود؛ همان کتابخانهای که ترمینال داخلی VS Code را میسازد.
معماری جریان PTY
ساختار کلی به این شکل است:
۱. رابط کاربر (Desktop UI): بخشهای چت، Diff، تاییدات و ترمینال که از طریق IPC محدود ارتباط برقرار میکنند.
۲. پروسه میزبان دارای دسترسی (Privileged Host Process): مدیریت پروژه، مجوزها، PTY، حسابرسی (Audit) و کلاینت Codex App Server.
۳. لایه اجرا (Execution Layer):
* codex app-server: متصل از طریق stdio JSONL.
* shells / tools / tests: متصل از طریق PTY.
۴. سندباکس سطح سیستمعامل: کنترل دسترسی به فایلسیستم محلی.
باید توجه داشت که ارتباط با خود Codex App Server نیازی به PTY ندارد. App Server از طریق stdio معمولی (JSONL) متصل میشود؛ PTY بهطور خاص برای ترمینالهای کاربر-محور و پردازشهای فرزند تعاملی، مانند سرورهای توسعه (dev servers) یا CLIهایی است که نوار پیشرفت رسم میکنند.
ادغام Codex App Server
Codex App Server موتور محرک این رویکرد محلی است. این ابزار یک SDK ساده نیست، بلکه یک محیط اجرای کامل است که تداوم تردها (Thread Persistence)، وقفههای نوبتی و درخواستهای تایید را از طریق JSON-RPC دوطرفه روی ورودی/خروجی استاندارد (stdio) مدیریت میکند. این رویکرد در مدیریت لایههای کنترلی، شباهتهایی به رقابت میان OpenClaw و Hermes برای تسلط بر لایه کنترلی عاملها دارد، جایی که هدف نهایی بهینهسازی تعامل بین مدل و محیط اجراست.
این سرور پیچیدگیهای ماشینافزاری عامل را که در غیر این صورت باید دوباره ساخته میشد، مدیریت میکند: ایجاد/بازگشت/فورک/پایداری تردها، شروع/وقفه/ورودی میان-نوبتی، درخواستهای تایید برای دستورات و تغییرات فایل، استریم رویدادهای اجرا و Diffها، پیکربندی، ورود به ChatGPT و یکپارچگی با MCP و Skills.
این سرور، تردها را به عنوان پردازشهای فرزند طولانیمدت نگه میدارد. وقتی یک نوبت نیاز به تایید برای تغییر فایل یا اجرای دستور دارد، سرور از کلاینت درخواست کرده و نوبت را تا زمان پاسخ کاربر متوقف میکند.
جزئیات فنی یکپارچهسازی
- جریان اتصال: باینری باندل شده Codex با زیردستور
app-serverاجرا میشود. با استفاده از stdio به عنوان انتقالدهنده پیشفرض، کلاینت یک درخواستinitializeمیفرستد، پاسخ را دریافت میکند و سپس اعلانinitializedرا ارسال میکند (این اعلان توسط کلاینت فرستاده میشود و توسط سرور بازگردانده نمیشود). - مدیریت ترد: کلاینت متد
thread/startرا با مشخص کردن دایرکتوری کاری (cwd)، حالت سندباکس (مثلاًworkspace-write) و سیاست تایید (مثلاًon-request) فراخوانی میکند. - استریم رویدادها: خروجیهای مدل، Diffها و درخواستهای تایید بهصورت JSONL از طریق stdout بازمیگردند. توسعهدهندگان باید نگاشت request-ID به Promise را پیاده کنند، ترتیب رویدادها را مدیریت نمایند، فشار معکوس (Backpressure) را کنترل کنند و نوبتهای متوقفشده برای تایید را مدیریت نمایند.
- امنیت تایپها: ابزارهایی مثل
codex app-server generate-tsاجازه میدهند تایپهای متناسب با نسخه خاص باینری باندل شده تولید شوند تا کلاینت و سرور کاملاً همگام بمانند. - تثبیت نسخه (Pinning): بهدلیل اینکه این یک رانتایم جاسازیشده است و نه یک SDK، باید یک نسخه باینری تاییدشده را تثبیت کنید. بهروزرسانیها باید به عنوان یک واحد سازگاری واحد شامل باینری، اسکیما، پیکربندی و متد اجرا در نظر گرفته شوند.
لایههای سندباکس محلی
اجرا در محیط محلی به معنای دسترسی نامحدود مدل نیست. Codex یک سیستم دو-شاخص را پیاده میکند: یک سندباکس فنی (آنچه ممکن است) و یک سیاست تایید (چه زمانی باید پرسید).
- macOS: برای اجرا از Seatbelt استفاده میکند.
- Linux / WSL2: از
bubblewrap (bwrap)وseccompبهره میبرد و در صورت نبود bwrap، به یک کمکی باندل شده که بر پایه User Namespaces است تکیه میکند. - Windows: در هنگام اجرا در PowerShell از یک سندباکس بومی با کاربر کمدسترکی اختصاصی، مرزهای فایلسیستم و کنترلهای فایروال استفاده میکند؛ و هنگام اجرا در WSL2 از سندباکس لینوکس بهره میبرد.
در یک تنظیمات workspace-write + on-request هر تلاشی برای دسترسی به اینترنت یا خروج از دایرکتوری کاری، یک رویداد تایید ساختاریافته ایجاد میکند. چون این رویدادها ساختاریافته هستند، UI میتواند یک دیالوگ بومی محصول را نمایش دهد، بهجای اینکه کاربر را مجبور کند عبارت "y" را در یک لاگ خام تایپ کند.
ریسکهای جاسازی رانتایمها
جاسازی یک رانتایم ریسکیتر از استفاده از API است. در بهروزرسانیهای اخیر خط ۰.۱۴۴، برخی پیادهسازیها دچار کرش یا فریز شدند. بهطور خاص، کاربران گزارش دادند که app-server در نسخه 0.144.0-alpha.4 بلافاصله پس از اجرا کرش میکرد و مشکلاتی در کنترل مرورگر داخلی و مدیریت سرویسهای در حال اجرا هنگام ریاستارت وجود داشت.
در یک مورد، علت اصلی جریان مقداردهی اولیه بود: App Server سعی میکرد به Remote Control متصل شود، اما بستر جاسازی شده فاقد احراز هویت ChatGPT بود. سرور بهطور بینهایت تلاش مجدد میکرد و باعث فریز میشد. یک بررسی تنظیمات استاندارد نشان داد که کلید -c features.remote_control=false نادیده گرفته شده و به عنوان یک کلید ناشناخته در نظر گرفته شده است.
تنها راه حل، یک متغیر محیطی داخلی مستند نشده بود: CODEX_INTERNAL_APP_SERVER_REMOTE_CONTROL_DISABLED=1. این موضوع نشان میدهد که سطح پیکربندی و رفتار واقعی رانتایم میتواند از هم فاصله بگیرد.
این مسئله تفاوت بین «سازگاری پروتکل JSON-RPC» و «سازگاری رانتایم» را برجسته میکند. جایگزینی باینری در میانهی بهروزرسانی، رقابت یک نوبت در حال اجرا با ریاستارت، رانتایمهای قدیمی باقیمانده یا نبود باینریهای کمکی میتوانند همگی باعث شکست سیستم شوند. همانطور که OpenAI در افزونه VS Code و اپلیکیشن دسکتاپ خود انجام میدهد، توسعهدهندگان باید باینریهای هر پلتفرم را باندل کرده و روی نسخههای تستشده تثبیت کنند.
تحلیل استراتژیک: محلی در برابر ابری
این تغییر نشاندهنده انتقال «جذابیت وضعیت» (State Gravity) است. محاسبات به جایی میروند که دادهها از قبل حضور دارند: مخزن کد محلی، وابستگیها، احراز هویت و کشها. برای ارائهدهنده، این کار هزینه جاری CPU، حافظه، خروجی شبکه و زیرساخت ارکستراسیون را حذف میکند. برای کاربر، تأخیر همگامسازی فایلهای دوردست از بین میرود.
با این حال، این موازنه ریسکهای امنیتی جدیدی ایجاد میکند. عاملهای محلی نزدیکی بیشتری به تنظیمات حساس SSH و دادههای مرورگر دارند. برای کاهش این ریسک، توسعهدهندگان باید پروسه UI را بهطور سختگیرانه از پروسه اجرا جدا کنند:
- Electron: فعالسازی سندباکس رندر (Renderer Sandboxing) و ایزوله کردن کانتکست (Context Isolation). PTY و App Server باید در پروسه Main (دارای دسترسی) باقی بمانند و تنها عملیاتهای تایید شده (شروع، تایید، وقفه، اشتراک) را به رندر اکسپوز کنند. هرگز اجازه ندهید رندر دستورات شل دلخواه را اجرا کند یا مسیرهای دلخواه را بخواند/بنویسد.
- Tauri: تعریف دقیق مجوزها و قابلیتها برای هر دستور تا دسترسیهای WebView به حداقل برسد.
انتخاب رانتایم مناسب
| نیاز | گزینه بهتر | دلیل |
|---|---|---|
| کار با فایلهای شخصی | دسکتاپ | بهرهگیری از محیط توسعه محلی موجود |
| مدیریت فایلهای حجیم | دسکتاپ | ایندکسگذاری و جستوجوی سریع SSD محلی |
| باگهای خاص کاربر | دسکتاپ | دسترسی به OS، وابستگیها و سرویسهای محلی دقیق |
| اجرای شبانهروزی | ابری | مستقل از وضعیت روشن/خاموش یا خواب ماشین (Remote Control کلود یک راهکار جزئی است) |
| کاربران ناشناس | ابری | نیاز به مرز ایزولاسیون سخت برای کدهای نامطمئن |
| یکسانسازی محیط | ابری | تضمین تنظیمات یکسان برای تمامی کاربران |
| بهروزرسانی مرکزی | ابری | عدم نیاز به مدیریت سازگاری باینری در هر کلاینت |
| تسکهای GPU سنگین | ابری | دسترسی به سختافزار تخصصی و قدرتمند دوردست |
در نهایت، یک مدل ترکیبی طبیعیترین حالت است: کارهای روزمره روی دسکتاپ + Codex محلی، کارهای سنگین یا طولانیمدت در محیط دوردست و کدهای نامطمئن در سندباکس ابری. اپلیکیشن دسکتاپ بهعنوان رانتایم جدی عمل میکند که وضعیت در آن جمع میشود، در حالی که مرورگر تنها پنجرهای سبک برای مشاهده، تاییدات و کارهای ساده باقی میماند.
در گام بعدی، توسعهدهندگان باید «جذابیت وضعیت» عامل خود را ارزیابی کنند تا تعیین نمایند آیا این رانتایم محلی-محور مسیر بهینهای برای کاربرانشان است یا خیر. جزئیات سرویسها و Codex App Server بر اساس مستندات رسمی تا ژوئیه ۲۰۲۶ است؛ با توجه به سرعت بالای این حوزه، همیشه آخرین نسخههای باینری و اسکیماها را بررسی کنید.
گام بعدی شما
- اگر توسعهدهنده عامل هستید، «جذابیت وضعیت» (State Gravity) اپلیکیشن خود را تحلیل کنید تا ببینید آیا انتقال به رانتایم محلی منطقی است یا خیر.
- برای کاهش ریسکهای امنیتی در Electron، بررسی کنید که آیا PTY و App Server از دسترس لایه Renderer ایزوله شدهاند.
- نسخههای باینری مورد استفاده در پروژه خود را Pin کنید تا با آپدیتهای ناگهانی رانتایم دچار فریز یا کرش نشوید.
اما تأثیر این تغییر معماری بر مصرف حافظه در سیستمهای با رم پایین حتی چالشبرانگیزتر است — به تحلیل ما درباره بهینهسازی KV Cache در مدلهای محلی مراجعه کنید.




گفتگو