Plugin agent tools

OpenClaw plugin은 Agent 실행 중 LLM에 노출되는 Agent 도구(JSON 스키마 함수)를 등록할 수 있습니다. 도구는 필수(항상 사용 가능) 또는 선택 사항(선택적)일 수 있습니다.

Agent 도구는 메인 설정의 tools 아래 또는 Agent별로 agents.list[].tools 아래에서 구성됩니다. 허용 목록/거부 목록 정책은 Agent가 호출할 수 있는 도구를 제어합니다.

기본 도구

import { Type } from "@sinclair/typebox";

export default function (api) {
  api.registerTool({
    name: "my_tool",
    description: "Do a thing",
    parameters: Type.Object({
      input: Type.String(),
    }),
    async execute(_id, params) {
      return { content: [{ type: "text", text: params.input }] };
    },
  });
}

선택적 도구 (선택 가입)

선택적 도구는 절대 자동 활성화되지 않습니다. 사용자는 Agent 허용 목록에 추가해야 합니다.

export default function (api) {
  api.registerTool(
    {
      name: "workflow_tool",
      description: "Run a local workflow",
      parameters: {
        type: "object",
        properties: {
          pipeline: { type: "string" },
        },
        required: ["pipeline"],
      },
      async execute(_id, params) {
        return { content: [{ type: "text", text: params.pipeline }] };
      },
    },
    { optional: true },
  );
}

agents.list[].tools.allow(또는 전역 tools.allow)에서 선택적 도구를 활성화합니다:

{
  agents: {
    list: [
      {
        id: "main",
        tools: {
          allow: [
            "workflow_tool",  // 특정 도구 이름
            "workflow",       // plugin ID (해당 plugin의 모든 도구 활성화)
            "group:plugins"   // 모든 plugin 도구
          ]
        }
      }
    ]
  }
}

도구 가용성에 영향을 미치는 기타 설정 옵션:

  • Plugin 도구만 지정하는 허용 목록은 plugin 선택 가입으로 처리됩니다; 코어 도구는 허용 목록에 코어 도구 또는 그룹도 포함하지 않는 한 활성화된 상태로 유지됩니다.
  • tools.profile / agents.list[].tools.profile (기본 허용 목록)
  • tools.byProvider / agents.list[].tools.byProvider (provider별 허용/거부)
  • tools.sandbox.tools.* (샌드박스 모드에서의 샌드박스 도구 정책)

규칙 + 팁

  • 도구 이름은 코어 도구 이름과 충돌하지 않아야 합니다; 충돌하는 도구는 건너뜁니다.
  • 허용 목록에 사용되는 Plugin ID는 코어 도구 이름과 충돌하지 않아야 합니다.
  • 부작용을 트리거하거나 추가 바이너리/자격 증명이 필요한 도구에는 optional: true를 선호합니다.