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
SkillHub already provides a useful lifecycle for governed Skill packages: namespace ownership, versions, visibility, review, storage, search, download, and related governance features. The same package contract can also carry reusable knowledge without introducing a second AI-facing format.
A concrete current workaround is to publish a product handbook or domain corpus as an ordinary Skill:
product-handbook/
├── SKILL.md # tells the AI when and how to use the knowledge
├── references/ # Markdown, text, JSON, YAML, etc.
└── assets/
This already works for AI consumption, but SkillHub cannot distinguish the package from an action-oriented Skill. As a result:
discovery cannot intentionally separate executable/action-oriented Skills from knowledge-oriented packages;
review, policy, and presentation cannot become type-aware;
operators cannot filter or inventory Knowledge packages as a category;
This is related to #602's broader idea of a unified AI resource library, but this issue proposes one scoped design slice: Knowledge as a first-class package type while preserving the existing Skill package contract. If maintainers prefer, this can be tracked as a concrete sub-scope of #602 rather than as a separate roadmap item.
It also follows the control-plane boundary discussed in #466: SkillHub would govern packages and inert descriptors, not host databases or become a live MCP/data-plane gateway.
The current implementation already has reusable building blocks in Skill, SkillVersion, and the skill / skill_version / skill_file tables. One visible package-format boundary is that SkillPackageValidator requires a root SKILL.md, while SkillMetadataParser already preserves arbitrary frontmatter.
Introducing a package type is nevertheless cross-cutting: the domain model, repositories, review/security records, events, search documents and SQL, API/DTO paths, storage conventions, CLI behavior, social features, and web routes are currently Skill-shaped. The proposal is to reuse their behavior where appropriate, not to assume a one-column migration completes the feature.
Proposed Solution
Introduce a stored package type discriminator, initially:
SKILL
KNOWLEDGE
Existing records and packages without an explicit type would be treated as SKILL, preserving current behavior.
Both package types continue to use a root SKILL.md. A Knowledge package therefore remains directly understandable and installable by Skill-compatible AI clients: the SKILL.md body explains when and how to use the knowledge, while the stored type lets SkillHub organize, filter, review, and present it appropriately.
The type could be declared in SKILL.md frontmatter or in the publish request (the exact contract is a maintainer/API decision). Illustrative frontmatter only:
---
name: product-handbookdescription: Curated product and support knowledgeversion: 1.0.0metadata:
package-type: knowledge
---
This avoids inventing KNOWLEDGE.md and reuses the existing AI-facing Skill semantics, parser, validator, package layout, download, and install flow.
Identity and compatibility
For the MVP, @namespace/slug should remain unique across all package types. A Namespace cannot contain both a SKILL and a KNOWLEDGE package with the same slug. This keeps existing resolve and install coordinates unambiguous.
Recommended compatibility behavior:
exact resolve/download/install by @namespace/slug remains type-neutral and can consume either package type;
the installed destination and AI contract remain the existing Skill directory plus root SKILL.md;
existing search/list behavior keeps its current SKILL default so Knowledge packages do not silently change legacy discovery results;
type-aware clients can request KNOWLEDGE explicitly or request all package types.
Maintainers may prefer a different discovery default, but coordinate identity should remain unambiguous.
MVP: packaged knowledge
The first vertical slice should support portable plain-text or structured knowledge using the existing package layout:
The SKILL.md body tells an AI when to load the material, which references are authoritative, and how to use or cite them. This covers handbooks, product/domain documentation, policies, glossaries, curated research, and other knowledge distributed with a fixed revision.
Published Knowledge versions should follow the existing published-version lifecycle: published package content is not overwritten, while the existing yank semantics remain available. Draft/review replacement behavior does not need to become stricter than current Skill behavior.
A later slice could allow the same SKILL.md package to describe knowledge maintained outside SkillHub, such as a graph database, document service, or local index accessed through an existing CLI/tool adapter.
Such a descriptor should be an inert, downloadable manifest plus AI-facing instructions. It may describe a source kind, adapter/contract identifier, capabilities such as search or traverse, schema version, and provenance. It must not contain credentials or executable server-side commands.
This later slice must not make SkillHub resolve local connection profiles, probe endpoints, synchronize or index content, validate reachability, forward queries, execute CLI commands, or host graph/vector databases. Those remain responsibilities of the consuming AI/runtime and its separately configured tools.
Suggested First Vertical Slice
Add package_type (or an equivalent domain abstraction), defaulting existing data to SKILL.
Keep one globally unique @namespace/slug coordinate across package types.
Allow type declaration through the existing SKILL.md metadata or publish contract.
Reuse the root SKILL.md parser, structural validation, file storage, and package download/install format.
Extend publish/review/security/search/audit behavior where necessary so it is explicitly type-aware; do not assume every current Skill-specific path is automatically reusable.
Add a package-type filter to REST/OpenAPI, official CLI discovery, and the web UI.
Preserve legacy search defaults and current Skill behavior; allow exact coordinate resolution and installation of Knowledge packages through the existing Skill-compatible layout.
Limit MVP content to packaged files. Defer external descriptors and cross-package dependencies to follow-up design.
The implementation could start with a discriminator on the current aggregate or extract a generic package aggregate with type-specific projections. A discriminator better matches the reuse goal and may reduce initial scope; a generic aggregate may be cleaner if many package types are expected. This is a maintainer architecture decision rather than a requirement of the proposal.
Alternatives Considered
Keep publishing untyped knowledge-only Skills. This is the current workable fallback and preserves AI compatibility, but provides no reliable discovery, policy, inventory, or presentation distinction.
Introduce a separate KNOWLEDGE.md entry point and parser. Makes the distinction explicit, but duplicates a working AI-facing contract and requires every client to learn a new package convention.
Build a separate KnowledgeHub service. Provides a clean boundary but duplicates namespace, version, permission, review, storage, search, and governance machinery.
Add hosted RAG/vector-database features directly to SkillHub. This is a much larger data-plane scope and is not required for governing typed Knowledge packages.
Impact
Implementation surface: Cross-cutting across domain, persistence, publish/review, search, APIs, CLI, and UI; intended as a staged change rather than a trivial schema flag.
Data model: Requires a backward-compatible package type discriminator or shared package abstraction. Existing rows remain SKILL.
Packaging/validation: Continues to require and parse root SKILL.md; no second entry-file format is required.
Versioning: Reuses current draft/review/published/yanked semantics rather than claiming every pre-publication version is immutable.
Search: Adds type-aware indexing/filtering while preserving the legacy default.
Governance: Existing review, security, audit, version-tag, discovery-label, and social paths may need explicit type-aware extension; they are not assumed to be one generic lifecycle already.
AI/client compatibility: Existing clients can install and interpret a known Knowledge coordinate through the normal SKILL.md flow; type-aware clients gain dedicated discovery and presentation.
Deployment: No graph database, vector database, retrieval engine, synchronization worker, or new runtime service is required for the MVP.
Contract Or SDK Impact
This proposal would add an optional/defaulted package type to REST/OpenAPI, search results, and the official CLI. Backward compatibility should be explicit:
current Skill publish/resolve/install routes, package layout, and payloads continue to work;
existing records and packages without an explicit type are treated as SKILL;
both package types use root SKILL.md and the existing AI-facing semantics;
one coordinate identifies at most one package regardless of type;
legacy discovery continues to default to SKILL;
exact resolution/download/installation can remain package-type neutral;
the initial contract covers packaged content only;
no SkillHub-hosted retrieval, endpoint probing, synchronization, MCP forwarding, credential management, or arbitrary server-side CLI execution is introduced.
MVP Acceptance Criteria
An existing Skill can be published, resolved, installed, reviewed, searched, and yanked with no behavioral change after migration.
A pure-text Knowledge package uses root SKILL.md and the existing package layout.
A Knowledge package can be published with its own globally unambiguous coordinate and version, reviewed, discovered with package_type=KNOWLEDGE, downloaded, installed into the normal Skill-compatible destination, and consumed by an AI through its SKILL.md instructions.
Packages without an explicit type continue to behave as SKILL.
Published Knowledge package content cannot be silently overwritten; existing yank behavior remains available.
Namespace visibility and permissions apply to Knowledge packages.
Legacy search/list behavior does not begin returning Knowledge packages unless the caller opts into that type or a future compatibility decision changes the default.
A Namespace cannot contain a Skill and Knowledge package with the same slug.
External-source descriptors, endpoint/profile resolution, synchronization, runtime execution, and cross-package dependencies are not required for the MVP.
The server does not host a graph/vector database or execute package-provided commands as part of this feature.
Problem
SkillHub already provides a useful lifecycle for governed Skill packages: namespace ownership, versions, visibility, review, storage, search, download, and related governance features. The same package contract can also carry reusable knowledge without introducing a second AI-facing format.
A concrete current workaround is to publish a product handbook or domain corpus as an ordinary Skill:
This already works for AI consumption, but SkillHub cannot distinguish the package from an action-oriented Skill. As a result:
This is related to #602's broader idea of a unified AI resource library, but this issue proposes one scoped design slice: Knowledge as a first-class package type while preserving the existing Skill package contract. If maintainers prefer, this can be tracked as a concrete sub-scope of #602 rather than as a separate roadmap item.
It also follows the control-plane boundary discussed in #466: SkillHub would govern packages and inert descriptors, not host databases or become a live MCP/data-plane gateway.
The current implementation already has reusable building blocks in
Skill,SkillVersion, and theskill/skill_version/skill_filetables. One visible package-format boundary is thatSkillPackageValidatorrequires a rootSKILL.md, whileSkillMetadataParseralready preserves arbitrary frontmatter.Introducing a package type is nevertheless cross-cutting: the domain model, repositories, review/security records, events, search documents and SQL, API/DTO paths, storage conventions, CLI behavior, social features, and web routes are currently Skill-shaped. The proposal is to reuse their behavior where appropriate, not to assume a one-column migration completes the feature.
Proposed Solution
Introduce a stored package type discriminator, initially:
Existing records and packages without an explicit type would be treated as
SKILL, preserving current behavior.Both package types continue to use a root
SKILL.md. A Knowledge package therefore remains directly understandable and installable by Skill-compatible AI clients: theSKILL.mdbody explains when and how to use the knowledge, while the stored type lets SkillHub organize, filter, review, and present it appropriately.The type could be declared in
SKILL.mdfrontmatter or in the publish request (the exact contract is a maintainer/API decision). Illustrative frontmatter only:This avoids inventing
KNOWLEDGE.mdand reuses the existing AI-facing Skill semantics, parser, validator, package layout, download, and install flow.Identity and compatibility
For the MVP,
@namespace/slugshould remain unique across all package types. A Namespace cannot contain both aSKILLand aKNOWLEDGEpackage with the same slug. This keeps existing resolve and install coordinates unambiguous.Recommended compatibility behavior:
@namespace/slugremains type-neutral and can consume either package type;SKILL.md;SKILLdefault so Knowledge packages do not silently change legacy discovery results;KNOWLEDGEexplicitly or request all package types.Maintainers may prefer a different discovery default, but coordinate identity should remain unambiguous.
MVP: packaged knowledge
The first vertical slice should support portable plain-text or structured knowledge using the existing package layout:
The
SKILL.mdbody tells an AI when to load the material, which references are authoritative, and how to use or cite them. This covers handbooks, product/domain documentation, policies, glossaries, curated research, and other knowledge distributed with a fixed revision.Published Knowledge versions should follow the existing published-version lifecycle: published package content is not overwritten, while the existing yank semantics remain available. Draft/review replacement behavior does not need to become stricter than current Skill behavior.
Future-compatible mode: external knowledge descriptor
A later slice could allow the same
SKILL.mdpackage to describe knowledge maintained outside SkillHub, such as a graph database, document service, or local index accessed through an existing CLI/tool adapter.Such a descriptor should be an inert, downloadable manifest plus AI-facing instructions. It may describe a source kind, adapter/contract identifier, capabilities such as
searchortraverse, schema version, and provenance. It must not contain credentials or executable server-side commands.This later slice must not make SkillHub resolve local connection profiles, probe endpoints, synchronize or index content, validate reachability, forward queries, execute CLI commands, or host graph/vector databases. Those remain responsibilities of the consuming AI/runtime and its separately configured tools.
Suggested First Vertical Slice
package_type(or an equivalent domain abstraction), defaulting existing data toSKILL.@namespace/slugcoordinate across package types.SKILL.mdmetadata or publish contract.SKILL.mdparser, structural validation, file storage, and package download/install format.The implementation could start with a discriminator on the current aggregate or extract a generic package aggregate with type-specific projections. A discriminator better matches the reuse goal and may reduce initial scope; a generic aggregate may be cleaner if many package types are expected. This is a maintainer architecture decision rather than a requirement of the proposal.
Alternatives Considered
KNOWLEDGE.mdentry point and parser. Makes the distinction explicit, but duplicates a working AI-facing contract and requires every client to learn a new package convention.Impact
SKILL.@namespace/slugunique across package types, avoiding ambiguous legacy routes.SKILL.md; no second entry-file format is required.SKILL.mdflow; type-aware clients gain dedicated discovery and presentation.Contract Or SDK Impact
This proposal would add an optional/defaulted package type to REST/OpenAPI, search results, and the official CLI. Backward compatibility should be explicit:
SKILL;SKILL.mdand the existing AI-facing semantics;SKILL;MVP Acceptance Criteria
SKILL.mdand the existing package layout.package_type=KNOWLEDGE, downloaded, installed into the normal Skill-compatible destination, and consumed by an AI through itsSKILL.mdinstructions.SKILL.