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를 선호합니다.