Skills
Proposal content, support files, and the agent tool
Plugin evaluation and lifecycle hooks
Gateway plugins can extend Skill Workshop without owning proposal storage or live skill writes:
skill_proposal_evaluatereceives an exact candidate bundle and, for update proposals, the complete baseline skill. It returns attributed findings, metrics, and an optionalpass,revise, orblockdecision.skill_proposal_changedobserves durablecreated,revised,evaluation_completed,applied,rejected,quarantined, andstaleevents.skill_changedobserves committed live skillcreated,updated, andremovedevents from Workshop and supported install/uninstall paths.
Evaluations are explicit from the CLI, Control UI, Gateway
skills.proposals.evaluate method, or agent skill_workshop action. Results
are stored on the exact proposal revision and in the append-only proposal event
ledger. Evaluator failures remain attributed results; only a completed
decision: "block" prevents apply. Apply also revalidates the evaluated target
tree, so any live skill asset drift requires a fresh evaluation.
The lifecycle supports external optimization loops without embedding one.
Controllers can consume skills.proposals.events.list, evaluate an exact
revisionHash, revise with expectedRevisionHash and correlationId, then continue
from the returned event sequence. OpenClaw does not schedule, auto-revise, or
decide when such a loop should stop.
Proposal content
While pending, the proposal is stored as PROPOSAL.md with proposal-only
frontmatter:
---name: "morning-catchup"description: "Daily inbox catch-up: triage, archive, surface, draft, plan"status: proposalversion: "v1"date: "2026-05-30T00:00:00.000Z"---On apply, Skill Workshop writes the active SKILL.md and removes the
proposal-only fields: status, proposal version, and proposal date.
Support files
Use --proposal-dir when the proposed skill needs files beside
PROPOSAL.md:
openclaw skills workshop propose-create \ --name weekly-update \ --description "Friday wrap-up: stats, highlights, next week's top three" \ --proposal-dir ./weekly-update-proposalThe directory must contain PROPOSAL.md. Support files must live under
assets/, examples/, references/, scripts/, or templates/. Skill
Workshop scans, hashes, and stores them with the proposal, then writes them
beside the live SKILL.md only on apply.
Rejected support-file paths: absolute paths, hidden path segments, path traversal, overlapping paths, executable files, non-UTF-8 text, null bytes, and paths outside the standard support folders.
Directory drafts must be completely readable and fit within eight path
components, including the filename. Evaluator bundles require all included target
content to be readable and within sixteen path components. Root .clawhub,
.clawdhub, and .openclaw metadata entries are excluded; those names nested
elsewhere remain included. Unreadable included directories or deeper content
produce an error. Fix the reported directory or reduce its nesting, then retry.
For a collection restore failure, follow the
manual recovery guidance
instead of restructuring the live tree.
Agent tool
For personal library operations, skill_workshop exposes
list | read | create | update | share | unshare | transfer | activate | remove | rollback.
The Gateway chooses the authorized namespace. When Workshop authoring is also
available, target: "personal" selects the personal library. Reads return a
stable skill ID and revision. Updates require skill_id and expected_revision;
omit proposal_content to preserve the instructions. Use files for named
support-file upserts and delete_files for explicit removals. Unmentioned
support files are preserved. Large instructions are returned whole or explicitly
omitted with directions to the operator workflow; binary supporting content is
not injected into model context.
For Workshop proposals, the tool uses one required action:
create | read | prepare_patch | patch | update | revise | list | inspect | evaluate | apply | reject | quarantine | history | restore_collection.
Other Workshop parameters apply depending on the action:
| Parameter | Used by | Notes |
|---|---|---|
name |
create, inspect, revise |
Required for create; resolves a pending proposal by name otherwise |
description |
create, update, revise |
Max 160 bytes |
skill_name |
read, prepare_patch, patch, update |
Existing skill name or key |
old_string |
prepare_patch, patch |
Exact current text; prepare it when the complete skill cannot be read |
new_string |
patch |
Replacement for the exact current text |
proposal_content |
create, update, revise |
Required for create/update; omit on revise to preserve the body |
support_files |
create, update, revise |
Array of { path, content } |
goal, evidence |
create, update, revise |
Free-text context |
proposal_id |
inspect, revise, evaluate, apply, reject, quarantine |
Target proposal |
artifact_path |
inspect |
PROPOSAL.md or one listed support-file path |
expected_revision_hash |
evaluate, apply, reject, quarantine |
Rejects a stale orchestration step |
correlation_id |
evaluate, revise, apply, reject, quarantine |
External run or experiment correlation |
reason |
apply, reject, quarantine |
Optional |
query, status, limit |
list |
Filter/paginate; limit max 50, default 20 |
read and prepare_patch return the resolved skillName. Reuse that name as
skill_name in follow-up calls; a metadata skillKey can match a different
skill's exact name. Update proposals and revisions preserve the existing skill's
frontmatter name.
Only one prepared patch span may be active per skill. A second
prepare_patch is rejected until a patch attempt consumes or invalidates the
active authorization.
inspect returns proposal metadata, a bounded artifact manifest, and one
complete artifact when it fits the selected model's context budget. It selects
PROPOSAL.md by default. Set artifact_path to read one support file
separately. When the selected artifact does not fit, the result omits its body,
reports the original size, and points to smaller per-artifact reads or the
unbounded operator CLI command.
Agents must use skill_workshop for generated skill work and must not create or
change skill or proposal files directly during foreground authoring. Automatic
background maintenance uses the rooted file-tool path described in
Self-learning and approval settings instead.
The foreground rule is advisory and prompt-enforced. A hard guard is not
currently possible at the tool-policy seam.