1. 装了 50 个 Skill 还是菜,问题出在哪
如果你正在用 OpenClaw,大概率经历过这个阶段:ClawHub 上看到什么 Skill 都往工作区里塞,装到三四十个之后,Agent 反而越来越不听话。同一个周报汇总流程,今天教一遍,明天换个会话又得从头说;团队里十个人各自装了一堆不一样的 Skill,谁也没法复现谁的能力。
这不是 Skill 数量的问题,是「一次性工作」和「可复用资产」之间缺了一条流水线。ClawHub 解决的是分发,Skill Vetter 解决的是安全,但没人回答一个更前置的问题:这个 Skill 到底值不值得沉淀进团队?谁来审、谁来改、谁来批?
Skill Workshop 就是补这一环的。它是 OpenClaw 基金会的官方 Skill 提案治理工具,核心动作是把 Agent 干过的一次性工作,先变成一条 pending proposal,经过审阅、修订、批准或隔离之后,才真正进入工作区生效。换句话说,Agent 可以自己造 Skill,但造出来的东西不会直接改你的运行环境,得先过治理流程。
这篇会从实际配置切入:怎么用 TaoToken 的统一 Key 把 OpenClaw 接起来,怎么写出可复制的 config.toml 骨架,怎么让 Agent 通过 skill_workshop 自主生成并注册 Skill,以及自造 Skill 之后该做哪些验证动作。适合已经装了 OpenClaw、Skill 数量超过 20 个、开始觉得「越装越乱」的用户。
2. 前置准备:TaoToken 统一 Key 与 OpenClaw 接入
在动 Skill Workshop 之前,得先把模型调用这条链路理顺。OpenClaw 的 Agent 在生成 Skill 提案、修订 SKILL.md、跑验证请求时都要调模型,如果每个环节用不同的 Key,排查问题会非常痛苦。TaoToken 在这里的作用是提供一个统一的 API 入口,把模型调用收敛到一个 Key 上。
你需要先拿到一个可用的 API Key。登录 TaoToken 控制台,在 API Keys 页面创建一个新 Key,建议按用途命名,比如openclaw-skill-workshop,方便后面在日志里区分是哪个环境在调用。创建后立刻复制保存,页面刷新后就看不到完整 Key 了。
拿到 Key 之后,OpenClaw 的模型接入配置写在~/.openclaw/config.toml里。下面是一个可以直接复制的骨架,把YOUR_TAOTOKEN_KEY替换成你刚创建的 Key:
# ~/.openclaw/config.toml [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "YOUR_TAOTOKEN_KEY" model = "claude-sonnet-4-20250514" max_tokens = 8192 temperature = 0.3 [agent] workspace = "~/.openclaw/workspace" skills_dir = "~/.openclaw/skills" enable_skill_workshop = true [skill_workshop] pending_dir = "~/.openclaw/skills/workshop/pending" applied_dir = "~/.openclaw/skills/workshop/applied" rejected_dir = "~/.openclaw/skills/workshop/rejected" quarantined_dir = "~/.openclaw/skills/workshop/quarantined" auto_inspect = true几个参数值得说明。base_url指向 TaoToken 的 API 地址,注意这里不带任何查询参数,保持干净。temperature建议压到 0.3 左右,因为 Skill 提案的 SKILL.md 是结构化文档,太高的随机性会让格式跑偏。enable_skill_workshop必须显式打开,否则 Agent 调skill_workshop工具时会直接报未启用。
如果你同时用 Claude Code 或别的编码工具,建议在 TaoToken 控制台里给不同工具分配不同的 Key,而不是共用一个。这样某天发现额度异常时,能快速定位是哪个工具在刷。Coding Plan 适合长期跑 Agent 编码任务的场景,按量计费和包月两种模式在控制台里可以切换。
配置写完后,先别急着让 Agent 造 Skill,跑一条最小验证请求确认链路通。
3. 可复制配置:让 Agent 自主生成并注册 Skill
链路通了之后,进入正题。Skill Workshop 的核心是 7 个 action:create、update、revise、list、inspect、apply、reject、quarantine。它们构成一个完整的提案生命周期,Agent 负责前半段(创建、修订),人类或 Operator 负责后半段(批准、拒绝、隔离)。
先让 Agent 创建一个提案。你可以在会话里直接说:「把刚才这个周报汇总流程沉淀成一个 Skill,用 skill_workshop 创建提案」。Agent 会调用类似下面的结构:
{ "action": "create", "name": "weekly-report-aggregator", "description": "每周汇总团队 8 人周报,输出结构化 markdown 报告", "proposal_content": "完整 SKILL.md 草稿内容", "support_files": [], "goal": "把周报汇总从手动操作升级为团队级可复用 Skill", "evidence": "每周重复执行相同流程 5 次以上" }这里有两个设计约束必须注意。description强制不超过 160 字节,这是为后续清单浏览和自动发现优化的,写太长会被截断。goal和evidence是必填字段,逼你在动手前想清楚「为什么需要这个 Skill」和「重复了多少次」。我见过不少人跳过这两个字段,结果提案池里堆了一堆没人知道用途的草稿。
创建成功后返回proposal_id和status: pending。此时 Skill 还没有生效,它只是躺在~/.openclaw/skills/workshop/pending/目录下的一个 Markdown 文件,带 YAML frontmatter:
--- proposal_id: prop_weekly_2026w32 name: weekly-report-aggregator description: 每周汇总团队 8 人周报,输出结构化 markdown 报告 version: 1.0.0 author: openclaw-agent status: pending created_at: 2026-08-10T08:56:00+08:00 goal: 把周报汇总从手动操作升级为团队级可复用 Skill evidence: 每周重复执行相同流程 5 次以上 ---接下来是审阅环节。列出所有待处理提案:
skill_workshop action=list status=pending limit=10返回的是一个提案数组,每条带proposal_id、name、author、created_at。这一步的价值在于可发现性:团队成员随时能看到「谁提了什么 Skill」,而不是各自闷头装。
决定要批准之前,先 inspect 一下:
skill_workshop action=inspect proposal_id=prop_weekly_2026w32返回内容包括完整的 SKILL.md 草稿、作者写的 goal 和 evidence、关联的 support_files,以及 token 用量估算。这一步是决策前的事实校核,别跳过。
批准、拒绝、隔离三条路径:
# 批准并安装 skill_workshop action=apply proposal_id=prop_weekly_2026w32 reason="团队已测试 3 周,无问题" # 拒绝 skill_workshop action=reject proposal_id=prop_weekly_2026w32 reason="与现有 Skill 功能重叠" # 隔离,等条件成熟再决定 skill_workshop action=quarantine proposal_id=prop_weekly_2026w32 reason="需要再观察 2 周确认稳定性"quarantine是这套设计里最容易被忽略但最有格局的一环。它承认「现在不确定」是一种合法状态,提案不是坏的,只是证据还不够。这跟 Git 里的 Draft PR 是一个思路。
如果已应用的 Skill 需要改,用update;如果 pending 提案要改,用revise。分开的原因是:改 pending 成本低,改已应用的 Skill 要慎重,因为已经在影响所有 Agent 的行为。
4. 验证请求与成功结果
Skill 被 apply 之后,别急着宣布成功。先跑一轮验证,确认它真的进了工作区并且能被 Agent 调用。
第一步,确认文件落位:
ls ~/.openclaw/skills/workshop/applied/ # 应该能看到 proposal_weekly_2026w32.md第二步,确认 Skill 被 OpenClaw 加载。重启 Agent 会话,然后问它:「你现在有哪些可用的 Skill?」返回列表里应该包含weekly-report-aggregator。如果没出现,检查config.toml里的skills_dir路径是否和 workshop 的applied_dir在同一棵目录树下。
第三步,跑一次真实调用。给 Agent 一份测试周报数据,让它执行这个 Skill:
openclaw run --skill weekly-report-aggregator --input ./test-weekly-data/成功的话,输出应该是一份结构化的 markdown 报告,格式和你在 SKILL.md 里定义的输出规范一致。实测下来,第一次跑通常会暴露两类问题:一是 SKILL.md 里的工作流步骤描述太模糊,Agent 自由发挥;二是输出规范没写清楚字段,导致格式漂移。这两类问题都回到revise或update去改。
第四步,确认 Skill Vetter 扫描通过。已应用的 Skill 会同时被安全层持续扫描,如果 Vetter 报了警告,去~/.openclaw/logs/vetter.log看具体是哪条规则触发。常见的误报是 Skill 里包含curl调用外部 API,如果确认目标域名可信,可以在 Vetter 配置里加白名单。
验证通过后,这个 Skill 才算真正沉淀下来。从「每周手动 1 小时」变成「每周 30 秒」,而且团队里任何人装上就能用,格式完全统一。
5. 本篇常见错排查清单
报错一:skill_workshop: command not found
说明enable_skill_workshop没打开,或者 OpenClaw 版本低于支持 Workshop 的版本。检查config.toml里[agent]段的enable_skill_workshop = true,然后openclaw --version确认版本。
报错二:proposal_content exceeds size limit
SKILL.md 草稿太大。Skill Workshop 对单个提案有体积上限,通常是因为把大段脚本或数据塞进了support_files。把二进制或大文件拆出去,support_files只放必要的模板和脚本。
报错三:description too long (max 160 bytes)
注意是字节不是字符。中文一个字通常占 3 字节,所以中文描述实际只能写 50 字左右。写的时候用wc -c确认一下。
报错四:apply 之后 Agent 还是找不到 Skill
大概率是路径问题。applied_dir和skills_dir如果不是父子关系,OpenClaw 不会自动扫描。要么把applied_dir设在skills_dir下面,要么在config.toml里显式加extra_skill_paths。
报错五:模型调用返回 401 或 403
TaoToken 的 Key 失效或额度用尽。去控制台 API Keys 页面确认 Key 状态,顺便看一眼用量。如果 Key 没问题,检查base_url是不是被误改成了带路径的地址,正确写法是https://taotoken.net/api,不带尾部斜杠。
报错六:提案反复 apply 导致状态混乱
Skill Workshop 的治理动作是幂等的,正常不会出问题。如果出现状态不一致,去~/.openclaw/skills/workshop/下检查文件实际落在哪个目录,以文件位置为准,手动挪回正确目录。
报错七:quarantine 的提案一直没人处理
这是流程问题不是技术问题。建议每周固定一个时间过一遍 pending 和 quarantined 列表,skill_workshop action=list status=quarantined,该批的批,该拒的拒。隔离区不是垃圾桶,堆久了会变成技术债。
6. 把 Skill 治理接进你的日常流程
Skill Workshop 真正改变的不是工具链,是习惯。以前你装 Skill 是「看到就装」,现在是「先提提案,再决定要不要进团队」。这个转变一开始会觉得麻烦,但当你团队里第五个人问「那个周报 Skill 怎么用」的时候,你会发现提案池里躺着完整的 goal 和 evidence,直接甩链接就行。
如果你还在用零散的会话记录和飞书文档沉淀 Agent 工作流,建议从今天开始试一条:把上个月最烦的那个重复流程,用skill_workshop action=create提一个提案。不用追求一次写完美,先让它进 pending,再慢慢 revise。
接入层面,统一 Key 是第一步。TaoToken 的 API Keys 页面可以按工具分配不同 Key,配合接入文档把 OpenClaw、Claude Code 这些工具的调用收敛到一处,排查问题时能省很多时间。如果你要长期跑 Agent 编码和 Skill 生成任务,Coding Plan 的包月模式比按量计费更可控。模型对话入口适合快速验证某个 Skill 的输出质量,不用每次都起完整工作区。
最后留一个我踩过的坑:别在proposal_content里写「参考之前那个会话」这种模糊指代。Skill 是给未来的 Agent 读的,它没有你现在的上下文。把工作流步骤、输入输出格式、边界条件全部写死在 SKILL.md 里,这个 Skill 才真的可复用。