一、新手最易上手的 Skill 3个实用款示例(可直接运行)
精选 无第三方依赖、功能简单、高频使用 的3个Skill,基于上述标准模板编写,新手复制到src/skills目录,重启OpenClaw即可使用,零调试成本。
示例1:单文件重命名(基础款,适配新手)
// src/skills/file_rename_single.js
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_rename_single",
name: "单文件重命名",
triggers: ["重命名单个文件", "修改文件名", "文件改名"],
description: "修改单个文件的名称,支持指定原路径和新名称",
parameters: [
{
name: "oldPath",
type: "string",
required: true,
description: "原文件完整路径",
example: "./Desktop/old.txt",
},
{
name: "newName",
type: "string",
required: true,
description: "新文件名(含后缀)",
example: "new_file.txt",
},
],
// 【可选】技能分类:方便管理
category: "文件操作",
// 【可选】执行超时时间:避免Skill卡死,单位毫秒
timeout: 30000,
async execute(params) {
try {
const { oldPath, newName } = params;
if (!fs.existsSync(oldPath)) {
throw new Error(`原文件不存在:${oldPath}`);
}
const newPath = path.join(path.dirname(oldPath), newName);
fs.renameSync(oldPath, newPath);
return {
success: true,
message: `文件重命名成功!原路径:${oldPath} → 新路径:${newPath}`,
};
} catch (error) {
return { success: false, message: `执行失败:${error.message}` };
}
},
};
调用指令:重命名单个文件 oldPath=./Desktop/测试.txt newName=工作笔记.txt
示例2:桌面新建文本文件(极简款,零门槛)
// src/skills/file_create_txt.js
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_create_txt",
name: "桌面新建文本文件",
triggers: ["新建文本文件", "桌面创作文档", "生成txt文件"],
description: "在电脑桌面新建指定名称的文本文件,支持自定义内容",
parameters: [
{
name: "fileName",
type: "string",
required: true,
description: "新建文件名(必须含.txt后缀)",
example: "笔记.txt",
},
{
name: "content",
type: "string",
required: false,
default: "OpenClaw Skill 生成的文本文件",
description: "文件内容",
},
],
// 【可选】技能分类:方便管理
category: "文件操作",
// 【可选】执行超时时间:避免Skill卡死,单位毫秒
timeout: 30000,
async execute(params) {
try {
const { fileName, content } = params;
// 拼接桌面路径,适配Windows/Mac系统
const desktopPath =
process.platform === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
const filePath = path.join(desktopPath, fileName);
// 检查文件是否已存在
if (fs.existsSync(filePath)) {
throw new Error(`桌面已存在同名文件:${fileName}`);
}
fs.writeFileSync(filePath, content, "utf8");
return {
success: true,
message: `文本文件创建成功!\n路径:${filePath}\n内容:${content}`,
};
} catch (error) {
return { success: false, message: `执行失败:${error.message}` };
}
},
};
调用指令:新建文本文件 fileName=OpenClaw笔记.txt content=Skill开发学习,从基础开始!
示例3:批量删除桌面空文件(实用款,清理电脑)
// src/skills/file_delete_empty.js
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_delete_empty",
name: "批量删除桌面空文件",
triggers: ["删除桌面空文件", "清理空文本文件", "删除空文档"],
description: "扫描电脑桌面,批量删除大小为0的空文本文件(.txt)",
parameters: [], // 无参数,直接执行
// 【可选】技能分类:方便管理
category: "文件操作",
// 【可选】执行超时时间:避免Skill卡死,单位毫秒
timeout: 30000,
async execute() {
try {
// 拼接桌面路径
const desktopPath =
process.platform === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
// 扫描桌面txt文件
const files = fs
.readdirSync(desktopPath)
.filter(
file =>
file.endsWith(".txt") &&
fs.statSync(path.join(desktopPath, file)).size === 0
);
// 批量删除
files.forEach(file => {
fs.unlinkSync(path.join(desktopPath, file));
});
return {
success: true,
message: `清理完成!桌面共删除${files.length}个空文本文件`,
};
} catch (error) {
return { success: false, message: `执行失败:${error.message}` };
}
},
};
调用指令:删除桌面空文件
二、OpenClaw Skill 标准结构模板(可直接复用)
所有自定义 Skill 均遵循 固定模块化结构,基于 Node.js 编写,放在 OpenClaw 项目 src/skills 目录下(后缀 .js),OpenClaw 启动时会自动加载,模板包含 必选核心字段+可选扩展字段,注释标注使用说明:
// 引入依赖:Node.js内置模块/第三方包,根据Skill功能按需引入
const fs = require("fs");
const path = require("path");
// 导出Skill核心配置(OpenClaw固定识别格式)
module.exports = {
// 【必选】技能唯一标识(英文,无特殊字符,避免和其他Skill重复)
id: "file_rename_batch",
// 【必选】技能名称(中文,简洁易懂)
name: "文件批量重命名",
// 【必选】触发词(数组格式):用户输入包含任意一个即触发该Skill
triggers: ["批量重命名文件", "文件重命名", "统一修改文件名"],
// 【必选】技能描述:说明功能,方便后期管理/他人使用
description: "按指定规则批量修改指定目录下的文件名称,支持自定义前缀/后缀",
// 【必选】参数定义:告诉OpenClaw需要提取的用户输入参数,支持必填/可选/默认值
// 注意:当required为false时,必须设置default默认值
parameters: [
{
name: "fileDir", // 参数名(英文)
type: "string", // 参数类型:string/number/boolean等
required: true, // 是否必填
description: "文件所在目录路径(相对/绝对路径均可)",
example: "./Desktop/图片", // 示例值,帮助大模型精准提取参数
},
{
name: "prefix",
type: "string",
required: false,
default: "file_", // 可选参数默认值
description: "文件名前缀",
},
{
name: "suffix",
type: "string",
required: false,
default: "",
description: "文件名后缀",
},
],
// 【可选】技能分类:方便管理,推荐分类包括:文件操作、办公自动化、开发辅助等
category: "文件操作",
// 【可选】执行超时时间:避免Skill卡死,单位毫秒
timeout: 30000,
// 【必选】核心执行逻辑:OpenClaw触发后运行的代码,async支持异步操作
async execute(params) {
try {
// 第一步:解析用户传入的参数(和parameters字段对应)
const { fileDir, prefix, suffix } = params;
// 第二步:编写具体业务逻辑(核心功能代码)
// (示例:批量重命名逻辑,可根据Skill功能替换)
if (!fs.existsSync(fileDir)) {
throw new Error(`目标目录不存在:${fileDir}`);
}
// 读取目录下所有文件
const files = fs
.readdirSync(fileDir)
.filter(file => fs.statSync(path.join(fileDir, file)).isFile());
// 遍历重命名
files.forEach((file, index) => {
const oldPath = path.join(fileDir, file);
const ext = path.extname(file); // 获取文件后缀
const newName = `${prefix}${index + 1}${suffix}${ext}`;
const newPath = path.join(fileDir, newName);
fs.renameSync(oldPath, newPath); // 调用重命名方法
});
// 第三步:返回成功结果(固定格式,success为true)
return {
success: true,
message: `文件批量重命名成功!共处理${files.length}个文件,目录:${fileDir}`,
data: { fileCount: files.length, targetDir: fileDir }, // 可选:返回额外数据
};
} catch (error) {
// 第四步:异常处理(固定格式,success为false,返回错误信息)
return {
success: false,
message: `技能执行失败:${error.message}`, // 明确报错原因,方便调试
};
}
},
};