Skip to main content
技能工作坊是 OpenClaw 用于创建和更新工作区技能的受治理路径。智能体和操作员绝不会通过这条路径直接写入 SKILL.md,而是创建一个提案(包含内容、目标绑定、扫描器状态、哈希和回滚元数据的待处理草稿),只有在应用后才会成为实时技能。 技能工作坊只写入工作区技能。它绝不会触碰内置、插件、ClawHub、额外根目录、托管、个人智能体或系统技能。

工作原理

  • **提案优先:**生成的内容存储为 PROPOSAL.md,而不是 SKILL.md
  • **应用是唯一的实时写入:**创建、更新和修订绝不会更改活跃技能。
  • **工作区范围:**创建以工作区 skills/ 根目录为目标;更新只允许用于可写的工作区技能。
  • **不覆盖:**如果目标技能已存在,创建会失败。
  • **哈希绑定:**更新提案会绑定到当前目标哈希;如果实时技能在应用前发生变化,则进入 stale
  • **扫描器门控:**应用会在写入前重新运行安全扫描器。
  • **可恢复:**应用会在触碰实时文件前写入回滚元数据。
  • **一致的表面:**聊天、CLI 和 Gateway 网关都调用同一个服务。

生命周期

create/update -> pending
revise        -> pending
apply         -> applied
reject        -> rejected
quarantine    -> quarantined
target change -> stale
只有 pending 提案可以被修订、应用、拒绝或隔离。

聊天

向智能体提出你想要的技能;它会调用 skill_workshop 并返回一个提案 ID。

从近期工作中学习

使用 /learn 将当前对话或命名来源转换为一个遵循标准指导的技能提案:
/learn
/learn docs/runbook.md and https://example.com/guide; focus on recovery
没有请求时,/learn 会要求智能体从当前对话中提炼可复用工作流。有请求时,智能体会将路径、URL、粘贴的笔记和对话引用视为来源,同时遵循重点、范围和命名要求。它会用现有工具收集来源,然后用 action: "create" 调用 skill_workshop 生成的提案会保持 pending/learn 绝不会应用它。通过正常审批流程或使用 openclaw skills workshop 审查并应用它。 创建:
Make a skill called morning-catchup that runs my Monday inbox routine.
更新现有工作区技能:
Update trip-planning to also check seat maps before booking.
迭代待处理提案:
Show me the morning-catchup proposal.
Revise it to also flag anything marked urgent.
Apply the morning-catchup proposal.
智能体发起的 applyrejectquarantine 默认会显示审批提示。在受信任环境中,将 skills.workshop.approvalPolicy 设置为 "auto" 可跳过该提示。 提示会标识提案 ID 和目标技能,并显示提案描述、支持文件数量和正文大小。审批请求有界,必须在智能体工具看门狗超时前完成。如果提示过期前没有收到决定,生命周期操作不会运行:提案保持待处理且不变。稍后可在技能工作坊 UI 中决定,或运行 openclaw skills workshop apply|reject|quarantine <proposal-id>。智能体不应循环重试已过期的生命周期操作。

CLI

# Create
openclaw skills workshop propose-create \
  --name morning-catchup \
  --description "Daily inbox catch-up: triage, archive, surface, draft, plan" \
  --proposal ./PROPOSAL.md

# Update an existing workspace skill
openclaw skills workshop propose-update trip-planning --proposal ./PROPOSAL.md

# List and inspect
openclaw skills workshop list
openclaw skills workshop inspect <proposal-id>

# Revise before approval
openclaw skills workshop revise <proposal-id> --proposal ./PROPOSAL.md

# Close out
openclaw skills workshop apply <proposal-id>
openclaw skills workshop reject <proposal-id> --reason "Duplicate"
openclaw skills workshop quarantine <proposal-id> --reason "Needs security review"
每个子命令都接受 --agent <id>(目标工作区;默认从 cwd 推断,然后使用默认智能体)和 --json(结构化输出)。propose-createpropose-updaterevise 还接受 --goal <text>--evidence <text>,用于将提案上下文与 --proposal 一起记录。

提案内容

待处理期间,提案会以 PROPOSAL.md 存储,并带有仅用于提案的 frontmatter:
---
name: "morning-catchup"
description: "Daily inbox catch-up: triage, archive, surface, draft, plan"
status: proposal
version: "v1"
date: "2026-05-30T00:00:00.000Z"
---
应用时,技能工作坊会写入活跃的 SKILL.md,并移除仅用于提案的字段:status、提案 version 和提案 date

支持文件

当提议的技能需要在 PROPOSAL.md 旁边放置文件时,使用 --proposal-dir
openclaw skills workshop propose-create \
  --name weekly-update \
  --description "Friday wrap-up: stats, highlights, next week's top three" \
  --proposal-dir ./weekly-update-proposal
该目录必须包含 PROPOSAL.md。支持文件必须位于 assets/examples/references/scripts/templates/ 下。技能工作坊会扫描、哈希并随提案存储它们,然后只在应用时将它们写到实时 SKILL.md 旁边。 被拒绝的支持文件路径:绝对路径、隐藏路径段、路径遍历、重叠路径、可执行文件、非 UTF-8 文本、空字节,以及标准支持文件夹之外的路径。

智能体工具

