Files
openclaw/docs/tools/self-learning.md
T
Ayaan Zaidi 90e39c49e4 feat(skills): reviewer patch contract, active learning bias, shallow-turn accumulation
Self-learning reviewer edits existing skills via targeted patches: it quotes the exact live text (or appends a section) and the service composes the full body inside the receipt-pinned read that hash-binds the proposal — untouched content survives by construction, and patches auto-apply through the scanner-gated pipeline. Full-body rewrites and oversized-skill edits stay pending for the operator. The review prompt shifts to active capture within the existing evidence gates, and shallow same-sender turns accumulate per session (provider-identity scoped, zero-iteration and duplicate-run contracts honored, aborted provenance carried, bounded state) so quick corrections get reviewed with their own transcripts. Replaces closed #119856.
2026-08-06 17:52:03 +05:30

311 lines
14 KiB
Markdown

---
summary: "Turn corrections and successful work into reusable skills through Skill Workshop"
read_when:
- You want OpenClaw to learn reusable procedures from completed conversations
- You are choosing between off, propose, and auto self-learning modes
- You need to understand self-learning safety, cost, privacy, or troubleshooting
title: "Self-learning"
sidebarTitle: "Self-learning"
---
Self-learning turns corrections and successful work into reusable skills. Skills
are the durable unit: they hold procedures that future sessions can discover and
follow. Every learned skill flows through [Skill Workshop](/tools/skill-workshop),
the same governed proposal, scan, apply, and lifecycle path used for explicit
skill authoring.
The default mode is `auto`. OpenClaw captures strong learning signals and applies
them through the normal scanner-gated Workshop service without asking for
approval. Choose `propose` to review every capture before it becomes active, or
`off` to disable autonomous capture.
## Experience review
Every autonomous capture is authored by a model reviewing real evidence. There
is no template or pattern-matching path: content that reaches a proposal was
written by the reviewer against the Workshop authoring standards, never copied
from conversation text.
After substantial work, OpenClaw can run one isolated background review to find
a reusable recovery technique or a stable procedure that would remove at least
two future model or tool round trips. Deep turns the user interrupted qualify
too: the wrong path and its correction are exactly the evidence worth keeping.
The reviewer is told when a turn was interrupted and captures only procedures
that visibly worked before the stop. Turns that ended in a provider or prompt
error never schedule a review; that failure is transient environment noise, and
a review on the same model would likely hit it again.
Experience review starts only when all of these conditions hold:
- the foreground turn completed or was interrupted, but did not end in a
provider or prompt error;
- the current turn used at least 10 model iterations, or same-sender shallow
turns in the session accumulated that much unreviewed work (the accumulated
review covers the bounded message window of those turns);
- the run was an eligible foreground conversation, not cron, heartbeat, memory,
overflow, hook, subagent, or review work;
- the runtime reported the resolved provider, model, and actual availability of
`skill_workshop`;
- the system has been quiet for 30 seconds; and
- no agent or reply run is still active.
A later foreground completion in the same session restarts the quiet period.
Only one experience review runs at a time. The foreground answer is never delayed.
The reviewer is isolated and biased toward small, well-evidenced captures. It
sees a bounded workspace skill list, can list or inspect proposals, and can read
a bounded excerpt of a writable skill for context. It drafts at most one pending
proposal: preferring to revise a matching pending proposal, then to patch the
existing skill governing the work, and creating a new skill only when nothing
covers the class. A patch proposal quotes the exact live text to change (or
appends a new section) and the tool composes the full body inside the same read
that hash-binds the proposal, so untouched content survives by construction and
patches auto-apply in `auto` mode. A patch requires a full-skill read receipt:
skills beyond the bounded read budget cannot be patched autonomously. A full-body update rewrite always stays
pending for operator review. Its one-mutation budget is shared across retries. Every
mutation is a pending proposal — it never writes a live skill directly and
cannot apply, reject, quarantine, message, or use general agent tools. The
reviewed trajectory is evidence, not instructions.
Good candidates include:
- a reliable recovery after repeated tool or model failures;
- a durable user correction or standing instruction ("from now on," "always,"
"never," "stop doing X"), embedded as a procedure step in the skill governing
that work;
- a non-obvious ordering constraint that prevented a recurring error;
- a stable multi-step workflow that required repeated discovery; or
- a reusable preflight that would avoid several future calls.
The reviewer should abstain for:
- routine successful work or a one-time request;
- personal facts and simple preferences;
- transient environment or service failures;
- generic advice without concrete supporting evidence;
- unsupported negative claims; or
- secrets and credential material.
## Mode policy
| Mode | Capture behavior |
| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `off` | Does not create experience-review captures. |
| `propose` | Creates or revises pending proposals. Nothing applies automatically. |
| `auto` | Creates or revises proposals, then applies new-skill and patch proposals through the normal Workshop apply path. Full-body updates stay pending for review. This is the default. |
Set the mode with the CLI:
```bash
openclaw config set skills.workshop.autonomous.mode auto
openclaw config set skills.workshop.autonomous.mode propose
openclaw config set skills.workshop.autonomous.mode off
```
Or edit `~/.openclaw/openclaw.json`:
```json5
{
skills: {
workshop: {
autonomous: {
mode: "auto",
},
},
},
}
```
Changing the mode does not alter existing proposals or applied skills. Manual
history review, `/learn`, and explicit Workshop requests remain available in all
three modes.
## Why auto is safe to default
Automatic learning uses the same apply path as an operator-approved Workshop
proposal. It does not give the isolated reviewer new tools or a way to bypass
lifecycle checks.
Every learned skill receives these controls:
- **Security scan at apply:** Workshop reruns the scanner immediately before the
live write. A critical finding quarantines the proposal instead of applying it.
- **Workspace-only writes:** creates and updates can target only writable skills
in the selected workspace. Bundled, plugin, managed, personal-agent, system,
and extra-root skills remain outside the write boundary.
- **Hash binding:** update proposals bind to the current live skill and go stale
if that target changes before apply.
- **Rollback metadata:** apply records the prior skill and support-file contents
before the live write.
- **Curator lifecycle:** learned skills unused for 30 days become stale and after
90 days become archived. Pin keeps a skill active; restore returns an archived
skill to new session snapshots.
- **Authoring standards:** learned skills use class-level names, trigger-first
descriptions, evidence-backed steps, and token-efficient language.
- **Bounded failure:** an automatic apply is attempted once. A normal apply
failure leaves the proposal pending, while a scanner-critical proposal is
quarantined. OpenClaw does not retry in a loop.
Reject a pending miscapture with one command:
```bash
openclaw skills workshop reject <proposal-id> --reason "Not reusable"
```
Applied captures remain visible in `openclaw skills workshop list`, retain their
rollback metadata, and enter curator lifecycle management. This makes
approval-free learning reversible and observable rather than silent.
Residual risk remains: learned content comes from conversation and tool output,
and the scanner blocks recognized dangerous patterns, not every possible piece
of bad advice. Review `openclaw skills workshop list` when in doubt.
## Runtime support
Delayed experience review requires the runtime to report its resolved model and
actual `skill_workshop` availability. The embedded runner and Codex app-server
harness report those facts; Codex also reports its exact model-iteration count.
Other CLI-backed runtimes fail closed until they provide the same runtime facts.
`/learn` does not depend on delayed review and continues to work on those
runtimes.
## Cost and privacy
Experience review adds one bounded model run on the configured provider only
after a substantial turn, not after every message. The review can make more
than one provider request while it inspects or drafts its single proposal.
A deep-turn review receives only the current turn beginning with its most
recent user message. A review triggered by accumulated shallow turns instead
receives the bounded message window of those same-sender turns (at most 40
messages); accumulation restarts whenever the sender, provider, model, or auth
profile changes, so no turn is disclosed to a provider identity other than its
own. Either way the rendered trajectory is limited to 60,000 characters; when
the bundle is too large, OpenClaw keeps the first message and newest evidence
and marks the omitted middle.
The reviewer reuses the foreground provider, model, and available auth identity,
with model fallbacks disabled. Provider pricing and data-handling terms apply to
the additional run.
Manual history scan uses a separate bounded path. It reviews up to 20 substantial
sessions with at least six model turns, redacts recognized secrets, bounds the
transcript bundle, and can create or revise at most three pending proposals. It
stores cursor and coverage metadata in the shared state database without copying
transcript content into scan state.
<Warning>
Experience review and manual history scan can send eligible conversation
content, including tool inputs and results, to the configured model provider.
Choose a provider and mode that match the workspace privacy and data-handling
requirements.
</Warning>
## Review and revert learning
List and inspect every pending, applied, rejected, quarantined, or stale capture:
```bash
openclaw skills workshop list
openclaw skills workshop inspect <proposal-id>
```
Stop a pending capture from becoming active or quarantine it for safety review:
```bash
openclaw skills workshop reject <proposal-id> --reason "Too specific"
openclaw skills workshop quarantine <proposal-id> --reason "Needs security review"
```
Inspect and manage applied learned skills through the curator:
```bash
openclaw skills curator status
openclaw skills curator pin <skill>
openclaw skills curator unpin <skill>
openclaw skills curator restore <skill>
```
Use `/learn` when you want an explicit proposal from the current conversation or
named sources:
```text
/learn
/learn docs/runbook.md; focus on recovery
```
`/learn` always creates a pending proposal and never auto-applies it.
To review older work manually, open **Plugins -> Workshop** in Control UI and
select **Find skill ideas**. Each click reviews one bounded window and leaves any
result pending regardless of autonomous mode.
## Configuration reference
| Setting | Default | Effect |
| ------------------------------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------ |
| `skills.workshop.autonomous.mode` | `"auto"` | Chooses `off`, `propose`, or `auto` capture behavior. |
| `skills.workshop.approvalPolicy` | `"auto"` | Controls prompts for normal agent-initiated lifecycle calls. It never expands the isolated reviewer tool surface. |
| `skills.workshop.maxPending` | `50` | Caps pending and quarantined proposals per workspace. |
| `skills.workshop.maxSkillBytes` | `40000` | Caps proposal body size in bytes. |
| `skills.workshop.allowSymlinkTargetWrites` | `false` | Allows apply through explicitly trusted workspace skill symlinks. Capture itself does not widen the trusted target list. |
See [Skills config](/tools/skills-config#workshop-skills-workshop) for ranges and
the complete `skills.*` schema.
## Troubleshooting
### No capture appears
Check the following:
1. `skills.workshop.autonomous.mode` is `propose` or `auto` in the active Gateway
config.
2. The turn reached at least 10 model iterations without ending in a provider or
prompt error.
3. The conversation is eligible foreground work.
4. The runtime reported the resolved model and actual `skill_workshop`
availability.
5. The run was not sandboxed and tool policy still permits `skill_workshop`.
6. The Gateway stayed running and idle through the 30-second quiet period.
An eligible experience review can still abstain. No proposal is the expected
result when the evidence does not clear the reusable-procedure bar.
### Doctor reports that Workshop is hidden
In `propose` and `auto` modes, `openclaw doctor` checks whether the default agent
tool policy permits `skill_workshop`. Apply the reported `tools.allow` or
`tools.alsoAllow` change, or set the autonomous mode to `off`.
### A proposal remains pending in auto mode
Automatic apply runs once. Inspect the proposal and its scanner state:
```bash
openclaw skills workshop inspect <proposal-id>
```
A normal write or target failure leaves it pending for manual review. A critical
scanner result moves it to quarantine. Fix the cause and apply manually; do not
build a retry loop around automatic capture.
### Too many low-value captures appear
Switch to `propose` to review every capture, or `off` to disable autonomous
capture:
```bash
openclaw config set skills.workshop.autonomous.mode propose
openclaw config set skills.workshop.autonomous.mode off
```
Existing proposals and applied skills remain visible after the mode changes.
## Related
- [Skill Workshop](/tools/skill-workshop) for proposal lifecycle and storage
- [Creating skills](/tools/creating-skills) for hand-authored skills
- [Skills config](/tools/skills-config) for every `skills.*` setting
- [Skills CLI](/cli/skills) for Workshop and curator commands