آموزش ساخت ایجنت هوش مصنوعی شخصی مشابه OpenClaw
با نحوه ساخت یک ایجنت هوش مصنوعی self-hosted برای اجرای دستورات shell و کنترل مرورگر آشنا شوید. بررسی دقیق امنیت و رفع حفره امنیتی CVE-2026-32922 در این راهنما.
OpenClaw دقیقاً چیست
OpenClaw یک ایجنت هوش مصنوعی شخصی و self-hosted است. شما آن را روی سرور خود اجرا میکنید، به اپلیکیشنهای چتی که از قبل استفاده میکنید متصل میسازید و این ایجنت میتواند دستورات shell را اجرا کند، مرورگر را کنترل نماید، فایلهای شما را بخواند یا بنویسد و بر اساس پیامهایی که برایش میفرستید، عمل کند. این پروژه دارای مجوز MIT است، رویکرد local-first دارد و تا اواسط سال 2026 بیش از 380,000 ستاره در GitHub دریافت کرده است که آن را به یکی از پرطرفدارترین پروژههای این پلتفرم تبدیل میکند. در پس این هیاهو، OpenClaw مجموعهای نسبتاً کوچک از اجزا است که به شکلی منطقی به هم متصل شدهاند. این مطلب به بررسی این اجزا میپردازد تا درک کنید ابزاری مانند این چگونه ساخته میشود و نقاط حساس و خطرناک آن کجا هستند.
یک هشدار از همان ابتدا، چرا که این موضوع تمام انتخابهای طراحی زیر را تحت تأثیر قرار میدهد. در مارس 2026، نه مشکل امنیتی در OpenClaw طی چهار روز افشا شد، از جمله یک نقص بحرانی ارتقای سطح دسترسی (privilege-escalation) که امتیاز 9.9 از 10 را دریافت کرد (CVE-2026-32922). این پروژه به گونهای طراحی شده است که توسط شما، یعنی اپراتور، ایمنسازی شود. ایجنتی که میتواند هر دستوری را اجرا کند، تنها به اندازه سروری که روی آن اجرا میشود و محدودیتهایی که شما برایش تعیین میکنید، امنیت دارد. هنگام مطالعه این مطلب، این نکته را در نظر داشته باشید.
دیمون gateway: یک پردازش، کاملاً خصوصی
در مرکز این سیستم، یک پردازش واحد و طولانیمدت وجود دارد که معمولاً gateway نامیده میشود. این پردازش، صفحه کنترل (control plane) است. پیامها را دریافت میکند، تصمیم میگیرد چه کاری انجام شود، ابزارها را اجرا میکند و پاسخها را بازمیگرداند. سایر اجزا به این پردازش متصل میشوند.
مهمترین نکته درباره gateway، محل گوش دادن (listen) آن است. OpenClaw بهصورت پیشفرض آن را روی آدرس loopback یعنی 127.0.0.1 مقید (bind) میکند، بنابراین تا زمانی که خودتان برای در دسترس قرار دادن آن اقدام نکنید، از طریق اینترنت قابل دسترسی نخواهد بود. آن را در همان وضعیت باقی بگذارید. این تنها پردازشی است که وظیفه اجرای دستورات را بر عهده دارد، بنابراین اگر gateway در معرض دید باشد، هر کسی که آن را پیدا کند، یک جای پای از راه دور (remote foothold) در سرور شما خواهد داشت. هرگاه نیاز داشتید از لپتاپ خود به آن متصل شوید، بهجای باز کردن پورت، از طریق VPN یا SSH tunnel اقدام کنید. هیچکس نمیتواند به پورتی که به آن دسترسی ندارد، حمله کند.
اتصالدهندههای کانال: دریافت پیام و ارسال پاسخ
یک عامل شخصی تنها زمانی مفید است که بتوانید از طریق برنامههایی که هماکنون استفاده میکنید با آن گفتگو کنید. این دقیقاً کاری است که اتصالدهندههای کانال انجام میدهند. هر کدام از آنها با استفاده از 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 موجود است.
حافظه به صورت فایلهای متنی ساده
بیشتر افراد انتظار دارند که حافظه یک عامل (agent) در یک پایگاه داده ذخیره شود. اما OpenClaw اینگونه نیست. این سیستم حافظه را به صورت فایلهای Markdown ساده روی دیسک ذخیره میکند و این انتخابی است که ارزش الگوبرداری دارد.
فایلها ساده هستند. هیچ طرحوارهای (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، یک chat connector، یک حلقهٔ مدل-و-ابزار و یک پوشه از فایلها، هر کدام بهتنهایی ساده هستند. بخش دشوار، انجام ایمن این کار است. عاملی که دستورات shell را از پیامهای چت اجرا میکند، یک سطح حملهٔ امنیتی جدی است و پیادهسازی صحیح sandboxing، مجوزها و راهاندازی کاربر بدون امتیاز (unprivileged)، کاری بیش از صرفاً متصل کردن ویژگیها به یکدیگر میطلبد.
چرا OpenClaw حافظه را بهجای دیتابیس در فایلهای Markdown ذخیره میکند؟
زیرا برای یک عامل شخصی تککاربره، فایلها کافی و بسیار سادهتر هستند. هیچ سرویس دیتابیسی برای اجرا وجود ندارد، خواندن و اصلاح دستی حافظه آسان است و انتقال عامل به سروری دیگر تنها با کپی کردن یک دایرکتوری انجام میشود. دیتابیس در مقیاسهای بزرگتر جایگاه خود را پیدا میکند، نه اینجا.
خطرناکترین بخش یک عامل هوش مصنوعی شخصی چیست؟
ابزارهایی که به آن اجازهٔ عمل میدهند: اجرای دستورات shell، کنترل مرورگر و نوشتن فایلها. اینها دلیل ساخت آن و همچنین دلیلی هستند که میتواند به شما آسیب برساند. رویداد امنیتی مارس 2026 در OpenClaw، که شامل 9 مورد در 4 روز از جمله یک مورد بحرانی با امتیاز 9.9 بود، واضحترین دلیل برای برخورد محتاطانه با لایهٔ ابزار است: با کاربری بدون امتیاز اجرا کنید، اقدامات مخرب را محدود کنید و اجرا را در sandbox قرار دهید.
آیا برای ساخت چنین عاملی به مدل زبانی اختصاصی خودم نیاز دارم؟
خیر. عاملهایی مانند OpenClaw نسبت به مدل بیطرف (model-agnostic) هستند، بنابراین میتوانید مدلی که انتخاب میکنید را به آن متصل کنید. این میتواند یک API میزبانیشده برای قویترین مدلها باشد، یا مدلی که برای حفظ حریم خصوصی کامل، خودتان اجرا میکنید. میزبانی شخصی با Ollama، تمام پیامها را روی سرور خودتان نگه میدارد، البته به قیمت اجرای یک مدل کوچکتر.