找回密码
 立即注册
首页 业界区 安全 OpenClaw Skills 机制总结

OpenClaw Skills 机制总结

蛟当罟 昨天 08:20
OpenClaw Skills 机制总结

一、什么是 Skill

Skill 是一个包含 SKILL.md 的目录,遵循 AgentSkills 规范。它通过 Markdown 指令教 LLM 如何使用特定工具或工作流。
  1. my-skill/
  2. ├── SKILL.md          # 必须:定义 + 指令
  3. ├── scripts/          # 可选:可执行脚本
  4. ├── references/       # 可选:按需加载的参考文档
  5. └── assets/           # 可选:输出用的资源文件
复制代码
SKILL.md 结构:
  1. ---
  2. name: my-skill
  3. description: 一句话描述,帮助 LLM 判断何时触发
  4. user-invocable: true
  5. metadata:
  6.   { "openclaw": { "emoji": "", "skillKey": "my-skill", "requires": { "bins": ["some-cli"] } } }
  7. ---
  8. 这里是 Markdown 正文,包含 LLM 使用该 skill 的完整指令...
复制代码
二、Skill 存储位置(按优先级从低到高)

来源路径说明插件/扩展skills.load.extraDirs[] + 插件内 skills/第三方扩展内置/skills/随 OpenClaw 发布(35+ 个)本地管理~/.openclaw/skills/用户全局 skill个人 agents~/.agents/skills/跨项目个人 skill项目 agents/.agents/skills/项目级 skill工作区/skills/最高优先级同名 skill,高优先级覆盖低优先级。
三、Skill 的两种触发方式

1. 模型自动触发 — skill 的 name + description 被注入到系统提示词中,LLM 根据用户意图自动判断是否调用。
2. 用户手动触发 — 在对话中输入 /skill-name(斜杠命令),直接激活该 skill。
通过 frontmatter 控制行为: - user-invocable: true — 暴露为用户斜杠命令 - disable-model-invocation: true — 仅用户手动触发,模型不自动调用 - command-dispatch: tool — 绕过模型,直接调用指定工具
四、Skill 准入门控(Gating)

通过 metadata.openclaw 中的字段控制 skill 是否可用:
  1. {
  2.   "openclaw": {
  3.     "always": true,                    // 跳过所有检查,始终加载
  4.     "os": ["darwin", "linux"],         // 操作系统限制
  5.     "requires": {
  6.       "bins": ["ffmpeg"],              // 必须安装的命令行工具
  7.       "anyBins": ["bun", "node"],      // 至少安装其中一个
  8.       "env": ["OPENAI_API_KEY"],       // 必须设置的环境变量
  9.       "config": ["browser.enabled"]    // 必须开启的配置项
  10.     }
  11.   }
  12. }
复制代码
不满足条件的 skill 不会加载到 LLM 上下文中。
五、CLI 管理命令
  1. openclaw skills list               # 列出所有 skill
  2. openclaw skills list --eligible    # 仅显示当前可用的
  3. openclaw skills list --verbose     # 显示缺失依赖详情
  4. openclaw skills info <name>        # 查看单个 skill 详情
  5. openclaw skills check              # 检查所有 skill 就绪状态
复制代码
六、配置管理

在 ~/.openclaw/openclaw.json 中:
  1. {
  2.   "skills": {
  3.     // 启用/禁用 + API Key 管理
  4.     "entries": {
  5.       "gemini": { "enabled": true, "apiKey": "xxx" },
  6.       "peekaboo": { "enabled": false }
  7.     },
  8.     // 限制内置 skill 范围
  9.     "allowBundled": ["gemini", "peekaboo"],
  10.     // 额外 skill 目录
  11.     "load": {
  12.       "extraDirs": ["~/my-skills-pack/skills"],
  13.       "watch": true
  14.     }
  15.   }
  16. }
复制代码
Per-agent skill 过滤:
  1. {
  2.   "agents": {
  3.     "list": [
  4.       { "id": "coding-agent", "skills": ["gemini", "github"] }
  5.     ]
  6.   }
  7. }
复制代码
七、最佳实践

1. 分层管理
场景放哪里所有项目通用的个人 skill~/.agents/skills/特定项目的 skill/.agents/skills/团队共享的 skill(提交到 Git)/skills/第三方 skill 包skills.load.extraDirs2. 编写高质量 SKILL.md

  • description 精准简洁,帮助 LLM 正确判断触发时机
  • 用 requires 声明依赖,避免运行时报错
  • 正文中写清楚何时使用 / 何时不使用(参考内置 skill 的 "Use when" / "Do NOT use" 模式)
  • 脚本放 scripts/,大段参考资料放 references/(按需加载,节省 token)
3. 控制 token 开销
每个 eligible skill 都会占用系统提示词 token。建议: - 用 enabled: false 关闭不常用的 skill - 用 allowBundled 只加载需要的内置 skill - 用 disable-model-invocation: true 让不常用但偶尔需要的 skill 仅在 /命令 时触发 - SKILL.md 正文保持精炼
4. 热重载开发
开启 skills.load.watch: true 后,编辑 SKILL.md 会自动重载(默认 250ms 防抖),开发调试时无需重启。
5. 安全注意

  • 安装 skill 依赖前会自动安全扫描(检测 child_process、eval、数据外传等危险模式)
  • apiKey 存在配置文件中,通过环境变量注入运行时,运行结束后自动清理
  • 不要在 SKILL.md 中硬编码敏感信息

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册