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
apc sync creates per-skill symlinks from <tool_skills_dir>/<name> → ~/.apc/skills/<name>
New apc install after sync → does not auto-propagate to synced tools
Desired behaviour
~/.apc/skills/ is the single source of truth for all skills — installed and collected
apc collect writes extracted skills to ~/.apc/skills/<name>/SKILL.md (not inline cache)
apc installonly saves to ~/.apc/skills/ — nothing else
apc sync establishes a dir-level symlink once: <tool_skills_dir> → ~/.apc/skills/
After sync, any apc installautomatically appears in the tool — no re-sync needed
Per-tool plan
Tool
Skills dir
Approach
OpenClaw
~/.openclaw/skills/
✅ Dir-level symlink (exclusive dir)
Claude Code
~/.claude/skills/
✅ Dir-level symlink (exclusive dir)
Cursor
~/.cursor/rules/
⚠️ Per-skill symlinks (mixed dir — user may have other rules)
Windsurf
None
N/A
Gemini
None
N/A
Copilot
~/.github/instructions/
⚠️ Per-skill symlinks (project-level, mixed)
Code changes
src/appliers/base.py: add SKILL_DIR_EXCLUSIVE flag + sync_skills_dir() method
src/appliers/openclaw.py + claude.py: set SKILL_DIR_EXCLUSIVE = True
src/collect.py: write skills to ~/.apc/skills/ via save_skill_file() instead of inline cache
src/sync_helpers.py: use sync_skills_dir() for exclusive tools; keep link_skills() for others
src/install.py: remove _link_skill_to_targets() — save to ~/.apc/skills/ only; exclusive tools get it automatically, per-skill tools document that re-sync is needed
src/cache.py: deprecate save_skills()/load_skills() for skills (keep for MCP/memory)
Design Decision
Current behaviour (broken)
apc collectstores skills inline in~/.apc/cache/bundle.jsonapc installsaves to~/.apc/skills/then copies (fixed in fix(#33): apc install symlinks skills instead of copying them #58) or per-skill symlinks into each toolapc synccreates per-skill symlinks from<tool_skills_dir>/<name>→~/.apc/skills/<name>apc installafter sync → does not auto-propagate to synced toolsDesired behaviour
~/.apc/skills/is the single source of truth for all skills — installed and collectedapc collectwrites extracted skills to~/.apc/skills/<name>/SKILL.md(not inline cache)apc installonly saves to~/.apc/skills/— nothing elseapc syncestablishes a dir-level symlink once:<tool_skills_dir>→~/.apc/skills/apc installautomatically appears in the tool — no re-sync neededPer-tool plan
~/.openclaw/skills/~/.claude/skills/~/.cursor/rules/~/.github/instructions/Code changes
src/appliers/base.py: addSKILL_DIR_EXCLUSIVEflag +sync_skills_dir()methodsrc/appliers/openclaw.py+claude.py: setSKILL_DIR_EXCLUSIVE = Truesrc/collect.py: write skills to~/.apc/skills/viasave_skill_file()instead of inline cachesrc/sync_helpers.py: usesync_skills_dir()for exclusive tools; keeplink_skills()for otherssrc/install.py: remove_link_skill_to_targets()— save to~/.apc/skills/only; exclusive tools get it automatically, per-skill tools document that re-sync is neededsrc/cache.py: deprecatesave_skills()/load_skills()for skills (keep for MCP/memory)