Skip to content

OpenClaw Skill Workshop 是一个实验性插件,能让智能体把重复性流程、用户纠正、故障修复等保存为工作区技能(SKILL.md 文件)。默认禁用,需要你在 plugins.entries.skill-workshop 中显式启用;推荐先用 approvalPolicy: "pending" 模式排队提案,审核后再应用,避免自动写入不安全内容。用 openclaw plugins list --enabled 检查插件是否加载成功。

OpenClaw Skill Workshop 插件配置与启用说明

Skill Workshop 是 实验性 功能。默认禁用。捕获启发式逻辑和审核提示可能在版本间变更。自动写入应仅在可信工作区使用,并且建议先在 pending 模式下审核输出。

什么是 Skill Workshop

Skill Workshop 为工作区技能提供流程记忆(procedural memory)。它让智能体将可复用工作流、用户纠正、棘手的修复和常见陷阱保存为 <workspace>/skills/<skill-name>/SKILL.md 文件。

这与长期记忆不同:

  • 记忆:存储事实、偏好、实体和历史上下文。
  • 技能:存储智能体在 future 任务中应遵循的可复用流程。
  • Skill Workshop:连接有用对话回合与持久化工作区技能的桥梁,包含安全检查与可选审批。

适用场景举例:

  • 验证外部来源的动画 GIF 资源
  • 替换截图资源并校验尺寸
  • 运行特定仓库的 QA 场景
  • 调试反复出现的 provider 故障
  • 修复本地的陈旧工作流笔记

不适用于:

  • 事实如“用户喜欢蓝色”
  • 大段自传式记忆
  • 原始对话转录存档
  • 密钥、凭据或隐式提示文本
  • 不会重复的一次性指令

默认状态

捆绑插件默认禁用,除非在 plugins.entries.skill-workshop 中显式启用。

插件 manifest 没有设置 enabledByDefault: true。插件配置 schema 中的 enabled: true 默认值只在插件条目已被选中且加载后才生效。

实验性意味着:

  • 插件支持 opt-in 测试和 dogfooding
  • 提案存储、审核阈值和捕获启发式逻辑可能演变
  • pending 审批是推荐的起始模式
  • auto apply 适用于可信的个人/工作区设置,而不是共享或大量不受信输入的环境

怎么启用 Skill Workshop

最小安全配置:

json5
{
  plugins: {
    entries: {
      "skill-workshop": {
        enabled: true,
        config: {
          autoCapture: true,
          approvalPolicy: "pending",
          reviewMode: "hybrid",
        },
      },
    },
  },
}

此配置下:

  • skill_workshop 工具可用
  • 显式的可复用纠正被排队为 pending 提案
  • 基于阈值的审核器可通过审核 pass 提议技能更新
  • 在应用 pending 提案前不会写入技能文件

仅在可信工作区使用自动写入:

json5
{
  plugins: {
    entries: {
      "skill-workshop": {
        enabled: true,
        config: {
          autoCapture: true,
          approvalPolicy: "auto",
          reviewMode: "hybrid",
        },
      },
    },
  },
}

approvalPolicy: "auto" 仍会使用相同的扫描器和隔离路径。它不会应用含有严重发现的提案。

配置参数

配置键默认值取值范围含义
enabledtrueboolean在插件条目加载后启用插件。
autoCapturetrueboolean启用成功智能体对话回合后的自动捕获/审核。
approvalPolicy"pending""pending", "auto"排队提案或自动写入安全的提案。
reviewMode"hybrid""off", "heuristic", "llm", "hybrid"选择显式纠正捕获、LLM 审核器、两者或关闭。
reviewInterval151..200每隔多少次成功回合运行一次审核器。
reviewMinToolCalls81..500在观察到多少次工具调用后运行审核器。
reviewTimeoutMs450005000..180000嵌入审核器运行的超时时间(毫秒)。
maxPending501..200每个工作区保留的最大 pending/已隔离提案数。
maxSkillBytes400001024..200000生成的技能/支持文件的最大字节数。

推荐配置模板:

保守模式:仅显式使用工具,不自动捕获。

json5
{
  autoCapture: false,
  approvalPolicy: "pending",
  reviewMode: "off",
}

审核优先:自动捕获但需要审批。

json5
{
  autoCapture: true,
  approvalPolicy: "pending",
  reviewMode: "hybrid",
}

可信自动化:立即写入安全提案。

json5
{
  autoCapture: true,
  approvalPolicy: "auto",
  reviewMode: "hybrid",
}

低成本:不进行 LLM 审核调用,仅依赖显式纠正短语。

json5
{
  autoCapture: true,
  approvalPolicy: "pending",
  reviewMode: "heuristic",
}

捕获路径

Skill Workshop 有三种捕获路径。

工具建议

模型可以直接调用 skill_workshop,当它发现可复用流程或用户要求保存/更新技能时。这是最显式的路径,即使 autoCapture: false 也可用。

启发式捕获

autoCapture 启用且 reviewModeheuristichybrid 时,插件扫描成功回合中的显式用户纠正短语:

  • 下次(next time)
  • 从现在开始(from now on)
  • 记得要(remember to)
  • 确保(make sure to)
  • 总是……使用/检查/验证/记录/保存/偏好(always ... use/check/verify/record/save/prefer)
  • 偏好……时/代替/使用(prefer ... when/for/instead/use)
  • 当问到……(when asked)

启发式引擎从最新匹配的用户指令创建提案。它根据不同工作流使用主题提示选择技能名称:

  • 动画 GIF 任务 → animated-gif-workflow
  • 截图或资源任务 → screenshot-asset-workflow
  • QA 或场景任务 → qa-scenario-workflow
  • GitHub PR 任务 → github-pr-workflow
  • 回退 → learned-workflows

启发式捕获故意设计得很窄。它适用于清晰的纠正和可重复的过程记录,而不是对话摘要总结。

LLM 审核器

autoCapture 启用且 reviewModellmhybrid 时,插件在达到阈值后运行一个小型嵌入审核器。

审核器接收:

  • 最新的对话文本,截取后 12,000 字符
  • 最多 12 个现有工作区技能
  • 每个现有技能最多 2,000 字符
  • 纯 JSON 指令

审核器没有工具:

  • disableTools: true
  • toolsAllow: []
  • disableMessageTool: true

审核器返回 { "action": "none" } 或一个提案。action 字段是 createappendreplace —— 当已有相关技能时优先 append/replace;只有没有现有技能适用时才使用 create

create 示例:

json
{
  "action": "create",
  "skillName": "media-asset-qa",
  "title": "Media Asset QA",
  "reason": "可复用的动画资源验收工作流",
  "description": "验证外部来源的动画资源后再用于产品。",
  "body": "## Workflow\n\n- 确认真正动画。\n- 记录来源归属。\n- 保存本地已批准副本。\n- 在最终回复前在产品 UI 中验证。"
}

append 添加 section + bodyreplace 在指定技能中替换 oldTextnewText

提案生命周期

每个生成的更新都成为一个提案,包含:

  • id
  • createdAt
  • updatedAt
  • workspaceDir
  • 可选 agentId
  • 可选 sessionId
  • skillName
  • title
  • reason
  • sourcetoolagent_endreviewer
  • status
  • change
  • 可选 scanFindings
  • 可选 quarantineReason

提案状态:

  • pending —— 等待审批
  • applied —— 已写入 <workspace>/skills
  • rejected —— 被操作者/模型拒绝
  • quarantined —— 因严重扫描发现被阻止

状态按工作区存储在 Gateway 状态目录下:

text
<stateDir>/skill-workshop/<workspace-hash>.json

pending 和 quarantined 提案按技能名称和变更负载去重。存储保留最新的 pending/quarantined 提案,最多 maxPending 个。

工具参考

插件注册一个智能体工具:

text
skill_workshop

status

统计指定工作区各状态的提案数量。

json
{ "action": "status" }

返回值:

json
{
  "workspaceDir": "/path/to/workspace",
  "pending": 1,
  "quarantined": 0,
  "applied": 3,
  "rejected": 0
}

list_pending

列出 pending 提案。

json
{ "action": "list_pending" }

列出其他状态:

json
{ "action": "list_pending", "status": "applied" }

status 有效值:pendingappliedrejectedquarantined

list_quarantine

列出 quarantined 提案。

json
{ "action": "list_quarantine" }

当自动捕获似乎没反应,且日志中出现 skill-workshop: quarantined &lt;skill&gt; 时使用此命令。

inspect

按 id 获取提案详情。

json
{
  "action": "inspect",
  "id": "proposal-id"
}

suggest

创建一个提案。approvalPolicy: "pending"(默认)时,提案将被排队而非直接写入。

json
{
  "action": "suggest",
  "skillName": "animated-gif-workflow",
  "title": "Animated GIF Workflow",
  "reason": "用户建立了可复用的 GIF 验证规则。",
  "description": "使用动画 GIF 资源前先验证。",
  "body": "## Workflow\n\n- 确认 URL 解析为 image/gif。\n- 确认文件有多帧。\n- 记录来源归属和许可证。\n- 如需本地资源避免热链接。"
}

