Refine company package spec and rollout plan
This commit is contained in:
@@ -15,7 +15,7 @@ The core shift is:
|
|||||||
|
|
||||||
- move from a Paperclip-specific JSON-first portability package toward a markdown-first package format
|
- move from a Paperclip-specific JSON-first portability package toward a markdown-first package format
|
||||||
- make GitHub repositories first-class package sources
|
- make GitHub repositories first-class package sources
|
||||||
- stay compatible with the existing Agent Skills ecosystem instead of inventing a separate skill format
|
- treat the company package model as an extension of the existing Agent Skills ecosystem instead of inventing a separate skill format
|
||||||
- support company, team, agent, and skill reuse without requiring a central registry
|
- support company, team, agent, and skill reuse without requiring a central registry
|
||||||
|
|
||||||
The normative package format draft lives in:
|
The normative package format draft lives in:
|
||||||
@@ -39,10 +39,11 @@ The new direction is:
|
|||||||
|
|
||||||
1. markdown-first package authoring
|
1. markdown-first package authoring
|
||||||
2. GitHub repo or local folder as the default source of truth
|
2. GitHub repo or local folder as the default source of truth
|
||||||
3. `SKILL.md` compatibility as a hard constraint
|
3. the company package model is explicitly an extension of Agent Skills
|
||||||
4. optional generated lock/cache artifacts, not required manifests
|
4. no future dependency on `paperclip.manifest.json`
|
||||||
5. package graph resolution at import time
|
5. package graph resolution at import time
|
||||||
6. entity-level import UI with dependency-aware tree selection
|
6. entity-level import UI with dependency-aware tree selection
|
||||||
|
7. adapter-aware skill sync surfaces so Paperclip can read, diff, enable, disable, and reconcile skills where the adapter supports it
|
||||||
|
|
||||||
## 3. Product Goals
|
## 3. Product Goals
|
||||||
|
|
||||||
@@ -119,18 +120,19 @@ Paperclip must not redefine `SKILL.md`.
|
|||||||
Rules:
|
Rules:
|
||||||
|
|
||||||
- `SKILL.md` stays Agent Skills compatible
|
- `SKILL.md` stays Agent Skills compatible
|
||||||
|
- the company package model is an extension of Agent Skills
|
||||||
- Paperclip-specific extensions live under metadata
|
- Paperclip-specific extensions live under metadata
|
||||||
- Paperclip may resolve and install `SKILL.md` packages, but it must not require a Paperclip-only skill format
|
- Paperclip may resolve and install `SKILL.md` packages, but it must not require a Paperclip-only skill format
|
||||||
|
|
||||||
### 5.3 Relationship To Current V1 Manifest
|
### 5.3 Relationship To Current V1 Manifest
|
||||||
|
|
||||||
The current `paperclip.manifest.json` format stays supported as a compatibility format during transition.
|
`paperclip.manifest.json` is not part of the future package direction.
|
||||||
|
|
||||||
But:
|
This should be treated as a hard cutover in product direction.
|
||||||
|
|
||||||
- markdown-first repo layout becomes the preferred export target
|
- markdown-first repo layout is the target
|
||||||
- JSON manifests become optional generated artifacts at most
|
- no new work should deepen investment in the old manifest model
|
||||||
- future portability work should target the markdown-first model first
|
- future portability APIs and UI should target the markdown-first model only
|
||||||
|
|
||||||
## 6. Package Graph Model
|
## 6. Package Graph Model
|
||||||
|
|
||||||
@@ -161,6 +163,13 @@ In Paperclip V2 portability:
|
|||||||
|
|
||||||
This avoids blocking portability on a future runtime `teams` model.
|
This avoids blocking portability on a future runtime `teams` model.
|
||||||
|
|
||||||
|
Imported-team tracking should initially be package/provenance-based:
|
||||||
|
|
||||||
|
- if a team package was imported, the imported agents should carry enough provenance to reconstruct that grouping
|
||||||
|
- Paperclip can treat “this set of agents came from team package X” as the imported-team model
|
||||||
|
- provenance grouping is the intended near- and medium-term team model for import/export
|
||||||
|
- only add a first-class runtime `teams` table later if product needs move beyond what provenance grouping can express
|
||||||
|
|
||||||
### 6.3 Dependency Graph
|
### 6.3 Dependency Graph
|
||||||
|
|
||||||
Import should operate on an entity graph, not raw file selection.
|
Import should operate on an entity graph, not raw file selection.
|
||||||
@@ -267,6 +276,48 @@ Every import preview should surface:
|
|||||||
- unsupported content types
|
- unsupported content types
|
||||||
- trust/licensing warnings
|
- trust/licensing warnings
|
||||||
|
|
||||||
|
### 8.5 Adapter Skill Sync Surface
|
||||||
|
|
||||||
|
People want skill management in the UI, but skills are adapter-dependent.
|
||||||
|
|
||||||
|
That means portability and UI planning must include an adapter capability model for skills.
|
||||||
|
|
||||||
|
Paperclip should define a new adapter surface area around skills:
|
||||||
|
|
||||||
|
- list currently enabled skills for an agent
|
||||||
|
- report how those skills are represented by the adapter
|
||||||
|
- install or enable a skill
|
||||||
|
- disable or remove a skill
|
||||||
|
- report sync state between desired package config and actual adapter state
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
- Claude Code / Codex style adapters may manage skills as local filesystem packages or adapter-owned skill directories
|
||||||
|
- OpenClaw-style adapters may expose currently enabled skills through an API or a reflected config surface
|
||||||
|
- some adapters may be read-only and only report what they have
|
||||||
|
|
||||||
|
Planned adapter capability shape:
|
||||||
|
|
||||||
|
- `supportsSkillRead`
|
||||||
|
- `supportsSkillWrite`
|
||||||
|
- `supportsSkillRemove`
|
||||||
|
- `supportsSkillSync`
|
||||||
|
- `skillStorageKind` such as `filesystem`, `remote_api`, `inline_config`, or `unknown`
|
||||||
|
|
||||||
|
Baseline adapter interface:
|
||||||
|
|
||||||
|
- `listSkills(agent)`
|
||||||
|
- `applySkills(agent, desiredSkills)`
|
||||||
|
- `removeSkill(agent, skillId)` optional
|
||||||
|
- `getSkillSyncState(agent, desiredSkills)` optional
|
||||||
|
|
||||||
|
Planned Paperclip behavior:
|
||||||
|
|
||||||
|
- if an adapter supports read, Paperclip should show current skills in the UI
|
||||||
|
- if an adapter supports write, Paperclip should let the user enable/disable imported skills
|
||||||
|
- if an adapter supports sync, Paperclip should compute desired vs actual state and offer reconcile actions
|
||||||
|
- if an adapter does not support these capabilities, the UI should still show the package-level desired skills but mark them unmanaged
|
||||||
|
|
||||||
## 9. Export Behavior
|
## 9. Export Behavior
|
||||||
|
|
||||||
### 9.1 Default Export Target
|
### 9.1 Default Export Target
|
||||||
@@ -315,8 +366,8 @@ In the first phase, imported entities can continue mapping onto current runtime
|
|||||||
|
|
||||||
- company -> companies
|
- company -> companies
|
||||||
- agent -> agents
|
- agent -> agents
|
||||||
- team -> imported agent subtree attachment
|
- team -> imported agent subtree attachment plus package provenance grouping
|
||||||
- skill -> referenced package metadata only
|
- skill -> company-scoped reusable package metadata plus agent-scoped desired-skill attachment state where supported
|
||||||
|
|
||||||
### 10.2 Medium-Term
|
### 10.2 Medium-Term
|
||||||
|
|
||||||
@@ -328,12 +379,17 @@ Needed capabilities:
|
|||||||
- support re-import / upgrade
|
- support re-import / upgrade
|
||||||
- distinguish local edits from upstream package state
|
- distinguish local edits from upstream package state
|
||||||
- preserve external refs and package-level metadata
|
- preserve external refs and package-level metadata
|
||||||
|
- preserve imported team grouping without requiring a runtime `teams` table immediately
|
||||||
|
- preserve desired-skill state separately from adapter runtime state
|
||||||
|
- support both company-scoped reusable skills and agent-scoped skill attachments
|
||||||
|
|
||||||
Suggested future tables:
|
Suggested future tables:
|
||||||
|
|
||||||
- package_installs
|
- package_installs
|
||||||
- package_install_entities
|
- package_install_entities
|
||||||
- package_sources
|
- package_sources
|
||||||
|
- agent_skill_desires
|
||||||
|
- adapter_skill_snapshots
|
||||||
|
|
||||||
This is not required for phase 1 UI, but it is required for a robust long-term system.
|
This is not required for phase 1 UI, but it is required for a robust long-term system.
|
||||||
|
|
||||||
@@ -387,6 +443,7 @@ Planned additions:
|
|||||||
- `--strict-pins`
|
- `--strict-pins`
|
||||||
- `--allow-unpinned`
|
- `--allow-unpinned`
|
||||||
- `--materialize-references`
|
- `--materialize-references`
|
||||||
|
- `--sync-skills`
|
||||||
|
|
||||||
## 13. UI Plan
|
## 13. UI Plan
|
||||||
|
|
||||||
@@ -422,6 +479,7 @@ If importing a team into an existing company:
|
|||||||
- show the subtree structure
|
- show the subtree structure
|
||||||
- require the user to choose where to attach it
|
- require the user to choose where to attach it
|
||||||
- preview manager/reporting updates before apply
|
- preview manager/reporting updates before apply
|
||||||
|
- preserve imported-team provenance so the UI can later say “these agents came from team package X”
|
||||||
|
|
||||||
### 13.3 Skills UX
|
### 13.3 Skills UX
|
||||||
|
|
||||||
@@ -430,6 +488,9 @@ If importing skills:
|
|||||||
- show whether each skill is local, vendored, or referenced
|
- show whether each skill is local, vendored, or referenced
|
||||||
- show whether it contains scripts/assets
|
- show whether it contains scripts/assets
|
||||||
- preserve Agent Skills compatibility in presentation and export
|
- preserve Agent Skills compatibility in presentation and export
|
||||||
|
- show current adapter-reported skills when supported
|
||||||
|
- show desired package skills separately from actual adapter state
|
||||||
|
- offer reconcile actions when the adapter supports sync
|
||||||
|
|
||||||
## 14. Rollout Phases
|
## 14. Rollout Phases
|
||||||
|
|
||||||
@@ -438,7 +499,7 @@ If importing skills:
|
|||||||
- add tests for current portability flows
|
- add tests for current portability flows
|
||||||
- replace the frontmatter parser
|
- replace the frontmatter parser
|
||||||
- add Company Settings UI for current import/export capabilities
|
- add Company Settings UI for current import/export capabilities
|
||||||
- preserve current manifest compatibility
|
- start cutover work toward the markdown-first package reader
|
||||||
|
|
||||||
### Phase 2: Markdown-First Package Reader
|
### Phase 2: Markdown-First Package Reader
|
||||||
|
|
||||||
@@ -446,23 +507,25 @@ If importing skills:
|
|||||||
- build internal graph from markdown-first packages
|
- build internal graph from markdown-first packages
|
||||||
- support local folder and GitHub repo inputs natively
|
- support local folder and GitHub repo inputs natively
|
||||||
|
|
||||||
### Phase 3: Graph-Based Import UX
|
### Phase 3: Graph-Based Import UX And Skill Surfaces
|
||||||
|
|
||||||
- entity tree preview
|
- entity tree preview
|
||||||
- checkbox selection
|
- checkbox selection
|
||||||
- team subtree attach flow
|
- team subtree attach flow
|
||||||
- licensing/trust/reference warnings
|
- licensing/trust/reference warnings
|
||||||
|
- adapter skill read/sync UI groundwork
|
||||||
|
|
||||||
### Phase 4: New Export Model
|
### Phase 4: New Export Model
|
||||||
|
|
||||||
- export markdown-first folder structure by default
|
- export markdown-first folder structure by default
|
||||||
- continue optional legacy manifest export for compatibility
|
|
||||||
|
|
||||||
### Phase 5: Provenance And Upgrades
|
### Phase 5: Provenance And Upgrades
|
||||||
|
|
||||||
- persist install provenance
|
- persist install provenance
|
||||||
- support package-aware re-import and upgrades
|
- support package-aware re-import and upgrades
|
||||||
- improve collision matching beyond slug-only
|
- improve collision matching beyond slug-only
|
||||||
|
- add imported-team provenance grouping
|
||||||
|
- add desired-vs-actual skill sync state
|
||||||
|
|
||||||
### Phase 6: Optional Seed Content
|
### Phase 6: Optional Seed Content
|
||||||
|
|
||||||
@@ -489,14 +552,16 @@ Docs to update later as implementation lands:
|
|||||||
## 16. Open Questions
|
## 16. Open Questions
|
||||||
|
|
||||||
1. Should imported skill packages be stored as managed package files in Paperclip storage, or only referenced at import time?
|
1. Should imported skill packages be stored as managed package files in Paperclip storage, or only referenced at import time?
|
||||||
2. Should the first generalized package import after company+agent be:
|
Decision: managed package files should support both company-scoped reuse and agent-scoped attachment.
|
||||||
- team
|
2. What is the minimum adapter skill interface needed to make the UI useful across Claude Code, Codex, OpenClaw, and future adapters?
|
||||||
- or skill
|
Decision: use the baseline interface in section 8.5.
|
||||||
3. Should Paperclip support direct local folder selection in the web UI, or keep that CLI-only initially?
|
3. Should Paperclip support direct local folder selection in the web UI, or keep that CLI-only initially?
|
||||||
4. Do we want optional generated lock files in phase 2, or defer them until provenance work?
|
4. Do we want optional generated lock files in phase 2, or defer them until provenance work?
|
||||||
5. How strict should pinning be by default for GitHub references:
|
5. How strict should pinning be by default for GitHub references:
|
||||||
- warn on unpinned
|
- warn on unpinned
|
||||||
- or block in normal mode
|
- or block in normal mode
|
||||||
|
6. Is package-provenance grouping enough for imported teams, or do we expect product requirements soon that would justify a first-class runtime `teams` table?
|
||||||
|
Decision: provenance grouping is enough for the import/export product model for now.
|
||||||
|
|
||||||
## 17. Recommendation
|
## 17. Recommendation
|
||||||
|
|
||||||
@@ -507,6 +572,7 @@ Immediate next steps:
|
|||||||
1. accept `docs/companies/companies-spec.md` as the package-format draft
|
1. accept `docs/companies/companies-spec.md` as the package-format draft
|
||||||
2. implement phase 1 stabilization work
|
2. implement phase 1 stabilization work
|
||||||
3. build phase 2 markdown-first package reader before expanding ClipHub or `companies.sh`
|
3. build phase 2 markdown-first package reader before expanding ClipHub or `companies.sh`
|
||||||
|
4. treat the old manifest-based format as deprecated and not part of the future surface
|
||||||
|
|
||||||
This keeps Paperclip aligned with:
|
This keeps Paperclip aligned with:
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,24 @@
|
|||||||
# Company Packages Specification
|
# Company Packages Specification
|
||||||
|
|
||||||
|
Extension of the Agent Skills Specification
|
||||||
|
|
||||||
Version: `0.1-draft`
|
Version: `0.1-draft`
|
||||||
|
|
||||||
## 1. Purpose
|
## 1. Purpose
|
||||||
|
|
||||||
A Company Package is a filesystem- and GitHub-native format for describing a company, team, agent, and associated skills using markdown files with YAML frontmatter.
|
A Company Package is a filesystem- and GitHub-native format for describing a company, team, agent, and associated skills using markdown files with YAML frontmatter.
|
||||||
|
|
||||||
|
This specification is an extension of the Agent Skills specification, not a replacement for it.
|
||||||
|
|
||||||
|
It defines how company-, team-, and agent-level package structure composes around the existing `SKILL.md` model.
|
||||||
|
|
||||||
The format is designed to:
|
The format is designed to:
|
||||||
|
|
||||||
- be readable and writable by humans
|
- be readable and writable by humans
|
||||||
- work directly from a local folder or GitHub repository
|
- work directly from a local folder or GitHub repository
|
||||||
- require no central registry
|
- require no central registry
|
||||||
- support attribution and pinned references to upstream files
|
- support attribution and pinned references to upstream files
|
||||||
- be compatible with the existing Agent Skills ecosystem
|
- extend the existing Agent Skills ecosystem without redefining it
|
||||||
- be useful outside Paperclip
|
- be useful outside Paperclip
|
||||||
|
|
||||||
## 2. Core Principles
|
## 2. Core Principles
|
||||||
@@ -20,7 +26,7 @@ The format is designed to:
|
|||||||
1. Markdown is canonical.
|
1. Markdown is canonical.
|
||||||
2. Git repositories are valid package containers.
|
2. Git repositories are valid package containers.
|
||||||
3. Registries are optional discovery layers, not authorities.
|
3. Registries are optional discovery layers, not authorities.
|
||||||
4. `SKILL.md` remains Agent Skills compatible.
|
4. `SKILL.md` remains owned by the Agent Skills specification.
|
||||||
5. External references must be pinnable to immutable Git commits.
|
5. External references must be pinnable to immutable Git commits.
|
||||||
6. Attribution and license metadata must survive import/export.
|
6. Attribution and license metadata must survive import/export.
|
||||||
7. Slugs and relative paths are the portable identity layer, not database ids.
|
7. Slugs and relative paths are the portable identity layer, not database ids.
|
||||||
@@ -32,7 +38,7 @@ A package root is identified by one primary markdown file:
|
|||||||
- `COMPANY.md` for a company package
|
- `COMPANY.md` for a company package
|
||||||
- `TEAM.md` for a team package
|
- `TEAM.md` for a team package
|
||||||
- `AGENTS.md` for an agent package
|
- `AGENTS.md` for an agent package
|
||||||
- `SKILL.md` for a skill package
|
- `SKILL.md` for a skill package defined by the Agent Skills specification
|
||||||
|
|
||||||
A GitHub repo may contain one package at root or many packages in subdirectories.
|
A GitHub repo may contain one package at root or many packages in subdirectories.
|
||||||
|
|
||||||
@@ -226,6 +232,8 @@ Rules:
|
|||||||
- Paperclip-specific extensions must live under `metadata.paperclip` or `metadata.sources`
|
- Paperclip-specific extensions must live under `metadata.paperclip` or `metadata.sources`
|
||||||
- a skill directory may include `scripts/`, `references/`, and `assets/` exactly as the Agent Skills ecosystem expects
|
- a skill directory may include `scripts/`, `references/`, and `assets/` exactly as the Agent Skills ecosystem expects
|
||||||
|
|
||||||
|
In other words, this spec extends Agent Skills upward into company/team/agent composition. It does not redefine skill package semantics.
|
||||||
|
|
||||||
### Example compatible extension
|
### Example compatible extension
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
@@ -396,14 +404,13 @@ Paperclip-specific data should live under:
|
|||||||
|
|
||||||
That keeps the base format broader than Paperclip.
|
That keeps the base format broader than Paperclip.
|
||||||
|
|
||||||
## 17. Backward Compatibility
|
## 17. Cutover
|
||||||
|
|
||||||
Paperclip may continue to support:
|
Paperclip should cut over to this markdown-first package model as the primary portability format.
|
||||||
|
|
||||||
- existing `paperclip.manifest.json` packages
|
`paperclip.manifest.json` does not need to be preserved as a compatibility requirement for the future package system.
|
||||||
- current company portability import/export
|
|
||||||
|
|
||||||
But the markdown-first repo layout should become the preferred authoring format.
|
For Paperclip, this should be treated as a hard cutover in product direction rather than a long-lived dual-format strategy.
|
||||||
|
|
||||||
## 18. Minimal Example
|
## 18. Minimal Example
|
||||||
|
|
||||||
@@ -423,6 +430,6 @@ lean-dev-shop/
|
|||||||
This is the direction I would take:
|
This is the direction I would take:
|
||||||
|
|
||||||
- make this the human-facing spec
|
- make this the human-facing spec
|
||||||
- keep JSON manifests only as optional generated lock/cache artifacts
|
|
||||||
- define `SKILL.md` compatibility as non-negotiable
|
- define `SKILL.md` compatibility as non-negotiable
|
||||||
|
- treat this spec as an extension of Agent Skills, not a parallel format
|
||||||
- make `companies.sh` a discovery layer for repos implementing this spec, not a publishing authority
|
- make `companies.sh` a discovery layer for repos implementing this spec, not a publishing authority
|
||||||
|
|||||||
Reference in New Issue
Block a user