Plugins

ساخت Pluginهای بک‌اند CLI

Pluginهای بک‌اند CLI به OpenClaw اجازه می‌دهند یک CLI هوش مصنوعی محلی را به‌عنوان بک‌اند استنتاج متن فراخوانی کند. بک‌اند به‌صورت یک پیشوند ارائه‌دهنده در ارجاع‌های مدل ظاهر می‌شود:

acme-cli/acme-large

از بک‌اند CLI زمانی استفاده کنید که یکپارچه‌سازی بالادستی از قبل به‌صورت یک فرمان محلی ارائه شده باشد، زمانی که CLI مالک وضعیت ورود محلی است، یا زمانی که CLI در صورت در دسترس نبودن ارائه‌دهنده‌های API یک مسیر جایگزین مفید است.

چیزهایی که Plugin مالک آن‌هاست

یک Plugin بک‌اند CLI سه قرارداد دارد:

قرارداد فایل هدف
ورودی بسته package.json OpenClaw را به ماژول runtime مربوط به Plugin هدایت می‌کند
مالکیت manifest openclaw.plugin.json شناسه بک‌اند را پیش از بارگذاری runtime اعلام می‌کند
ثبت runtime index.ts api.registerCliBackend(...) را با پیش‌فرض‌های فرمان فراخوانی می‌کند

manifest فراداده کشف است. CLI را اجرا نمی‌کند و رفتار runtime را ثبت نمی‌کند. رفتار runtime زمانی شروع می‌شود که ورودی Plugin، api.registerCliBackend(...) را فراخوانی کند.

