Plugins

Xây dựng các Plugin phần phụ trợ CLI

Plugin backend CLI cho phép OpenClaw gọi một CLI AI cục bộ làm backend suy luận văn bản. Backend này xuất hiện như một tiền tố nhà cung cấp trong tham chiếu mô hình:

acme-cli/acme-large

Dùng backend CLI khi tích hợp thượng nguồn đã được cung cấp dưới dạng lệnh cục bộ, khi CLI sở hữu trạng thái đăng nhập cục bộ, hoặc khi CLI là phương án dự phòng hữu ích nếu các nhà cung cấp API không khả dụng.

Plugin sở hữu những gì

Một Plugin backend CLI có ba hợp đồng:

Hợp đồng Tệp Mục đích
Điểm vào gói package.json Trỏ OpenClaw tới mô-đun runtime của Plugin
Quyền sở hữu manifest openclaw.plugin.json Khai báo id backend trước khi runtime tải
Đăng ký runtime index.ts Gọi api.registerCliBackend(...) với mặc định lệnh

Manifest là siêu dữ liệu khám phá. Nó không thực thi CLI và không đăng ký hành vi runtime. Hành vi runtime bắt đầu khi điểm vào Plugin gọi api.registerCliBackend(...).

Plugin backend tối thiểu

  • Tạo siêu dữ liệu gói

    {
      "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"
      }
    }
    

    Các gói đã phát hành phải phân phối tệp runtime JavaScript đã build. Nếu điểm vào nguồn của bạn là ./src/index.ts, hãy thêm openclaw.runtimeExtensions trỏ tới tệp JavaScript ngang hàng đã build. Xem Điểm vào.

  • Khai báo quyền sở hữu backend

    {
      "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 là danh sách quyền sở hữu runtime. Nó cho phép OpenClaw tự động tải Plugin khi cấu hình hoặc lựa chọn mô hình nhắc tới acme-cli/....

    setup.cliBackends là bề mặt thiết lập ưu tiên descriptor. Thêm nó khi khám phá mô hình, onboarding, hoặc trạng thái cần nhận diện backend mà không tải runtime của Plugin. Chỉ dùng requiresRuntime: false khi các descriptor tĩnh đó đã đủ cho thiết lập.

  • Đăng ký backend

    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());
      },
    });
    

    Id backend phải khớp với mục cliBackends trong manifest. config đã đăng ký chỉ là mặc định; cấu hình người dùng dưới agents.defaults.cliBackends.acme-cli sẽ được hợp nhất đè lên nó ở runtime.

  • Hình dạng cấu hình

    CliBackendConfig mô tả cách OpenClaw nên khởi chạy và phân tích CLI:

    Trường Cách dùng
    command Tên binary hoặc đường dẫn lệnh tuyệt đối
    args argv cơ sở cho lượt chạy mới
    resumeArgs argv thay thế cho phiên được tiếp tục; hỗ trợ {sessionId}
    output / resumeOutput Bộ phân tích: json, jsonl, hoặc text
    input Truyền prompt: arg hoặc stdin
    modelArg Cờ dùng trước id mô hình
    modelAliases Ánh xạ id mô hình OpenClaw sang id gốc của CLI
    sessionArg / sessionArgs Cách truyền id phiên
    sessionMode always, existing, hoặc none
    sessionIdFields Các trường JSON OpenClaw đọc từ đầu ra CLI
    systemPromptArg / systemPromptFileArg Truyền system prompt
    systemPromptWhen first, always, hoặc never
    imageArg / imageMode Hỗ trợ đường dẫn ảnh
    serialize Giữ thứ tự các lượt chạy cùng backend
    reliability.watchdog Tinh chỉnh thời gian chờ khi không có đầu ra

    Ưu tiên cấu hình tĩnh nhỏ nhất khớp với CLI. Chỉ thêm callback của Plugin cho hành vi thật sự thuộc về backend.

    Hook backend nâng cao

    CliBackendPlugin cũng có thể định nghĩa:

    Hook Cách dùng
    normalizeConfig(config, context) Viết lại cấu hình người dùng cũ sau khi hợp nhất
    resolveExecutionArgs(ctx) Thêm cờ theo phạm vi yêu cầu, chẳng hạn như mức effort suy nghĩ
    prepareExecution(ctx) Tạo cầu nối xác thực hoặc cấu hình tạm thời trước khi khởi chạy
    transformSystemPrompt(ctx) Áp dụng biến đổi system prompt cuối cùng dành riêng cho CLI
    textTransforms Thay thế prompt/đầu ra hai chiều
    defaultAuthProfileId Ưu tiên một hồ sơ xác thực OpenClaw cụ thể
    authEpochMode Quyết định cách thay đổi xác thực làm mất hiệu lực phiên CLI đã lưu
    nativeToolMode Khai báo liệu CLI có công cụ gốc luôn bật hay không
    bundleMcp / bundleMcpMode Chọn tham gia cầu nối công cụ MCP loopback của OpenClaw

    Giữ các hook này thuộc sở hữu của nhà cung cấp. Không thêm nhánh dành riêng cho CLI vào core khi hook backend có thể biểu đạt hành vi đó.

    Cầu nối công cụ MCP

    Backend CLI mặc định không nhận công cụ OpenClaw. Nếu CLI có thể tiêu thụ cấu hình MCP, hãy chọn tham gia rõ ràng:

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

    Các chế độ cầu nối được hỗ trợ là:

    Chế độ Cách dùng
    claude-config-file CLI chấp nhận tệp cấu hình MCP
    codex-config-overrides CLI chấp nhận ghi đè cấu hình trên argv
    gemini-system-settings CLI đọc thiết lập MCP từ thư mục thiết lập hệ thống của chúng

    Chỉ bật cầu nối khi CLI thật sự có thể tiêu thụ nó. Nếu CLI có lớp công cụ tích hợp riêng không thể tắt, hãy đặt nativeToolMode: "always-on" để OpenClaw có thể fail closed khi bên gọi yêu cầu không có công cụ gốc.

    Cấu hình người dùng

    Người dùng có thể ghi đè bất kỳ mặc định backend nào:

    {
      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"],
          },
        },
      },
    }
    

    Ghi tài liệu về ghi đè tối thiểu mà người dùng nhiều khả năng cần. Thường đó chỉ là command khi binary nằm ngoài PATH.

    Xác minh

    Đối với Plugin đi kèm, hãy thêm một kiểm thử tập trung quanh builder và đăng ký thiết lập, rồi chạy lane kiểm thử mục tiêu của Plugin:

    pnpm test extensions/acme-cli
    

    Đối với Plugin cục bộ hoặc đã cài đặt, hãy xác minh khám phá và một lượt chạy mô hình thật:

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

    Nếu backend hỗ trợ ảnh hoặc MCP, hãy thêm smoke live chứng minh các đường dẫn đó với CLI thật. Không dựa vào kiểm tra tĩnh cho hành vi prompt, ảnh, MCP, hoặc tiếp tục phiên.

    Danh sách kiểm tra

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s package.jsonopenclaw.extensions và các điểm vào runtime đã build cho gói phát hành OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s openclaw.plugin.json khai báo cliBackendsactivation.onStartup có chủ đích OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s setup.cliBackends có mặt khi thiết lập/khám phá mô hình cần thấy backend ở trạng thái lạnh OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s api.registerCliBackend(...) dùng cùng id backend với manifest OPENCLAW_DOCS_MARKER:calloutClose:

    OPENCLAW_DOCS_MARKER:calloutOpen:Q2hlY2s Ghi đè người dùng dưới agents.defaults.cliBackends.<id> vẫn thắng OPENCLAW_DOCS_MARKER:calloutClose: