17 KiB
2026-03-14 Skills UI Product Plan
Status: Proposed Date: 2026-03-14 Audience: Product and engineering Related:
doc/plans/2026-03-13-company-import-export-v2.mddocs/companies/companies-spec.mdui/src/pages/AgentDetail.tsx
1. Purpose
This document defines the product and UI plan for skill management in Paperclip.
The goal is to make skills understandable and manageable in the website without pretending that all adapters behave the same way.
This plan assumes:
SKILL.mdremains Agent Skills compatibleskills.shcompatibility is a V1 requirement- Paperclip company import/export can include skills as package content
- adapters may support persistent skill sync, ephemeral skill mounting, read-only skill discovery, or no skill integration at all
2. Current State
There is already a first-pass agent-level skill sync UI on AgentDetail.
Today it supports:
- loading adapter skill sync state
- showing unsupported adapters clearly
- showing managed skills as checkboxes
- showing external skills separately
- syncing desired skills for adapters that implement the new API
Current limitations:
- There is no company-level skill library UI.
- There is no package import flow for skills in the website.
- There is no distinction between skill package management and per-agent skill attachment.
- There is no multi-agent desired-vs-actual view.
- The current UI is adapter-sync-oriented, not package-oriented.
- Unsupported adapters degrade safely, but not elegantly.
2.1 V1 Decisions
For V1, this plan assumes the following product decisions are already made:
skills.shcompatibility is required.- Agent-to-skill association in
AGENTS.mdis by shortname or slug. - Company skills and agent skill attachments are separate concepts.
- Agent skills should move to their own tab rather than living inside configuration.
- Company import/export should eventually round-trip skill packages and agent skill attachments.
3. Product Principles
- Skills are company assets first, agent attachments second.
- Package management and adapter sync are different concerns and should not be conflated in one screen.
- The UI must always tell the truth about what Paperclip knows:
- desired state in Paperclip
- actual state reported by the adapter
- whether the adapter can reconcile the two
- Agent Skills compatibility must remain visible in the product model.
- Agent-to-skill associations should be human-readable and shortname-based wherever possible.
- Unsupported adapters should still have a useful UI, not just a dead end.
4. User Model
Paperclip should treat skills at two scopes:
4.1 Company skills
These are reusable skills known to the company.
Examples:
- imported from a GitHub repo
- added from a local folder
- installed from a
skills.sh-compatible repo - created locally inside Paperclip later
These should have:
- name
- description
- slug or package identity
- source/provenance
- trust level
- compatibility status
4.2 Agent skills
These are skill attachments for a specific agent.
Each attachment should have:
- shortname
- desired state in Paperclip
- actual state in the adapter when readable
- sync status
- origin
Agent attachments should normally reference skills by shortname or slug, for example:
reviewreact-best-practices
not by noisy relative file path.
4.3 Primary user jobs
The UI should support these jobs cleanly:
- “Show me what skills this company has.”
- “Import a skill from GitHub or a local folder.”
- “See whether a skill is safe, compatible, and who uses it.”
- “Attach skills to an agent.”
- “See whether the adapter actually has those skills.”
- “Reconcile desired vs actual skill state.”
- “Understand what Paperclip knows vs what the adapter knows.”
5. Core UI Surfaces
The product should have two primary skill surfaces.
5.1 Company Skills page
Add a company-level page, likely:
/companies/:companyId/skills
Purpose:
- manage the company skill library
- import and inspect skill packages
- understand provenance and trust
- see which agents use which skills
Route
/companies/:companyId/skills
Primary actions
- import skill
- inspect skill
- attach to agents
- detach from agents
- export selected skills later
Empty state
When the company has no managed skills:
- explain what skills are
- explain
skills.sh/ Agent Skills compatibility - offer
Import from GitHubandImport from folder - optionally show adapter-discovered skills as a secondary “not managed yet” section
A. Skill library list
Each skill row should show:
- name
- short description
- source badge
- trust badge
- compatibility badge
- number of attached agents
Suggested source states:
- local
- github
- imported package
- external reference
- adapter-discovered only
Suggested compatibility states:
- compatible
- paperclip-extension
- unknown
- invalid
Suggested trust states:
- markdown-only
- assets
- scripts/executables
Suggested list affordances:
- search by name or slug
- filter by source
- filter by trust level
- filter by usage
- sort by name, recent import, usage count
B. Import actions
Allow:
- import from local folder
- import from GitHub URL
- import from direct URL
Future:
- install from
companies.sh - install from
skills.sh
V1 requirement:
- importing from a
skills.sh-compatible source should work without requiring a Paperclip-specific package layout
C. Skill detail drawer or page
Each skill should have a detail view showing:
- rendered
SKILL.md - package source and pinning
- included files
- trust and licensing warnings
- who uses it
- adapter compatibility notes
Recommended route:
/companies/:companyId/skills/:skillId
Recommended sections:
- Overview
- Contents
- Usage
- Source
- Trust / licensing
D. Usage view
Each company skill should show which agents use it.
Suggested columns:
- agent
- desired state
- actual state
- adapter
- sync mode
- last sync status
5.2 Agent Skills tab
Keep and evolve the existing AgentDetail skill sync UI, but move it out of configuration.
Purpose:
- attach/detach company skills to one agent
- inspect adapter reality for that agent
- reconcile desired vs actual state
- keep the association format readable and aligned with
AGENTS.md
Route
/agents/:agentId/skills
Agent tabs
The intended agent-level tab model becomes:
dashboardconfigurationskillsruns
This is preferable to hiding skills inside configuration because:
- skills are not just adapter config
- skills need their own sync/status language
- skills are a reusable company asset, not merely one agent field
- the screen needs room for desired vs actual state, warnings, and external skill adoption
Tab layout
The Skills tab should have three stacked sections:
- Summary
- Managed skills
- External / discovered skills
Summary should show:
- adapter sync support
- sync mode
- number of managed skills
- number of external skills
- drift or warning count
A. Desired skills
Show company-managed skills attached to the agent.
Each row should show:
- skill name
- shortname
- sync state
- source
- last adapter observation if available
Each row should support:
- enable / disable
- open skill detail
- see source badge
- see sync badge
B. External or discovered skills
Show skills reported by the adapter that are not company-managed.
This matters because Codex and similar adapters may already have local skills that Paperclip did not install.
These should be clearly marked:
- external
- not managed by Paperclip
Each external row should support:
- inspect
- adopt into company library later
- attach as managed skill later if appropriate
C. Sync controls
Support:
- sync
- reset draft
- detach
Future:
- import external skill into company library
- promote ad hoc local skill into a managed company skill
Recommended footer actions:
Sync skillsResetRefresh adapter state
6. Skill State Model In The UI
Each skill attachment should have a user-facing state.
Suggested states:
in_syncdesired_onlyexternaldriftedunmanagedunknown
Definitions:
in_sync: desired and actual matchdesired_only: Paperclip wants it, adapter does not show it yetexternal: adapter has it but Paperclip does not manage itdrifted: adapter has a conflicting or unexpected version/locationunmanaged: adapter does not support sync, Paperclip only tracks desired stateunknown: adapter read failed or state cannot be trusted
Suggested badge copy:
In syncNeeds syncExternalDriftedUnmanagedUnknown
7. Adapter Presentation Rules
The UI should not describe all adapters the same way.
7.1 Persistent adapters
Example:
- Codex local
Language:
- installed
- synced into adapter home
- external skills detected
7.2 Ephemeral adapters
Example:
- Claude local
Language:
- will be mounted on next run
- effective runtime skills
- not globally installed
7.3 Unsupported adapters
Language:
- this adapter does not implement skill sync yet
- Paperclip can still track desired skills
- actual adapter state is unavailable
This state should still allow:
- attaching company skills to the agent as desired state
- export/import of those desired attachments
7.4 Read-only adapters
Some adapters may be able to list skills but not mutate them.
Language:
- Paperclip can see adapter skills
- this adapter does not support applying changes
- desired state can be tracked, but reconciliation is manual
8. Information Architecture
Recommended navigation:
- company nav adds
Skills - agent detail adds
Skillsas its own tab - company skill detail gets its own route when the company library ships
Recommended separation:
- Company Skills page answers: “What skills do we have?”
- Agent Skills tab answers: “What does this agent use, and is it synced?”
8.1 Proposed route map
/companies/:companyId/skills/companies/:companyId/skills/:skillId/agents/:agentId/skills
8.2 Nav and discovery
Recommended entry points:
- company sidebar:
Skills - agent page tabs:
Skills - company import preview: link imported skills to company skills page later
- agent skills rows: link to company skill detail
9. Import / Export Integration
Skill UI and package portability should meet in the company skill library.
Import behavior:
- importing a company package with
SKILL.mdcontent should create or update company skills - agent attachments should primarily come from
AGENTS.mdshortname associations .paperclip.yamlmay add Paperclip-specific fidelity, but should not replace the base shortname association model- referenced third-party skills should keep provenance visible
Export behavior:
- exporting a company should include company-managed skills when selected
AGENTS.mdshould emit skill associations by shortname or slug.paperclip.yamlmay add Paperclip-specific skill fidelity later if needed, but should not be required for ordinary agent-to-skill association- adapter-only external skills should not be silently exported as managed company skills
9.1 Import workflows
V1 workflows should support:
- import one or more skills from a local folder
- import one or more skills from a GitHub repo
- import a company package that contains skills
- attach imported skills to one or more agents
Import preview for skills should show:
- skills discovered
- source and pinning
- trust level
- licensing warnings
- whether an existing company skill will be created, updated, or skipped
9.2 Export workflows
V1 should support:
- export a company with managed skills included when selected
- export an agent whose
AGENTS.mdcontains shortname skill associations - preserve Agent Skills compatibility for each
SKILL.md
Out of scope for V1:
- exporting adapter-only external skills as managed packages automatically
10. Data And API Shape
This plan implies a clean split in backend concepts.
10.1 Company skill records
Paperclip should have a company-scoped skill model or managed package model representing:
- identity
- source
- files
- provenance
- trust and licensing metadata
10.2 Agent skill attachments
Paperclip should separately store:
- agent id
- skill identity
- desired enabled state
- optional ordering or metadata later
10.3 Adapter sync snapshot
Adapter reads should return:
- supported flag
- sync mode
- entries
- warnings
- desired skills
This already exists in rough form and should be the basis for the UI.
10.4 UI-facing API needs
The complete UI implies these API surfaces:
- list company-managed skills
- import company skills from path/URL/GitHub
- get one company skill detail
- list agents using a given skill
- attach/detach company skills for an agent
- list adapter sync snapshot for an agent
- apply desired skills for an agent
Existing agent-level skill sync APIs can remain the base for the agent tab. The company-level library APIs still need to be designed and implemented.
11. Page-by-page UX
11.1 Company Skills list page
Header:
- title
- short explanation of compatibility with Agent Skills /
skills.sh - import button
Body:
- filters
- skill table or cards
- empty state when none
Secondary content:
- warnings panel for untrusted or incompatible skills
11.2 Company Skill detail page
Header:
- skill name
- shortname
- source badge
- trust badge
- compatibility badge
Sections:
- rendered
SKILL.md - files and references
- usage by agents
- source / provenance
- trust and licensing warnings
Actions:
- attach to agent
- remove from company library later
- export later
11.3 Agent Skills tab
Header:
- adapter support summary
- sync mode
- refresh and sync actions
Body:
- managed skills list
- external/discovered skills list
- warnings / unsupported state block
12. States And Empty Cases
12.1 Company Skills page
States:
- empty
- loading
- loaded
- import in progress
- import failed
12.2 Company Skill detail
States:
- loading
- not found
- incompatible
- loaded
12.3 Agent Skills tab
States:
- loading snapshot
- unsupported adapter
- read-only adapter
- sync-capable adapter
- sync failed
- stale draft
13. Permissions And Governance
Suggested V1 policy:
- board users can manage company skills
- board users can attach skills to agents
- agents themselves do not mutate company skill library by default
- later, certain agents may get scoped permissions for skill attachment or sync
14. UI Phases
Phase A: Stabilize current agent skill sync UI
Goals:
- move skills to an
AgentDetailtab - improve status language
- support desired-only state even on unsupported adapters
- polish copy for persistent vs ephemeral adapters
Phase B: Add Company Skills page
Goals:
- company-level skill library
- import from GitHub/local folder
- basic detail view
- usage counts by agent
skills.sh-compatible import path
Phase C: Connect skills to portability
Goals:
- importing company packages creates company skills
- exporting selected skills works cleanly
- agent attachments round-trip primarily through
AGENTS.mdshortnames
Phase D: External skill adoption flow
Goals:
- detect adapter external skills
- allow importing them into company-managed state where possible
- make provenance explicit
Phase E: Advanced sync and drift UX
Goals:
- desired-vs-actual diffing
- drift resolution actions
- multi-agent skill usage and sync reporting
15. Design Risks
- Overloading the agent page with package management will make the feature confusing.
- Treating unsupported adapters as broken rather than unmanaged will make the product feel inconsistent.
- Mixing external adapter-discovered skills with company-managed skills without clear labels will erode trust.
- If company skill records do not exist, import/export and UI will remain loosely coupled and round-trip fidelity will stay weak.
- If agent skill associations are path-based instead of shortname-based, the format will feel too technical and too Paperclip-specific.
16. Recommendation
The next product step should be:
- move skills out of agent configuration and into a dedicated
Skillstab - add a dedicated company-level
Skillspage as the library and package-management surface - make company import/export target that company skill library, not the agent page directly
- preserve adapter-aware truth in the UI by clearly separating:
- desired
- actual
- external
- unmanaged
- keep agent-to-skill associations shortname-based in
AGENTS.md
That gives Paperclip one coherent skill story instead of forcing package management, adapter sync, and agent configuration into the same screen.