请求在 auto 模式下立即写入(apply: true

json
{
  "action": "suggest",
  "apply": true,
  "skillName": "animated-gif-workflow",
  "description": "使用动画 GIF 资源前先验证。",
  "body": "## Workflow\n\n- 确认真正动画。\n- 记录来源归属。"
}

对于 approvalPolicy: "pending"apply: true 仍会排队提案。审核后再使用 apply 动作。

在 auto 策略下强制 pending(apply: false

json
{
  "action": "suggest",
  "apply": false,
  "skillName": "screenshot-asset-workflow",
  "description": "截图替换工作流。",
  "body": "## Workflow\n\n- 验证尺寸。\n- 优化 PNG。\n- 运行相关门控。"
}

追加到指定 section

json
{
  "action": "suggest",
  "skillName": "qa-scenario-workflow",
  "section": "Workflow",
  "description": "QA 场景工作流。",
  "body": "- 对媒体 QA,验证生成的资源是否渲染并通过最终断言。"
}

替换精确文本

json
{
  "action": "suggest",
  "skillName": "github-pr-workflow",
  "oldText": "- 检查 PR。",
  "newText": "- 在作决定前检查未解决的审核线程、CI 状态、关联 Issue 和更改文件。"
}

apply

应用一个 pending 提案。对于 approvalPolicy: "pending",此动作在写入工作区技能前会请求操作者审批。

json
{
  "action": "apply",
  "id": "proposal-id"
}

apply 拒绝 quarantined 提案:

text
quarantined proposal cannot be applied

reject

标记一个提案为 rejected。

json
{
  "action": "reject",
  "id": "proposal-id"
}

write_support_file

在现有或提案技能目录内写入一个支持文件。

允许的顶层支持目录:

  • references/
  • templates/
  • scripts/
  • assets/

示例:

json
{
  "action": "write_support_file",
  "skillName": "release-workflow",
  "relativePath": "references/checklist.md",
  "body": "# Release Checklist\n\n- 运行发布文档。\n- 验证 Changelog。\n"
}

支持文件是工作区作用域、路径检查、受 maxSkillBytes 字节限制、扫描后原子写入。

技能写入

Skill Workshop 只写入:

text
<workspace>/skills/<normalized-skill-name>/

技能名称规范:

  • 转小写
  • [a-z0-9_-] 字符变为 -
  • 去掉首尾非字母数字字符
  • 最大长度 80 字符
  • 最终名称必须匹配 [a-z0-9][a-z0-9_-]{1,79}

对于 create

  • 如果技能不存在,Skill Workshop 写入新的 SKILL.md
  • 如果已存在,Skill Workshop 将 body 追加到 ## Workflow

对于 append

  • 如果技能存在,Skill Workshop 追加到指定 section
  • 如果不存在,Skill Workshop 创建最小技能再追加

对于 replace

  • 技能必须已存在
  • oldText 必须精确存在
  • 只替换第一个精确匹配

所有写入都是原子操作,并立即刷新内存中的技能快照,因此新技能或更新后的技能无需重启 Gateway 即可生效。

安全模型

Skill Workshop 在生成的 SKILL.md 内容和支持文件上运行安全扫描器。

严重发现会隔离提案:

规则 id阻止包含以下内容的提案
prompt-injection-ignore-instructions告诉智能体忽略之前的/更高级的指令
prompt-injection-system引用系统提示、开发者消息或隐藏指令
prompt-injection-tool鼓励绕过工具权限/审批
shell-pipe-to-shell包含 curl/wget 管道至 shbashzsh
secret-exfiltration将环境/进程环境数据发送到网络

警告发现会被保留,但不会单独阻止:

规则 id警告内容
destructive-delete广泛的 rm -rf 风格命令
unsafe-permissionschmod 777 风格权限使用

被隔离的提案:

  • 保留 scanFindings
  • 保留 quarantineReason
  • 出现在 list_quarantine
  • 不能通过 apply 应用

要从隔离中恢复,创建一个安全的新提案,移除不安全内容。不要手动编辑存储 JSON。

提示词引导

启用后,Skill Workshop 会注入一段简短的提示词部分,告诉智能体使用 skill_workshop 作为持久流程记忆。

引导强调:

  • 流程,而非事实/偏好
  • 用户纠正
  • 非显而易见的成功流程
  • 反复出现的陷阱
  • 陈旧/薄弱/错误的技能修复(通过 append/replace)
  • 长时间工具循环或艰难修复后保存可复用流程
  • 简短直白的技能文本
  • 不转储对话记录

写入模式文本随 approvalPolicy 变化:

  • pending 模式:排队建议;在显式审批后使用 apply
  • auto 模式:自动应用安全工作区技能更新,除非 apply: false 改为排队

成本与运行时行为

启发式捕获不调用模型。

LLM 审核使用活动/默认智能体模型运行嵌入审核。它是基于阈值的,因此默认不会在每个回合都运行。

审核器:

  • 在可用时使用相同配置的 provider/model 上下文
  • 回退到运行时智能体默认值
  • reviewTimeoutMs
  • 使用轻量级引导上下文
  • 没有工具
  • 不直接写入任何内容
  • 只能发出一个提案,该提案会经过正常的扫描器和审批/隔离路径

如果审核器失败、超时或返回无效 JSON,插件会记录一条警告/调试信息并跳过本次审核 pass。

使用模式

当用户说出以下内容时使用 Skill Workshop:

  • “下次,做 X”
  • “从现在开始偏好 Y”
  • “确保验证 Z”
  • “把这个保存为工作流”
  • “这花了不少时间;记住这个过程”
  • “更新本地技能”

好的技能文本:

markdown
## Workflow

- 确认 GIF URL 解析为 `image/gif`
- 确认文件有多帧。
- 记录来源 URL、许可证和归属。
- 当资源会随产品发布时保存本地副本。
- 在最终回复前验证本地资源在目标 UI 中正常渲染。

差的技能文本:

markdown
用户问了一个 GIF,我搜索了两个网站。然后其中一个被 Cloudflare 屏蔽了。最终回答说要检查归属。

差的版本不应被保存的原因:

  • 像对话记录
  • 不是指令形式
  • 包含噪声的一次性细节
  • 没有告诉下一个智能体该做什么

调试

检查插件是否已加载:

bash
openclaw plugins list --enabled

从智能体/工具上下文检查提案数量:

json
{ "action": "status" }

检查 pending 提案:

json
{ "action": "list_pending" }

检查被隔离的提案:

json
{ "action": "list_quarantine" }

常见症状:

症状可能原因检查方法
工具不可用插件条目未启用plugins.entries.skill-workshop.enabledopenclaw plugins list
没有自动提案出现autoCapture: falsereviewMode: "off" 或阈值未达到配置文件、提案状态、Gateway 日志
启发式未捕获用户措辞未匹配纠正模式使用显式的 skill_workshop.suggest 或启用 LLM 审核器
审核器未创建提案审核器返回 none、无效 JSON 或超时Gateway 日志、reviewTimeoutMs、阈值
提案未应用approvalPolicy: "pending"list_pending,然后 apply
提案从 pending 消失重复提案被复用、max pending 裁剪、或已被应用/拒绝/隔离status、带状态过滤的 list_pendinglist_quarantine
技能文件存在但模型未使用技能快照未刷新或技能门控排除了它openclaw skills 状态和工作区技能资格

相关日志:

  • skill-workshop: queued &lt;skill&gt;
  • skill-workshop: applied &lt;skill&gt;
  • skill-workshop: quarantined &lt;skill&gt;
  • 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.md
  • qa/scenarios/plugins/skill-workshop-pending-approval.md
  • qa/scenarios/plugins/skill-workshop-reviewer-autonomous.md

运行确定性覆盖测试:

bash
pnpm openclaw qa suite \
  --scenario skill-workshop-animated-gif-autocreate \
  --scenario skill-workshop-pending-approval \
  --concurrency 1

运行审核器覆盖测试:

bash
pnpm openclaw qa suite \
  --scenario skill-workshop-reviewer-autonomous \
  --concurrency 1

审核器场景特意分开,因为它启用了 reviewMode: "llm" 并运行嵌入审核 pass。

什么时候不该启用自动应用

在以下情况下避免使用 approvalPolicy: "auto"

  • 工作区包含敏感流程
  • 智能体正在处理不受信输入
  • 技能跨团队共享
  • 仍在调整提示词或扫描器规则
  • 模型频繁处理恶意网页/邮件内容

先使用 pending 模式。在审查了智能体在该工作区提议的技能种类后,再切换到 auto 模式。

相关文档

常见问题

为什么 skill_workshop 工具不可用?

工具不可用的最常见原因是插件条目未启用。检查配置中 plugins.entries.skill-workshop.enabled 是否为 true,并运行 openclaw plugins list --enabled 确认插件已加载。如果插件列表中没有 skill-workshop,请重新检查配置文件并重启 Gateway。

自动提案没有出现,怎么办?

首先确认 autoCapturetruereviewMode 不是 "off"。如果使用启发式捕获,检查用户话语是否包含 next timefrom now onremember tomake sure to 等短语(中文场景下这些短语可能不自动触发,建议直接用 skill_workshop.suggest 显式提交)。如果使用 LLM 审核器,检查 reviewIntervalreviewMinToolCalls 阈值是否达到,并查看 Gateway 日志中是否有 skill-workshop: reviewer skipped: ...skill-workshop: heuristic capture skipped: ... 信息。

提案被隔离(quarantined)怎么处理?

被隔离的提案无法通过 apply 应用。运行 skill_workshop 工具的 list_quarantine 动作查看被隔离的提案及其 scanFindings。常见原因包括包含提示注入、shell 管道或秘密泄露。创建一个新的安全提案,移除不安全内容,然后要么在 pending 模式下提交并等待审核,要么在 auto 模式下直接写入。不要手动编辑存储 JSON 文件。