Fundamentals
محیطهای اجرای عاملها
یک زمان اجرای عامل مؤلفهای است که مالک یک حلقهٔ مدل آماده است: پرامپت را دریافت میکند، خروجی مدل را پیش میبرد، فراخوانیهای ابزار بومی را مدیریت میکند، و نوبت کاملشده را به OpenClaw بازمیگرداند.
زمانهای اجرا بهراحتی با ارائهدهندهها اشتباه گرفته میشوند، چون هر دو نزدیک پیکربندی مدل دیده میشوند. آنها لایههای متفاوتی هستند:
| لایه | نمونهها | معنای آن |
|---|---|---|
| ارائهدهنده | openai, anthropic, openai-codex |
اینکه OpenClaw چگونه احراز هویت میکند، مدلها را کشف میکند، و نام ارجاعهای مدل را تعیین میکند. |
| مدل | gpt-5.5, claude-opus-4-6 |
مدلی که برای نوبت عامل انتخاب شده است. |
| زمان اجرای عامل | pi, codex, claude-cli |
حلقه یا بکاند سطح پایینی که نوبت آمادهشده را اجرا میکند. |
| کانال | Telegram, Discord, Slack, WhatsApp | جایی که پیامها وارد OpenClaw میشوند و از آن خارج میشوند. |
در کد همچنین واژهٔ هارنس را خواهید دید. هارنس پیادهسازیای است که یک زمان
اجرای عامل را فراهم میکند. برای نمونه، هارنس Codex همراهشده، زمان اجرای
codex را پیادهسازی میکند. پیکربندی عمومی از agentRuntime.id استفاده
میکند؛ openclaw doctor --fix کلیدهای قدیمی سیاست زمان اجرا را به همین شکل
بازنویسی میکند.
دو خانوادهٔ زمان اجرا وجود دارد:
- هارنسهای جاسازیشده داخل حلقهٔ عامل آمادهٔ OpenClaw اجرا میشوند. امروز
این شامل زمان اجرای داخلی
piبهعلاوهٔ هارنسهای Plugin ثبتشده مانندcodexاست. - بکاندهای CLI یک فرایند CLI محلی را اجرا میکنند، در حالی که ارجاع مدل را
canonical نگه میدارند. برای مثال،
anthropic/claude-opus-4-7همراه باagentRuntime.id: "claude-cli"یعنی «مدل Anthropic را انتخاب کن، از طریق Claude CLI اجرا کن.»claude-cliشناسهٔ هارنس جاسازیشده نیست و نباید به انتخاب AgentHarness پاس داده شود.
سطوح Codex
بیشتر سردرگمی از چند سطح متفاوت میآید که نام Codex را به اشتراک میگذارند:
| سطح | نام/پیکربندی در OpenClaw | کاری که انجام میدهد |
|---|---|---|
| زمان اجرای بومی سرور برنامهٔ Codex | ارجاعهای مدل openai/* |
نوبتهای عامل جاسازیشدهٔ OpenAI را از طریق سرور برنامهٔ Codex اجرا میکند. این چیدمان معمول اشتراک ChatGPT/Codex است. |
| پروفایلهای احراز هویت OAuth مربوط به Codex | ارائهدهندهٔ احراز هویت openai-codex |
احراز هویت اشتراک ChatGPT/Codex را ذخیره میکند که هارنس سرور برنامهٔ Codex مصرف میکند. |
| آداپتور ACP مربوط به Codex | runtime: "acp", agentId: "codex" |
Codex را از طریق صفحهٔ کنترل خارجی ACP/acpx اجرا میکند. فقط وقتی استفاده کنید که ACP/acpx صراحتا درخواست شده باشد. |
| مجموعه فرمانهای کنترل چت بومی Codex | /codex ... |
رشتههای سرور برنامهٔ Codex را از چت متصل، ازسرگرفته، هدایت، متوقف، و بررسی میکند. |
| مسیر API پلتفرم OpenAI برای سطوح غیرعاملی | openai/* بهعلاوهٔ احراز هویت کلید API |
برای APIهای مستقیم OpenAI مانند تصویر، embedding، گفتار، و realtime استفاده میشود. |
این سطوح عمدا مستقل هستند. فعال کردن Plugin codex قابلیتهای بومی سرور
برنامه را در دسترس میگذارد؛ openclaw doctor --fix مالک تعمیر مسیر قدیمی
openai-codex/* و پاکسازی پینهای جلسهٔ کهنه است. انتخاب openai/* برای
مدل عامل اکنون یعنی «این را از طریق Codex اجرا کن»، مگر اینکه یک سطح API
غیرعاملی OpenAI در حال استفاده باشد.
چیدمان رایج اشتراک ChatGPT/Codex از OAuth مربوط به Codex برای احراز هویت
استفاده میکند، اما ارجاع مدل را بهصورت openai/* نگه میدارد و زمان اجرای
codex را انتخاب میکند:
{
agents: {
defaults: {
model: "openai/gpt-5.5",
},
},
}
این یعنی OpenClaw یک ارجاع مدل OpenAI را انتخاب میکند، سپس از زمان اجرای سرور برنامهٔ Codex میخواهد نوبت عامل جاسازیشده را اجرا کند. معنایش این نیست که «از صورتحساب API استفاده کن»، و معنایش این نیست که کانال، کاتالوگ ارائهدهندهٔ مدل، یا محل ذخیرهٔ جلسهٔ OpenClaw به Codex تبدیل میشود.
وقتی Plugin همراهشدهٔ codex فعال است، کنترل Codex با زبان طبیعی باید بهجای
ACP از سطح فرمان بومی /codex استفاده کند (/codex bind, /codex threads,
/codex resume, /codex steer, /codex stop). برای Codex فقط وقتی از ACP
استفاده کنید که کاربر صراحتا ACP/acpx را بخواهد یا در حال آزمودن مسیر آداپتور
ACP باشد. Claude Code، Gemini CLI، OpenCode، Cursor، و هارنسهای خارجی مشابه
همچنان از ACP استفاده میکنند.
این درخت تصمیم روبهروی عامل است:
- اگر کاربر اتصال/کنترل/رشته/ازسرگیری/هدایت/توقف Codex را بخواهد، وقتی
Plugin همراهشدهٔ
codexفعال است از سطح فرمان بومی/codexاستفاده کنید. - اگر کاربر Codex را بهعنوان زمان اجرای جاسازیشده بخواهد یا تجربهٔ معمول
عامل Codex متکی بر اشتراک را بخواهد، از
openai/<model>استفاده کنید. - اگر کاربر صراحتا PI را برای یک مدل OpenAI انتخاب کند، ارجاع مدل را به
شکل
openai/<model>نگه دارید وagentRuntime.id: "pi"را تنظیم کنید. یک پروفایل احراز هویت انتخابشدهٔopenai-codexبهصورت داخلی از طریق انتقال قدیمی احراز هویت Codex مربوط به PI مسیریابی میشود. - اگر پیکربندی قدیمی هنوز شامل ارجاعهای مدل
openai-codex/*است، آن را باopenclaw doctor --fixبهopenai/<model>تعمیر کنید. - اگر کاربر صراحتا ACP، acpx، یا آداپتور ACP مربوط به Codex را
بگوید، از ACP با
runtime: "acp"وagentId: "codex"استفاده کنید. - اگر درخواست برای Claude Code، Gemini CLI، OpenCode، Cursor، Droid، یا هارنس خارجی دیگری است، از ACP/acpx استفاده کنید، نه زمان اجرای بومی زیرفرمان عامل.
| منظورتان این است... | از این استفاده کنید... |
|---|---|
| کنترل چت/رشتهٔ سرور برنامهٔ Codex | /codex ... از Plugin همراهشدهٔ codex |
| زمان اجرای عامل جاسازیشدهٔ سرور برنامهٔ Codex | ارجاعهای مدل عامل openai/* |
| OAuth مربوط به OpenAI Codex | پروفایلهای احراز هویت openai-codex |
| Claude Code یا هارنس خارجی دیگر | ACP/acpx |
برای جداسازی پیشوند خانوادهٔ OpenAI، OpenAI و ارائهدهندههای مدل را ببینید. برای قرارداد پشتیبانی زمان اجرای Codex، هارنس Codex را ببینید.
مالکیت زمان اجرا
زمانهای اجرای مختلف، مقدار متفاوتی از حلقه را در مالکیت دارند.
| سطح | PI جاسازیشدهٔ OpenClaw | سرور برنامهٔ Codex |
|---|---|---|
| مالک حلقهٔ مدل | OpenClaw از طریق اجراکنندهٔ جاسازیشدهٔ PI | سرور برنامهٔ Codex |
| وضعیت canonical رشته | رونوشت OpenClaw | رشتهٔ Codex، بهعلاوهٔ آینهٔ رونوشت OpenClaw |
| ابزارهای پویا OpenClaw | حلقهٔ ابزار بومی OpenClaw | از طریق آداپتور Codex پل زده میشود |
| ابزارهای بومی پوسته و فایل | مسیر PI/OpenClaw | ابزارهای بومی Codex، از طریق hookهای بومی در جاهایی که پشتیبانی میشود پل زده میشود |
| موتور زمینه | مونتاژ زمینهٔ بومی OpenClaw | OpenClaw زمینهٔ مونتاژشدهٔ پروژهها را به نوبت Codex میفرستد |
| Compaction | OpenClaw یا موتور زمینهٔ انتخابشده | Compaction بومی Codex، همراه با اعلانهای OpenClaw و نگهداری آینه |
| تحویل کانالی | OpenClaw | OpenClaw |
این جداسازی مالکیت، قاعدهٔ اصلی طراحی است:
- اگر OpenClaw مالک سطح باشد، OpenClaw میتواند رفتار معمول hook مربوط به Plugin را فراهم کند.
- اگر زمان اجرای بومی مالک سطح باشد، OpenClaw به رویدادهای زمان اجرا یا hookهای بومی نیاز دارد.
- اگر زمان اجرای بومی مالک وضعیت canonical رشته باشد، OpenClaw باید زمینه را آینه و تصویر کند، نه اینکه بخشهای داخلی پشتیبانینشده را بازنویسی کند.
انتخاب زمان اجرا
OpenClaw پس از حل ارائهدهنده و مدل، یک زمان اجرای جاسازیشده را انتخاب میکند:
- زمان اجرای ثبتشدهٔ یک جلسه برنده است. تغییرات پیکربندی یک رونوشت موجود را بهصورت فوری به سیستم رشتهٔ بومی دیگری جابهجا نمیکند.
OPENCLAW_AGENT_RUNTIME=<id>آن زمان اجرا را برای جلسههای جدید یا بازنشانیشده اجباری میکند.agents.defaults.agentRuntime.idیاagents.list[].agentRuntime.idمیتواندauto،pi، یک شناسهٔ هارنس جاسازیشدهٔ ثبتشده مانندcodex، یا یک نام مستعار بکاند CLI پشتیبانیشده مانندclaude-cliرا تنظیم کند.- در حالت
auto، زمانهای اجرای Plugin ثبتشده میتوانند جفتهای ارائهدهنده/مدل پشتیبانیشده را claim کنند. - اگر هیچ زمان اجرایی در حالت
autoیک نوبت را claim نکند، OpenClaw از PI بهعنوان زمان اجرای سازگاری استفاده میکند. وقتی اجرا باید سختگیرانه باشد از شناسهٔ زمان اجرای صریح استفاده کنید.
زمانهای اجرای Plugin صریح بهصورت بسته شکست میخورند. برای مثال،
agentRuntime.id: "codex" یعنی Codex یا یک خطای روشن انتخاب/زمان اجرا؛ هرگز
بیسروصدا دوباره به PI مسیریابی نمیشود.
نامهای مستعار بکاند CLI با شناسههای هارنس جاسازیشده فرق دارند. شکل ترجیحی Claude CLI این است:
{
agents: {
defaults: {
model: "anthropic/claude-opus-4-7",
agentRuntime: { id: "claude-cli" },
},
},
}
ارجاعهای قدیمی مانند claude-cli/claude-opus-4-7 برای سازگاری همچنان
پشتیبانی میشوند، اما پیکربندی جدید باید ارائهدهنده/مدل را canonical نگه
دارد و بکاند اجرا را در agentRuntime.id قرار دهد.
حالت auto برای بیشتر ارائهدهندهها عمدا محافظهکار است. مدلهای عامل OpenAI
استثنا هستند: زمان اجرای تنظیمنشده و auto هر دو به هارنس Codex حل میشوند.
پیکربندی صریح زمان اجرای PI برای نوبتهای عامل openai/* همچنان یک مسیر
سازگاری opt-in است؛ وقتی با یک پروفایل احراز هویت انتخابشدهٔ openai-codex
جفت شود، OpenClaw در داخل PI را از طریق انتقال قدیمی احراز هویت Codex
مسیریابی میکند، در حالی که ارجاع مدل عمومی را بهصورت openai/* نگه میدارد.
پینهای جلسهٔ OpenAI PI کهنه بدون پیکربندی صریح دوباره به Codex تعمیر میشوند.
اگر openclaw doctor هشدار دهد که Plugin codex فعال است در حالی که
openai-codex/* همچنان در پیکربندی باقی مانده، آن را وضعیت مسیر قدیمی تلقی
کنید. openclaw doctor --fix را اجرا کنید تا آن را با زمان اجرای Codex به
openai/* بازنویسی کند.
قرارداد سازگاری
وقتی یک زمان اجرا PI نیست، باید مستند کند که از کدام سطوح OpenClaw پشتیبانی میکند. برای مستندات زمان اجرا از این شکل استفاده کنید:
| پرسش | چرا مهم است |
|---|---|
| مالک حلقهٔ مدل کیست؟ | تعیین میکند retryها، ادامهٔ ابزار، و تصمیمهای پاسخ نهایی کجا انجام میشوند. |
| مالک تاریخچهٔ canonical رشته کیست؟ | تعیین میکند آیا OpenClaw میتواند تاریخچه را ویرایش کند یا فقط آن را آینه کند. |
| آیا ابزارهای پویا OpenClaw کار میکنند؟ | پیامرسانی، جلسهها، cron، و ابزارهای تحت مالکیت OpenClaw به این متکی هستند. |
| آیا hookهای ابزار پویا کار میکنند؟ | Pluginها انتظار before_tool_call، after_tool_call، و middleware پیرامون ابزارهای تحت مالکیت OpenClaw را دارند. |
| آیا hookهای ابزار بومی کار میکنند؟ | پوسته، patch، و ابزارهای تحت مالکیت زمان اجرا برای سیاست و مشاهده به پشتیبانی hook بومی نیاز دارند. |
| آیا چرخهٔ عمر موتور زمینه اجرا میشود؟ | Pluginهای حافظه و زمینه به چرخهٔ عمر assemble، ingest، after-turn، و compaction وابستهاند. |
| چه دادهٔ compaction افشا میشود؟ | برخی Pluginها فقط به اعلانها نیاز دارند، در حالی که برخی دیگر به metadata مربوط به نگهداشتهشده/حذفشده نیاز دارند. |
| چه چیزی عمدا پشتیبانی نمیشود؟ | کاربران نباید در جایی که زمان اجرای بومی وضعیت بیشتری را مالک است، معادل بودن با PI را فرض کنند. |
قرارداد پشتیبانی زمان اجرای Codex در هارنس Codex مستند شده است.
برچسبهای وضعیت
خروجی وضعیت ممکن است هر دو برچسب Execution و Runtime را نشان دهد. آنها را
بهعنوان عیبیابی بخوانید، نه بهعنوان نام ارائهدهنده.
- یک ارجاع مدل مانند
openai/gpt-5.5ارائهدهنده/مدل انتخابشده را به شما میگوید. - یک شناسه زمان اجرا مانند
codexبه شما میگوید کدام حلقه در حال اجرای نوبت است. - یک برچسب کانال مانند Telegram یا Discord به شما میگوید گفتگو کجا در جریان است.
اگر یک نشست پس از تغییر پیکربندی زمان اجرا همچنان PI را نشان میدهد، یک نشست جدید
با /new شروع کنید یا نشست فعلی را با /reset پاک کنید. نشستهای موجود زمان اجرای
ثبتشده خود را نگه میدارند تا یک رونوشت از طریق دو سامانه نشست بومی ناسازگار بازپخش نشود.