Skip to content

Helm v0.7.0 — Skill Lifecycle Management

Choose a tag to compare

@JDeun JDeun released this 03 May 06:45
· 146 commits to main since this release

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; --apply to act)
    • inspection — events, negative-claims, umbrella
  • 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.py and skill_capture.py emit
    skill_used / skill_success / skill_failure / skill_promoted
    events when the skill is named, so use_count and last_used_at
    populate without anyone calling lifecycle commands by hand
  • candidate detection passes:
    • negative-claims flags SKILL.md lines containing stale-claim
      phrasing in English (does not work, unavailable, not installed,
      not supported, failed) and Korean (안 됨, 없음, 불가,
      실패, 지원하지 않음); fenced code blocks are skipped
    • umbrella clusters 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__.py and helm.py register the new skill-lifecycle
    subparser; existing skill / skill-approve / skill-reject flow into
    the lifecycle event log when applicable

Docs

  • new docs/skill-lifecycle.md covering layout, commands, configuration,
    source classification, runner integration, and the event log schema

Validation

  • 43 new unit tests in tests/test_skill_lifecycle.py covering 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 profiled inspect_local
    run that bumped car's use_count to 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.