mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 05:51:15 +08:00
docs: add Skill Workshop guide
This commit is contained in:
@@ -15,10 +15,11 @@ Docs: https://docs.openclaw.ai
|
|||||||
|
|
||||||
### Changes
|
### Changes
|
||||||
|
|
||||||
- Skills: let the `skill_research` agent tool apply, reject, and quarantine explicit Skill Workshop proposals through the guarded proposal lifecycle. Thanks @shakkernerd.
|
- Docs: add a dedicated Skill Workshop guide covering governed skill creation, reviewable proposals, CLI, Gateway, agent tool behavior, approval policy, support files, and recovery. Thanks @shakkernerd.
|
||||||
- Skills: let Skill Workshop proposals carry approved support files under standard skill folders, with scanner, hash, and rollback safeguards. Thanks @shakkernerd.
|
- Skills: let the `skill_workshop` agent tool apply, reject, and quarantine explicit proposals through the guarded review flow. Thanks @shakkernerd.
|
||||||
- Skills: let pending Skill Workshop proposals be revised in place with versioned, dated proposal frontmatter before approval. Thanks @shakkernerd.
|
- Skills: let proposals carry approved support files under standard skill folders, with scanner, hash, and rollback safeguards. Thanks @shakkernerd.
|
||||||
- Skills: add Skill Workshop proposals with pending `PROPOSAL.md` drafts, CLI/Gateway review actions, rollback metadata, and the `skill_research` agent tool. Thanks @shakkernerd.
|
- Skills: let pending proposals be revised in place with versioned, dated proposal frontmatter before approval. Thanks @shakkernerd.
|
||||||
|
- Skills: add Skill Workshop with pending proposals, CLI/Gateway review actions, rollback metadata, and the `skill_workshop` agent tool. Thanks @shakkernerd.
|
||||||
- Plugins: externalize Tokenjuice as the official `@openclaw/tokenjuice` plugin with npm and ClawHub publish metadata.
|
- Plugins: externalize Tokenjuice as the official `@openclaw/tokenjuice` plugin with npm and ClawHub publish metadata.
|
||||||
- Plugins: externalize the GitHub Copilot agent runtime as the official `@openclaw/copilot` plugin with npm and ClawHub publish metadata.
|
- Plugins: externalize the GitHub Copilot agent runtime as the official `@openclaw/copilot` plugin with npm and ClawHub publish metadata.
|
||||||
- iOS: add hosted push relay defaults, realtime Talk playback, and a guarded WebSocket ping path for more reliable mobile sessions. (#88096, #88105, #88231)
|
- iOS: add hosted push relay defaults, realtime Talk playback, and a guarded WebSocket ping path for more reliable mobile sessions. (#88096, #88105, #88231)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ directories, verify ClawHub skills, and update ClawHub-tracked installs.
|
|||||||
Related:
|
Related:
|
||||||
|
|
||||||
- Skills system: [Skills](/tools/skills)
|
- Skills system: [Skills](/tools/skills)
|
||||||
|
- Skill Workshop: [Skill Workshop](/tools/skill-workshop)
|
||||||
- Skills config: [Skills config](/tools/skills-config)
|
- Skills config: [Skills config](/tools/skills-config)
|
||||||
- ClawHub installs: [ClawHub](/clawhub/cli)
|
- ClawHub installs: [ClawHub](/clawhub/cli)
|
||||||
|
|
||||||
@@ -124,76 +125,31 @@ Notes:
|
|||||||
`--json`, that means the machine-readable payload stays on stdout for pipes
|
`--json`, that means the machine-readable payload stays on stdout for pipes
|
||||||
and scripts.
|
and scripts.
|
||||||
|
|
||||||
## Skill Workshop proposals
|
## Skill Workshop
|
||||||
|
|
||||||
`openclaw skills workshop` manages pending skill proposals in the selected
|
`openclaw skills workshop` manages pending skill proposals in the selected
|
||||||
workspace. Proposals are durable OpenClaw state under
|
workspace. Proposals are not active skills until applied. For proposal storage,
|
||||||
`<OPENCLAW_STATE_DIR>/skill-workshop/proposals/`; they are not active skills
|
support-file safeguards, Gateway methods, and approval policy, see
|
||||||
until applied. The default state directory is `~/.openclaw`. Proposal bodies
|
[Skill Workshop](/tools/skill-workshop).
|
||||||
honor `skills.workshop.maxSkillBytes`, and proposal descriptions are capped at
|
|
||||||
160 bytes because they can appear in discovery and listing output.
|
|
||||||
|
|
||||||
Create a proposal from a draft markdown file:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openclaw skills workshop propose-create \
|
openclaw skills workshop propose-create \
|
||||||
--name "qa-check" \
|
--name "qa-check" \
|
||||||
--description "Repeatable QA checklist" \
|
--description "Repeatable QA checklist" \
|
||||||
--proposal ./PROPOSAL.md
|
--proposal ./PROPOSAL.md
|
||||||
```
|
|
||||||
|
|
||||||
Or create a proposal from a full draft skill directory:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
openclaw skills workshop propose-create \
|
openclaw skills workshop propose-create \
|
||||||
--name "qa-check" \
|
--name "qa-check" \
|
||||||
--description "Repeatable QA checklist" \
|
--description "Repeatable QA checklist" \
|
||||||
--proposal-dir ./qa-check-proposal
|
--proposal-dir ./qa-check-proposal
|
||||||
```
|
|
||||||
|
|
||||||
Update an existing workspace skill through the same pending path:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
openclaw skills workshop propose-update qa-check --proposal ./PROPOSAL.md
|
openclaw skills workshop propose-update qa-check --proposal ./PROPOSAL.md
|
||||||
```
|
openclaw skills workshop list
|
||||||
|
openclaw skills workshop inspect <proposal-id>
|
||||||
Revise a pending proposal before approval:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
openclaw skills workshop revise <proposal-id> --proposal ./PROPOSAL.md
|
openclaw skills workshop revise <proposal-id> --proposal ./PROPOSAL.md
|
||||||
|
openclaw skills workshop apply <proposal-id>
|
||||||
|
openclaw skills workshop reject <proposal-id> --reason "Duplicate"
|
||||||
|
openclaw skills workshop quarantine <proposal-id> --reason "Needs security review"
|
||||||
```
|
```
|
||||||
|
|
||||||
The supplied draft is stored as `PROPOSAL.md` with proposal-only frontmatter:
|
|
||||||
|
|
||||||
```markdown
|
|
||||||
---
|
|
||||||
name: qa-check
|
|
||||||
description: Repeatable QA checklist
|
|
||||||
status: proposal
|
|
||||||
version: v1
|
|
||||||
date: "2026-05-30T00:00:00.000Z"
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
Applying a proposal writes the active `SKILL.md` into the workspace `skills/`
|
|
||||||
root, strips `status`, proposal `version`, and proposal `date` from the
|
|
||||||
frontmatter, scans the draft, writes rollback metadata, and refuses stale
|
|
||||||
updates when the target skill changed after the proposal was created.
|
|
||||||
|
|
||||||
When `--proposal-dir` is used, the directory must contain `PROPOSAL.md`.
|
|
||||||
Support files can be included under `assets/`, `examples/`, `references/`,
|
|
||||||
`scripts/`, or `templates/`. OpenClaw stores support files with the proposal,
|
|
||||||
scans them, verifies their hashes before apply, and writes them beside the
|
|
||||||
active `SKILL.md` only after the proposal is applied.
|
|
||||||
|
|
||||||
Agents can create, revise, list, and inspect pending proposals through the
|
|
||||||
`skill_workshop` tool when the user asks for reusable work to be captured.
|
|
||||||
Autonomous proposal capture from durable conversation signals is off by
|
|
||||||
default and is enabled with `skills.workshop.autonomous.enabled`. If the user
|
|
||||||
explicitly asks to approve/use/apply, reject, or quarantine a specific
|
|
||||||
proposal, `skill_workshop` can also perform that proposal lifecycle action
|
|
||||||
through the same Skill Workshop safeguards.
|
|
||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
- [CLI reference](/cli)
|
- [CLI reference](/cli)
|
||||||
|
|||||||
@@ -1255,6 +1255,7 @@
|
|||||||
"group": "Skills",
|
"group": "Skills",
|
||||||
"pages": [
|
"pages": [
|
||||||
"tools/skills",
|
"tools/skills",
|
||||||
|
"tools/skill-workshop",
|
||||||
"tools/creating-skills",
|
"tools/creating-skills",
|
||||||
"tools/skills-config",
|
"tools/skills-config",
|
||||||
"tools/slash-commands",
|
"tools/slash-commands",
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ read_when:
|
|||||||
Skills teach the agent how and when to use tools. Each skill is a directory
|
Skills teach the agent how and when to use tools. Each skill is a directory
|
||||||
containing a `SKILL.md` file with YAML frontmatter and markdown instructions.
|
containing a `SKILL.md` file with YAML frontmatter and markdown instructions.
|
||||||
|
|
||||||
For how skills are loaded and prioritized, see [Skills](/tools/skills).
|
For how skills are loaded and prioritized, see [Skills](/tools/skills). For
|
||||||
|
agent-generated or reviewed skill changes, see
|
||||||
|
[Skill Workshop](/tools/skill-workshop).
|
||||||
|
|
||||||
## Create your first skill
|
## Create your first skill
|
||||||
|
|
||||||
@@ -94,10 +96,11 @@ For how skills are loaded and prioritized, see [Skills](/tools/skills).
|
|||||||
</Step>
|
</Step>
|
||||||
</Steps>
|
</Steps>
|
||||||
|
|
||||||
## Propose before applying
|
## Use Skill Workshop for generated skills
|
||||||
|
|
||||||
For agent-generated procedures, use a Skill Workshop proposal instead of
|
For agent-generated procedures, use Skill Workshop instead of writing `SKILL.md`
|
||||||
writing `SKILL.md` directly:
|
directly. Skill Workshop creates a pending proposal first; it becomes an active
|
||||||
|
skill only after review and apply:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openclaw skills workshop propose-create \
|
openclaw skills workshop propose-create \
|
||||||
@@ -115,12 +118,9 @@ openclaw skills workshop propose-create \
|
|||||||
--proposal-dir ./hello-world-proposal
|
--proposal-dir ./hello-world-proposal
|
||||||
```
|
```
|
||||||
|
|
||||||
The draft is stored under
|
The proposal stays inactive until an operator reviews and applies it.
|
||||||
`<OPENCLAW_STATE_DIR>/skill-workshop/proposals/<proposal-id>/PROPOSAL.md` and
|
Proposal directories must contain `PROPOSAL.md`. Support files can be included
|
||||||
stays inactive until an operator reviews and applies it. The default state
|
under `assets/`, `examples/`, `references/`, `scripts/`, or `templates/`:
|
||||||
directory is `~/.openclaw`. Proposal directories must contain `PROPOSAL.md`.
|
|
||||||
Support files can be included under `assets/`, `examples/`, `references/`,
|
|
||||||
`scripts/`, or `templates/`; OpenClaw stores and scans them with the proposal:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
openclaw skills workshop inspect <proposal-id>
|
openclaw skills workshop inspect <proposal-id>
|
||||||
@@ -133,6 +133,9 @@ root, writes approved support files beside it, and removes proposal-only
|
|||||||
frontmatter such as `status: proposal`, proposal `version`, and proposal
|
frontmatter such as `status: proposal`, proposal `version`, and proposal
|
||||||
`date`.
|
`date`.
|
||||||
|
|
||||||
|
Full proposal storage, review, Gateway, and approval-policy details are in
|
||||||
|
[Skill Workshop](/tools/skill-workshop).
|
||||||
|
|
||||||
## Skill metadata reference
|
## Skill metadata reference
|
||||||
|
|
||||||
The YAML frontmatter supports these fields:
|
The YAML frontmatter supports these fields:
|
||||||
@@ -192,6 +195,7 @@ Each skills root can contain direct skill folders such as
|
|||||||
## Related
|
## Related
|
||||||
|
|
||||||
- [Skills reference](/tools/skills) — loading, precedence, and gating rules
|
- [Skills reference](/tools/skills) — loading, precedence, and gating rules
|
||||||
|
- [Skill Workshop](/tools/skill-workshop) — governed creation for generated or reviewed skill changes
|
||||||
- [Skills config](/tools/skills-config) — `skills.*` config schema
|
- [Skills config](/tools/skills-config) — `skills.*` config schema
|
||||||
- [ClawHub](/clawhub) — public skill registry
|
- [ClawHub](/clawhub) — public skill registry
|
||||||
- [Building Plugins](/plugins/building-plugins) — plugins can ship skills
|
- [Building Plugins](/plugins/building-plugins) — plugins can ship skills
|
||||||
|
|||||||
@@ -21,15 +21,15 @@ group membership, provider restrictions, and configuration fields, use
|
|||||||
For most agents, start with the built-in tool categories, then adjust policy
|
For most agents, start with the built-in tool categories, then adjust policy
|
||||||
only when the agent should see fewer tools or needs explicit host access.
|
only when the agent should see fewer tools or needs explicit host access.
|
||||||
|
|
||||||
| If you need to... | Use this first | Then read |
|
| If you need to... | Use this first | Then read |
|
||||||
| ------------------------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------- |
|
| ------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
||||||
| Let an agent act with existing capabilities | [Built-in tools](#built-in-tool-categories) | [Tool categories](#built-in-tool-categories) |
|
| Let an agent act with existing capabilities | [Built-in tools](#built-in-tool-categories) | [Tool categories](#built-in-tool-categories) |
|
||||||
| Control what an agent can call | [Tool policy](#configure-access-and-approvals) | [Tools and custom providers](/gateway/config-tools) |
|
| Control what an agent can call | [Tool policy](#configure-access-and-approvals) | [Tools and custom providers](/gateway/config-tools) |
|
||||||
| Teach an agent a workflow | [Skills](#choose-tools-skills-or-plugins) | [Skills](/tools/skills) and [Creating skills](/tools/creating-skills) |
|
| Teach an agent a workflow | [Skills](#choose-tools-skills-or-plugins) | [Skills](/tools/skills), [Creating skills](/tools/creating-skills), and [Skill Workshop](/tools/skill-workshop) |
|
||||||
| Add a new integration or runtime surface | [Plugins](#extend-capabilities) | [Plugins](/tools/plugin) and [Build plugins](/plugins/building-plugins) |
|
| Add a new integration or runtime surface | [Plugins](#extend-capabilities) | [Plugins](/tools/plugin) and [Build plugins](/plugins/building-plugins) |
|
||||||
| Run work later or in the background | [Automation](/automation) | [Automation overview](/automation) |
|
| Run work later or in the background | [Automation](/automation) | [Automation overview](/automation) |
|
||||||
| Coordinate multiple agents or harnesses | [Sub-agents](/tools/subagents) | [ACP agents](/tools/acp-agents) and [Agent send](/tools/agent-send) |
|
| Coordinate multiple agents or harnesses | [Sub-agents](/tools/subagents) | [ACP agents](/tools/acp-agents) and [Agent send](/tools/agent-send) |
|
||||||
| Search a large OpenClaw tool catalog | [Tool Search](/tools/tool-search) | [Tool Search](/tools/tool-search) |
|
| Search a large OpenClaw tool catalog | [Tool Search](/tools/tool-search) | [Tool Search](/tools/tool-search) |
|
||||||
|
|
||||||
## Choose tools, skills, or plugins
|
## Choose tools, skills, or plugins
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ only when the agent should see fewer tools or needs explicit host access.
|
|||||||
Skills can live in a workspace, shared skill directory, managed OpenClaw
|
Skills can live in a workspace, shared skill directory, managed OpenClaw
|
||||||
skill root, or plugin package.
|
skill root, or plugin package.
|
||||||
|
|
||||||
[Skills](/tools/skills) | [Creating skills](/tools/creating-skills) | [Skills config](/tools/skills-config)
|
[Skills](/tools/skills) | [Skill Workshop](/tools/skill-workshop) | [Creating skills](/tools/creating-skills) | [Skills config](/tools/skills-config)
|
||||||
|
|
||||||
</Step>
|
</Step>
|
||||||
|
|
||||||
@@ -172,4 +172,5 @@ current turn:
|
|||||||
- [Plugins](/tools/plugin) for plugin installation and management
|
- [Plugins](/tools/plugin) for plugin installation and management
|
||||||
- [Plugin SDK](/plugins/sdk-overview) for plugin author reference
|
- [Plugin SDK](/plugins/sdk-overview) for plugin author reference
|
||||||
- [Skills](/tools/skills) for skill load order, gating, and config
|
- [Skills](/tools/skills) for skill load order, gating, and config
|
||||||
|
- [Skill Workshop](/tools/skill-workshop) for generated and reviewed skill creation
|
||||||
- [Tool Search](/tools/tool-search) for compact OpenClaw tool catalog discovery
|
- [Tool Search](/tools/tool-search) for compact OpenClaw tool catalog discovery
|
||||||
|
|||||||
267
docs/tools/skill-workshop.md
Normal file
267
docs/tools/skill-workshop.md
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
---
|
||||||
|
summary: "Create and update workspace skills through Skill Workshop review"
|
||||||
|
read_when:
|
||||||
|
- You want the agent to create or update a skill from chat
|
||||||
|
- You need to review, apply, reject, or quarantine a generated skill draft
|
||||||
|
- You are configuring Skill Workshop approval, autonomy, storage, or limits
|
||||||
|
title: "Skill Workshop"
|
||||||
|
sidebarTitle: "Skill Workshop"
|
||||||
|
---
|
||||||
|
|
||||||
|
Skill Workshop is OpenClaw's governed path for creating and updating workspace
|
||||||
|
skills.
|
||||||
|
|
||||||
|
Agents and operators do not write active `SKILL.md` files directly through this
|
||||||
|
path. They create a **proposal** first. A proposal is a pending draft containing
|
||||||
|
the proposed skill content, target binding, scanner state, hashes, support-file
|
||||||
|
metadata, and rollback metadata. It becomes a live skill only when applied.
|
||||||
|
|
||||||
|
Skill Workshop writes workspace skills only. It does not mutate bundled,
|
||||||
|
plugin, ClawHub, extra-root, managed, personal-agent, or system skills.
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
- **Proposal first:** generated skill content is stored as `PROPOSAL.md`, not
|
||||||
|
`SKILL.md`.
|
||||||
|
- **Apply is the only live write:** create, update, and revise do not change
|
||||||
|
active skills.
|
||||||
|
- **Workspace scoped:** creates target the workspace `skills/` root. Updates
|
||||||
|
are allowed only for writable workspace skills.
|
||||||
|
- **No clobber:** create fails if the target skill already exists.
|
||||||
|
- **Hash bound:** update proposals bind to the current target hash and become
|
||||||
|
stale if the live skill changes before apply.
|
||||||
|
- **Scanner gated:** apply reruns scanning before writing.
|
||||||
|
- **Recoverable:** apply writes rollback metadata before changing live files.
|
||||||
|
- **Consistent surfaces:** chat, CLI, and Gateway all call the same Skill
|
||||||
|
Workshop service.
|
||||||
|
|
||||||
|
## Lifecycle
|
||||||
|
|
||||||
|
```text
|
||||||
|
create/update -> pending
|
||||||
|
revise -> pending
|
||||||
|
apply -> applied
|
||||||
|
reject -> rejected
|
||||||
|
quarantine -> quarantined
|
||||||
|
target change -> stale
|
||||||
|
```
|
||||||
|
|
||||||
|
Only `pending` proposals can be revised, applied, rejected, or quarantined.
|
||||||
|
|
||||||
|
## Chat
|
||||||
|
|
||||||
|
Ask the agent for the skill you want. The agent calls `skill_workshop` and
|
||||||
|
returns a proposal id.
|
||||||
|
|
||||||
|
Create:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Make a skill called morning-catchup that runs my Monday inbox routine.
|
||||||
|
```
|
||||||
|
|
||||||
|
Update an existing workspace skill:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Update trip-planning to also check seat maps before booking.
|
||||||
|
```
|
||||||
|
|
||||||
|
Iterate on a pending proposal:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Show me the morning-catchup proposal.
|
||||||
|
Revise it to also flag anything marked urgent.
|
||||||
|
Apply the morning-catchup proposal.
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, agent-initiated `apply`, `reject`, and `quarantine` show an
|
||||||
|
approval prompt before they run. Set `skills.workshop.approvalPolicy` to
|
||||||
|
`"auto"` to skip the prompt for trusted environments.
|
||||||
|
|
||||||
|
## CLI
|
||||||
|
|
||||||
|
Create a new skill proposal:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop propose-create \
|
||||||
|
--name morning-catchup \
|
||||||
|
--description "Daily inbox catch-up: triage, archive, surface, draft, plan" \
|
||||||
|
--proposal ./PROPOSAL.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Create an update proposal for an existing workspace skill:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop propose-update trip-planning --proposal ./PROPOSAL.md
|
||||||
|
```
|
||||||
|
|
||||||
|
List and inspect:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop list
|
||||||
|
openclaw skills workshop inspect <proposal-id>
|
||||||
|
```
|
||||||
|
|
||||||
|
Revise before approval:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop revise <proposal-id> --proposal ./PROPOSAL.md
|
||||||
|
```
|
||||||
|
|
||||||
|
Close out the proposal:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop apply <proposal-id>
|
||||||
|
openclaw skills workshop reject <proposal-id> --reason "Duplicate"
|
||||||
|
openclaw skills workshop quarantine <proposal-id> --reason "Needs security review"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Proposal content
|
||||||
|
|
||||||
|
While pending, the proposal is stored as `PROPOSAL.md` with proposal-only
|
||||||
|
frontmatter:
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
name: "morning-catchup"
|
||||||
|
description: "Daily inbox catch-up: triage, archive, surface, draft, plan"
|
||||||
|
status: proposal
|
||||||
|
version: "v1"
|
||||||
|
date: "2026-05-30T00:00:00.000Z"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
On apply, Skill Workshop writes the active `SKILL.md` and removes proposal-only
|
||||||
|
fields: `status`, proposal `version`, and proposal `date`.
|
||||||
|
|
||||||
|
## Support files
|
||||||
|
|
||||||
|
Use `--proposal-dir` when the proposed skill needs files beside `PROPOSAL.md`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openclaw skills workshop propose-create \
|
||||||
|
--name weekly-update \
|
||||||
|
--description "Friday wrap-up: stats, highlights, next week's top three" \
|
||||||
|
--proposal-dir ./weekly-update-proposal
|
||||||
|
```
|
||||||
|
|
||||||
|
The directory must contain `PROPOSAL.md`. Support files must be under:
|
||||||
|
|
||||||
|
- `assets/`
|
||||||
|
- `examples/`
|
||||||
|
- `references/`
|
||||||
|
- `scripts/`
|
||||||
|
- `templates/`
|
||||||
|
|
||||||
|
Skill Workshop scans, hashes, and stores support files with the proposal. They
|
||||||
|
are written beside the live `SKILL.md` only on apply.
|
||||||
|
|
||||||
|
Rejected support-file paths include absolute paths, hidden path segments, path
|
||||||
|
traversal, overlapping paths, executable files from proposal directories,
|
||||||
|
non-UTF-8 text, null bytes, and files outside the standard support folders.
|
||||||
|
|
||||||
|
## Agent tool
|
||||||
|
|
||||||
|
The model uses `skill_workshop`:
|
||||||
|
|
||||||
|
```text
|
||||||
|
action: create | update | revise | list | inspect | apply | reject | quarantine
|
||||||
|
```
|
||||||
|
|
||||||
|
Agents must use `skill_workshop` for generated skill work. They must not create
|
||||||
|
or change proposal files through `write`, `edit`, `exec`, shell commands, or
|
||||||
|
direct filesystem operations.
|
||||||
|
|
||||||
|
## Approval and autonomy
|
||||||
|
|
||||||
|
```json5
|
||||||
|
{
|
||||||
|
skills: {
|
||||||
|
workshop: {
|
||||||
|
autonomous: {
|
||||||
|
enabled: false,
|
||||||
|
},
|
||||||
|
approvalPolicy: "pending",
|
||||||
|
maxPending: 50,
|
||||||
|
maxSkillBytes: 40000,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- `autonomous.enabled`: allows OpenClaw to create pending proposals from durable
|
||||||
|
conversation signals after successful turns. Default: `false`.
|
||||||
|
- `approvalPolicy: "pending"`: requires an approval prompt before
|
||||||
|
agent-initiated `apply`, `reject`, or `quarantine`.
|
||||||
|
- `approvalPolicy: "auto"`: skips that approval prompt. The agent must still
|
||||||
|
call the action.
|
||||||
|
- `maxPending`: caps pending and quarantined proposals per workspace.
|
||||||
|
- `maxSkillBytes`: caps proposal body size. Default: `40000`.
|
||||||
|
|
||||||
|
Proposal descriptions are always capped at 160 bytes.
|
||||||
|
|
||||||
|
## Gateway methods
|
||||||
|
|
||||||
|
```text
|
||||||
|
skills.proposals.list
|
||||||
|
skills.proposals.inspect
|
||||||
|
skills.proposals.create
|
||||||
|
skills.proposals.update
|
||||||
|
skills.proposals.revise
|
||||||
|
skills.proposals.apply
|
||||||
|
skills.proposals.reject
|
||||||
|
skills.proposals.quarantine
|
||||||
|
```
|
||||||
|
|
||||||
|
Read-only methods require `operator.read`. Mutating methods require
|
||||||
|
`operator.admin`.
|
||||||
|
|
||||||
|
## Storage
|
||||||
|
|
||||||
|
```text
|
||||||
|
<OPENCLAW_STATE_DIR>/skill-workshop/
|
||||||
|
proposals.json
|
||||||
|
proposals/<proposal-id>/
|
||||||
|
proposal.json
|
||||||
|
PROPOSAL.md
|
||||||
|
rollback.json
|
||||||
|
assets/
|
||||||
|
examples/
|
||||||
|
references/
|
||||||
|
scripts/
|
||||||
|
templates/
|
||||||
|
```
|
||||||
|
|
||||||
|
Default state directory: `~/.openclaw`.
|
||||||
|
|
||||||
|
- `proposal.json`: canonical proposal record.
|
||||||
|
- `proposals.json`: fast listing index, rebuildable from proposal folders.
|
||||||
|
- `PROPOSAL.md`: pending skill proposal.
|
||||||
|
- `rollback.json`: recovery metadata written before apply changes live files.
|
||||||
|
|
||||||
|
## Limits
|
||||||
|
|
||||||
|
- Description: 160 bytes.
|
||||||
|
- Proposal body: `skills.workshop.maxSkillBytes` (default 40,000).
|
||||||
|
- Support files: 64 per proposal.
|
||||||
|
- Support file size: 256 KB each, 2 MB total.
|
||||||
|
- Pending and quarantined proposals: `skills.workshop.maxPending` per workspace
|
||||||
|
(default 50).
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
| Problem | Resolution |
|
||||||
|
| ---------------------------------------------- | -------------------------------------------------------------------------------------------- |
|
||||||
|
| `Skill proposal description is too large` | Shorten `description` to 160 bytes or less. |
|
||||||
|
| `Skill proposal content is too large` | Shorten the proposal body or raise `skills.workshop.maxSkillBytes`. |
|
||||||
|
| `Target skill changed after proposal creation` | Revise the proposal against the current target, or create a new proposal. |
|
||||||
|
| `Proposal scan failed` | Inspect scanner findings, then revise or quarantine the proposal. |
|
||||||
|
| `Support file paths must be under one of...` | Move support files under `assets/`, `examples/`, `references/`, `scripts/`, or `templates/`. |
|
||||||
|
| Proposal does not show in list | Check the selected `--agent` workspace and `OPENCLAW_STATE_DIR`. |
|
||||||
|
|
||||||
|
## Related
|
||||||
|
|
||||||
|
- [Skills](/tools/skills) for load order, precedence, and visibility
|
||||||
|
- [Creating skills](/tools/creating-skills) for hand-written `SKILL.md`
|
||||||
|
basics
|
||||||
|
- [Skills config](/tools/skills-config) for the full `skills.workshop` schema
|
||||||
|
- [Skills CLI](/cli/skills) for `openclaw skills` commands
|
||||||
@@ -8,7 +8,9 @@ title: "Skills config"
|
|||||||
|
|
||||||
Most skills loader/install configuration lives under `skills` in
|
Most skills loader/install configuration lives under `skills` in
|
||||||
`~/.openclaw/openclaw.json`. Agent-specific skill visibility lives under
|
`~/.openclaw/openclaw.json`. Agent-specific skill visibility lives under
|
||||||
`agents.defaults.skills` and `agents.list[].skills`.
|
`agents.defaults.skills` and `agents.list[].skills`. Skill Workshop behavior is
|
||||||
|
configured under `skills.workshop`; see
|
||||||
|
[Skill Workshop](/tools/skill-workshop) for the full creation and review flow.
|
||||||
|
|
||||||
```json5
|
```json5
|
||||||
{
|
{
|
||||||
@@ -118,10 +120,10 @@ Rules:
|
|||||||
clients to install private zip archives staged through `skills.upload.*`
|
clients to install private zip archives staged through `skills.upload.*`
|
||||||
(default: false). This only enables the uploaded-archive path; normal ClawHub
|
(default: false). This only enables the uploaded-archive path; normal ClawHub
|
||||||
installs do not require it.
|
installs do not require it.
|
||||||
- `workshop.autonomous.enabled`: allow agents to create pending Skill Workshop
|
- `workshop.autonomous.enabled`: allow agents to create pending proposals from
|
||||||
proposals from durable conversation signals after successful turns (default:
|
durable conversation signals after successful turns (default: false).
|
||||||
false). User-prompted skill creation still goes through Skill Workshop.
|
User-prompted skill creation still goes through Skill Workshop.
|
||||||
- `workshop.approvalPolicy`: proposal lifecycle policy. `pending` requires
|
- `workshop.approvalPolicy`: Skill Workshop review policy. `pending` requires
|
||||||
approval before agent-initiated apply/reject/quarantine actions; `auto`
|
approval before agent-initiated apply/reject/quarantine actions; `auto`
|
||||||
allows those actions without approval.
|
allows those actions without approval.
|
||||||
- `workshop.maxPending`: maximum pending/quarantined proposals retained per
|
- `workshop.maxPending`: maximum pending/quarantined proposals retained per
|
||||||
|
|||||||
@@ -118,66 +118,15 @@ workspace skill overrides them. You can gate them via
|
|||||||
See [Plugins](/tools/plugin) for discovery/config and [Tools](/tools) for
|
See [Plugins](/tools/plugin) for discovery/config and [Tools](/tools) for
|
||||||
the tool surface those skills teach.
|
the tool surface those skills teach.
|
||||||
|
|
||||||
## Skill Workshop proposals
|
## Skill Workshop
|
||||||
|
|
||||||
Skill Workshop proposals are durable drafts for creating or updating workspace
|
[Skill Workshop](/tools/skill-workshop) is the governed path for
|
||||||
skills without silently mutating active `SKILL.md` files. OpenClaw stores them
|
agent-generated or reviewed skill creation and improvement. It turns reusable
|
||||||
under:
|
work into a pending proposal, scans and hashes the proposal bundle, supports
|
||||||
|
review and revision, and writes the final `SKILL.md` only after apply.
|
||||||
|
|
||||||
```text
|
Use it when an agent or operator wants to capture reusable work without
|
||||||
<OPENCLAW_STATE_DIR>/skill-workshop/
|
silently mutating active workspace skills.
|
||||||
proposals.json
|
|
||||||
proposals/<proposal-id>/
|
|
||||||
proposal.json
|
|
||||||
PROPOSAL.md
|
|
||||||
references/
|
|
||||||
scripts/
|
|
||||||
rollback.json
|
|
||||||
```
|
|
||||||
|
|
||||||
The default state directory is `~/.openclaw`.
|
|
||||||
|
|
||||||
`proposal.json` is the canonical proposal record. `proposals.json` is the fast
|
|
||||||
listing manifest and can be rebuilt from proposal folders when missing or stale.
|
|
||||||
`PROPOSAL.md` marks draft content explicitly with `status: proposal`,
|
|
||||||
`version: v1`, and `date`; those proposal-only fields are stripped when the
|
|
||||||
proposal is applied as an active `SKILL.md`.
|
|
||||||
|
|
||||||
Proposal bodies honor `skills.workshop.maxSkillBytes`, and proposal
|
|
||||||
descriptions are capped at 160 bytes because they can appear in discovery and
|
|
||||||
listing output.
|
|
||||||
|
|
||||||
Proposal folders can also carry support files under `assets/`, `examples/`,
|
|
||||||
`references/`, `scripts/`, or `templates/`. OpenClaw records support file
|
|
||||||
metadata in `proposal.json`, stores the file contents beside `PROPOSAL.md`,
|
|
||||||
scans them with the proposal, and verifies their hashes before apply. Approved
|
|
||||||
support files are written into the active skill directory beside `SKILL.md`.
|
|
||||||
|
|
||||||
Only pending proposals can be revised or applied. Revision keeps the same
|
|
||||||
proposal id, increments the proposal version, refreshes the proposal date,
|
|
||||||
reruns scanner metadata, and preserves existing support files unless a new
|
|
||||||
support-file list is supplied. Apply writes to the selected workspace `skills/`
|
|
||||||
root, runs the skill scanner, writes rollback metadata, refuses to overwrite an
|
|
||||||
existing create target, and marks update proposals stale when the target skill
|
|
||||||
changed since proposal creation. Reject and quarantine update only proposal
|
|
||||||
metadata; they do not touch active skills.
|
|
||||||
|
|
||||||
Use the CLI for operator review:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
openclaw skills workshop list
|
|
||||||
openclaw skills workshop inspect <proposal-id>
|
|
||||||
openclaw skills workshop revise <proposal-id> --proposal ./PROPOSAL.md
|
|
||||||
openclaw skills workshop apply <proposal-id>
|
|
||||||
openclaw skills workshop reject <proposal-id>
|
|
||||||
openclaw skills workshop quarantine <proposal-id>
|
|
||||||
```
|
|
||||||
|
|
||||||
Agents can draft proposals through the `skill_workshop` tool when they identify
|
|
||||||
work worth reusing and can revise pending proposals during review. When the
|
|
||||||
user explicitly asks to approve/use/apply, reject, or quarantine a specific
|
|
||||||
proposal, the tool can perform that lifecycle action through Skill Workshop
|
|
||||||
instead of shell or direct filesystem changes.
|
|
||||||
|
|
||||||
## ClawHub (install and sync)
|
## ClawHub (install and sync)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user