How it works
- Proposal first: generated content is stored as
PROPOSAL.md, notSKILL.md. - Apply is the only live write: create, update, and revise never 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 go
staleif the live skill changes before apply. - Scanner gated: apply reruns the security scanner before writing. Only critical findings block apply; warn-level findings remain visible but do not block it.
- Recoverable: apply writes rollback metadata before touching live files.
- Consistent surfaces: chat, CLI, and Gateway all call the same service.
Lifecycle
pending proposal can be revised, applied, rejected, or quarantined.
Lifecycle curation
The Gateway tracks aggregate skill usage in the shared state database. Once a day, it reviews applied skills created through agent autocapture. Skills unused for more than 30 days becomestale; after 90 days they become archived and
are left out of new agent skill snapshots. Archived skill files remain
unchanged on disk. Operator-created skills, including proposals created through
the CLI or Gateway/Control UI, are treated as manual and never curated.
Pinned skills bypass lifecycle transitions. A stale skill returns to active
after it is used and the next sweep runs. Archived skills return only through an
explicit restore:
Lifecycle transitions and restores apply to new sessions; running sessions keep
their current skill snapshot.
--json. Status also reports deterministic overlap
candidates as suggestions only; it never merges skills or calls a model.
Chat
Ask the agent for the skill you want; it callsskill_workshop and returns a
proposal id.
Learn from recent work
Use/learn to turn the current conversation or named sources into one
standards-guided skill proposal:
/learn asks the agent to distill the reusable workflow from
the current conversation. With a request, the agent treats paths, URLs, pasted
notes, and conversation references as sources while honoring focus, scope, and
naming requirements. It gathers the sources with its existing tools, then calls
skill_workshop with action: "create".
The resulting proposal stays pending; /learn never applies it. Review and
apply it through the normal approval flow or with openclaw skills workshop.
Create:
apply, reject, and quarantine run without an additional
approval prompt by default. Set skills.workshop.approvalPolicy to "pending"
to require operator approval before those actions.
When approval is required, the prompt identifies the proposal id and target
skill, and shows the proposal description, support-file count, and body size.
Approval requests are bounded to finish before the agent tool watchdog. If no
decision arrives before the prompt expires, the lifecycle action does not run:
the proposal stays pending and unchanged. Decide later in the Skill Workshop UI or run
openclaw skills workshop apply|reject|quarantine <proposal-id>. Agents should
not retry an expired lifecycle action in a loop.
CLI
--agent <id> (target workspace; defaults to
cwd-inferred, then the default agent) and --json (structured output).
propose-create, propose-update, and revise also take --goal <text> and
--evidence <text> to record proposal context alongside --proposal.
evaluate runs through the live Gateway plugin registry, snapshots the current
proposal revision before dispatch, and accepts --correlation-id <id> for external
orchestration.
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.
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 asPROPOSAL.md with proposal-only
frontmatter:
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:
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.
Agent tool
The model usesskill_workshop with one required action:
create | update | revise | list | inspect | evaluate | apply | reject | quarantine.
Other parameters apply depending on the action:
Agents must use
skill_workshop for generated skill work and must not create or
change skill or proposal files directly. This rule is advisory and
prompt-enforced. A hard guard is not currently possible at the tool-policy seam.
skill_workshop is a built-in agent tool and is included in
tools.profile: "coding". If a stricter policy hides it, add
skill_workshop to the active tools.allow list, or use
tools.alsoAllow: ["skill_workshop"] when the scope uses a profile without an
explicit tools.allow. Sandboxed runs do not construct the host-side
Skill Workshop tool, so run proposal review actions from a normal host-side
agent session or the CLI.Suggested skills
OpenClaw detects durable instructions such as “next time,” “remember to,” and reactive corrections when an interactive turn ends, including failed turns. On the next turn, the agent offers to save the most recent detected workflow throughskill_workshop; the user decides whether to create a
proposal. This built-in suggestion does not create or change a skill by itself. Set
skills.workshop.autonomous.mode to propose to create pending proposals directly, or to auto
to apply scanner-approved captures through the normal Workshop service. The Control UI Workshop
tab shows whether self-learning is on; use the config setting to choose all three modes.
Scan past sessions
The Control UI can review older work without enabling autonomous self-learning. Open Plugins → Workshop and select Find skill ideas. The scan starts with the newest eligible sessions and reviews a bounded window of substantial work. It skips cron, heartbeat, hook, subagent, ACP, plugin-owned, and internal review sessions, plus conversations with fewer than six model turns. The reviewer uses the selected agent’s configured model and receives a secret-redacted, size-bounded transcript bundle. It applies the same conservative bar as experience review: a concrete recovery pattern or a stable procedure that would remove at least two future model or tool calls. Routine work and one-off facts should produce no proposal. One scan can create or revise at most three pending proposals. It cannot apply, reject, quarantine, or edit a live skill. The Workshop shows cumulative coverage, for example 20 sessions reviewed · Jun 18–today · 2 ideas found. Select Scan earlier work to continue from the persisted oldest-session cursor. After the available history is exhausted, the action becomes Scan new work. Historical review is manual even whenskills.workshop.autonomous.mode is off. Each click starts a model run,
so provider pricing and data-handling terms apply. The cursor and coverage counts
are stored in the shared OpenClaw state database; transcript content is not copied
into scan state.
In propose and auto modes, OpenClaw can also perform a conservative review after successful,
substantial work and after the whole agent system becomes idle. That isolated review can create or
revise at most one pending proposal. It cannot update a live skill or apply, reject, or quarantine a
proposal. In auto mode, the orchestrating capture pipeline applies the result afterward through
the normal scanner-gated service.
See Self-learning for enablement, eligibility, privacy and cost details,
the proposal threshold, and troubleshooting.
Approval and autonomy
Autonomous capture in
propose and auto modes recognizes prospective rules (for example, “from now on”) and reactive
corrections (for example, “that’s not what I asked”). It groups new instructions by topic into up
to three proposals per turn, routes vocabulary matches to existing writable workspace skills, and
revises its own pending proposal when another correction targets the same skill.
For successful substantial work without an explicit correction, an isolated run of the selected
model decides whether the completed trajectory clears the conservative proposal bar. The
foreground model is not prompted to learn before it replies. The background reviewer preserves the
foreground run as proposal provenance, cannot access general agent tools, and cannot make lifecycle
decisions. In auto mode, the capture pipeline applies the resulting pending proposal only after
the isolated run completes. The review starts only when the foreground runtime reports its resolved model
and that skill_workshop was actually available. Restrictive or unknown tool policy therefore
fails closed and creates no proposal.
See Self-learning for the complete autonomous review behavior and safety
model.
Proposal descriptions are always capped at 160 bytes, independent of
maxSkillBytes.
Gateway methods
requestRevision is Gateway-only (no CLI or agent-tool equivalent): it
forwards free-text revision instructions to the owning agent’s chat session
instead of replacing PROPOSAL.md directly, for UIs that ask the agent to
revise rather than submit literal new content.
historyStatus and historyScan are Control UI support methods. historyScan
accepts direction: "older" | "newer"; it always leaves results as pending
proposals.
Storage
~/.openclaw.
state/openclaw.sqlite: canonical proposal records, lifecycle status, origin attribution, and apply rollback metadata.PROPOSAL.md: pending skill proposal.- Support files remain beside
PROPOSAL.mdso operators can review the proposed skill as a normal directory.
openclaw doctor --fix imports the previous proposals.json, proposal.json, and
rollback.json metadata into SQLite after verifying each proposal, then removes
the migrated JSON files. If an agent’s configured workspace changes, its earlier
proposals remain listed with a previous-workspace marker instead of disappearing.
Limits
Troubleshooting
Tool-policy diagnostic
Inpropose and auto modes, openclaw doctor runs the
core/doctor/skill-workshop-tool-policy check for the default agent. If policy
hides skill_workshop, the warning names the first excluding config layer and
the exact allow or alsoAllow change to make. Older runbooks may still use
openclaw plugins inspect skill-workshop; that command now explains that Skill
Workshop is built in and prints the same policy hint when applicable.
Related
- Skills for load order, precedence, and visibility
- Self-learning for conservative post-run skill proposals
- Creating skills for hand-written
SKILL.mdbasics - Skills config for the full
skills.workshopschema - Skills CLI for
openclaw skillscommands