نحوه ساخت عامل هوش مصنوعی OpenClaw
آموزش گامبهگام ساخت عامل هوش مصنوعی مشابه OpenClaw و بررسی امنیت پروژه برای جلوگیری از آسیبپذیری CVE-2026-32922 و ارتقای سطح دسترسی در سرور.
OpenClaw در واقع چیست
OpenClaw یک عامل هوش مصنوعی شخصی است که باید روی سرور شخصی میزبانی شود. شما آن را روی سرور خود اجرا میکنید، به اپلیکیشنهای چت مورد استفاده خود متصل میکنید، و این عامل میتواند دستورات shell را اجرا کند، یک مرورگر را کنترل کند، فایلهای شما را بخواند و بنویسد، و بر اساس پیامهایی که برای آن میفرستید عمل کند. این پروژه دارای لایسنس MIT است، اولویت با اجرا به صورت محلی (local-first) است و تا اواسط سال 2026 بیش از 380,000 star در GitHub دارد که آن را به یکی از محبوبترین پروژهها در این پلتفرم تبدیل کرده است. در پشت این ظاهر پر زرق و برق، این پروژه مجموعهای نسبتاً کوچک از اجزا است که به شکلی منطقی به هم متصل شدهاند. این پست اجزا را بررسی میکند تا متوجه شوید چنین ابزاری چگونه ساخته میشود و نقاط حساس آن کجا هستند.
یک هشدار اولیه، زیرا این موضوع بر تمام انتخابهای طراحی در ادامه تأثیر میگذارد. در مارس 2026، OpenClaw با 9 مشکل امنیتی مواجه شد که طی چهار روز فاش شدند؛ از جمله یک نقص بحرانی ارتقای سطح دسترسی (privilege-escalation) با امتیاز 9.9 از 10 (CVE-2026-32922). این پروژه طوری طراحی شده است که توسط شما، یعنی اپراتور، ایمنسازی (harden) شود. عاملی که میتواند هر دستوری را اجرا کند، تنها به اندازه سروری که روی آن اجرا میشود و محدودیتهایی که برای آن تعیین میکنید، امن است. هنگام مطالعه، این نکته را به خاطر داشته باشید.
دیمون دروازه (gateway daemon): یک فرآیند، کاملاً خصوصی
در مرکز سیستم، یک فرآیند واحد و همیشگی قرار دارد که معمولاً gateway نامیده میشود. این بخش، سطح کنترل (control plane) است. این فرآیند پیامها را دریافت میکند، تصمیم میگیرد چه کاری انجام دهد، ابزارها را اجرا میکند و پاسخها را ارسال میکند. هر چیز دیگری به آن متصل میشود.
مهمترین نکته درباره gateway، محل گوش دادن (listen) آن است. به صورت پیشفرض، OpenClaw آن را به آدرس loopback یعنی 127.0.0.1 متصل میکند، بنابراین تا زمانی که خودتان آن را در معرض اینترنت قرار ندهید، از طریق اینترنت قابل دسترسی نیست. آن را در همان حالت رها کنید. این تنها فرآیندی است که وظیفهاش اجرای دستورات است، بنابراین یک gateway در معرض اینترنت، به هر کسی که آن را پیدا کند، یک دسترسی از راه دور به سرور شما میدهد. وقتی نیاز داشتید از لپتاپ خود به آن متصل شوید، به جای باز کردن یک پورت، از طریق یک VPN یا یک SSH tunnel این کار را انجام دهید. هیچکس نمیتواند به پورتی که به آن دسترسی ندارد، حمله کند.
کانکتورهای کانال (Channel connectors): دریافت پیام و ارسال پاسخ
یک عامل شخصی تنها زمانی مفید است که بتوانید از طریق اپلیکیشنهایی که از قبل استفاده میکنید، با آن صحبت کنید. این وظیفه کانکتورهای کانال است. هر کانکتور با یک پلتفرم مانند Telegram، WhatsApp، Slack یا Discord، با استفاده از bot API یا webhooks آن پلتفرم صحبت میکند.
ساختار همه آنها یکسان است. کانکتور یک bot را در پلتفرم ثبت میکند، پیام ورودی شما را دریافت میکند (یا از طریق polling پلتفرم یا از طریق دریافت یک webhook که پلتفرم به آن ارسال میکند)، آن پیام را به gateway تحویل میدهد، و پاسخ gateway را از طریق همان API ارسال میکند. کانکتور یک لایه ترجمه سبک است. این لایه "یک پیام تلگرام رسید" را به "این متن برای عامل است" و بالعکس تبدیل میکند. ساختن یک کانکتور شخصی، عمدتاً شامل خواندن مستندات bot یک پلتفرم و نگاشت فرمت پیام آن بر روی فرمت gateway است.
مغز و حلقه ابزار (tool loop)
در داخل gateway، بخشی وجود دارد که آن را از یک chatbot به یک agent تبدیل میکند. این بخش یک حلقه (loop) است.
یک پیام میرسد. gateway آن را به همراه لیستی از ابزارهایی که مدل مجاز به استفاده از آنهاست، به یک مدل زبانی میفرستد. مدل پیام را میخواند و تصمیم میگیرد: مستقیماً پاسخ دهد، یا یک ابزار را فراخوانی کند. اگر ابزاری را فراخوانی کند، gateway آن ابزار را اجرا میکند، نتیجه را ثبت میکند و نتیجه را به مدل برمیگرداند. مدل به نتیجه نگاه میکند و دوباره تصمیم میگیرد. این فرآیند تا زمانی که مدل کاری برای انجام دادن نداشته باشد و یک پاسخ نهایی تولید کند، تکرار میشود.
این حلقه، ایده اصلی یک agent است و فرقی نمیکند که agent در یک اپلیکیشن چت باشد یا در یک ترمینال. برای اینکه ابزارها چگونه به روش استاندارد به این حلقه متصل میشوند، connecting tools through the Model Context Protocol مطالعه بعدی مناسبی است، و برای بخش مدل، running the model itself on your own hardware نیمه دیگر را تکمیل میکند.
مجموعه ابزارها، هدف و خطر
ابزارها همان چیزی هستند که OpenClaw را قدرتمند میکنند. ابزاری که یک دستور shell را اجرا میکند، ابزاری که یک مرورگر را هدایت میکند، ابزاری که فایلها را میخواند و مینویسد. اگر به حلقه بالا اجازه دسترسی به این ابزارها را بدهید، میتواند تقریباً هر کاری را که شما با کیبورد انجام میدهید، انجام دهد. این دامنه دسترسی، کل محصول است و در عین حال، کل ریسک آن نیز هست.
عاملی که میتواند هر دستوری را اجرا کند و بر اساس دستورات دریافتی از یک اپلیکیشن چت عمل کند، سطح حمله (attack surface) بزرگی دارد. یک دستور اشتباه، یک حمله prompt-injection که در یک صفحه وب (که توسط ابزار مرورگر بازدید میشود) پنهان شده، یا باگی مانند نقصهای مارس 2026، میتواند "تقویم من را بخوان" را به "فایلهای من را پاک کن" تبدیل کند. بنابراین، محدودیتها بخشهای اختیاری نیستند. agent را به عنوان یک کاربر اختصاصی و بدون سطح دسترسی (unprivileged user) بدون sudo اجرا کنید تا یک نفوذ نتواند سطح دسترسی خود را ارتقا دهد (escalate). ابزارهای خطرناک را با یک مرحله تایید (approval step) محدود کنید تا agent قبل از انجام کار تخریبی، از شما سوال کند. اجرای ابزارها را در یک محیط ایزوله (sandbox) قرار دهید تا یک دستور کنترلنشده محدود شود. کلید API مدل را ایزوله کنید تا در صورت لو رفتن، حساب شما در اختیار مهاجم قرار نگیرد.
قبل از اینکه هر چیزی که دستورات shell را اجرا میکند در معرض قرار دهید، مراحل پایه را با دقت انجام دهید. یک چکلیست برای سرور خود در اینجا ایجاد کنید و سپس آن را از بالا تا پایین دنبال کنید:
موضوع کاربر بدون سطح دسترسی (unprivileged-user) در running services as an unprivileged user به تفصیل بررسی شده است، و راهنمای کامل تنظیمات امن برای پروژه اصلی در running OpenClaw safely on a VPS موجود است.
حافظه به صورت فایلهای ساده
بیشتر مردم انتظار دارند حافظه یک agent در یک پایگاه داده (database) ذخیره شود. حافظه OpenClaw اینگونه نیست. این پروژه حافظه را به صورت فایلهای ساده Markdown روی دیسک ذخیره میکند و این انتخاب ارزش کپی کردن دارد.
فایلها ساده هستند. هیچ نیازی به مهاجرت schema، نگه داشتن یک سرویس در حال اجرا، یا یادگیری یک زبان پرسوجو (query language) نیست. آنها قابل بازبینی هستند: میتوانید پوشه را باز کنید و دقیقاً آنچه agent درباره شما باور دارد را بخوانید، با ویرایش یک فایل یک یادداشت اشتباه را اصلاح کنید، یا با حذف یک فایل، یک حافظه را پاک کنید. همچنین آنها قابل انتقال هستند، زیرا انتقال agent به یک سرور جدید فقط شامل کپی کردن یک دایرکتوری است. برای یک agent شخصی تککاربره، یک پوشه از فایلهای متنی کافی است و باعث میشود کل سیستم برای درک کردن ساده باقی بماند.
مهارتها (Skills): روشی قابل انتقال برای افزودن قابلیتها
فراتر از ابزارهای داخلی، OpenClaw از یک فرمت مهارت (skill) قابل انتقال استفاده میکند تا جامعه کاربران بتواند بدون تغییر در هسته اصلی، قابلیتهای آن را گسترش دهند. یک skill مجموعهای خودکفا از دستورالعملها و گاهی کد است که یک وظیفه جدید را به agent میآموزد. agent زمانی که وظیفه مستلزم آن باشد، یک skill را بارگذاری میکند.
ارزش چنین فرمتی در این است که قابلیتها قابل اشتراکگذاری میشوند. کسی یک skill برای یک کار خاص مینویسد، آن را منتشر میکند و دیگران آن را اضافه میکنند. اگر خودتان یک agent بسازید، تعریف یک فرمت توسعه کوچک و شفاف در مراحل اولیه، شما را از کدنویسی سخت (hard-coding) تمام قابلیتها در هسته اصلی در آینده نجات میدهد.
مدل خود را بیاورید
OpenClaw نسبت به مدل بیطرف (model-agnostic) است. این برنامه مدل زبانی خودش را همراه ندارد. در عوض، به مدلی که شما انتخاب میکنید متصل میشود، که میتواند یک API میزبانی شده یا مدلی باشد که خودتان اجرا میکنید.
این تفکیک برای هزینه، حریم خصوصی و کنترل اهمیت دارد. یک API میزبانی شده، قویترین مدلها را بدون نیاز به مدیریت سختافزار، با قیمت بر اساس تعداد توکن و با خروج پرامپتهای شما از سرورتان در اختیار شما قرار میدهد. یک مدل خود-میزبانی شده (self-hosted) که با چیزی مانند Ollama ارائه میشود، تمام پیامها را در سرور خودتان نگه میدارد و هزینه آن فقط سختافزار و برق است، به قیمت اجرای یک مدل کوچکتر یا کندتر. بسیاری از افراد از هر دو ترکیب استفاده میکنند. اگر میخواهید یک agent کاملاً خصوصی باشد، self-hosting the model on your VPS بخشی است که آن شکاف آخر را پر میکند، و Hermes Agent یک agent خود-میزبانی شده دیگر است که ارزش مقایسه دارد.
آیا باید یکی بسازید؟
شما میتوانید تمام این موارد را بسازید. اجزا عجیب و غریب نیستند: یک دیمون، چند کانکتور چت، یک حلقه مدل و ابزار، یک پوشه از فایلهای Markdown، و یک فرمت پلاگین. درک آنها واقعاً مفید است، زیرا هر agentی را که استفاده خواهید کرد رمزگشایی میکند و دقیقاً به شما میگوید خطر کجا نهفته است.
اما برای اکثر مردم، پاسخ صادقانه این است که نسخه واقعی را اجرا و آن را ایمن کنید، به جای اینکه آن را از نو اختراع کنید. OpenClaw قبلاً کانکتورها، حلقه و فرمت skill را حل کرده است و تحت بررسیهای امنیتی واقعی قرار گرفته است. تلاش شما بهتر است صرف بخشی شود که واقعاً متعلق به خودتان است و باید آن را درست کنید: یعنی تنظیمات و ایمنسازی روی سرور خودتان. یک نسخه کوچک برای یادگیری بسازید. نسخه اصلی را برای استفاده، اجرا و قفل کنید.
مبانی کلی در building your own AI agent on a VPS قرار دارند، و building an agent with Claude همان ایدهها را با یک مدل خاص به عنوان مغز نشان میدهد.
FAQ
آیا ساختن عاملی مانند OpenClaw سخت است؟
اجزای جداگانه سخت نیستند. یک فرآیند gateway، یک کانکتور چت، یک حلقه مدل و ابزار، و یک پوشه از فایلها، هر کدام به تنهایی ساده هستند. بخش سخت، انجام ایمن آن است. عاملی که دستورات shell را از پیامهای چت اجرا میکند، یک سطح حمله جدی است و تنظیم درست sandbox، دسترسیها و تنظیمات کاربر بدون سطح دسترسی، کار بیشتری نسبت به اتصال ویژگیها به یکدیگر دارد.
چرا OpenClaw حافظه را به جای پایگاه داده، به صورت فایلهای Markdown ذخیره میکند؟
چون برای یک agent شخصی تککاربره، فایلها کافی و بسیار سادهتر هستند. نیازی به اجرای سرویس پایگاه داده نیست، حافظه را میتوان به راحتی با دست خواند و اصلاح کرد، و انتقال agent به سرور دیگر فقط کپی کردن یک دایرکتوری است. پایگاه داده برای مقیاسهای بزرگتر کاربرد دارد، نه اینجا.
خطرناکترین بخش یک عامل هوش مصنوعی شخصی چیست؟
ابزارهایی که به آن اجازه عمل کردن میدهند: اجرای دستورات shell، کنترل یک مرورگر و نوشتن فایلها. اینها دلیل ساختن آن و دلیل اینکه میتواند به شما آسیب برساند هستند. رویداد امنیتی مارس 2026 در OpenClaw، یعنی 9 مشکل در 4 روز از جمله یک نقص بحرانی با امتیاز 9.9، واضحترین استدلال برای برخورد محتاطانه با لایه ابزار است: اجرا به عنوان کاربر بدون سطح دسترسی، محدود کردن اقدامات تخریبی و ایزولهسازی (sandbox) اجرا.
آیا برای ساختن آن به مدل زبانی خودم نیاز دارم؟
خیر. عاملهایی مانند OpenClaw نسبت به مدل بیطرف هستند، بنابراین شما مدلی را که انتخاب کردهاید متصل میکنید. این میتواند یک API میزبانی شده برای قویترین مدلها باشد، یا مدلی که خودتان برای حفظ حریم خصوصی کامل اجرا میکنید. خود-میزبانی با Ollama تمام پیامها را در سرور خودتان نگه میدارد، به قیمت اجرای یک مدل کوچکتر.