关键词:Skills System|SKILL.md|文档即工具|依赖声明|环境感知|零配置扩展
在 OpenClaw 中,AI 的能力边界不由代码硬编码决定,而由一组名为 Skills(技能)的轻量级模块动态扩展。每个 Skill 以纯文本文件 SKILL.md 形式存在,既是人类可读的使用文档,又是机器可执行的工具定义。
这种“文档即工具”(Documentation-as-Tool)的设计,使 OpenClaw 实现了三大突破:
本文将详解 Skills System 的核心机制:
SKILL.md 结构:Frontmatter + Markdown 示例传统 AI 工具链面临两大问题:
OpenClaw 的解法是:让每个技能成为自包含的“说明书+执行蓝图”。
你看到的文档,就是 AI 执行的依据。
SKILL.md:一份文件,双重身份每个 Skill 存储为项目目录下的 .SKILL.md 文件(注意后缀),例如:
skills/
├── restart_db.SKILL.md
├── analyze_logs.SKILL.md
└── deploy_webapp.SKILL.md---
name: restart_db
description: 重启指定 Kubernetes 部署中的数据库
parameters:
- name: deployment
type: string
required: true
description: 数据库部署名(如 'postgres-prod')
dependencies:
- type: command
name: kubectl
- type: package
manager: brew
name: k9s
os: ["linux", "darwin"]
examples:
- input: "重启生产数据库"
args: { deployment: "postgres-prod" }
---
## 使用说明
本技能通过 `kubectl rollout restart` 安全重启数据库 Pod。
### 权限要求
- 必须拥有目标命名空间的 `deployments/rollout` 更新权限
### 安全限制
- 禁止操作 `kube-system` 命名空间
- 自动添加 `--namespace=default`(若未指定)
## 执行逻辑
```bash
kubectl rollout restart deployment/{{ deployment }} --namespace={{ namespace | default("default") }}> **人类读 Markdown,机器读 Frontmatter + 模板**。
---
## 三、核心组件:Skill Parser 与 Executor
OpenClaw 启动时自动扫描 `skills/` 目录:
### 1. **解析阶段**(parse-skill-md.ts)
- 提取 YAML Frontmatter → 构建 `SkillMetadata`
- 验证参数契约(类型、必填)
- 编译模板(Handlebars 语法)
### 2. **注册阶段**
```ts
const skill = parseSkillFile('skills/restart_db.SKILL.md');
skillRegistry.register(skill.name, skill);// agent-core.ts
if (toolCall.name in skillRegistry) {
const skill = skillRegistry.get(toolCall.name);
// 1. 检查环境兼容性
if (!isOSCompatible(skill.os)) {
throw new Error(`Skill ${name} not supported on this OS`);
}
// 2. 安装依赖(若缺失)
await installDependencies(skill.dependencies);
// 3. 渲染命令模板
const cmd = renderTemplate(skill.template, toolCall.args);
// 4. 在沙箱中执行
return execInSandbox(cmd);
}从文档到执行,全自动流水线。
技能可声明运行所需依赖,OpenClaw 自动安装(需用户审批):

dependencies:
- type: python
packages:
- "pandas>=2.0"
- "matplotlib"
installer: uv # 或 pipsudo 工具)需手动确认.venv/skill-name/依赖即声明,安装即可控。
并非所有技能在所有设备上都适用:
brewOpenClaw 通过 os 和 arch 字段实现自动过滤:
os: ["linux", "darwin"] # 不支持 Windows
arch: ["amd64", "arm64"] # 不支持 32 位function isSkillCompatible(skill: Skill): boolean {
const currentOS = process.platform; // 'linux', 'darwin', 'win32'
const currentArch = process.arch; // 'x64', 'arm64'
return (
(skill.os?.includes(currentOS) ?? true) &&
(skill.arch?.includes(currentArch) ?? true)
);
}
// 注册时跳过不兼容技能
if (isSkillCompatible(skill)) {
registry.register(skill.name, skill);
}brew install 相关技能技能适配环境,而非环境迁就技能。
SKILL.md 后再启用allowedPaths 中的目录SKILL.md 可纳入 Git,支持 diff/PR只需三步:
touch skills/hello_world.SKILL.md---
name: hello_world
description: 向用户问好
parameters:
- name: name
type: string
required: true
examples:
- input: "打招呼"
args: { name: "Alice" }
---
echo "Hello, {{ name }}! Today is $(date)."写文档,就是写功能。
OpenClaw 计划推出:
openclaw-skills/coreopenclaw skill add github.com/user/repo但核心原则不变:所有技能必须是纯文本、可审计、无二进制。
Skills System 的本质,是对“代码即文档”理念的逆向升华——文档即代码,文档即能力,文档即信任。在 AI 能力日益强大的今天,OpenClaw 选择将控制权交还给用户:你不仅知道 AI 能做什么,更清楚它为什么能做、如何做、在什么条件下做。
这不仅是扩展机制,更是开源精神在 AI 时代的延续。
在下一篇中,我们将探讨 OpenClaw 的部署模型演进:从单机 Docker 到 Kubernetes Operator。
下一篇预告:
第 19 篇:深入解析 OpenClaw 如何通过 ws-log.ts 模块实现高效、可读、低开销的 WebSocket 日志系统