OpenClaw作为轻量化AI智能体平台,其核心扩展能力来自自定义Skill开发,对于新手而言,掌握标准化Skill结构、可直接运行的实用源码、系统的调试避坑方法,就能快速开发出满足文件操作、办公自动化、开发辅助等场景的专属技能。本文提供统一通用的OpenClaw Skill标准模板,包含10个可直接复制使用的新手Skill源码,覆盖文件处理、日常办公、开发辅助三大高频场景,同时完整补充2026年阿里云服务器部署、MacOS/Linux/Windows11本地部署流程,以及阿里云千问大模型API与免费Coding Plan API的配置方法,搭配全场景常见问题解决方案,让零基础用户也能稳定开发、部署、运行自定义Skill。
一、OpenClaw Skill 标准结构模板(全平台通用)
该模板整合必选字段、异常捕获、跨系统兼容逻辑,所有Skill均可基于此模板修改,外层结构固定不可修改,仅需替换核心业务逻辑,支持Windows/MacOS/Linux全系统运行。目前阿里云部署 OpenClaw 只需两步,全网最简单,步骤流程 访问阿里云OpenClaw一键部署专题页面 了解。
const fs = require("fs");
const path = require("path");
const os = require("os");
module.exports = {
id: "skill_unique_id",
name: "技能名称",
triggers: ["触发词1", "触发词2", "触发词3"],
description: "详细功能说明与使用场景描述",
parameters: [
{
name: "paramName",
type: "string",
required: true,
default: "",
description: "参数说明",
example: "./Desktop/example",
},
],
timeout: 30000,
category: "文件操作",
async execute(params) {
try {
const {
paramName } = params;
const getDesktopPath = () => {
return os.platform() === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
};
const checkAndCreateDir = (dirPath) => {
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath, {
recursive: true });
}
};
const resultMsg = "技能执行成功";
return {
success: true,
message: resultMsg,
data: {
},
};
} catch (error) {
return {
success: false,
message: `技能执行失败:${
error.message},错误码:${
error.code || "无"}`,
};
}
},
};
二、10个新手实用Skill源码(直接复制可用)
文件操作类6个
1. 单文件重命名
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.txt",
},
],
category: "文件操作",
async execute(params) {
try {
const {
oldPath, newName } = params;
if (!fs.existsSync(oldPath)) throw new Error(`原文件不存在:${
oldPath}`);
const newPath = path.join(path.dirname(oldPath), newName);
if (fs.existsSync(newPath)) throw new Error("文件已存在");
fs.renameSync(oldPath, newPath);
return {
success: true, message: `重命名成功:${
newPath}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
2. 桌面新建文本文件
const fs = require("fs");
const path = require("path");
const os = require("os");
module.exports = {
id: "file_create_desktop_txt",
name: "桌面新建文本文件",
triggers: ["新建文本文件", "桌面创作文档", "生成txt文件"],
description: "在桌面快速创建文本文件,支持自定义内容",
parameters: [
{
name: "fileName",
type: "string",
required: true,
description: "文件名",
example: "note.txt",
},
{
name: "content",
type: "string",
required: false,
default: "OpenClaw自动生成",
description: "文件内容",
},
],
category: "文件操作",
async execute(params) {
try {
const {
fileName, content } = params;
if (!fileName.endsWith(".txt")) throw new Error("必须是txt文件");
const desktop = os.platform() === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
const target = path.join(desktop, fileName);
fs.writeFileSync(target, content, "utf8");
return {
success: true, message: `创建成功:${
target}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
3. 批量删除桌面空文件
const fs = require("fs");
const path = require("path");
const os = require("os");
module.exports = {
id: "file_delete_desktop_empty",
name: "批量删除桌面空文件",
triggers: ["删除桌面空文件", "清理空文本文件", "删除空文档"],
description: "删除桌面大小为0的txt文件",
parameters: [],
category: "文件操作",
async execute() {
try {
const desktop = os.platform() === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
const files = fs.readdirSync(desktop).filter(f => {
const p = path.join(desktop, f);
return f.endsWith(".txt") && fs.statSync(p).size === 0;
});
files.forEach(f => fs.unlinkSync(path.join(desktop, f)));
return {
success: true, message: `清理空文件:${
files.length}个` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
4. 批量重命名目录文件
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_rename_batch",
name: "批量重命名指定目录文件",
triggers: ["批量重命名文件", "统一修改文件名", "文件批量改名"],
description: "按前缀+序号批量重命名文件",
parameters: [
{
name: "fileDir",
type: "string",
required: true,
description: "目录路径",
example: "./Desktop/images",
},
{
name: "prefix",
type: "string",
required: false,
default: "file_",
description: "文件名前缀",
},
],
category: "文件操作",
async execute(params) {
try {
const {
fileDir, prefix } = params;
if (!fs.existsSync(fileDir)) throw new Error("目录不存在");
const files = fs.readdirSync(fileDir).filter(f => fs.statSync(path.join(fileDir, f)).isFile());
files.forEach((f, i) => {
const ext = path.extname(f);
const newName = `${
prefix}${
i+1}${
ext}`;
fs.renameSync(path.join(fileDir, f), path.join(fileDir, newName));
});
return {
success: true, message: `批量重命名:${
files.length}个` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
5. 复制文件到指定目录
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_copy_to_dir",
name: "复制文件到指定目录",
triggers: ["复制文件", "文件拷贝", "把文件移到指定文件夹"],
description: "复制文件到目标目录,不存在则自动创建",
parameters: [
{
name: "sourcePath",
type: "string",
required: true,
description: "源文件路径",
},
{
name: "targetDir",
type: "string",
required: true,
description: "目标目录",
},
],
category: "文件操作",
async execute(params) {
try {
const {
sourcePath, targetDir } = params;
if (!fs.existsSync(sourcePath)) throw new Error("源文件不存在");
if (!fs.existsSync(targetDir)) fs.mkdirSync(targetDir, {
recursive: true });
const name = path.basename(sourcePath);
const target = path.join(targetDir, name);
fs.copyFileSync(sourcePath, target);
return {
success: true, message: `复制成功:${
target}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
6. 读取文本文件内容
const fs = require("fs");
const path = require("path");
module.exports = {
id: "file_read_txt_content",
name: "读取文本文件内容",
triggers: ["读取文件内容", "查看txt内容", "读取文本文件"],
description: "读取txt文件内容并返回",
parameters: [
{
name: "filePath",
type: "string",
required: true,
description: "文件路径",
},
],
category: "文件操作",
async execute(params) {
try {
const {
filePath } = params;
if (!fs.existsSync(filePath)) throw new Error("文件不存在");
if (!filePath.endsWith(".txt")) throw new Error("仅支持txt");
const content = fs.readFileSync(filePath, "utf8");
return {
success: true, message: content, data: {
content } };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
办公自动化类2个
7. 生成今日工作日报模板
const fs = require("fs");
const path = require("path");
const os = require("os");
module.exports = {
id: "doc_create_work_report",
name: "生成今日工作日报模板",
triggers: ["生成工作日报", "创建日报模板", "今日工作汇报"],
description: "在桌面生成带日期的日报模板",
parameters: [],
category: "办公自动化",
async execute() {
try {
const d = new Date();
const dateStr = `${
d.getFullYear()}年${
d.getMonth()+1}月${
d.getDate()}日`;
const desktop = os.platform() === "win32"
? path.join(process.env.USERPROFILE, "Desktop")
: path.join(process.env.HOME, "Desktop");
const filePath = path.join(desktop, `日报_${
dateStr}.txt`);
const content = `日报 ${
dateStr}\n一、今日完成\n1.\n二、明日计划\n1.\n三、问题\n`;
fs.writeFileSync(filePath, content, "utf8");
return {
success: true, message: `日报已生成:${
filePath}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
8. 批量创建文件夹
const fs = require("fs");
const path = require("path");
module.exports = {
id: "dir_create_batch",
name: "批量创建文件夹",
triggers: ["批量创建文件夹", "新建多个目录", "创建文件夹组"],
description: "批量创建子目录,父目录不存在则自动创建",
parameters: [
{
name: "parentDir",
type: "string",
required: true,
description: "父目录",
},
{
name: "dirNames",
type: "array",
required: true,
description: "目录名,逗号分隔",
},
],
category: "办公自动化",
async execute(params) {
try {
const {
parentDir, dirNames } = params;
const list = Array.isArray(dirNames) ? dirNames : dirNames.split(",").map(s => s.trim());
if (!fs.existsSync(parentDir)) fs.mkdirSync(parentDir, {
recursive: true });
list.forEach(name => {
const p = path.join(parentDir, name);
if (!fs.existsSync(p)) fs.mkdirSync(p);
});
return {
success: true, message: `创建文件夹:${
list.length}个` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
开发辅助类2个
9. 创建Node.js基础文件
const fs = require("fs");
const path = require("path");
module.exports = {
id: "dev_create_node_file",
name: "创建Node.js基础文件",
triggers: ["创建node文件", "生成js基础模板", "新建Node.js文件"],
description: "创建带注释的Node.js模板文件",
parameters: [
{
name: "targetDir",
type: "string",
required: true,
description: "目录",
},
{
name: "fileName",
type: "string",
required: true,
description: "文件名.js",
},
],
category: "开发辅助",
async execute(params) {
try {
const {
targetDir, fileName } = params;
if (!fileName.endsWith(".js")) throw new Error("必须是js文件");
if (!fs.existsSync(targetDir)) fs.mkdirSync(targetDir, {
recursive: true });
const target = path.join(targetDir, fileName);
const code = `// ${
fileName}\nmodule.exports = {};`;
fs.writeFileSync(target, code, "utf8");
return {
success: true, message: `创建成功:${
target}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
10. 生成.gitignore基础文件
const fs = require("fs");
const path = require("path");
module.exports = {
id: "dev_create_gitignore",
name: "生成.gitignore基础文件",
triggers: ["创建gitignore文件", "生成忽略文件", "git忽略配置"],
description: "生成项目通用.gitignore",
parameters: [
{
name: "targetDir",
type: "string",
required: true,
description: "项目目录",
},
],
category: "开发辅助",
async execute(params) {
try {
const {
targetDir } = params;
if (!fs.existsSync(targetDir)) throw new Error("目录不存在");
const target = path.join(targetDir, ".gitignore");
const content = `node_modules/\ndist/\n.env\n.vscode/\n.DS_Store\n`;
fs.writeFileSync(target, content, "utf8");
return {
success: true, message: `.gitignore生成成功:${
target}` };
} catch (error) {
return {
success: false, message: error.message };
}
},
};
三、Skill开发与调试避坑指南
开发常见问题
- require is not defined:仅使用Node.js内置模块,不使用浏览器API
- 路径不存在错误:统一使用path.join拼接路径,增加文件存在判断
- 权限不足:以管理员身份运行终端,避免操作系统目录
- 参数解析失败:确保parameters名称与execute解构名称完全一致
使用常见问题
- 技能不触发:放入skills目录、重启服务、检查触发词
- 跨系统报错:使用os.platform动态获取路径,不写死分隔符
- 批量操作中断:增加独立try/catch,单文件失败不影响整体
- 报错信息模糊:catch中返回error.message,便于定位
四、2026阿里云部署OpenClaw完整流程
- 服务器配置:2核4G、Ubuntu 22.04、放行18789端口
- 环境安装
阿里云用户零基础部署 OpenClaw 喂饭级步骤流程
第一步:点击打开访问阿里云OpenClaw一键部署专题页面。




第二步:打开选购阿里云轻量应用服务器,配置参考如下:
- 镜像:OpenClaw(Moltbot)镜像(已经购买服务器的用户可以重置系统重新选择镜像)
- 实例:内存必须2GiB及以上。
- 地域:默认美国(弗吉尼亚),目前中国内地域(除香港)的轻量应用服务器,联网搜索功能受限。
- 时长:根据自己的需求及预算选择。



第三步:打开访问阿里云百炼大模型控制台,找到密钥管理,单击创建API-Key。

前往轻量应用服务器控制台,找到安装好OpenClaw的实例,进入「应用详情」放行18789端口、配置百炼API-Key、执行命令,生成访问OpenClaw的Token。
- 端口放通:需要放通对应端口的防火墙,单击一键放通即可。
- 配置百炼API-Key,单击一键配置,输入百炼的API-Key。单击执行命令,写入API-Key。
- 配置OpenClaw:单击执行命令,生成访问OpenClaw的Token。
- 访问控制页面:单击打开网站页面可进入OpenClaw对话页面。
阿里云百炼Coding Plan API-Key 获取、配置保姆级教程:
创建API-Key,推荐访问订阅阿里云百炼Coding Plan,阿里云百炼Coding Plan每天两场抢购活动,从按tokens计费升级为按次收费,可以进一步节省费用!
- 购买后,在控制台生成API Key。注:这里复制并保存好你的API Key,后面要用。

- 回到轻量应用服务器-控制台,单击服务器卡片中的实例 ID,进入服务器概览页。

- 在服务器概览页面单击应用详情页签,进入服务器详情页面。

- 端口放通在OpenClaw使用步骤区域中,单击端口放通下的执行命令,可开放获取OpenClaw 服务运行端口的防火墙。

- 这里系统会列出我们第一步中创建的阿里云百炼 Coding Plan的API Key,直接选择就可以。

- 获取访问地址单击访问 Web UI 面板下的执行命令,获取 OpenClaw WebUI 的地址。


sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash
sudo apt install -y nodejs git
npm config set registry https://registry.npmmirror.com
- 安装与启动
npm install -g openclaw-cn openclaw onboard --install-daemon openclaw start systemctl enable openclaw - 阿里云千问API配置
vim ~/.config/openclaw/config.json{ "llm": { "provider": "aliyun-bailian", "api_key": "你的AccessKey ID", "api_secret": "你的AccessKey Secret", "base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1", "model": "qwen3-max-2026-01-23", "temperature": 0.3 } }openclaw restart
五、本地全平台部署OpenClaw(MacOS/Linux/Windows11)
MacOS
xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install node@22
brew link node@22 --force
npm config set registry https://registry.npmmirror.com
npm install -g openclaw-cn
openclaw onboard
openclaw start
Linux
sudo apt update && sudo apt install -y nodejs git
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo bash
npm config set registry https://registry.npmmirror.com
npm install -g openclaw-cn
openclaw onboard --install-daemon
openclaw start
Windows11(管理员PowerShell)
npm config set registry https://registry.npmmirror.com
npm install -g openclaw-cn
openclaw onboard
openclaw start
六、免费Coding Plan API配置
vim ~/.config/openclaw/config.json
{
"llm": {
"provider": "openai-compatible",
"api_key": "你的Coding Plan API Key",
"base_url": "https://coding.dashscope.aliyuncs.com/v1",
"model": "qwen3-coder-free"
}
}
openclaw restart
openclaw llm test
七、常见问题一站式解答
- Skill不加载:重启服务、检查文件格式、确认目录正确
- API调用失败:核对密钥、URL、模型名,检查额度
- 端口占用:执行openclaw fix --port-conflict
- 技能运行卡顿:简化逻辑、增加超时设置、关闭多余技能
- Windows乱码:统一使用utf8编码,文件保存为UTF-8
- 日志排查:使用console.log打印参数,查看终端输出
八、总结
OpenClaw Skill开发并不复杂,遵循统一标准模板、使用Node.js内置模块、做好异常处理与跨系统兼容,即可稳定实现各类自动化功能。本文提供的10个Skill源码覆盖日常最常用场景,可直接复制使用,也可基于标准模板扩展更多功能。2026年阿里云云端部署与本地三大系统部署流程已完全简化,搭配阿里云千问大模型API与免费Coding Plan API,可快速搭建高性能、稳定、安全的AI智能体环境。掌握Skill开发与调试方法,就能让OpenClaw完全贴合个人需求,实现真正高效的自动化工作流。