Skill Workshop 是实验性的。它默认禁用,其捕获启发式和审查者提示可能会在不同版本之间变化,并且自动写入仅应在受信任的工作区中使用,且应先审查待处理模式的输出。 Skill Workshop 是工作区技能的流程性记忆。它允许代理将可复用的工作流、用户修正、来之不易的修复以及反复出现的坑点转化为位于以下路径下的Documentation Index
Fetch the complete documentation index at: https://openclaw.zhcndoc.com/llms.txt
Use this file to discover all available pages before exploring further.
SKILL.md 文件:
- 记忆 存储事实、偏好、实体和过去上下文。
- 技能 存储代理在未来任务中应遵循的可复用流程。
- Skill Workshop 是从一次有用的执行转变为持久化工作区技能的桥梁,带有安全检查和可选批准。
- 如何验证外部来源的动画 GIF 资源
- 如何替换截图资源并验证尺寸
- 如何运行仓库特定的 QA 场景
- 如何调试重复出现的提供方故障
- 如何修复过时的本地工作流说明
- “用户喜欢蓝色”之类的事实
- 广泛的自传式记忆
- 原始对话转录归档
- 密钥、凭据或隐藏提示文本
- 不会重复出现的一次性指令
默认状态
捆绑的插件是实验性的,并且默认禁用,除非在plugins.entries.skill-workshop 中显式启用。
插件清单不会设置 enabledByDefault: true。插件配置模式中的 enabled: true 默认值,仅在插件条目已经被选中并加载之后才适用。
实验性意味着:
- 该插件足够支持选择加入测试和内部自用
- 提案存储、审查阈值和捕获启发式可以演进
- 待批准模式是推荐的起始模式
- 自动应用适用于受信任的个人/工作区设置,不适用于共享或恶意 的高输入环境
启用
最小安全配置:skill_workshop工具可用- 显式的可复用修正会排队为待处理提案
- 基于阈值的审查器轮次可以提出技能更新
- 在待处理提案被应用之前,不会写入任何技能文件
approvalPolicy: "auto" 仍然使用相同的扫描器和隔离路径。它不会应用带有严重问题的提案。
配置
| 键 | 默认值 | 范围 / 值 | 含义 |
|---|---|---|---|
enabled | true | boolean | 在插件条目加载后启用插件。 |
autoCapture | true | boolean | 在代理成功执行后启用事后捕获/审查。 |
approvalPolicy | "pending" | "pending", "auto" | 将提案排队或自动写入安全提案。 |
reviewMode | "hybrid" | "off", "heuristic", "llm", "hybrid" | 选择显式修正捕获、LLM 审查器、两者或都不使用。 |
reviewInterval | 15 | 1..200 | 在这么多次成功执行后运行审查器。 |
reviewMinToolCalls | 8 | 1..500 | 在观察到这么多次工具调用后运行审查器。 |
reviewTimeoutMs | 45000 | 5000..180000 | 内嵌审查器运行的超时时间。 |
maxPending | 50 | 1..200 | 每个工作区保留的待处理/隔离提案最大数量。 |
maxSkillBytes | 40000 | 1024..200000 | 生成的技能/支持文件最大大小。 |
捕获路径
Skill Workshop 有三条捕获路径。工具建议
当模型看到可复用流程,或者用户要求保存/更新技能时,可以直接调用skill_workshop。
这是最显式的路径,即使 autoCapture: false 也能工作。
启发式捕获
当启用autoCapture 且 reviewMode 为 heuristic 或 hybrid 时,插件会扫描成功执行的轮次,查找显式的用户修正短语:
next timefrom now onremember tomake sure toalways ... use/check/verify/record/save/preferprefer ... when/for/instead/usewhen asked
- 动画 GIF 任务 ->
animated-gif-workflow - 截图或资源任务 ->
screenshot-asset-workflow - QA 或场景任务 ->
qa-scenario-workflow - GitHub PR 任务 ->
github-pr-workflow - 兜底 ->
learned-workflows
LLM 审查器
当启用autoCapture 且 reviewMode 为 llm 或 hybrid 时,插件会在达到阈值后运行一个精简的内嵌审查器。
审查器接收:
- 最近的对话文本,最多截取最后 12,000 个字符
- 最多 12 个现有工作区技能
- 每个现有技能最多 2,000 个字符
- 仅 JSON 的指令
disableTools: truetoolsAllow: []disableMessageTool: true
{ "action": "none" } 或一个提案。action 字段可以是 create、append 或 replace —— 当已存在相关技能时,优先使用 append/replace;仅当没有现有技能适配时才使用 create。
create 示例:
append 会添加 section + body。replace 会在命名技能中用 newText 替换 oldText。
提案生命周期
每个生成的更新都会成为一个提案,包含:idcreatedAtupdatedAtworkspaceDir- 可选的
agentId - 可选的
sessionId skillNametitlereasonsource:tool、agent_end或reviewerstatuschange- 可选的
scanFindings - 可选的
quarantineReason
pending- 等待批准applied- 已写入<workspace>/skillsrejected- 被操作员/模型拒绝quarantined- 因严重扫描结果被阻止
maxPending 个。
工具参考
插件注册了一个代理工具:status
统计当前工作区各状态的提案数量。
list_pending
列出待处理提案。
status 值:
pendingappliedrejectedquarantined
list_quarantine
列出被隔离的提案。
skill-workshop: quarantined <skill> 时使用此项。
inspect
按 id 获取一个提案。
suggest
创建一个提案。在 approvalPolicy: "pending"(默认)下,这会排队而不是写入。
强制安全写入(apply: true)
强制安全写入(apply: true)
在自动策略下强制待处理(apply: false)
在自动策略下强制待处理(apply: false)
追加到指定章节
追加到指定章节
替换完全匹配的文本
替换完全匹配的文本
apply
应用一个待处理提案。
apply 会拒绝被隔离的提案:
reject
将提案标记为已拒绝。
write_support_file
在现有或已提议的技能目录中写入一个支持文件。
允许的顶层支持目录:
references/templates/scripts/assets/
maxSkillBytes 字节限制,经过扫描,并以原子方式写入。
技能写入
Skill Workshop 只会写入以下路径:- 转为小写
- 将非
[a-z0-9_-]的连续字符替换为- - 去除首尾非字母数字字符
- 最大长度为 80 个字符
- 最终名称必须匹配
[a-z0-9][a-z0-9_-]{1,79}
create:
- 如果技能不存在,Skill Workshop 会写入一个新的
SKILL.md - 如果技能已存在,Skill Workshop 会将正文追加到
## Workflow
append:
- 如果技能存在,Skill Workshop 会追加到请求的章节
- 如果技能不存在,Skill Workshop 会先创建一个最小技能,然后再追加
replace:
- 技能必须已经存在
oldText必须精确存在- 只会替换第一个完全匹配项
安全模型
Skill Workshop 对生成的SKILL.md 内容和支持文件进行安全扫描。
关键发现会将提案隔离:
| 规则 id | 会阻止包含以下内容的内容… |
|---|---|
prompt-injection-ignore-instructions | 告诉代理忽略先前/更高优先级指令 |
prompt-injection-system | 提及系统提示、开发者消息或隐藏指令 |
prompt-injection-tool | 鼓励绕过工具权限/审批 |
shell-pipe-to-shell | 包含将 curl/wget 通过管道传给 sh、bash 或 zsh 的内容 |
secret-exfiltration | 看起来会通过网络发送环境变量/进程环境数据 |
| 规则 id | 警告内容… |
|---|---|
destructive-delete | 大范围 rm -rf 风格命令 |
unsafe-permissions | chmod 777 风格权限使用 |
- 保留
scanFindings - 保留
quarantineReason - 出现在
list_quarantine - 不能通过
apply应用
提示指导
启用后,Skill Workshop 会注入一段简短的提示,告诉代理使用skill_workshop 来保存持久化的过程性记忆。
该指导强调:
- 过程,而不是事实/偏好
- 用户纠正
- 非显而易见且成功的流程
- 反复出现的坑
- 通过 append/replace 修复陈旧、单薄或错误的技能
- 在长工具循环或疑难修复后保存可复用的流程
- 简短的祈使句式技能文本
- 不要转录对话内容
approvalPolicy 变化:
- pending 模式:排队建议;仅在明确批准后应用
- auto 模式:当工作区技能明显可复用时,自动应用安全的更新
成本和运行时行为
启发式捕获不会调用模型。 LLM 审查会在当前/默认代理模型上运行一个嵌入式执行。它是基于阈值的,因此默认不会在每一轮都运行。 审查器:- 在可用时使用相同配置的提供方/模型上下文
- 否则回退到运行时代理默认值
- 具有
reviewTimeoutMs - 使用轻量级启动上下文
- 没有工具
- 不会直接写入任何内容
- 只能生成一个会经过正常扫描器以及审批/隔离路径的提案
运行模式
当用户说以下内容时,使用 Skill Workshop:- “下次,做 X”
- “从现在开始,优先 Y”
- “确保验证 Z”
- “把这个保存为一个工作流”
- “这花了很久;记住这个过程”
- “为这个更新本地技能”
- 具有对话转录特征
- 不是祈使式
- 包含噪声式的一次性细节
- 没有告诉下一位代理该做什么
调试
检查插件是否已加载:| 症状 | 可能原因 | 检查 |
|---|---|---|
| 工具不可用 | 插件条目未启用 | plugins.entries.skill-workshop.enabled 和 openclaw plugins list |
| 没有自动出现提案 | autoCapture: false、reviewMode: "off",或未达到阈值 | 配置、提案状态、Gateway 日志 |
| 启发式未捕获 | 用户措辞未匹配纠正模式 | 使用显式的 skill_workshop.suggest 或启用 LLM 审查器 |
| 审查器未创建提案 | 审查器返回 none、无效 JSON 或超时 | Gateway 日志、reviewTimeoutMs、阈值 |
| 提案未被应用 | approvalPolicy: "pending" | list_pending,然后 apply |
| 提案从待处理中消失 | 重复提案被复用、超过待处理数量被清理,或已被应用/拒绝/隔离 | status、带状态过滤的 list_pending、list_quarantine |
| 技能文件存在但模型看不到它 | 技能快照未刷新,或技能门控将其排除 | openclaw skills 状态和工作区技能可用性 |
skill-workshop: queued <skill>skill-workshop: applied <skill>skill-workshop: quarantined <skill>skill-workshop: heuristic capture skipped: ...skill-workshop: reviewer skipped: ...skill-workshop: reviewer found no update
QA 场景
基于仓库的 QA 场景:qa/scenarios/plugins/skill-workshop-animated-gif-autocreate.mdqa/scenarios/plugins/skill-workshop-pending-approval.mdqa/scenarios/plugins/skill-workshop-reviewer-autonomous.md
reviewMode: "llm" 并会执行嵌入式审查器流程。
何时不要启用自动应用
以下情况避免使用approvalPolicy: "auto":
- 工作区包含敏感流程
- 代理正在处理不受信任的输入
- 技能会在更广泛的团队中共享
- 你仍在调试提示词或扫描器规则
- 模型经常处理带有恶意内容的网页/邮件