OpenClaw技能开发
开发一个自定义技能,本质上就是创建一个符合 OpenClaw 规范的、能够处理特定任务的程序模块。整个过程比你想象的要简单。OpenClaw 的技能生态为你提供了丰富的选择:从内置的基础能力,到社区贡献的热门工具,再到你可以亲手打造的自定义技能。当你希望 AI 助手能完成一项独一无二的个性化任务时,不妨按照上面介绍的“身份声明()+ 逻辑实现(index.ts)”这一核心模式,为它打造一个专属技能

在 OpenClaw 的生态里,技能(Skill)是让 AI 从“理解”到“执行”的关键一步。OpenClaw 的技能主要可以分为两类:一类是社区贡献的、拿来即用的现成技能;另一类则是你可以亲手打造,满足个性化需求的自定义技能。
下面我们先从宏观上了解技能的分类,再重点深入自定义技能的开发。
💡 从“拿来就用”到“亲手打造”
OpenClaw 的技能生态非常庞大,你可以把它们想象成一个“工具超市”,大致可以归为这几类 :
-
内置基础技能:OpenClaw 本身就自带了一些“吃饭的家伙”,开箱即用。比如浏览器自动化(agent-browser) 可以帮你抓取网页数据,文件管理(file-manager) 能读写整理本地文件,系统命令(system-command) 则让你用自然语言执行服务器指令 。
-
社区热门技能:社区是 OpenClaw 的灵魂。这里有近3000个由开发者贡献的高质量技能,覆盖了从开发到生活的方方面面 。比如:
-
开发辅助:
coding-agent(代码生成)、github(仓库管理)、debug-pro(代码调试)。 -
办公效率:
gmail-manager(邮件处理)、nano-pdf(PDF编辑)、notion-manager(笔记管理)。 -
生活服务:
weather(天气查询)、qqbot-cron(定时提醒)、AnyList(购物清单管理)。
-
-
自定义技能:当现成的技能无法满足你的特定需求时,比如要对接公司内部的CRM系统,或是生成个性化的报表,就需要进入下一个阶段——亲手为 AI 打造“专属工具” 。


🛠️ 深入核心:如何编写自定义技能
开发一个自定义技能,本质上就是创建一个符合 OpenClaw 规范的、能够处理特定任务的程序模块。整个过程比你想象的要简单 。
📁 1. 技能的核心结构
一个标准的 OpenClaw 技能文件夹里,包含三个核心文件,它们共同构成了技能的“身份”和“大脑”:
| 文件 | 作用 | 比喻 |
|---|---|---|
plugin.json |
技能的“身份证”:声明技能的名称、版本、作者,以及最重要的——它能执行什么动作(action)、需要接收哪些参数(parameters)、需要申请什么权限(permissions)。 |
就像是技能的说明书,告诉 OpenClaw 内核这个技能是干什么的,需要什么资源。 |
index.ts 或 index.js |
技能的“手脚”:这是技能的核心执行逻辑。它必须导出一个默认的异步函数(run),接收来自内核的动作名和参数,并返回标准化的执行结果。 |
就像技能的操作手册,里面是用代码写好的具体干活步骤。 |
package.json |
技能的“补给包”(可选):如果你的技能需要依赖第三方库(比如用 axios 发请求,用 lodash 处理数据),就在这里声明。 |
就像一份购物清单,告诉系统运行这个技能还需要哪些额外的“工具”辅助。 |
🚀 2. 实战案例:编写一个“文件统计报表”技能
假设我们希望 AI 能自动统计一个文件夹里各种类型的文件数量,并生成一份漂亮的 Markdown 格式报表。
第一步:编写 plugin.json,定义技能“能做什么”
这个文件告诉 OpenClaw 内核,这个技能叫什么名字(file-report-skill),能执行一个叫 generate-file-report 的动作,并且它需要两个参数:目标文件夹路径 dirPath(必填)和报表输出路径 outputPath(选填)。同时,它声明自己需要 file.read 和 file.write 两个权限 。
json
{
"name": "file-report-skill",
"skills": [
{
"action": "generate-file-report",
"description": "统计目录文件并生成Markdown报表",
"parameters": [
{
"name": "dirPath",
"type": "string",
"required": true,
"description": "要统计的目录绝对路径"
},
{
"name": "outputPath",
"type": "string",
"required": false,
"default": "./file-report.md",
"description": "报表保存的路径"
}
],
"permissions": ["file.read", "file.write"]
}
]
}
第二步:编写 index.ts,实现“具体怎么干”
这里我们使用 TypeScript 来编写核心逻辑,主要分为三步 :
-
参数解析:从传入的
params中拿到dirPath和outputPath。 -
核心处理:调用
countFilesByType函数,读取目录,遍历文件,根据扩展名统计数量。 -
结果输出:调用
generateMarkdownReport将统计数据格式化为 Markdown 表格,并写入到指定的outputPath文件中。
typescript
import fs from 'fs';
import path from 'path';
// ... (countFilesByType 和 generateMarkdownReport 函数的实现,参考上文搜索到的内容)
export default async function run(action: string, params: any) {
try {
if (action !== 'generate-file-report') {
return { success: false, message: `不支持的动作:${action}` };
}
const { dirPath, outputPath = './file-report.md' } = params;
// 1. 统计文件
const fileStats = countFilesByType(dirPath);
// 2. 生成报表
const markdown = generateMarkdownReport(fileStats, dirPath);
// 3. 写入文件
fs.writeFileSync(outputPath, markdown, 'utf8');
// 返回成功
return { success: true, message: `报表已生成至 ${outputPath}`, data: fileStats };
} catch (error) {
// 必须返回清晰的错误信息
return { success: false, message: error.message };
}
}
🛡️ 3. 开发时的安全规范
赋予 AI 执行任务的能力也伴随着安全责任,开发时请务必遵守以下原则 :
-
最小权限原则:在
plugin.json中,只申请完成任务所必须的权限。比如只读文件,就不要申请写入权限。 -
完备的异常处理:用
try...catch包裹核心逻辑,确保任何错误都不会导致 OpenClaw 内核崩溃,并返回对用户友好的错误信息。 -
无状态设计:技能本身不应保存任何用户状态或数据,所有上下文应由 OpenClaw 内核统一管理。
-
输入校验:对传入的参数(如
dirPath)进行严格校验,防止路径遍历等恶意操作。
💎 总结
OpenClaw 的技能生态为你提供了丰富的选择:从内置的基础能力,到社区贡献的热门工具,再到你可以亲手打造的自定义技能。当你希望 AI 助手能完成一项独一无二的个性化任务时,不妨按照上面介绍的“身份声明(plugin.json)+ 逻辑实现(index.ts)”这一核心模式,为它打造一个专属技能。这不仅是扩展 AI 能力边界的最佳方式,也是让 OpenClaw 从“通用助手”变成你专属“数字员工”的关键一步。
如果你在开发过程中有具体的场景想要实现,或者遇到了报错,随时可以再问我,我们一起看看怎么解决。
下载技能
更多推荐


所有评论(0)