1. 先搞清楚 OpenClaw 里 tools 和 skills 到底谁管什么
如果你刚接触 OpenClaw,最容易混淆的一件事就是:tools 和 skills 看起来都在“让 Agent 干活”,为什么还要分两套东西?我一开始也这么想,直到配错了一次权限,Agent 把不该动的文件改了,才真正理解这两者的边界。
一句话概括:Tools 是 Agent 的手和脚,Skills 是教它什么时候伸手、怎么伸手的说明书。Tools 是真正能被调用的能力函数,比如执行 shell 命令、读写文件、控制浏览器、发消息;Skills 本身不执行任何代码,它是一份 Markdown 格式的操作指南,注入到模型提示词里,告诉模型在什么场景下该调用哪个工具、按什么顺序、有哪些约束。
这个区分为什么重要?因为权限控制是分开的。Tools 用tools.allow/tools.deny/tools.profile做硬权限控制,Skills 用agents.defaults.skills/agents.list[].skills做可见性控制。你可以给一个 Agent 开放exec工具但只给它一个受限的 skill,也可以反过来禁用所有写操作但保留搜索类 skill。搞混了这两层,要么权限开太大,要么 Agent 明明有能力却不知道怎么用。
这篇面向本地 AI 工具链搭建场景,我会给出可复制的config.toml和settings.json骨架,演示怎么通过 TaoToken 统一 Key 和 API 通道接入,最后附上验证动作:启动后确认 tools 加载正常、skills 调用日志符合预期。适合正在搭本地 Agent 工作流、想让多个模型走同一个 Key 通道的开发者。
2. 用 TaoToken 统一 Key 接入 OpenClaw 的前置准备
在讲配置骨架之前,先把接入层说清楚。OpenClaw 支持多种模型 provider,但如果你同时用 OpenAI、Claude、Gemini 等多个模型,每个都配一套 Key 和 base_url,管理起来很碎。TaoToken 的作用就是提供一个统一的 API 通道,你只需要一个 Key,就能在 OpenClaw 里切换不同模型。
TaoToken 的 API 地址是https://taotoken.net/api,兼容 OpenAI 风格的接口格式。这意味着 OpenClaw 里凡是支持 OpenAI 兼容 provider 的地方,都可以把 base_url 指向它。你不需要改 OpenClaw 的源码,只需要在配置文件里把 provider 的baseUrl和apiKey填对。
具体操作上,先去 TaoToken 控制台创建一个 API Key。打开https://taotoken.net/api-keys(带上 utm 参数方便追踪来源),登录后点创建 Key,复制出来。这个 Key 就是你后面填进settings.json里的凭证。
有一点要注意:TaoToken 是合规的 API 聚合通道,不是让你绕过什么限制。它的价值在于统一管理多个模型的调用凭证,减少你在不同 provider 之间来回切换配置的成本。对于本地工具链来说,这意味着你的 OpenClaw 配置里只需要维护一个 Key 变量,换模型时改模型名就行,不用动认证部分。
如果你还没决定用哪些模型,可以先在模型对话页面试试不同模型的效果,确认哪个适合你的场景再写进配置。地址是https://taotoken.net/models,同样带上 utm 参数。
3. 可复制的 config.toml 与 settings.json 骨架
OpenClaw 的配置分两层:config.toml管 Gateway 和 provider 层面的东西,settings.json(实际路径是~/.openclaw/openclaw.json)管 Agent、tools、skills 的运行时行为。下面给出一个能跑通的最小骨架,你可以直接复制后改路径和 Key。
先看config.toml,放在 OpenClaw 项目根目录或~/.openclaw/config.toml:
[gateway] host = "127.0.0.1" port = 18789 workspace = "/Users/yourname/openclaw-workspace" [providers.taotoken] type = "openai-compatible" baseUrl = "https://taotoken.net/api" apiKey = "${TAOTOKEN_API_KEY}" defaultModel = "gpt-4o" [providers.taotoken.models] available = [ "gpt-4o", "claude-sonnet-4-20250514", "gemini-2.5-pro" ]这里的关键点:type必须是openai-compatible,因为 TaoToken 走的是 OpenAI 格式;apiKey用环境变量引用,不要把明文 Key 写进文件;defaultModel是你日常用的主力模型。
然后是settings.json,路径~/.openclaw/openclaw.json:
{ "agents": { "defaults": { "model": "taotoken/gpt-4o", "skills": ["repo-review", "docs-search"], "imageGenerationModel": { "primary": "taotoken/gpt-image-2", "fallbacks": ["taotoken/gemini-2.5-flash-image"] } }, "list": [ { "id": "dev", "skills": ["repo-review", "github"], "tools": { "profile": "coding", "deny": [] } }, { "id": "safe-chat", "skills": ["weather"], "tools": { "profile": "messaging", "allow": ["web_search", "web_fetch"], "deny": ["exec", "process", "write", "edit", "apply_patch"] } } ] }, "tools": { "exec": { "host": "sandbox", "security": "allowlist", "ask": "on-miss", "timeoutSec": 1800, "strictInlineEval": true } }, "skills": { "load": { "extraDirs": ["~/openclaw-workspace/skills"], "watch": true, "watchDebounceMs": 250 }, "entries": { "repo-review": { "enabled": true } } } }这个骨架里,devAgent 用codingprofile,基本不限制工具,适合日常开发;safe-chatAgent 用messagingprofile 并显式 deny 了所有写操作和命令执行,适合对外服务。tools.exec.host设为sandbox,强制命令在沙箱里跑,避免直接碰宿主机。
Skills 部分,load.extraDirs指向你的工作区 skills 目录,watch: true让修改 skill 后下一轮对话自动生效,不用重启 Gateway。
4. 验证请求:确认 tools 加载与 skills 调用日志正常
配置写完后,启动 Gateway:
export TAOTOKEN_API_KEY="sk-your-key-here" openclaw gateway start --config ./config.toml启动日志里你应该能看到类似这样的输出:
[gateway] loaded 12 tools: exec, process, read, write, edit, apply_patch, browser, web_search, web_fetch, message, cron, image_generate, sessions_list [gateway] loaded 3 skills: repo-review, docs-search, weather [gateway] provider taotoken ready, default model: gpt-4o如果 tools 数量不对,或者某个 skill 没加载,说明配置有问题。这时候可以用openclaw tools list和openclaw skills list分别检查。
接下来发一个测试请求,验证 tools 和 skills 协作是否正常:
openclaw agent run --agent dev --message "帮我看看当前工作区有哪些文件,然后总结一下项目结构"预期行为:Agent 会先调用read或exec工具列目录,然后根据repo-reviewskill 的指导,按结构化的方式输出总结。你可以在日志里看到 tool call 记录:
[tool-call] exec: ls -la /Users/yourname/openclaw-workspace [tool-result] exec: total 24, drwxr-xr-x ... [skill] repo-review: injecting workflow guidance [model] taotoken/gpt-4o: generating response如果 skill 没有注入,检查agents.list[].skills是否写对,以及 skill 目录下是否有SKILL.md文件。如果 tool call 失败,检查tools.allow/tools.deny是否把需要的工具拦掉了。
再验证一下模型通道是否走通:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-4o","messages":[{"role":"user","content":"ping"}]}'返回正常的话,说明 TaoToken 通道没问题,OpenClaw 里的 provider 配置也是通的。
5. 本篇常见错排查
报错一:provider taotoken not found
原因通常是config.toml里 provider 名称和settings.json里引用的名称不一致。settings.json里写的是taotoken/gpt-4o,那config.toml里就必须有[providers.taotoken]这一段。检查大小写和拼写。
报错二:tool exec denied by policy
说明tools.deny里包含了exec,或者tools.profile设成了minimal。如果你确实需要执行命令,把deny里的exec去掉,或者把 profile 改成coding。但要注意,开放exec后建议同时设置host: "sandbox"。
报错三:skill 不生效,模型没有按预期调用工具
先确认 skill 目录结构正确:<workspace>/skills/repo-review/SKILL.md,且SKILL.md开头有 YAML frontmatter,包含name和description。然后检查agents.list[].skills里是否包含这个 skill 名。如果用了agents.defaults.skills,注意agents.list[].skills一旦非空,就不会和 defaults 合并,是最终集合。
报错四:image_generate工具不出现
这个工具只有在至少一个图像生成 provider 可用时才加载。检查agents.defaults.imageGenerationModel是否配置,以及 TaoToken 的 Key 是否有对应模型的权限。如果不需要图像生成,忽略这个报错即可。
报错五:修改 skill 后不生效
如果你没开skills.load.watch,修改SKILL.md后需要重启 Gateway。开了 watch 的话,修改会在下一轮 agent 处理时生效,但不会中断当前正在进行的对话。
6. 把 Key 和配置骨架固定下来,后续只改模型名
走到这一步,你的 OpenClaw 应该已经能正常加载 tools、注入 skills、通过 TaoToken 统一通道调用模型了。整个链路里,最值得固定下来的就是config.toml里的 provider 段和settings.json里的 tools/skills 权限骨架。这两块配好之后,日常换模型只需要改defaultModel或agents.defaults.model的值,认证和权限逻辑不用动。
如果你还在调试阶段,建议先用safe-chat这种受限 Agent 跑通流程,确认 tools 加载和 skills 注入都正常后,再切到devAgent 开放更多权限。这样即使配置有问题,也不会因为权限过大造成意外操作。
后续如果要接入更多模型,可以在 TaoToken 的模型对话页面先试效果,确认可用后再写进config.toml的available列表。需要长期跑编码任务或 Agent 工作流的话,可以看看 Coding Plan 的额度方案,比按次调用更适合高频场景。接入文档里有完整的 provider 配置说明和 tools/skills 字段参考,遇到不确定的字段可以先查文档再改配置。