Skip to Content

24a - 插件架构

本文是《AI Agent 实战手册》第 24 章第 1 节。 上一节:23d-安全与成本分析 | 下一节:24b-自定义Agent开发教程

概述

OpenClaw 的核心竞争力之一在于其高度可扩展的插件体系。平台通过 Skills(技能)和 Plugins(插件)两套互补的扩展机制,让开发者能够为 AI Agent 添加任意能力——从简单的自动化脚本到完整的消息平台集成。本节深入解析 OpenClaw 的插件架构,包括 Skills 与 Plugins 的生命周期、Hook 系统、事件模型和各类扩展点,帮助你理解如何在这个拥有 180K+ GitHub Stars 的开源平台上构建自己的扩展。


1. OpenClaw 插件/Skills 架构总览

架构图示

┌─────────────────────────────────────────────────────────────────┐ │ OpenClaw 整体架构 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ WhatsApp │ │ Telegram │ │ Discord │ │ 自定义 │ │ │ │ Channel │ │ Channel │ │ Channel │ │ Channel │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ └──────────────┴──────┬───────┴──────────────┘ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Gateway 网关层 │ │ │ │ ┌─────────┐ ┌──────────┐ ┌─────────┐ ┌──────────┐ │ │ │ │ │ 路由 │ │ 会话管理 │ │ 事件队列 │ │ Webhook │ │ │ │ │ └─────────┘ └──────────┘ └─────────┘ └──────────┘ │ │ │ └──────────────────────┬───────────────────────────────────┘ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Agent 执行层 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 模型选择 │ │ 工具调用 │ │ 安全策略 │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └──────────────────────┬───────────────────────────────────┘ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 扩展层(Skills + Plugins) │ │ │ │ │ │ │ │ Skills(Markdown 驱动) Plugins(代码驱动) │ │ │ │ ┌────────────┐ ┌────────────┐ │ │ │ │ │ SKILL.md │ │ plugin.json│ │ │ │ │ │ + scripts/ │ │ + src/ │ │ │ │ │ └────────────┘ └────────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ▼ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ 存储层 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ MEMORY.md│ │ 向量搜索 │ │ 文件系统 │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘

核心组件

OpenClaw 的扩展生态建立在四个核心组件之上:

组件职责技术实现扩展方式
Gateway消息平台连接管理、事件路由Node.js 长连接服务添加 Channel 插件
Agent意图理解与推理执行LLM API 调用 + 工具循环切换模型、配置策略
Skills特定功能实现(Markdown 驱动)SKILL.md + 脚本安装/开发新 Skill
Plugins深度功能扩展(代码驱动)TypeScript 模块 + 清单文件安装/开发新 Plugin

Skills 与 Plugins 的区别

OpenClaw 提供两套互补的扩展机制,适用于不同复杂度的场景:

维度Skills(技能)Plugins(插件)
核心文件SKILL.md(Markdown + YAML frontmatter)openclaw.plugin.json + TypeScript 代码
复杂度低——纯 Markdown 指令即可高——需要编写 TypeScript 模块
运行方式注入 Agent 系统提示词,由 Agent 解释执行在 Gateway 进程内直接运行代码
能力范围工作流自动化、API 调用、脚本封装Channel 集成、RPC 方法、后台服务、CLI 命令
分发渠道ClawHub 市场 / 本地目录npm 包 / 本地目录
安全模型受 Agent 沙箱和工具策略约束以 Gateway 进程权限运行(需信任)
适用场景大多数自动化需求需要底层系统访问的深度集成

选择建议:90% 的扩展需求用 Skills 即可满足。只有当你需要添加新的消息平台、注册 Gateway RPC 方法或运行后台服务时,才需要开发 Plugin。


2. 插件生命周期

Skills 生命周期:安装 → 加载 → 过滤 → 注入 → 执行

┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 安装 │───▶│ 加载 │───▶│ 过滤 │───▶│ 注入 │───▶│ 执行 │ │ Install │ │ Load │ │ Filter │ │ Inject │ │ Execute │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ 放入 skills/ 解析 YAML 检查 OS、 压缩为 XML Agent 根据 目录或从 frontmatter bins、env 列表注入到 指令调用工具 ClawHub 安装 和 Markdown 依赖是否满足 系统提示词 执行任务

阶段详解:

  1. 安装(Install):将 Skill 目录放入以下三个位置之一(按优先级从高到低):

    • <workspace>/skills/ — 工作区级别,最高优先级
    • ~/.openclaw/skills/ — 用户级别,跨 Agent 共享
    • 内置 Skills — 随 OpenClaw 发行,最低优先级
  2. 加载(Load):Gateway 启动时扫描所有 Skills 目录,解析每个 SKILL.md 的 YAML frontmatter 元数据(name、description、requires 等)

  3. 过滤(Filter):运行时根据环境条件过滤不可用的 Skills:

    • 操作系统兼容性检查
    • 必需二进制文件(requires.bins)是否存在
    • 必需环境变量(requires.env)是否设置
  4. 注入(Inject):将通过过滤的 Skills 压缩为 XML 列表,注入 Agent 的系统提示词。每个 Skill 的 Token 开销约为:

    • 基础开销:195 字符(至少有 1 个 Skill 时)
    • 每个 Skill:约 97 字符 + name/description/location 长度
    • 粗略估算:每个 Skill 约消耗 24 tokens
  5. 执行(Execute):Agent 根据用户意图匹配合适的 Skill,按照 Markdown 指令调用工具(exec、read、write 等)完成任务

Plugins 生命周期:发现 → 加载 → 注册 → 运行 → 卸载

┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ 发现 │───▶│ 加载 │───▶│ 注册 │───▶│ 运行 │───▶│ 卸载 │ │ Discover │ │ Load │ │ Register │ │ Run │ │ Unload │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ 按优先级扫描 通过 jiti 注册 RPC、 在 Gateway Gateway 配置路径、 动态加载 HTTP 路由、 进程内运行 关闭时清理 工作区、全局 TypeScript 工具、CLI 后台服务 资源

Plugin 发现优先级(从高到低):

  1. plugins.load.paths — 配置文件中显式指定的路径
  2. <workspace>/.openclaw/extensions/ — 工作区扩展目录
  3. ~/.openclaw/extensions/ — 全局扩展目录
  4. 内置扩展 — 随 OpenClaw 发行(默认禁用,需显式启用)

同一 id 的插件如果在多个位置存在,高优先级的版本生效,低优先级的被忽略。

Plugin 能力注册

一个 Plugin 可以注册以下任意组合的能力:

// openclaw.plugin.json 清单文件 { "id": "my-plugin", "name": "My OpenClaw Plugin", "version": "1.0.0", "description": "自定义插件示例" } // Plugin 可注册的能力类型: // ✅ Gateway RPC 方法 // ✅ Gateway HTTP 处理器 // ✅ Agent 工具(tools) // ✅ CLI 命令 // ✅ 后台服务(Background services) // ✅ 配置验证 // ✅ Skills 目录(通过清单文件列出) // ✅ 自动回复命令(无需调用 AI)

Skill 文件结构详解

my-skill/ ├── SKILL.md # 核心文件:YAML frontmatter + Markdown 指令 ├── scripts/ # 可选:辅助脚本 │ ├── main.py │ └── utils.sh └── data/ # 可选:静态数据 └── templates.json

SKILL.md 完整结构示例