Plugin حداقلی بک‌اند

  • ایجاد فراداده بسته

    {
      "name": "@acme/openclaw-acme-cli",
      "version": "1.0.0",
      "type": "module",
      "openclaw": {
        "extensions": ["./index.ts"],
        "compat": {
          "pluginApi": ">=2026.3.24-beta.2",
          "minGatewayVersion": "2026.3.24-beta.2"
        },
        "build": {
          "openclawVersion": "2026.3.24-beta.2",
          "pluginSdkVersion": "2026.3.24-beta.2"
        }
      },
      "dependencies": {
        "openclaw": "^2026.3.24"
      },
      "devDependencies": {
        "typescript": "^5.9.0"
      }
    }
    

    بسته‌های منتشرشده باید فایل‌های runtime جاوااسکریپت ساخته‌شده را همراه خود داشته باشند. اگر ورودی منبع شما ./src/index.ts است، openclaw.runtimeExtensions را اضافه کنید که به همتای جاوااسکریپت ساخته‌شده اشاره کند. نقاط ورودی را ببینید.

  • اعلام مالکیت بک‌اند

    {
      "id": "acme-cli",
      "name": "Acme CLI",
      "description": "Run Acme's local AI CLI through OpenClaw",
      "cliBackends": ["acme-cli"],
      "setup": {
        "cliBackends": ["acme-cli"],
        "requiresRuntime": false
      },
      "activation": {
        "onStartup": false
      },
      "configSchema": {
        "type": "object",
        "additionalProperties": false
      }
    }
    

    cliBackends فهرست مالکیت runtime است. این گزینه به OpenClaw اجازه می‌دهد وقتی پیکربندی یا انتخاب مدل به acme-cli/... اشاره می‌کند، Plugin را به‌صورت خودکار بارگذاری کند.

    setup.cliBackends سطح راه‌اندازی descriptor-first است. وقتی کشف مدل، onboarding یا وضعیت باید بک‌اند را بدون بارگذاری runtime مربوط به Plugin بشناسد، آن را اضافه کنید. فقط زمانی از requiresRuntime: false استفاده کنید که همان توصیفگرهای ایستا برای راه‌اندازی کافی باشند.

  • ثبت بک‌اند

    import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
    import {
      CLI_FRESH_WATCHDOG_DEFAULTS,
      CLI_RESUME_WATCHDOG_DEFAULTS,
      type CliBackendPlugin,
    } from "openclaw/plugin-sdk/cli-backend";
    
    function buildAcmeCliBackend(): CliBackendPlugin {
      return {
        id: "acme-cli",
        liveTest: {
          defaultModelRef: "acme-cli/acme-large",
          defaultImageProbe: false,
          defaultMcpProbe: false,
          docker: {
            npmPackage: "@acme/acme-cli",
            binaryName: "acme",
          },
        },
        config: {
          command: "acme",
          args: ["chat", "--json"],
          output: "json",
          input: "stdin",
          modelArg: "--model",
          sessionArg: "--session",
          sessionMode: "existing",
          sessionIdFields: ["session_id", "conversation_id"],
          systemPromptFileArg: "--system-file",
          systemPromptWhen: "first",
          imageArg: "--image",
          imageMode: "repeat",
          reliability: {
            watchdog: {
              fresh: { ...CLI_FRESH_WATCHDOG_DEFAULTS },
              resume: { ...CLI_RESUME_WATCHDOG_DEFAULTS },
            },
          },
          serialize: true,
        },
      };
    }
    
    export default definePluginEntry({
      id: "acme-cli",
      name: "Acme CLI",
      description: "Run Acme's local AI CLI through OpenClaw",
      register(api) {
        api.registerCliBackend(buildAcmeCliBackend());
      },
    });
    

    شناسه بک‌اند باید با ورودی cliBackends در manifest مطابقت داشته باشد. config ثبت‌شده فقط پیش‌فرض است؛ پیکربندی کاربر زیر agents.defaults.cliBackends.acme-cli در runtime روی آن ادغام می‌شود.

  • شکل پیکربندی

    CliBackendConfig توضیح می‌دهد OpenClaw چگونه باید CLI را اجرا و خروجی آن را parse کند:

    فیلد کاربرد
    command نام باینری یا مسیر مطلق فرمان
    args argv پایه برای اجرای تازه
    resumeArgs argv جایگزین برای نشست‌های ازسرگرفته‌شده؛ از {sessionId} پشتیبانی می‌کند
    output / resumeOutput parser: json، jsonl یا text
    input انتقال prompt: arg یا stdin
    modelArg flag استفاده‌شده پیش از شناسه مدل
    modelAliases نگاشت شناسه‌های مدل OpenClaw به شناسه‌های بومی CLI
    sessionArg / sessionArgs نحوه ارسال شناسه نشست
    sessionMode always، existing یا none
    sessionIdFields فیلدهای JSON که OpenClaw از خروجی CLI می‌خواند
    systemPromptArg / systemPromptFileArg انتقال system prompt
    systemPromptWhen first، always یا never
    imageArg / imageMode پشتیبانی از مسیر تصویر
    serialize اجراهای مربوط به همان بک‌اند را مرتب نگه می‌دارد
    reliability.watchdog تنظیم مهلت زمانی نبود خروجی

    کوچک‌ترین پیکربندی ایستایی را ترجیح دهید که با CLI مطابقت دارد. callbackهای Plugin را فقط برای رفتاری اضافه کنید که واقعاً به بک‌اند تعلق دارد.

    hookهای پیشرفته بک‌اند

    CliBackendPlugin همچنین می‌تواند موارد زیر را تعریف کند:

    hook کاربرد
    normalizeConfig(config, context) بازنویسی پیکربندی قدیمی کاربر پس از ادغام
    resolveExecutionArgs(ctx) افزودن flagهای محدود به درخواست، مانند تلاش تفکر
    prepareExecution(ctx) ایجاد پل‌های موقت auth یا پیکربندی پیش از اجرا
    transformSystemPrompt(ctx) اعمال تبدیل نهایی system prompt ویژه CLI
    textTransforms جایگزینی‌های دوسویه prompt/خروجی
    defaultAuthProfileId ترجیح دادن یک پروفایل auth مشخص در OpenClaw
    authEpochMode تعیین اینکه تغییرات auth چگونه نشست‌های ذخیره‌شده CLI را نامعتبر کنند
    nativeToolMode اعلام اینکه آیا CLI ابزارهای بومی همیشه‌فعال دارد یا نه
    bundleMcp / bundleMcpMode انتخاب پل ابزار MCP از نوع loopback در OpenClaw

    این hookها را در مالکیت ارائه‌دهنده نگه دارید. وقتی یک hook بک‌اند می‌تواند رفتار را بیان کند، شاخه‌های ویژه CLI را به core اضافه نکنید.

    پل ابزار MCP

    بک‌اندهای CLI به‌صورت پیش‌فرض ابزارهای OpenClaw را دریافت نمی‌کنند. اگر CLI بتواند یک پیکربندی MCP را مصرف کند، صریحاً آن را فعال کنید:

    return {
      id: "acme-cli",
      bundleMcp: true,
      bundleMcpMode: "codex-config-overrides",
      config: {
        command: "acme",
        args: ["chat", "--json"],
        output: "json",
      },
    };
    

    حالت‌های پل پشتیبانی‌شده عبارت‌اند از:

    حالت کاربرد
    claude-config-file CLIهایی که یک فایل پیکربندی MCP را می‌پذیرند
    codex-config-overrides CLIهایی که overrideهای پیکربندی را روی argv می‌پذیرند
    gemini-system-settings CLIهایی که تنظیمات MCP را از دایرکتوری تنظیمات سیستم خود می‌خوانند

    پل را فقط زمانی فعال کنید که CLI واقعاً بتواند آن را مصرف کند. اگر CLI لایه ابزار داخلی خودش را دارد که نمی‌توان آن را غیرفعال کرد، nativeToolMode: "always-on" را تنظیم کنید تا وقتی فراخواننده ابزارهای بومی نمی‌خواهد، OpenClaw بتواند به‌صورت بسته شکست بخورد.

    پیکربندی کاربر

    کاربران می‌توانند هر پیش‌فرض بک‌اند را override کنند:

    {
      agents: {
        defaults: {
          cliBackends: {
            "acme-cli": {
              command: "/opt/acme/bin/acme",
              args: ["chat", "--json", "--profile", "work"],
              modelAliases: {
                large: "acme-large-2026",
              },
            },
          },
          model: {
            primary: "openai/gpt-5.5",
            fallbacks: ["acme-cli/large"],
          },
        },
      },
    }
    

    حداقل overrideای را مستند کنید که کاربران احتمالاً به آن نیاز دارند. معمولاً وقتی باینری خارج از PATH است، این فقط command خواهد بود.

    راستی‌آزمایی

    برای Pluginهای همراه، یک تست متمرکز پیرامون builder و ثبت setup اضافه کنید، سپس lane تست هدفمند Plugin را اجرا کنید:

    pnpm test extensions/acme-cli
    

    برای Pluginهای محلی یا نصب‌شده، کشف و یک اجرای واقعی مدل را راستی‌آزمایی کنید:

    openclaw plugins inspect acme-cli --runtime --json
    openclaw agent --message "reply exactly: backend ok" --model acme-cli/acme-large
    

    اگر بک‌اند از تصاویر یا MCP پشتیبانی می‌کند، یک smoke زنده اضافه کنید که این مسیرها را با CLI واقعی اثبات کند. برای رفتار prompt، تصویر، MCP یا ازسرگیری نشست به بازرسی ایستا تکیه نکنید.

    چک‌لیست

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s package.json برای بسته‌های منتشرشده openclaw.extensions و ورودی‌های runtime ساخته‌شده دارد OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s openclaw.plugin.json، cliBackends و activation.onStartup عمدی را اعلام می‌کند OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s وقتی setup/کشف مدل باید بک‌اند را در حالت سرد ببیند، setup.cliBackends حاضر است OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s api.registerCliBackend(...) از همان شناسه بک‌اند در manifest استفاده می‌کند OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s overrideهای کاربر زیر agents.defaults.cliBackends.<id> همچنان اولویت دارند OPENCLAW_DOCS_MARKER:calloutClose: