openclaw-easy-tutorial-zh-cn

教助手「新本领」:工具与 Skills

读完这一节,你会知道助手能用的内置工具有哪些TOOLS.md 到底管不管「能不能用」、Skills 从哪加载、怎样自己写一个简单 Skill 让助手学会新用法,以及如何用配置做权限与安全控制。适合想给助手加能力、又不想踩坑的你。


助手能用哪些「工具」

助手和外界打交道(读文件、执行命令、发消息、搜网页等)靠的是工具(Tools):每个工具对应一种能力,模型在对话里会按需调用。OpenClaw 自带一整套内置工具,按功能可以粗分为几类(配置里常用 group 来批量放行或禁止):

类别(group) 包含的工具(举例) 通俗理解
group:fs read, write, edit, apply_patch 读、写、改工作区里的文件
group:runtime exec, bash, process 在工作区里执行命令、管理后台进程
group:sessions sessions_list, sessions_history, sessions_send, sessions_spawn, session_status 查会话、发消息到别的会话、派子 Agent 等
group:memory memory_search, memory_get 查记忆文件(MEMORY.md、memory/ 日记)
group:web web_search, web_fetch 网页搜索、抓取页面内容
group:ui browser, canvas 控制浏览器、画布等
group:messaging message 往渠道(飞书、Telegram 等)发消息

还有 group:automation(cron、gateway)、group:nodes(节点设备)等;插件还会注册额外工具。完整列表和每个工具的参数见官方 Tools

谁决定「助手能不能用某个工具」?配置里的 tools.allowtools.denytool profile(见下),不是工作区里的 TOOLS.md。


TOOLS.md 是干啥的

TOOLS.md 在工作区里,助手每次会话都会读到它;但它的作用是给助手看的「使用说明」,不是开关。

所以:开放/关闭工具 → 改配置教助手怎么用、按什么约定用 → 改 TOOLS.md


用配置控制:谁能用哪些工具(权限与安全)

你可以在 ~/.openclaw/openclaw.json 里做全局按 Agent 的工具策略:

示例:只允许文件类 + 浏览器,禁止执行命令:

{
  tools: {
    allow: ["group:fs", "browser"],
  },
}

示例:用 coding profile,但全局禁止执行类(exec、process 等):

{
  tools: {
    profile: "coding",
    deny: ["group:runtime"],
  },
}

多 Agent 时,可以在 agents.list[].tools 里给每个 Agent 单独设 profile 或 allow/deny;子 Agent、沙箱里也可以再套一层策略。详见官方 ToolsMulti-Agent Sandbox & Tools

安全建议:对不信任的输入或第三方 Skill,尽量用沙箱跑;不要把 exec 等高风险工具对所有人开放;API Key、密钥不要写进 Skill 说明里,用环境变量或配置里的 SecretRef。详见 Security


Skills:教助手「怎么用」某类能力

Skill(技能)是一份「说明书」:告诉助手在什么场景下、用什么工具、按什么步骤做。它不新增工具实现,而是把已有工具的用法写清楚,让模型更会选、更会用。

助手在会话里会看到「当前加载了哪些 Skill」的说明,从而更准确地在合适的时候调用对应工具。


Skill 从哪加载、谁优先

Skills 从三个来源加载,重名时按下面优先级(先加载的会被后加载的同名覆盖,实际是「后面的优先」):

  1. Bundled:安装包自带的,优先级最低。
  2. Managed / 本机~/.openclaw/skills,所有 Agent 共用,优先级中。
  3. 工作区<工作区>/skills(例如 ~/.openclaw/workspace/skills),只对当前 Agent 可见,优先级最高

你自建的 Skill 放在工作区的 skills/ 下,就会覆盖同名的 bundled 或本机 Skill。还可以在配置里用 skills.load.extraDirs 加更多目录(优先级最低)。多 Agent 时,每个 Agent 的工作区各自有一套 skills/~/.openclaw/skills 是共享的。


自己写一个简单 Skill

  1. 建目录(例如只在当前助手的工作区下用):
    mkdir -p ~/.openclaw/workspace/skills/my-hello
    
  2. 写 SKILL.md:最少要有 namedescription(YAML 头),后面用 Markdown 写「什么时候用、用哪个工具、怎么用」:
    ---
    name: my_hello
    description: 用 echo 或 message 向用户问好
    ---
    
    # 我的问好技能
    
    当用户说「打个招呼」或「hello」时,用 `message` 工具(若已配置渠道)或简单回复一句「你好,我是你的助手!」。
    
  3. 生效:Gateway 会在加载时扫描 skills 目录;新加或改完 Skill 后,新开一个会话或重启 Gateway,助手就能读到新内容。不需要改配置,只要目录和 SKILL.md 在约定位置即可。

更多元数据(如 metadata.openclaw.requires.binsrequires.env 用于「本机有某命令/某环境变量才加载」)、Slash 命令等见官方 SkillsCreating Skills


用 ClawHub 安装别人写好的 Skill

ClawHub 是 OpenClaw 的公开 Skill 仓库。你可以用命令行安装、更新:

默认会装到当前目录下的 ./skills(或配置里的工作区);装好后 OpenClaw 会当作工作区 skills 加载。第三方 Skill 要当不可信代码:装前看一眼 SKILL.md 和里面有没有调高风险工具,必要时用沙箱或限制工具 profile。


本节要点


常见问题

Q:TOOLS.md 里写了某个工具,为什么助手还是不用?
TOOLS.md 只是提示,模型可能选别的做法;且若该工具在配置里被 deny 或在 profile 里没被放行,助手根本拿不到该工具,自然不会用。先确认配置里该工具已允许。

Q:Skill 改完了没反应?
确认 SKILL.md 在正确目录(工作区 skills/技能名/SKILL.md~/.openclaw/skills/技能名/SKILL.md),且新开了一个会话(或重启了 Gateway);同一会话内可能已经加载过旧版本。

Q:想禁止助手执行任何命令?
在配置里设 tools.deny: ["group:runtime"](或 ["exec", "bash", "process"]);若用 profile,可选 tools.profile: "messaging" 再按需 allow 个别工具。

Q:第三方 Skill 安全吗?
要当不可信处理:先看 SKILL.md 里有没有调 exec、写文件、发消息等;再考虑用沙箱、或给该 Agent 用更小的 tools.profile。不要把密钥写进 Skill 正文;用环境变量或配置 SecretRef。详见 Security


延伸阅读

← 返回目录