--- name: deploy-monitor description: 监控部署状态并在异常时发送告警 emoji: 🚀 metadata: openclaw: requires: bins: ["curl", "jq"] # 必需的命令行工具 env: ["DEPLOY_API_KEY"] # 必需的环境变量 config: ["monitor.url"] # 必需的配置项 primaryEnv: "DEPLOY_API_KEY" install: "pip install requests" # 首次安装时执行 --- # Deploy Monitor 当用户需要检查部署状态或配置部署监控时使用此 Skill。 ## 使用场景 - 检查最近一次部署的状态 - 配置部署失败告警 - 查看部署历史记录 ## 操作指令 1. 运行 `curl -H "Authorization: $DEPLOY_API_KEY" $MONITOR_URL/status` 2. 解析 JSON 响应,提取 status、timestamp、version 字段 3. 如果 status 不是 "healthy",立即通知用户 ## 示例对话 用户:"检查一下生产环境的部署状态" Agent:[执行 curl 命令获取状态] Agent:"生产环境当前状态:✅ 健康,版本 v2.3.1,上次部署于 10 分钟前"

3. Hook 系统与事件模型

OpenClaw 采用事件驱动架构,所有的 Agent 行为都由输入事件触发。Hook 系统允许开发者在特定生命周期节点拦截和修改 Agent 行为。

事件类型

OpenClaw 的输入系统遵循”5+1”模型——五种标准输入加一种 Agent 间通信:

┌─────────────────────────────────────────────────────────┐ │ OpenClaw 事件输入模型 │ │ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ 1. 消息 │ │ 2. 心跳 │ │ 3. Cron │ │ │ │ Messages │ │ Heartbeat │ │ 定时任务 │ │ │ │ │ │ (30min) │ │ (自定义) │ │ │ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │ │ │ │ │ │ │ ┌─────┴──────────────┴──────────────┴─────┐ │ │ │ 事件队列 (Queue) │ │ │ └─────┬──────────────┬──────────────┬─────┘ │ │ │ │ │ │ │ ┌─────┴─────┐ ┌─────┴─────┐ ┌────┴──────┐ │ │ │ 4. Hooks │ │ 5.Webhook │ │ +1. A2A │ │ │ │ 内部事件 │ │ 外部触发 │ │ Agent间 │ │ │ │ │ │ │ │ 消息 │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ 所有输入 → 队列 → Agent Turn → 动作 → 持久化 → 循环 │ └─────────────────────────────────────────────────────────┘
事件类型触发方式典型用途示例
Messages用户通过消息平台发送对话交互WhatsApp/Telegram/Discord 消息
Heartbeat定时器周期触发(默认 30 分钟)主动检查、状态汇报”检查是否有新邮件”
Cron按 cron 表达式调度定时任务每天 9:00 执行邮件分类
Hooks系统内部状态变化生命周期管理Gateway 启动、Agent 任务开始/结束
Webhook外部系统 HTTP 回调第三方集成GitHub PR 事件、Stripe 支付通知
Agent-to-AgentAgent 间消息传递多 Agent 协作父 Agent 委派子任务

“活着”的错觉:OpenClaw Agent 看起来像是”主动”工作,实际上是 Heartbeat 和 Cron 事件在没有用户输入时持续触发 Agent Turn。这不是独立推理,而是精心设计的事件驱动调度。

Hook 注册与触发

Hook 是 OpenClaw 中拦截和修改 Agent 行为的核心机制。Hook 分为内置 Hook 和自定义 Hook:

内置 Hook 示例——soul-evil

// openclaw.json 配置 { "hooks": { "internal": { "enabled": true, "entries": { "soul-evil": { "enabled": true, "file": "SOUL_EVIL.md", "chance": 0.1, "purge": { "at": "21:00", "duration": "15m" } } } } } }

这个内置 Hook 在 agent:bootstrap 事件触发时,可以按概率(chance: 0.1 = 10%)或在指定时间窗口(purge)内将 SOUL.md 替换为 SOUL_EVIL.md,实现动态人格切换。官方设计用途是上下文自适应人格(如”周一早晨模式”、“客服模式”),但也被安全研究者指出可被攻击者利用。

Hook 生命周期事件

事件名触发时机典型用途
agent:bootstrapAgent 初始化时加载身份文件、设置上下文
agent:task:startAgent 开始处理任务记录日志、设置计时器
agent:task:endAgent 完成任务清理资源、发送通知
gateway:startGateway 服务启动初始化连接、加载配置
user:stop用户发出停止指令保存状态、优雅退出
user:reset用户重置 Agent清除会话、重新初始化

事件流图示

用户发送消息 外部 Webhook 定时器触发 │ │ │ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────┐ │ Gateway 事件路由 │ │ │ │ 1. 识别事件类型(message / webhook / cron / heartbeat) │ │ 2. 确定目标 Agent 和会话(Session) │ │ 3. 将事件放入对应会话的队列 │ └──────────────────────────┬──────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────┐ │ 会话队列(按序处理) │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ Msg1│→ │ Msg2│→ │ Msg3│→ ... │ │ └─────┘ └─────┘ └─────┘ │ │ 同一会话内严格顺序执行,防止回复混乱 │ └──────────────────────────┬───────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────┐ │ Agent Turn 执行 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Hook: │───▶│ 构建上下文│───▶│ LLM 推理 │ │ │ │ bootstrap│ │ SOUL.md │ │ + 工具调用│ │ │ │ │ │ MEMORY.md│ │ │ │ │ └──────────┘ │ Skills │ └────┬─────┘ │ │ └──────────┘ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 7 层工具策略 │ │ │ │ 权限检查 │ │ │ └──────┬───────┘ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 执行工具/脚本 │ │ │ └──────┬───────┘ │ │ ▼ │ │ ┌──────────────┐ │ │ │ 持久化状态 │ │ │ │ 返回结果 │ │ │ └──────────────┘ │ └──────────────────────────────────────────────────────────────┘

7 层工具策略栈

当 Agent 尝试调用工具时,请求会经过 7 层安全策略检查:

请求调用工具 ┌─ 1. Profile ──── 认证配置文件是否允许? │ ▼ ├─ 2. Provider ─── 模型提供商是否支持? │ ▼ ├─ 3. Global ───── 全局策略是否启用? │ ▼ ├─ 4. Agent ────── 该 Agent 是否有权限? │ ▼ ├─ 5. Group ────── 当前通道是否安全?(私聊 vs 公共频道) │ ▼ ├─ 6. Sandbox ──── 文件系统限制是否满足? │ ▼ └─ 7. Subagent ─── 父 Agent 授予了哪些权限? 允许 / 拒绝

实际效果:你的 “DevOps” Agent 在私人终端会话中可以使用 kubectl,但在公共 Discord 频道中,Group 策略层会自动剥离该工具的访问权限。


4. 扩展点

工具扩展

OpenClaw 基于 Pi 框架的四个核心工具(Read、Write、Edit、Bash)构建,并在此基础上扩展了 20+ 额外工具:

工具类别包含工具说明
核心工具read, write, edit, bashPi 框架基础,经 OpenClaw 包装增强
浏览器browser, web_search网页浏览和搜索
消息message, sessions_spawn发送消息、生成子 Agent
媒体image, canvas图像处理和画布操作
调度cron定时任务管理
记忆memory长期记忆读写
执行exec命令执行(带沙箱)

通过 Plugin 添加自定义工具

// src/my-tool.ts import type { PluginApi } from '@openclaw/types'; export function register(api: PluginApi) { api.registerTool({ name: 'stock-price', description: '查询实时股票价格', parameters: { symbol: { type: 'string', description: '股票代码' } }, execute: async ({ symbol }) => { const price = await fetchStockPrice(symbol); return { price, currency: 'USD', timestamp: Date.now() }; } }); }

消息平台扩展

OpenClaw 支持 12+ 消息平台,通过 Channel Plugin 可以添加新的通信渠道:

平台集成方式状态
WhatsAppBaileys(Web 协议)内置
TelegramBot API内置
DiscordDiscord.js内置
iMessageAppleScript 桥接内置
SlackSlack API内置
Web UIWebSocket内置
Microsoft TeamsPlugin(@openclaw/msteams官方插件
MatrixPlugin(@openclaw/matrix官方插件
NostrPlugin(@openclaw/nostr官方插件
Voice CallPlugin(@openclaw/voice-call官方插件

Channel Plugin 架构

┌──────────────┐ ┌──────────────┐ ┌──────────┐ │ 你的应用 │◄──任意──▶│ Channel │◄──Plugin──▶│ Gateway │ │ / 服务 │ 协议 │ Plugin │ API │ │ └──────────────┘ └──────────────┘ └──────────┘

Channel Plugin 在 Gateway 进程内运行,通过 Plugin API 注册自身、接收 Agent 消息并发送回复。与外部世界的通信协议(HTTP、WebSocket 等)由插件自行决定。

Channel 元数据声明

{ "name": "@openclaw/nextcloud-talk", "openclaw": { "extensions": ["./index.ts"], "channel": { "name": "Nextcloud Talk", "icon": "nextcloud", "description": "通过 Nextcloud Talk 与 Agent 交互" }, "install": { "hint": "需要 Nextcloud 实例和 Talk 应用" } } }

存储扩展

OpenClaw 的记忆系统支持通过插件替换存储后端:

存储插件说明配置方式
Memory (Core)内置记忆搜索(默认)plugins.slots.memory 默认值
Memory (LanceDB)长期记忆,自动召回/捕获plugins.slots.memory = "memory-lancedb"
自定义可开发自定义存储后端实现 Memory Plugin 接口

OpenClaw 的状态持久化基于文件系统,核心文件包括:

  • SOUL.md — Agent 核心人格和沟通风格
  • IDENTITY.md — Agent 的具体用途定义
  • MEMORY.md — 长期事实和积累的知识
  • HEARTBEAT.md — 定时主动行为配置

每次 Agent Turn 开始前,运行时会从文件系统读取这些文件构建上下文。这意味着三天前写入 MEMORY.md 的项目约束,今天仍然会被 Agent 读取——这就是 OpenClaw 实现”持久记忆”的方式。

自定义命令

Plugin 可以注册两种类型的命令:

1. CLI 命令——扩展 openclaw 命令行工具:

api.registerCommand({ name: 'my-report', description: '生成自定义报告', action: async (args) => { const report = await generateReport(args); console.log(report); } });

2. 自动回复命令——无需调用 AI 的快捷命令:

api.registerAutoReply({ command: '/status', description: '快速查看系统状态', handler: async () => { return `系统运行正常 | 上线时间: ${getUptime()} | 活跃 Agent: ${getActiveAgents()}`; } });

5. Skills 开发工具链

工具推荐表

工具用途价格适用场景
OpenClaw CLISkill 初始化、测试、验证、发布免费(开源)所有 Skill 开发
ClawHubSkill 市场:发现、安装、发布免费发布Skill 分发
VS Code + Markdown 插件SKILL.md 编写和预览免费Skill 编写
Node.js 22+Plugin 开发运行时免费Plugin 开发
TypeScriptPlugin 类型安全开发免费Plugin 开发
VitestPlugin 单元测试免费Plugin 测试
jitiTypeScript 动态加载(OpenClaw 内置)免费(开源)Plugin 运行时
Docker沙箱环境测试免费(社区版)安全测试
VirusTotal代码安全扫描(ClawHub 发布必需)免费(基础) / $0 起安全审查

开发环境配置

Skill 开发(5 分钟上手)

# 1. 创建 Skill 目录 mkdir -p ~/.openclaw/skills/my-skill cd ~/.openclaw/skills/my-skill # 2. 创建 SKILL.md(核心文件) cat > SKILL.md << 'EOF' --- name: my-skill description: 我的第一个自定义 Skill metadata: openclaw: requires: env: ["MY_API_KEY"] --- # My Skill 当用户需要 [功能描述] 时使用此 Skill。 ## 操作指令 1. [具体步骤] 2. [具体步骤] ## 示例 用户:"[示例输入]" Agent:[示例输出] EOF # 3. 测试 Skill openclaw skill test ./ openclaw skill validate ./

Plugin 开发(20 分钟上手)

# 1. 初始化项目 mkdir my-openclaw-plugin && cd my-openclaw-plugin npm init -y npm install -D typescript vitest @types/node # 2. 配置 TypeScript npx tsc --init # 修改 tsconfig.json: target=ES2022, module=ESNext # 3. 创建插件清单 cat > openclaw.plugin.json << 'EOF' { "id": "my-plugin", "name": "My Plugin", "version": "1.0.0", "description": "自定义 OpenClaw 插件" } EOF # 4. 在 package.json 中声明入口 # "openclaw": { "extensions": ["./src/index.ts"] } # 5. 编写插件代码 mkdir src && touch src/index.ts # 6. 构建和测试 npm run build vitest run

实战案例:构建一个部署通知 Skill

以下是一个完整的 Skill 开发流程,实现”监听 GitHub Webhook → 解析部署事件 → 通过 Agent 发送通知”的功能。

需求分析

  • 当 GitHub Actions 部署完成时,通过 Webhook 触发 Agent
  • Agent 解析部署结果(成功/失败、版本号、耗时)
  • 通过当前消息平台通知用户

实现步骤

步骤 1:创建 Skill 目录和核心文件

mkdir -p ~/.openclaw/skills/deploy-notify cd ~/.openclaw/skills/deploy-notify

步骤 2:编写 SKILL.md

--- name: deploy-notify description: 解析 GitHub 部署 Webhook 并生成人类可读的部署报告 emoji: 🚀 metadata: openclaw: requires: bins: ["jq"] env: ["GITHUB_WEBHOOK_SECRET"] --- # Deploy Notify 当收到 GitHub 部署相关的 Webhook 事件时使用此 Skill。 ## 触发条件 - Webhook 来源为 GitHub - 事件类型为 deployment_status 或 workflow_run ## 处理逻辑 1. 验证 Webhook 签名(使用 GITHUB_WEBHOOK_SECRET) 2. 解析 JSON payload,提取关键字段: - 仓库名称 - 部署环境(production / staging) - 状态(success / failure / pending) - 触发者 - 提交 SHA 和消息 3. 生成格式化的部署报告 ## 输出格式 🚀 **部署通知** - 仓库:{repo} - 环境:{environment} - 状态:{status_emoji} {status} - 版本:{sha_short} - 触发者:{actor} - 耗时:{duration}

步骤 3:配置 Webhook 接收

openclaw.json 中配置 Webhook 端点:

{ "webhooks": { "github-deploy": { "path": "/webhook/github", "secret": "${GITHUB_WEBHOOK_SECRET}", "agent": "default", "events": ["deployment_status", "workflow_run"] } } }

步骤 4:测试和验证

# 验证 Skill 结构 openclaw skill validate ./deploy-notify # 本地测试(模拟 Webhook) curl -X POST http://localhost:3000/webhook/github \ -H "Content-Type: application/json" \ -H "X-GitHub-Event: deployment_status" \ -d '{"deployment_status":{"state":"success"},"repository":{"full_name":"my/repo"}}'

案例分析

这个案例展示了 OpenClaw Skill 开发的几个关键决策点:

  1. 选择 Skill 而非 Plugin:部署通知是一个典型的”指令驱动”场景,不需要底层系统访问,Skill 完全够用
  2. 利用 Webhook 输入:通过 Gateway 的 Webhook 能力接收外部事件,无需轮询
  3. 环境变量管理:敏感信息(Webhook Secret)通过 requires.env 声明,确保运行前检查
  4. Markdown 指令的威力:整个逻辑用自然语言描述,Agent 自行决定如何执行

避坑指南

❌ 常见错误

  1. 启用过多 Skills 导致 Token 浪费

    • 问题:每个 Skill 约消耗 24 tokens 的系统提示词空间。启用 100 个 Skill 就是 2,400 tokens 的固定开销,直接影响可用上下文窗口和 API 成本
    • 正确做法:只启用当前需要的 Skills,使用工作区级别的 skills/ 目录按项目管理
  2. 盲目安装 ClawHub 社区 Skills

    • 问题:2026 年 2 月,安全研究机构 Koi Security 在 ClawHub 的 2,857 个 Skills 中发现了 341 个恶意 Skills(占比 12%),其中 335 个属于代号”ClawHavoc”的攻击活动,主要针对 macOS 用户安装 Atomic Stealer 窃密木马。攻击者通过伪造的”前置依赖”安装脚本植入恶意代码
    • 正确做法:安装前检查发布者信誉、查看源码、验证 VirusTotal 扫描结果;优先使用官方和已验证的 Skills
  3. 忽视 SOUL.md 的安全风险

    • 问题:恶意 Skills 可以通过间接 Prompt 注入诱导 Agent 修改 SOUL.mdAGENTS.md,植入持久化后门。即使卸载恶意 Skill,被污染的身份文件仍会在后续会话中生效
    • 正确做法:定期审查 SOUL.mdMEMORY.md 的内容变更;使用版本控制跟踪这些文件;在沙箱模式下测试新 Skills
  4. Plugin 权限过大

    • 问题:Plugin 在 Gateway 进程内运行,拥有与 Gateway 相同的系统权限。一个有漏洞的 Plugin 可能导致整个系统被攻破
    • 正确做法:只安装来自可信来源的 Plugin;审查 Plugin 源码;在隔离环境中先行测试
  5. Skill 描述写得太模糊

    • 问题:OpenClaw 根据 Skill 的 description 字段决定何时激活该 Skill。描述不精确会导致 Skill 在不该激活时被调用,或在需要时被忽略
    • 正确做法:在 description 中明确列出触发关键词和使用场景,避免泛泛而谈

✅ 最佳实践

  1. 遵循最小权限原则:Skill 的 requires 只声明真正需要的依赖;Plugin 只注册必要的能力
  2. 工作区隔离:为不同项目使用不同的 <workspace>/skills/ 目录,避免 Skill 冲突
  3. 版本锁定:在生产环境中锁定 Skill 和 Plugin 版本,避免自动更新引入破坏性变更
  4. 先 Skill 后 Plugin:90% 的需求用 Skill 即可满足,只在确实需要底层访问时才开发 Plugin
  5. 安全审查流程:建立 Skill/Plugin 安装前的审查清单——检查源码、验证发布者、扫描恶意代码
  6. 监控 Token 消耗:定期检查已启用 Skills 的数量和 Token 开销,移除不再使用的 Skills

相关资源与延伸阅读

资源类型说明
OpenClaw 官方文档 - Plugins 官方文档Plugin 开发完整参考,包括清单格式、API 和示例
OpenClaw 官方文档 - Skills 官方文档Skills 系统完整文档,包括 SKILL.md 格式规范
ClawHub 市场 社区市场3,000+ Skills 的发现、安装和发布平台
OpenClaw GitHub 仓库 源码180K+ Stars,查看 src/plugins/extensions/ 目录了解内部实现
AgentSkills 规范 开放标准Anthropic 发布的跨平台 Skill 格式标准,被 OpenClaw、Cursor 等采用
DashBot - OpenClaw Dashboard Plugin 开源项目实时 AI Agent 仪表板的 Channel Plugin 参考实现
OpenClaw Cheat Sheet 2026 速查表完整的 OpenClaw CLI 命令参考,包括 Skill/Plugin 管理命令
Koi Security - ClawHavoc 报告 安全研究341 个恶意 ClawHub Skills 的详细分析报告
OpenClaw 源码架构解析 (Moely) 技术分析深入解析 OpenClaw 框架的模块化设计和数据流
Building a Channel Plugin for OpenClaw (Wemble) 教程从零构建 Channel Plugin 的完整步骤指南

参考来源


📖 返回 总览与导航 | 上一节:23d-安全与成本分析 | 下一节:24b-自定义Agent开发教程

Last updated on