Install
openclaw skills install @haocheng0126/trustloop-skill-evolverLet OpenClaw capture reusable workflows as managed skill candidates, support review or revision, and evolve safely through manual, assisted, or autonomous modes inside the current workspace.
openclaw skills install @haocheng0126/trustloop-skill-evolverManage a safe, mode-aware skill evolution loop inside the current workspace.
This skill is always on. Its job is to notice reusable workflows, turn them into managed skill candidates, support review and user suggestions, publish approved changes into ./skills/, and roll them back when needed.
This skill supports two install paths:
skills/ directoryskill_manage_managed toolDo not fail just because the plugin is missing.
If skill_manage_managed is available, prefer it for lifecycle mutations such as:
create_candidatemerge_candidateget_modeset_modereview_candidatepublish_candidaterollback_skillIf that tool is not available, continue in pure skill mode using built-in file tools and the references/templates shipped with this skill.
Only manage skills in the current workspace, and only when one of these is true:
./skills/learned-<slug>/SKILL.md frontmatter contains managed-by: skill-evolverRefuse to modify:
managed-by: skill-evolver markerBefore any publish or rollback action, read references/review-policy.md. For lifecycle details and state layout, read references/evolution-rules.md. For the native-tool path, read references/skill-manage-managed-tool.md.
All runtime state lives in the workspace root:
./.skill-evolver/candidates/./.skill-evolver/backups/./.skill-evolver/audit/./.skill-evolver/registry.json./.skill-evolver/config.jsonPublished managed skills live only in:
./skills/learned-<slug>/SKILL.mdInitialize missing state directories, registry.json, or config.json only when needed.
The learning loop supports three modes:
manual
assisted
patch_skillautonomous
patch_skill updates to the managed skill directlycreate_skill candidates as learned-*-canaryTreat manual as the safe default unless the user explicitly changes mode.
Keep the learning loop helpful, quiet, and low-friction.
Create a candidate only when at least one of these is true:
Do not create a candidate for trivial one-step actions, one-off facts, or workflows that depend on unsafe behavior.
When a reusable workflow should be learned:
patch_skill when the workflow materially overlaps an existing managed skill or pending candidate.create_skill only when no safe existing target matches.deprecate_skill only for already-managed skills that should stop being used.skill_manage_managed tool is available../.skill-evolver/config.json or from the native tool../.skill-evolver/candidates/<candidate-id>.md../.skill-evolver/registry.json../.skill-evolver/audit/.I found a reusable workflow and created candidate <id> for learned-foo. Publish it?Never auto-publish medium- or high-risk candidates.
When a candidate clearly duplicates another pending candidate, merge into the older candidate or patch the shared target skill instead of creating a new learned-* skill.
Keep the candidate-creation prompt short enough that the user can decide quickly without reading the whole draft.
Support these direct commands and close natural-language equivalents:
review skill candidatesapprove candidate <id>reject candidate <id>revise candidate <id> with suggestions: <feedback>publish candidate <id> as <name>rollback skill <name>show skill-evolver modeset skill-evolver mode <manual|assisted|autonomous>Behavior:
review: list pending or approved candidates with candidate_id, target_skill, change_type, risk_level, and a one-line summaryskill_manage_managed tool for lifecycle mutations when it is availableapprove: mark the candidate approved in registry.json, set approved_at if empty, and do not write into ./skills/reject: mark the candidate rejected and do not modify published skillsrevise: record the user's optimization suggestions, increment the candidate revision count, keep the candidate in review, and update the draft before asking againpublish: only allowed after approval, or after an unambiguous direct user reply to the publish promptrollback: restore the latest backup for a managed skill and update the registryshow mode: read ./.skill-evolver/config.json and explain the current mode in one short sentenceset mode: update ./.skill-evolver/config.json and confirm the new mode plus its publish behaviorSilence is never approval. When the user gives optimization feedback during review, treat it as a revision request rather than a rejection unless they explicitly reject the candidate. Accept natural-language review feedback when the intent is clear, even if the user does not use the exact command syntax.
When publishing a candidate:
./skills/.skill-evolver../.skill-evolver/backups/<skill-name>/../skills/<skill-name>/SKILL.md.managed-by: skill-evolvermanaged-version: <n>published-from-candidate: <candidate-id>published and set published_version.main or canary.For v0, managed skills should stay single-file unless the user explicitly asks for richer supporting files later.
Autonomous mode may publish low-risk new skills as learned-*-canary, but that does not remove the need for human review on higher-risk changes.
When the user asks to roll back a skill:
skill-evolver../skills/<skill-name>/SKILL.md.rolled_back.rollback_of to the restored backup identifier or path.If the skill is unmanaged or no backup exists, refuse and explain why.