新手最易上手的 Skill 示例


一、新手最易上手的 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}`, // 明确报错原因,方便调试
            };
        }
    },
};

文章作者: 弈心
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 弈心 !
评论
  目录