核心发现
在 OpenClaw 中,Skills 和 HTTP/API 工具定义是两个独立的机制:
- Skills(基于文档的方式)
Skills 是 Markdown 文件(skills/*/SKILL.md),它们不直接定义 HTTP 工具。
模型读取 skill 文档后,使用 exec 工具运行 curl 命令。HTTP 调用是由 exec 工具完成的,而不是由专用的 HTTP 工具定义完成的。
- Plugin Tools(编程式 HTTP 工具)
Extensions(如 feishu)通过插件系统注册实际可执行的工具:
extensions/feishu/src/doc-schema.ts → 定义工具 schema
extensions/feishu/src/docx.ts → 实现 HTTP 调用逻辑
extensions/feishu/index.ts → 通过 api.registerTool() 注册
工具转换管道
Plugin Tool 注册流程:
─────────────────────
extensions/*/index.ts → api.registerTool() → Registry.tools[]
↓
resolvePluginTools() → factory(context) → AgentTool[]
↓
toToolDefinitions() → ToolDefinition[] → Agent 执行
关键文件
┌────────────────────────┬──────────────────────────────────────────┐
│ 用途 │ 文件路径 │
├────────────────────────┼──────────────────────────────────────────┤
│ Skill 加载 │ src/agents/skills/workspace.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Plugin tool 注册 │ src/plugins/registry.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Plugin tool 解析 │ src/plugins/tools.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ Tool definition 适配器 │ src/agents/pi-tool-definition-adapter.ts │
├────────────────────────┼──────────────────────────────────────────┤
│ HTTP tool 示例 │ extensions/feishu/src/doc-schema.ts │
└────────────────────────┴──────────────────────────────────────────┘
结论
Skills 不直接定义 HTTP 工具。它们是文档文件,指导模型如何使用现有工具。
Plugin Tools 才是定义可执行 HTTP 工具的机制。Extension 作者需要编写 TypeScript 代码来定义 schema、实现逻辑,然后注册工具