Caricamento in corso...
Caricamento in corso...
Last synced: Today, 22:00
Technical reference for the OpenClaw framework. Real-time synchronization with the official documentation engine.
Use this file to discover all available pages before exploring further.
Skill Workshop is experimental. It is disabled by default, its capture heuristics and reviewer prompts may change between releases, and automatic writes should be used only in trusted workspaces after reviewing pending-mode output first.
Skill Workshop is procedural memory for workspace skills. It lets an agent turn reusable workflows, user corrections, hard-won fixes, and recurring pitfalls into
SKILL.mdtext<workspace>/skills/<skill-name>/SKILL.md
This is different from long-term memory:
Skill Workshop is useful when the agent learns a procedure such as:
It is not intended for:
The bundled plugin is experimental and disabled by default unless it is explicitly enabled in
plugins.entries.skill-workshopThe plugin manifest does not set
enabledByDefault: trueenabled: trueExperimental means:
Minimal safe config:
json5{ plugins: { entries: { "skill-workshop": { enabled: true, config: { autoCapture: true, approvalPolicy: "pending", reviewMode: "hybrid", }, }, }, }, }
With this config:
skill_workshopUse automatic writes only in trusted workspaces:
json5{ plugins: { entries: { "skill-workshop": { enabled: true, config: { autoCapture: true, approvalPolicy: "auto", reviewMode: "hybrid", }, }, }, }, }
approvalPolicy: "auto"| Key | Default | Range / values | Meaning |
|---|---|---|---|
text enabled | text true | boolean | Enables the plugin after the plugin entry is loaded. |
text autoCapture | text true | boolean | Enables post-turn capture/review on successful agent turns. |
text approvalPolicy | text "pending" | text "pending"text "auto" | Queue proposals or write safe proposals automatically. |
text reviewMode | text "hybrid" | text "off"text "heuristic"text "llm"text "hybrid" | Chooses explicit correction capture, LLM reviewer, both, or neither. |
text reviewInterval | text 15 | text 1..200 | Run reviewer after this many successful turns. |
text reviewMinToolCalls | text 8 | text 1..500 | Run reviewer after this many observed tool calls. |
text reviewTimeoutMs | text 45000 | text 5000..180000 | Timeout for the embedded reviewer run. |
text maxPending | text 50 | text 1..200 | Max pending/quarantined proposals kept per workspace. |
text maxSkillBytes | text 40000 | text 1024..200000 | Max generated skill/support file size. |
Recommended profiles:
json5// Conservative: explicit tool use only, no automatic capture. { autoCapture: false, approvalPolicy: "pending", reviewMode: "off", }
json5// Review-first: capture automatically, but require approval. { autoCapture: true, approvalPolicy: "pending", reviewMode: "hybrid", }
json5// Trusted automation: write safe proposals immediately. { autoCapture: true, approvalPolicy: "auto", reviewMode: "hybrid", }
json5// Low-cost: no reviewer LLM call, only explicit correction phrases. { autoCapture: true, approvalPolicy: "pending", reviewMode: "heuristic", }
Skill Workshop has three capture paths.
The model can call
skill_workshopThis is the most explicit path and works even with
autoCapture: falseWhen
autoCapturereviewModeheuristichybridnext timefrom now onremember tomake sure toalways ... use/check/verify/record/save/preferprefer ... when/for/instead/usewhen askedThe heuristic creates a proposal from the latest matching user instruction. It uses topic hints to choose skill names for common workflows:
animated-gif-workflowscreenshot-asset-workflowqa-scenario-workflowgithub-pr-workflowlearned-workflowsHeuristic capture is intentionally narrow. It is for clear corrections and repeatable process notes, not for general transcript summarization.
When
autoCapturereviewModellmhybridThe reviewer receives:
The reviewer has no tools:
disableTools: truetoolsAllow: []disableMessageTool: trueThe reviewer returns either
{ "action": "none" }actioncreateappendreplaceappendreplacecreateExample
createjson{ "action": "create", "skillName": "media-asset-qa", "title": "Media Asset QA", "reason": "Reusable animated media acceptance workflow", "description": "Validate externally sourced animated media before product use.", "body": "## Workflow\n\n- Verify true animation.\n- Record attribution.\n- Store a local approved copy.\n- Verify in product UI before final reply." }
appendsectionbodyreplaceoldTextnewTextEvery generated update becomes a proposal with:
idcreatedAtupdatedAtworkspaceDiragentIdsessionIdskillNametitlereasonsourcetoolagent_endreviewerstatuschangescanFindingsquarantineReasonProposal statuses:
pendingapplied<workspace>/skillsrejectedquarantinedState is stored per workspace under the Gateway state directory:
text<stateDir>/skill-workshop/<workspace-hash>.json
Pending and quarantined proposals are deduplicated by skill name and change payload. The store keeps the newest pending/quarantined proposals up to
maxPendingThe plugin registers one agent tool:
textskill_workshop
statusCount proposals by state for the active workspace.
json{ "action": "status" }
Result shape:
json{ "workspaceDir": "/path/to/workspace", "pending": 1, "quarantined": 0, "applied": 3, "rejected": 0 }
list_pendingList pending proposals.
json{ "action": "list_pending" }
To list another status:
json{ "action": "list_pending", "status": "applied" }
Valid
statuspendingappliedrejectedquarantinedlist_quarantineList quarantined proposals.
json{ "action": "list_quarantine" }
Use this when automatic capture appears to do nothing and the logs mention
skill-workshop: quarantined <skill>inspectFetch a proposal by id.
json{ "action": "inspect", "id": "proposal-id" }
suggestCreate a proposal. With
approvalPolicy: "pending"json{ "action": "suggest", "skillName": "animated-gif-workflow", "title": "Animated GIF Workflow", "reason": "User established reusable GIF validation rules.", "description": "Validate animated GIF assets before using them.", "body": "## Workflow\n\n- Verify the URL resolves to image/gif.\n- Confirm it has multiple frames.\n- Record attribution and license.\n- Avoid hotlinking when a local asset is needed." }
applyApply a pending proposal.
json{ "action": "apply", "id": "proposal-id" }
applytextquarantined proposal cannot be applied
rejectMark a proposal rejected.
json{ "action": "reject", "id": "proposal-id" }
write_support_fileWrite a supporting file inside an existing or proposed skill directory.
Allowed top-level support directories:
references/templates/scripts/assets/Example:
json{ "action": "write_support_file", "skillName": "release-workflow", "relativePath": "references/checklist.md", "body": "# Release Checklist\n\n- Run release docs.\n- Verify changelog.\n" }
Support files are workspace-scoped, path-checked, byte-limited by
maxSkillBytesSkill Workshop writes only under:
text<workspace>/skills/<normalized-skill-name>/
Skill names are normalized:
[a-z0-9_-]-[a-z0-9][a-z0-9_-]{1,79}For
createSKILL.md## WorkflowFor
appendFor
replaceoldTextAll writes are atomic and refresh the in-memory skills snapshot immediately, so the new or updated skill can become visible without a Gateway restart.
Skill Workshop has a safety scanner on generated
SKILL.mdCritical findings quarantine proposals:
| Rule id | Blocks content that... |
|---|---|
text prompt-injection-ignore-instructions | tells the agent to ignore prior/higher instructions |
text prompt-injection-system | references system prompts, developer messages, or hidden instructions |
text prompt-injection-tool | encourages bypassing tool permission/approval |
text shell-pipe-to-shell | includes text curltext wgettext shtext bashtext zsh |
text secret-exfiltration | appears to send env/process env data over the network |
Warn findings are retained but do not block by themselves:
| Rule id | Warns on... |
|---|---|
text destructive-delete | broad text rm -rf |
text unsafe-permissions | text chmod 777 |
Quarantined proposals:
scanFindingsquarantineReasonlist_quarantineapplyTo recover from a quarantined proposal, create a new safe proposal with the unsafe content removed. Do not edit the store JSON by hand.
When enabled, Skill Workshop injects a short prompt section that tells the agent to use
skill_workshopThe guidance emphasizes:
The write mode text changes with
approvalPolicyHeuristic capture does not call a model.
LLM review uses an embedded run on the active/default agent model. It is threshold-based so it does not run on every turn by default.
The reviewer:
reviewTimeoutMsIf the reviewer fails, times out, or returns invalid JSON, the plugin logs a warning/debug message and skips that review pass.
Use Skill Workshop when the user says:
Good skill text:
markdown## Workflow - Verify the GIF URL resolves to `image/gif`. - Confirm the file has multiple frames. - Record source URL, license, and attribution. - Store a local copy when the asset will ship with the product. - Verify the local asset renders in the target UI before final reply.
Poor skill text:
markdownThe user asked about a GIF and I searched two websites. Then one was blocked by Cloudflare. The final answer said to check attribution.
Reasons the poor version should not be saved:
Check whether the plugin is loaded:
bashopenclaw plugins list --enabled
Check proposal counts from an agent/tool context:
json{ "action": "status" }
Inspect pending proposals:
json{ "action": "list_pending" }
Inspect quarantined proposals:
json{ "action": "list_quarantine" }
Common symptoms:
| Symptom | Likely cause | Check |
|---|---|---|
| Tool is unavailable | Plugin entry is not enabled | text plugins.entries.skill-workshop.enabledtext openclaw plugins list |
| No automatic proposal appears | text autoCapture: falsetext reviewMode: "off" | Config, proposal status, Gateway logs |
| Heuristic did not capture | User wording did not match correction patterns | Use explicit text skill_workshop.suggest |
| Reviewer did not create a proposal | Reviewer returned text none | Gateway logs, text reviewTimeoutMs |
| Proposal is not applied | text approvalPolicy: "pending" | text list_pendingtext apply |
| Proposal disappeared from pending | Duplicate proposal reused, max pending pruning, or was applied/rejected/quarantined | text statustext list_pendingtext list_quarantine |
| Skill file exists but model misses it | Skill snapshot not refreshed or skill gating excludes it | text openclaw skills |
Relevant logs:
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 updateRepo-backed QA scenarios:
qa/scenarios/plugins/skill-workshop-animated-gif-autocreate.mdqa/scenarios/plugins/skill-workshop-pending-approval.mdqa/scenarios/plugins/skill-workshop-reviewer-autonomous.mdRun the deterministic coverage:
bashpnpm openclaw qa suite \ --scenario skill-workshop-animated-gif-autocreate \ --scenario skill-workshop-pending-approval \ --concurrency 1
Run reviewer coverage:
bashpnpm openclaw qa suite \ --scenario skill-workshop-reviewer-autonomous \ --concurrency 1
The reviewer scenario is intentionally separate because it enables
reviewMode: "llm"Avoid
approvalPolicy: "auto"Use pending mode first. Switch to auto mode only after reviewing the kind of skills the agent proposes in that workspace.
© 2024 TaskFlow Mirror
Powered by TaskFlow Sync Engine