9.5 KiB
2026-03-14 Adapter Skill Sync Rollout
Status: Proposed Date: 2026-03-14 Audience: Product and engineering Related:
doc/plans/2026-03-14-skills-ui-product-plan.mddoc/plans/2026-03-13-company-import-export-v2.mddocs/companies/companies-spec.md
1. Purpose
This document defines the rollout plan for adapter-wide skill support in Paperclip.
The goal is not just “show a skills tab.” The goal is:
- every adapter has a deliberate skill-sync truth model
- the UI tells the truth for that adapter
- Paperclip stores desired skill state consistently even when the adapter cannot fully reconcile it
- unsupported adapters degrade clearly and safely
2. Current Adapter Matrix
Paperclip currently has these adapters:
claude_localcodex_localcursor_localgemini_localopencode_localpi_localopenclaw_gateway
The current skill API supports:
unsupportedpersistentephemeral
Current implementation state:
codex_local: implemented,persistentclaude_local: implemented,ephemeralcursor_local: not yet implemented, but technically suited topersistentgemini_local: not yet implemented, but technically suited topersistentpi_local: not yet implemented, but technically suited topersistentopencode_local: not yet implemented; likelypersistent, but with special handling because it currently injects into Claude’s shared skills homeopenclaw_gateway: not yet implemented; blocked on gateway protocol support, sounsupportedfor now
3. Product Principles
- Desired skills live in Paperclip for every adapter.
- Adapters may expose different truth models, and the UI must reflect that honestly.
- Persistent adapters should read and reconcile actual installed state.
- Ephemeral adapters should report effective runtime state, not pretend they own a persistent install.
- Shared-home adapters need stronger safeguards than isolated-home adapters.
- Gateway or cloud adapters must not fake local filesystem sync.
4. Adapter Classification
4.1 Persistent local-home adapters
These adapters have a stable local skills directory that Paperclip can read and manage.
Candidates:
codex_localcursor_localgemini_localpi_localopencode_localwith caveats
Expected UX:
- show actual installed skills
- show managed vs external skills
- support
sync - support stale removal
- preserve unknown external skills
4.2 Ephemeral mount adapters
These adapters do not have a meaningful Paperclip-owned persistent install state.
Current adapter:
claude_local
Expected UX:
- show desired Paperclip skills
- show any discoverable external dirs if available
- say “mounted on next run” instead of “installed”
- do not imply a persistent adapter-owned install state
4.3 Unsupported / remote adapters
These adapters cannot support skill sync without new external capabilities.
Current adapter:
openclaw_gateway
Expected UX:
- company skill library still works
- agent attachment UI still works at the desired-state level
- actual adapter state is
unsupported - sync button is disabled or replaced with explanatory text
5. Per-Adapter Plan
5.1 Codex Local
Target mode:
persistent
Current state:
- already implemented
Requirements to finish:
- keep as reference implementation
- tighten tests around external custom skills and stale removal
- ensure imported company skills can be attached and synced without manual path work
Success criteria:
- list installed managed and external skills
- sync desired skills into
CODEX_HOME/skills - preserve external user-managed skills
5.2 Claude Local
Target mode:
ephemeral
Current state:
- already implemented
Requirements to finish:
- polish status language in UI
- clearly distinguish “desired” from “mounted on next run”
- optionally surface configured external skill dirs if Claude exposes them
Success criteria:
- desired skills stored in Paperclip
- selected skills mounted per run
- no misleading “installed” language
5.3 Cursor Local
Target mode:
persistent
Technical basis:
- runtime already injects Paperclip skills into
~/.cursor/skills
Implementation work:
- Add
listSkillsfor Cursor. - Add
syncSkillsfor Cursor. - Reuse the same managed-symlink pattern as Codex.
- Distinguish:
- managed Paperclip skills
- external skills already present
- missing desired skills
- stale managed skills
Testing:
- unit tests for discovery
- unit tests for sync and stale removal
- verify shared auth/session setup is not disturbed
Success criteria:
- Cursor agents show real installed state
- syncing from the agent Skills tab works
5.4 Gemini Local
Target mode:
persistent
Technical basis:
- runtime already injects Paperclip skills into
~/.gemini/skills
Implementation work:
- Add
listSkillsfor Gemini. - Add
syncSkillsfor Gemini. - Reuse managed-symlink conventions from Codex/Cursor.
- Verify auth remains untouched while skills are reconciled.
Potential caveat:
- if Gemini treats that skills directory as shared user state, the UI should warn before removing stale managed skills
Success criteria:
- Gemini agents can reconcile desired vs actual skill state
5.5 Pi Local
Target mode:
persistent
Technical basis:
- runtime already injects Paperclip skills into
~/.pi/agent/skills
Implementation work:
- Add
listSkillsfor Pi. - Add
syncSkillsfor Pi. - Reuse managed-symlink helpers.
- Verify session-file behavior remains independent from skill sync.
Success criteria:
- Pi agents expose actual installed skill state
- Paperclip can sync desired skills into Pi’s persistent home
5.6 OpenCode Local
Target mode:
persistent
Special case:
- OpenCode currently injects Paperclip skills into
~/.claude/skills
This is product-risky because:
- it shares state with Claude
- Paperclip may accidentally imply the skills belong only to OpenCode when the home is shared
Plan:
Phase 1:
- implement
listSkillsandsyncSkills - treat it as
persistent - explicitly label the home as shared in UI copy
- only remove stale managed Paperclip skills that are clearly marked as Paperclip-managed
Phase 2:
- investigate whether OpenCode supports its own isolated skills home
- if yes, migrate to an adapter-specific home and remove the shared-home caveat
Success criteria:
- OpenCode agents show real state
- shared-home risk is visible and bounded
5.7 OpenClaw Gateway
Target mode:
unsupporteduntil gateway protocol support exists
Required external work:
- gateway API to list installed/available skills
- gateway API to install/remove or otherwise reconcile skills
- gateway metadata for whether state is persistent or ephemeral
Until then:
- Paperclip stores desired skills only
- UI shows unsupported actual state
- no fake sync implementation
Future target:
- likely a fourth truth model eventually, such as remote-managed persistent state
- for now, keep the current API and treat gateway as unsupported
6. API Plan
6.1 Keep the current minimal adapter API
Near-term adapter contract remains:
listSkills(ctx)syncSkills(ctx, desiredSkills)
This is enough for all local adapters.
6.2 Optional extension points
Add only if needed after the first broad rollout:
skillHomeLabelsharedHome: booleansupportsExternalDiscovery: booleansupportsDestructiveSync: boolean
These should be optional metadata additions to the snapshot, not required new adapter methods.
7. UI Plan
The company-level skill library can stay adapter-neutral.
The agent-level Skills tab must become adapter-aware by copy and status:
persistent: installed / missing / stale / externalephemeral: mounted on next run / external / desired onlyunsupported: desired only, adapter cannot report actual state
Additional UI requirement for shared-home adapters:
- show a small warning that the adapter uses a shared user skills home
- avoid destructive wording unless Paperclip can prove a skill is Paperclip-managed
8. Rollout Phases
Phase 1: Finish the local filesystem family
Ship:
cursor_localgemini_localpi_local
Rationale:
- these are the closest to Codex in architecture
- they already inject into stable local skill homes
Phase 2: OpenCode shared-home support
Ship:
opencode_local
Rationale:
- technically feasible now
- needs slightly more careful product language because of the shared Claude skills home
Phase 3: Gateway support decision
Decide:
- keep
openclaw_gatewayunsupported for V1 - or extend the gateway protocol for remote skill management
My recommendation:
- do not block V1 on gateway support
- keep it explicitly unsupported until the remote protocol exists
9. Definition Of Done
Adapter-wide skill support is ready when all are true:
- Every adapter has an explicit truth model:
persistentephemeralunsupported
- The UI copy matches that truth model.
- All local persistent adapters implement:
listSkillssyncSkills
- Tests cover:
- desired-state storage
- actual-state discovery
- managed vs external distinctions
- stale managed-skill cleanup where supported
openclaw_gatewayis either:- explicitly unsupported with clean UX
- or backed by a real remote skill API
10. Recommendation
The recommended immediate order is:
cursor_localgemini_localpi_localopencode_local- defer
openclaw_gateway
That gets Paperclip from “skills work for Codex and Claude” to “skills work for the whole local-adapter family,” which is the meaningful V1 milestone.