模型使用 skill_workshop,其中一个必需的 action 为:create | update | revise | list | inspect | apply | reject | quarantine。其他参数取决于操作:
参数使用方说明
namecreate, inspect, revisecreate 必需;否则按名称解析待处理提案
descriptioncreate, update, revise最大 160 字节
skill_nameupdate现有技能名称或键名
proposal_contentcreate, update, revise存储为 PROPOSAL.md;受 skills.workshop.maxSkillBytes 限制
support_filescreate, update, revise{ path, content } 数组
goal, evidencecreate, update, revise自由文本上下文
proposal_idinspect, revise, apply, reject, quarantine目标提案
reasonapply, reject, quarantine可选
query, status, limitlist过滤/分页;limit 最大 50,默认 20
智能体必须使用 skill_workshop 处理生成的技能工作。它们不得通过 writeeditexec、shell 命令或直接文件系统操作来创建或更改提案文件。
skill_workshop 是内置智能体工具,并包含在 tools.profile: "coding" 中。如果更严格的策略隐藏了它,请将 skill_workshop 添加到活跃的 tools.allow 列表,或在作用域使用没有显式 tools.allow 的配置文件时使用 tools.alsoAllow: ["skill_workshop"]。沙箱隔离运行不会构造主机侧的技能工作坊工具,因此请从普通主机侧智能体会话或 CLI 运行提案审查操作。

建议技能

OpenClaw 会在交互轮次结束时检测持久指令,例如“下次”“记得要”和响应式修正,包括失败的轮次。在下一轮中,智能体会提议通过 skill_workshop 保存最近检测到的工作流;由用户决定是否创建提案。此内置建议本身不会创建或更改技能。启用 skills.workshop.autonomous.enabled 可改为直接创建待处理提案。

审批和自主性

{
  skills: {
    workshop: {
      autonomous: {
        enabled: false,
      },
      allowSymlinkTargetWrites: false,
      approvalPolicy: "pending",
      maxPending: 50,
      maxSkillBytes: 40000,
    },
  },
}
设置默认值效果
autonomous.enabledfalse直接创建待处理提案,而不是在下一轮中提议保存最近检测到的工作流。
allowSymlinkTargetWritesfalse允许应用操作通过工作区技能符号链接写入,前提是其真实目标列在 skills.load.allowSymlinkTargets 中。
approvalPolicy"pending""pending" 要求在智能体发起 applyrejectquarantine 前显示审批提示。"auto" 会跳过提示(智能体仍必须调用该操作)。
maxPending50限制每个工作区的待处理和已隔离提案数量(1-200)。
maxSkillBytes40000限制提案正文大小,单位为字节(1024-200000)。
自主捕获会识别前瞻性规则(例如“从现在开始”)和响应式修正(例如“这不是我要求的”)。它会按主题将新指令分组为每轮最多三个提案,将词汇匹配路由到现有可写工作区技能,并在另一个修正针对同一技能时修订自己的待处理提案。 提案描述始终限制为 160 字节,不受 maxSkillBytes 影响。

Gateway 网关方法

方法作用域
skills.proposals.listoperator.read
skills.proposals.inspectoperator.read
skills.proposals.createoperator.admin
skills.proposals.updateoperator.admin
skills.proposals.reviseoperator.admin
skills.proposals.requestRevisionoperator.admin
skills.proposals.applyoperator.admin
skills.proposals.rejectoperator.admin
skills.proposals.quarantineoperator.admin
requestRevision 仅适用于 Gateway 网关(没有 CLI 或智能体工具等价项):它会将自由文本修订说明转发到所属智能体的聊天会话,而不是直接替换 PROPOSAL.md,适用于要求智能体修订而不是提交字面新内容的 UI。

存储

<OPENCLAW_STATE_DIR>/skill-workshop/
  proposals.json
  proposals/<proposal-id>/
    proposal.json
    PROPOSAL.md
    rollback.json
    assets/
    examples/
    references/
    scripts/
    templates/
默认状态目录:~/.openclaw
  • proposal.json:规范提案记录。
  • proposals.json:快速列表索引,可从提案文件夹重建。
  • PROPOSAL.md:待处理技能提案。
  • rollback.json:在应用更改到实时文件之前写入的恢复元数据。

限制

限制
描述160 字节
提案正文skills.workshop.maxSkillBytes(默认 40,000;硬上限 1 MiB)
支持文件每个提案 64 个
支持文件大小每个 256 KiB,总计 2 MiB
待处理 + 隔离提案每个工作区 skills.workshop.maxPending(默认 50)

故障排查

问题解决方法
Skill proposal description is too largedescription 缩短到不超过 160 字节。
Skill proposal content is too large缩短提案正文,或提高 skills.workshop.maxSkillBytes
Target skill changed after proposal creation根据当前目标修订提案,或创建新提案。
Proposal scan failed检查扫描器发现的问题,然后修订或隔离该提案。
untrusted symlink target仅针对有意共享的技能根目录配置 skills.load.allowSymlinkTargets 并启用 skills.workshop.allowSymlinkTargetWrites
Support file paths must be under one of...将支持文件移到 assets/examples/references/scripts/templates/ 下。
提案未显示在列表中检查所选的 --agent 工作区和 OPENCLAW_STATE_DIR
智能体无法调用 skill_workshop检查当前工具策略和运行模式。coding 包含该工具;限制性的 tools.allow 策略必须显式列出它,并且沙箱隔离运行必须使用普通的主机侧智能体会话或 CLI。

工具策略诊断

启用自主捕获时,openclaw doctor 会针对默认智能体运行 core/doctor/skill-workshop-tool-policy 检查。如果策略 隐藏了 skill_workshop,警告会指出第一个排除它的配置层,以及需要做出的确切 allowalsoAllow 更改。较旧的运行手册可能仍使用 openclaw plugins inspect skill-workshop;该命令现在会说明 Skill Workshop 是内置的,并在适用时打印相同的策略提示。

相关内容