You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #859 vendors the Claude Code plugin, shared skills, Hermes, and OpenClaw into the monorepo. Now that everything is co-located, the two overlapping skill collections can be deduplicated. This split arrived organically and should be cleaned up — it is not an intentional design boundary.
plugins/claude-code/skills/ — 6 hand-maintained skills, several of which duplicate the shared ones
The tell: OpenClaw already treats skills/ as the single source (bun run fetch-skills bundles them). The Claude Code plugin is the outlier — it reinvents its own parallel set. Aligning the plugin to the same "bundle shared skills + add host-specific glue" pattern is the consistent architecture.
Target architecture
One canonical set of memory-* skills in skills/. Both hosts consume it identically:
OpenClaw: bundles via fetch-skills (already done)
Claude Code plugin: bundles the same shared skills, and layers on only the host-specific glue (the hooks)
Key reframe: most "plugin-specific" skills are actually shared content + a hook trigger. Separate the skill (agent-agnostic logic) from the glue (the hook), and almost everything collapses into skills/.
Disposition checklist
research → retire, use shared memory-research (direct duplicate)
edit-note → retire, fold into memory-notes (or a shared memory-edit if the edit workflow warrants standing alone)
knowledge-organize → retire in favor of memory-defrag + memory-lifecycle — ⚠️ first verify they cover orphan-detection / relation-suggestion; migrate any unique content
placement → move folder-decision logic to a shared memory-placement; keep the PreToolUsehook in the plugin (only the trigger is CC-specific)
knowledge-capture → move to shared memory-capture; keep the JSONL session-ID detection as plugin glue (only that part is CC-bound)
continue-conversation → decide: retire in favor of the MCP continue_conversation prompt + memory-reflect, or promote to a shared memory-continue
Naming
Uniform memory-* namespace everywhere. The prefix earns its keep: shared skills install into flat dirs (e.g. ~/.claude/skills/) where memory-* avoids collisions with other vendors' skills — true regardless of host.
Accept the minor cosmetic stutter in plugin slash commands (/basic-memory:memory-research); not worth diverging names to avoid.
End state
A single memory-* skill set in skills/
Claude Code plugin = hooks + a bundle of shared skills (mirrors OpenClaw)
Background
PR #859 vendors the Claude Code plugin, shared skills, Hermes, and OpenClaw into the monorepo. Now that everything is co-located, the two overlapping skill collections can be deduplicated. This split arrived organically and should be cleaned up — it is not an intentional design boundary.
Today:
skills/— 10 framework-agnosticmemory-*skills (canonical source)plugins/claude-code/skills/— 6 hand-maintained skills, several of which duplicate the shared onesThe tell: OpenClaw already treats
skills/as the single source (bun run fetch-skillsbundles them). The Claude Code plugin is the outlier — it reinvents its own parallel set. Aligning the plugin to the same "bundle shared skills + add host-specific glue" pattern is the consistent architecture.Target architecture
One canonical set of
memory-*skills inskills/. Both hosts consume it identically:fetch-skills(already done)Key reframe: most "plugin-specific" skills are actually shared content + a hook trigger. Separate the skill (agent-agnostic logic) from the glue (the hook), and almost everything collapses into
skills/.Disposition checklist
research→ retire, use sharedmemory-research(direct duplicate)edit-note→ retire, fold intomemory-notes(or a sharedmemory-editif the edit workflow warrants standing alone)knowledge-organize→ retire in favor ofmemory-defrag+memory-lifecycle—placement→ move folder-decision logic to a sharedmemory-placement; keep thePreToolUsehook in the plugin (only the trigger is CC-specific)knowledge-capture→ move to sharedmemory-capture; keep the JSONL session-ID detection as plugin glue (only that part is CC-bound)continue-conversation→ decide: retire in favor of the MCPcontinue_conversationprompt +memory-reflect, or promote to a sharedmemory-continueNaming
memory-*namespace everywhere. The prefix earns its keep: shared skills install into flat dirs (e.g.~/.claude/skills/) wherememory-*avoids collisions with other vendors' skills — true regardless of host./basic-memory:memory-research); not worth diverging names to avoid.End state
memory-*skill set inskills/skills-lock.json)Follow-up to #859 (not a blocker — co-location is the precondition for this dedup).