آموزش ساخت ایجنت هوش مصنوعی شخصی مشابه OpenClaw
در این راهنما یاد میگیرید چگونه یک ایجنت هوش مصنوعی self-hosted بسازید. با بررسی دقیق آسیبپذیری CVE-2026-32922 و نکات امنیتی حیاتی برای اجرای دستورات shell در سرور.
OpenClaw واقعاً چیست
OpenClaw یک ایجنت هوش مصنوعی شخصی و self-hosted است. شما آن را روی سرور خود اجرا میکنید، به اپلیکیشنهای چتی که استفاده میکنید متصل میسازید و این ایجنت میتواند دستورات shell را اجرا کند، مرورگر را کنترل کند، فایلهای شما را بخواند یا بنویسد و بر اساس پیامهایی که برایش میفرستید، عمل کند. این پروژه دارای مجوز MIT است، رویکرد local-first دارد و تا اواسط سال 2026 بیش از 380,000 ستاره در GitHub کسب کرده که آن را به یکی از محبوبترین پروژهها در این پلتفرم تبدیل کرده است. در پس این هیاهو، مجموعهای از اجزای کوچک قرار دارند که به شکلی منطقی به هم متصل شدهاند. این مطلب این اجزا را بررسی میکند تا درک کنید چنین ابزاری چگونه ساخته میشود و نقاط حساس آن کجاست.
یک هشدار از همان ابتدا، چرا که تمام تصمیمات طراحی زیر را تحت تأثیر قرار میدهد. در مارس 2026، نگهدارندگان OpenClaw سیل عظیمی از توصیههای امنیتی منتشر کردند: 22 مورد تنها در 13 مارس و پنج مورد دیگر در 16 مارس، در حالی که پایگاه داده ملی آسیبپذیریها (NVD) تعداد 199 مورد CVE برای OpenClaw در آن ماه ثبت کرد. دسته 13 مارس شامل دو نقص بحرانی با امتیاز 9.9 از 10 بود؛ یکی از آنها یک باگ ارتقای سطح دسترسی (CVE-2026-32922) بود که به دستگاهی که فقط حقوق pairing داشت، اجازه میداد توکنهای کامل مدیریت (admin) تولید کند. این پروژه طوری طراحی شده که توسط شما، یعنی اپراتور، ایمنسازی شود. ایجنتی که میتواند هر دستوری را اجرا کند، تنها به اندازه سروری که روی آن اجرا میشود و محدودیتهایی که برایش تعیین میکنید، امن است. هنگام مطالعه این مطلب، این نکته را در نظر داشته باشید.
دیمون دروازه: یک پردازش، حفظشده در حالت خصوصی
در مرکز این سیستم، یک پردازش واحد و طولانیمدت وجود دارد که معمولاً gateway نامیده میشود. این بخش، صفحه کنترل (control plane) است. پیامها را دریافت میکند، تصمیم میگیرد چه کاری انجام دهد، ابزارها را اجرا میکند و پاسخها را بازمیگرداند. بقیه اجزا به این بخش متصل میشوند.
مهمترین نکته درباره gateway این است که کجا گوش میدهد (listen میکند). در یک نصب معمولی روی هاست، OpenClaw آن را به آدرس loopback یعنی 127.0.0.1 متصل میکند، بنابراین از طریق اینترنت قابل دسترسی نیست مگر اینکه خودتان عمداً آن را در معرض قرار دهید. ایمیجهای کانتینر یک استثنا هستند: مستندات امنیتی خود OpenClaw میگویند که آنها بهصورت پیشفرض روی یک bind در معرض قرار میگیرند، بنابراین اگر کانتینر را اجرا میکنید، احراز هویت را فعال نگه دارید و پورت آن را در اینترنت منتشر نکنید. در هر صورت، آن را خصوصی نگه دارید. این تنها پردازشی است که دستورات را اجرا میکند، بنابراین یک gateway در معرض، به هر کسی که آن را پیدا کند، یک جای پا (foothold) از راه دور به سرور شما میدهد. هر زمان نیاز داشتید از لپتاپ خود به آن دسترسی پیدا کنید، این کار را از طریق VPN یا تونل SSH انجام دهید، نه با باز کردن پورت. هیچکس نمیتواند به پورتی که به آن دسترسی ندارد، حمله کند.
اتصالدهندههای کانال: دریافت پیام و ارسال پاسخ
یک عامل شخصی تنها زمانی مفید است که بتوانید از طریق برنامههایی که هماکنون استفاده میکنید با آن گفتگو کنید. این دقیقاً کاری است که اتصالدهندههای کانال انجام میدهند. هر کدام از آنها با استفاده از API ربات یا webhookهای یک پلتفرم خاص، با آن پلتفرم (مانند Telegram، WhatsApp، Slack یا Discord) ارتباط برقرار میکنند.
ساختار برای همه آنها یکسان است. اتصالدهنده یک ربات را در پلتفرم ثبت میکند، پیام ورودی شما را دریافت مینماید (یا از طریق polling پلتفرم و یا با دریافت webhookی که پلتفرم به سمت آن ارسال میکند)، آن پیام را به gateway تحویل میدهد و پاسخ gateway را از طریق همان API به پلتفرم بازمیگرداند. اتصالدهنده یک لایه ترجمه سبک است. این لایه «رسیدن یک پیام تلگرامی» را به «این متن برای عامل است» تبدیل کرده و دوباره آن را به حالت قبل برمیگرداند. ساخت اتصالدهنده اختصاصی شما، عمدتاً شامل مطالعه مستندات ربات یک پلتفرم و نگاشت فرمت پیام آن بر فرمت gateway است.
مغز و حلقه ابزارها
درون gateway بخشی وجود دارد که آن را به یک عامل (agent) تبدیل میکند، نه صرفاً یک چتبات. این بخش یک حلقه است.
پیامی دریافت میشود. gateway آن را به همراه فهرستی از ابزارهایی که مدل مجاز به استفاده از آنهاست، برای یک مدل زبانی ارسال میکند. مدل پیام را میخواند و تصمیم میگیرد: مستقیماً پاسخ دهد یا یک ابزار را فراخوانی کند. اگر مدل ابزاری را فراخوانی کند، gateway آن ابزار را اجرا کرده، نتیجه را ثبت میکند و دوباره به مدل بازمیگرداند. مدل نتیجه را بررسی کرده و مجدداً تصمیم میگیرد. این چرخه تا زمانی که مدل کار دیگری برای انجام نداشته باشد و پاسخ نهایی را تولید کند، تکرار میشود.
این حلقه، تمام مفهوم یک عامل است و فرقی نمیکند که عامل در یک برنامه چت باشد یا در یک ترمینال؛ حلقه در هر دو حالت یکسان است. برای آگاهی از نحوه اتصال استاندارد ابزارها به این حلقه، مطالعه اتصال ابزارها از طریق Model Context Protocol گام بعدی مناسبی است و برای سمت مدل، اجرای مدل روی سختافزار شخصی نیمه دیگر این مبحث را تکمیل میکند.
مجموعه ابزارها، هم نقطه قوت و هم عامل خطر است
ابزارها همان چیزی هستند که OpenClaw را قدرتمند میکنند. ابزاری که یک دستور shell را اجرا میکند، ابزاری که یک مرورگر را کنترل میکند، و ابزاری که فایلها را میخواند و مینویسد. اگر به حلقه فوق دسترسی به این موارد را بدهید، میتواند تقریباً هر کاری که شما با کیبورد انجام میدهید را انجام دهد. این گسترهٔ دسترسی، کل محصول است و در عین حال کل ریسک آن نیز محسوب میشود.
عاملی که میتواند هر دستوری را اجرا کند و بر اساس دستورالعملهای دریافتی از یک برنامه چت عمل کند، سطح حمله بزرگی ایجاد میکند. یک دستورالعمل مخرب، یک حمله prompt-injection پنهان در یک صفحه وب که ابزار مرورگر از آن بازدید میکند، یا باگهایی مانند نقصهای مارس 2026 میتوانند "تقویم من را بخوان" را به "فایلهای من را حذف کن" تبدیل کنند. بنابراین محدودیتها، امکانات جانبی اختیاری نیستند. عامل را به عنوان یک کاربر اختصاصی و بدون امتیاز (unprivileged) بدون دسترسی sudo اجرا کنید تا در صورت نفوذ، دسترسی مهاجم ارتقا نیابد. ابزارهای خطرناک را پشت یک مرحله تأیید قرار دهید تا عامل پیش از انجام هر کار مخربی، از شما اجازه بگیرد. اجرای ابزارها را در محیط sandbox قرار دهید تا دستورات خارج از کنترل، محدود شوند. API key مدل را ایزوله کنید تا نشت آن، حساب کاربری شما را به دست مهاجم ندهد. به سایر اسرار موجود در همان سرور نیز فکر کنید، زیرا نقاط ضعف واقعی Vaultwarden، توکن مدیریت و فایل پشتیبان آن است نه رمزنگاری آن، و عاملی که دسترسی shell دارد، به هر دوی آنها دسترسی خواهد داشت.
پیش از آنکه هر چیزی که دستورات shell را اجرا میکند در معرض دید قرار دهید، اصول اولیه را با دقت بررسی کنید. یک چکلیست برای سرور خود در اینجا تهیه کنید و سپس آن را از بالا تا پایین دنبال کنید:
مبحث مربوط به کاربر بدون امتیاز (unprivileged user) بهطور مفصل در اجرای سرویسها به عنوان یک کاربر بدون امتیاز پوشش داده شده است و راهنمای کامل راهاندازی ایمن برای پروژه اصلی در اجرای ایمن OpenClaw روی یک VPS موجود است.
حافظه به شکل فایلهای متنی ساده
بیشتر افراد انتظار دارند حافظه یک ایجنت در یک پایگاه داده ذخیره شود. حافظه OpenClaw اینطور نیست. این ایجنت حافظه را به شکل فایلهای Markdown ساده روی دیسک ذخیره میکند و این انتخابی است که ارزش کپیبرداری دارد. این فایلها منبع حقیقت هستند؛ موتور حافظه پیشفرض، یک ایندکس جستجوی SQLite در کنار آنها نگه میدارد و آن ایندکس میتواند از روی همان فایلها بازسازی شود.
فایلها ساده هستند. هیچ طرحوارهای (schema) برای مهاجرت، هیچ سرویسی برای اجرا نگه داشتن و هیچ زبان پرسوجویی برای یادگیری وجود ندارد. آنها قابل بررسی هستند: میتوانید پوشه را باز کنید و دقیقاً بخوانید ایجنت چه چیزی درباره شما میداند، با ویرایش یک فایل یادداشت اشتباه را اصلاح کنید یا با حذف یک فایل، یک خاطره را پاک کنید. آنها همچنین قابل حمل هستند، زیرا انتقال ایجنت به یک سرور جدید تنها به کپی کردن یک دایرکتوری محدود میشود. برای یک ایجنت شخصی تککاربره، یک پوشه از فایلهای متنی کافی است و باعث میشود کل سیستم بهراحتی قابل درک باشد.
مهارتها: روشی قابلحمل برای افزودن قابلیتها
فراتر از ابزارهای داخلی، OpenClaw از یک فرمت مهارت قابلحمل استفاده میکند تا جامعهٔ کاربری بتواند بدون تغییر در هستهٔ برنامه، قابلیتهای آن را گسترش دهد. یک مهارت، بستهای مستقل از دستورالعملها و گاهی کد است که وظیفهٔ جدیدی را به عامل (agent) میآموزد. عامل زمانی که وظیفهای به آن محول شود، مهارت مربوطه را بارگذاری میکند. جستجوی وب معمولاً اولین مهارتی است که کاربران اضافه میکنند و اشاره دادن آن مهارت به نمونهٔ SearXNG شخصی خودتان باعث میشود پرسوجوهای شما از APIهای تجاری دور بماند و در عین حال مرز اعتماد مهارت کاملاً مشخص باشد، چرا که تمام خروجیهای آن، متنی است که توسط یک شخص ناشناس نوشته شده است.
ارزش چنین فرمتی در این است که قابلیتها قابلاشتراکگذاری میشوند. شخصی مهارتی را برای یک کار خاص مینویسد، آن را منتشر میکند و دیگران از آن استفاده میکنند. این راحتی، دو جنبه دارد؛ زیرا مهارت در واقع کدی از یک غریبه است که عامل شما بدون تردید آن را اجرا میکند. بنابراین، پیش از بارگذاری هر چیزی که خودتان ننوشتهاید، بهتر است آن را از طریق یک اسکنر امنیتی که خودتان میزبانی میکنید بررسی کنید. اگر عامل خودتان را میسازید، تعریف یک فرمت توسعهٔ کوچک و شفاف در مراحل اولیه، شما را از hard-code کردن تکتک قابلیتها در هستهٔ برنامه در آینده بینیاز میکند.
استفاده از مدل شخصی
OpenClaw مستقل از مدل است. این برنامه هیچ مدل زبانی همراه خود ندارد. در عوض، به مدلی که شما انتخاب میکنید متصل میشود؛ این مدل میتواند یک API میزبانیشده یا مدلی باشد که خودتان اجرا میکنید.
این تفکیک از نظر هزینه، حریم خصوصی و کنترل اهمیت دارد. یک API میزبانیشده، قدرتمندترین مدلها را بدون نیاز به مدیریت سختافزار در اختیار شما قرار میدهد، اما هزینه آن بر اساس تعداد توکن محاسبه میشود و پرامپتهای شما از سرور خارج میشوند. یک مدل خود-میزبانیشده (self-hosted) که با ابزاری مانند Ollama اجرا میشود، تمام پیامها را در دستگاه خودتان نگه میدارد و هزینهاش فقط محدود به سختافزار و مصرف برق است، با این تفاوت که باید از مدلهای کوچکتر یا کندتر استفاده کنید. بسیاری از کاربران از ترکیبی از هر دو روش استفاده میکنند. اگر میخواهید یک عامل (agent) کاملاً خصوصی داشته باشید، میزبانی مدل روی VPS شخصی همان قطعهای است که این شکاف نهایی را پر میکند و Hermes Agent نیز یک عامل خود-میزبانیشده دیگر است که ارزش مقایسه دارد.
آیا باید یکی بسازید؟
شما میتوانید تمام این موارد را بسازید. اجزای آن پیچیده نیستند: یک daemon، چند اتصالدهنده (connector) برای چت، یک حلقه شامل مدل و ابزارها، پوشهای از فایلهای Markdown و یک فرمت برای پلاگینها. درک این اجزا واقعاً مفید است، زیرا ماهیت هر عاملی (agent) که استفاده میکنید را برایتان شفاف کرده و دقیقاً نشان میدهد که خطرات در کجا نهفتهاند.
اما برای بیشتر افراد، پاسخ صادقانه این است که بهجای بازطراحی آن، نسخه واقعی را اجرا و سختسازی کنند. OpenClaw از قبل connectorها، loop و قالب skill را حل کرده است و بررسیهای امنیتی واقعی نیز روی آن انجام شده است. بهتر است تلاش خود را صرف بخشی کنید که واقعاً مسئولیت شماست و باید آن را درست انجام دهید: راهاندازی و سختسازی روی سرور خودتان. اگر ابتدا مسیر یادگیری را میخواهید، پیشبردن مفاهیم بهصورت مرحلهای از خواندن مستقیم کد منبع agent بهتر است؛ زیرا در پایان هر مرحله، یک مورد واقعی ساختهاید. برای یادگیری، یک نمونه کوچک بسازید. برای استفاده، نسخه واقعی را اجرا و ایمنسازی کنید.
مبانی کلی در ساخت عامل هوش مصنوعی شخصی روی یک VPS آمده است و ساخت یک عامل با Claude همین ایدهها را با استفاده از یک مدل خاص به عنوان مغز متفکر نشان میدهد.
FAQ
آیا ساخت ایجنتی مانند OpenClaw دشوار است؟
اجزای تشکیلدهنده آن دشوار نیستند. یک پردازش gateway، یک اتصالدهنده چت، یک حلقه مدل-و-ابزار و یک پوشه از فایلها، هر کدام به تنهایی ساده هستند. بخش دشوار، انجام ایمن این کار است. ایجنتی که دستورات shell را از پیامهای چت اجرا میکند، یک سطح حمله امنیتی جدی است و پیادهسازی صحیح sandboxing، مجوزها و تنظیمات کاربر بدون دسترسی (unprivileged user)، کاری بیش از صرفاً متصل کردن ویژگیها به یکدیگر است.
چرا OpenClaw حافظه را به جای پایگاه داده به صورت فایلهای Markdown ذخیره میکند؟
زیرا برای یک ایجنت شخصی تککاربره، فایلها کافی و بسیار سادهتر هستند. هیچ سرویس پایگاه دادهای برای اجرا وجود ندارد، حافظه بهراحتی توسط انسان قابل خواندن و اصلاح است و انتقال ایجنت به سرور دیگر تنها با کپی کردن یک دایرکتوری انجام میشود. پایگاه داده در مقیاسهای بزرگ جایگاه خود را پیدا میکند، نه اینجا.
خطرناکترین بخش یک ایجنت هوش مصنوعی شخصی چیست؟
ابزارهایی که به آن اجازه عمل میدهند: اجرای دستورات shell، کنترل مرورگر و نوشتن فایلها. اینها دلیل ساخت ایجنت هستند و همان دلیلی که میتواند به شما آسیب بزند. موج توصیههای امنیتی مارس 2026 برای OpenClaw، شامل 27 مورد منتشر شده بین 13 تا 16 مارس که دو مورد آن دارای امتیاز بحرانی 9.9 بودند، واضحترین دلیل برای مراقبت از لایه ابزارهاست: با کاربری بدون دسترسی (unprivileged) اجرا کنید، اقدامات مخرب را محدود کنید و اجرا را در sandbox قرار دهید.
آیا برای ساخت چنین ایجنتی به مدل زبانی اختصاصی خودم نیاز دارم؟
خیر. ایجنتهایی مانند OpenClaw مدل-آگنوستیک (model-agnostic) هستند، بنابراین میتوانید مدلی که انتخاب میکنید را به آن متصل کنید. این میتواند یک API میزبانیشده برای قویترین مدلها باشد، یا مدلی که برای حفظ حریم خصوصی کامل، خودتان اجرا میکنید. میزبانی شخصی با Ollama باعث میشود تمام پیامها روی سرور خودتان باقی بماند، البته با هزینه اجرای یک مدل کوچکتر.