Helm v0.7.0 — Skill Lifecycle Management
Helm v0.7.0 — Skill Lifecycle Management
Date: 2026-05-03
Helm 0.7.0 adds a new sidecar layer that tracks how skills are used over
time, surfaces stale and umbrella candidates, and provides safe, reversible
curation commands. Built for workspaces where the skill catalog has grown
past the point where intuition is enough to decide what should still exist.
The whole layer sits next to the workspace, not inside it: skills' own
SKILL.md files are never modified by lifecycle operations, and archived
skills move to a dot-prefixed directory (skills/.archive/<name>/) that
runtime discovery skips automatically.
Added
- 11 new CLI subcommands under
helm skill-lifecycle:- read-only —
scan,status,report - mutating —
pin,unpin,stale,archive,restore(dry-run by
default;--applyto act) - inspection —
events,negative-claims,umbrella
- read-only —
- sidecar metadata layout under
<workspace>/.openclaw/skill-lifecycle/:
usage.json(per-skill index),events.jsonl(append-only log),
config.json(policy thresholds and protected sources) - runner integration:
run_with_profile.pyandskill_capture.pyemit
skill_used/skill_success/skill_failure/skill_promoted
events when the skill is named, souse_countandlast_used_at
populate without anyone calling lifecycle commands by hand - candidate detection passes:
negative-claimsflagsSKILL.mdlines containing stale-claim
phrasing in English (does not work,unavailable,not installed,
not supported,failed) and Korean (안 됨,없음,불가,
실패,지원하지 않음); fenced code blocks are skippedumbrellaclusters active skills by shared name token after dropping
generic stop-tokens (ko,ops,data,info,v1,v2)
- safety guarantees: archive refuses pinned skills, protected sources
(bundled / hub by default), already-archived or missing skills, and
target-directory collisions; restore refuses live-target collisions
Changed
- release / status copy now points at v0.7.0
commands/__init__.pyandhelm.pyregister the newskill-lifecycle
subparser; existingskill/skill-approve/skill-rejectflow into
the lifecycle event log when applicable
Docs
- new
docs/skill-lifecycle.mdcovering layout, commands, configuration,
source classification, runner integration, and the event log schema
Validation
- 43 new unit tests in
tests/test_skill_lifecycle.pycovering scan,
pin / unpin, stale, archive → restore roundtrip, runner event recording,
negative-claim detection (English + Korean, code-fence skipping), and
umbrella token clustering - full suite: 352 tests passing locally
- smoke-tested against the maintainer's
~/.openclaw/workspace: 56 skills
registered, runner integration confirmed via a profiledinspect_local
run that bumpedcar'suse_countto 1, 32 negative-claim candidates
and two umbrella clusters (search/market) reported
Migration
No migration required. The lifecycle layer initializes lazily on the first
non-dry-run helm skill-lifecycle scan. Existing workspaces continue to
work; runner event emission is fail-soft when no usage.json is present.