Skip to content

RFC-0008: MVP Skill Registry - #26

Open
jwm4 wants to merge 39 commits into
mlflow:mainfrom
jwm4:mvp-skill-registry
Open

RFC-0008: MVP Skill Registry#26
jwm4 wants to merge 39 commits into
mlflow:mainfrom
jwm4:mvp-skill-registry

Conversation

@jwm4

@jwm4 jwm4 commented Jul 14, 2026

Copy link
Copy Markdown

Summary

Add a Skill Registry to MLflow: a governed, metadata-first registry for AI agent skills.

This is a restructured Phase 1 of the work originally proposed in PR #10, narrowed per Slack discussion with Databricks maintainers to focus on skills and skill bundles only.

  • Skills: SKILL.md directories with versioning, lifecycle, aliases, tags
  • Skill bundles: versioned collections grouping related skills
  • Pull semantics: harness-agnostic content fetch from Git, OCI, ZIP, MLflow artifact storage
  • Package manager integration: delegates harness-specific installation to APM, Lola, or other plugins
  • Trace integration: mlflow.skill_context() creates SKILL spans with registry coordinates

Phase 2 (RFC-0009, separate PR) will extend bundles with subagents, hooks, and MCP server references.

Changes from PR #10

  • Removed subagent and hook entity types (deferred to Phase 2)
  • Skill bundles contain only skills (no MCP server cross-references)
  • Replaced custom harness adapters with package manager plugin interface
  • Removed import command and lock file format
  • Aligned with RFC-0004 (MCP Registry) patterns throughout
  • All design decisions from the PR RFC-0008 and RFC-0009: Skill Registry and Harness Integration #10 review are preserved

Files

  • rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md: Main RFC
  • rfcs/0008-mvp-skill-registry/implementation-details.md: DB schema, store interface, REST API, SDK, CLI, package manager plugin interface

Test plan

Posted by Bill Murdock with assistance from Claude Code.

jwm4 and others added 7 commits July 14, 2026 12:37
Metadata-first registry for AI agent skills with versioning,
lifecycle management, trace integration, and package manager
plugin interface.

Phase 1 covers skills and skill bundles (skills-only). Phase 2
(RFC-0009, separate PR) will extend bundles with subagents, hooks,
and MCP server references.

Replaces the closed PR mlflow#10 with a phased approach per Slack
discussion with Databricks maintainers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Accept changes from Codex review: SDK namespace to mlflow.genai.*,
plugin import section, automatic harness instrumentation, install
via package manager. Trim auto instrumentation to essentials. Remove
register_skill idempotency and align with MCP Server Registry
behavior (fail if version exists), citing register_mcp_server() in
mlflow/mlflow#23696 as rationale.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fill in rfc_pr link, fix "The two entity types:" grammar, replace
all RFC-0009 references with "follow-up RFC", and change non-skill
member lists to examples (e.g., subagents, MCP server references)
since the set may change before that RFC is written.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ntics

Resolve both open investigation items: harness argument is now required
on install commands, reproducibility depends on the package manager
plugin (APM has full lockfile, Lola has version constraints). Drop
Phase 3 from adoption strategy. Add agentskills.io citation. Clarify
that bundles can contain non-skill content which is pulled and installed
but does not receive individual registry entries in Phase 1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add missing --harness claude-code to both install-bundle examples.
Fix Phase 2 phrasing to say "add registry entries for" instead of
"extend bundles to include" non-skill members.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add mlflow-skills.lock resolution lock for reproducible cross-machine
installation. Package manager plugin interface now returns
PackageManagerInstallResult with harness-local skill names so trace
manifests are accurate even when plugins rename skills. Monolithic
bundle install passes bundle_path to the plugin so non-skill content
is installed as a unit. Fix span annotation from "registry" to
"workspace" and "skipped" to "unregistered" wording.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add Open questions section per RFC template. Note that structured
security scan metadata is valuable but should be addressed as a
cross-registry capability shared across all registries, not as a
skill-specific feature.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment on lines +127 to +131
MLflow discovers and registers the plugin's skills as members of a
monolithic bundle. It preserves the Git source on the bundle and warns
about subagents, hooks, and MCP configurations that are not registered
in Phase 1.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and warns about subagents, hooks, and MCP configurations that are not registered
in Phase 1.

I see these warnings are provided in various cases (like import). It feels unnecessary because it is expected that a skill api / option would register only skills.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could argue it either way, but Yuki specifically asked for the warnings, and they seem somewhat useful to me.

Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md

#### Automatic harness instrumentation

Phase 1 extends the Claude Code autologger to recognize skill

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice if the RFC also points out the plan for the others in a future enhancement section, which, if any, should be prime candidates for auto log support.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Broadly speaking, I think the process would be something like this:

  1. Start with the list of harness agents that have auto-loggers at https://mlflow.org/docs/latest/genai/tracing/integrations/#coding-agents--long-running-agents
  2. Prioritize based on popularity, openness, importance to whatever contributor wants to do the work, etc.

In addition to supporting the harness agents, you might want to support the SDKs at https://mlflow.org/docs/latest/genai/tracing/integrations/#agent-frameworks-python and https://mlflow.org/docs/latest/genai/tracing/integrations/#agent-frameworks-typescript . Not all of those have a "skill" concept, and you can't autolog skill use if the SDK that you're using doesn't have a concept of a skill. (You could still log it yourself if you layer a skill concept on top of the SDK you're using of course).

This seems like a long, hard conversation to have to get any sort of meaningful conclusions. I'd prefer to keep it out of the RFC because I'm a little concerned that resolving this debate would take a bunch of time that would slow down work on this RFC in order to pre-decide things for future enhancements. Furthermore, I think a lot of things will change between now and the time that someone starts working on future enhancements, so whatever we decide now might turn out to be irrelevant by that time anyway.


### Manifest writing and discovery

Installation commands write or update the manifest after all requested

@HumairAK HumairAK Jul 23, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One thing that caught me by surprise was the decision to have MLflow locally materialize the skill or skull-bundle. I think this is a good way to ensure MLflow retains domain ownership over resolution semantics, instead of trying to squeeze registry behavior into another tool's package-resolution abstraction.

I think it would be good to explicitly mention the justification somewhere.

I'd imagine there are some tradeoffs here as well, for example if a package manager has features / capabilities around remote source semantics. If you agree, consider adding a small note about it.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I agree this needs some more thought. We'll sort it out in the upcoming installation RFC now that we've decided to defer installation.

Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
@jwm4 jwm4 mentioned this pull request Jul 23, 2026
3 tasks
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md Outdated
Comment thread rfcs/0008-mvp-skill-registry/0008-mvp-skill-registry.md
Comment thread rfcs/0008-mvp-skill-registry/implementation-details.md

@mprahl mprahl left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! I left a few comments.

jwm4 and others added 5 commits July 27, 2026 13:28
Replace all "Phase 1" qualifiers with "this RFC" or remove where
unnecessary. Replace "Phase 2" and "follow-up RFC" references with
explicit links to RFC-0009: Extended Skill Bundles (PR mlflow#27).
Restructure Adoption strategy from phased rollout into a description
of what this RFC delivers plus a Future improvements subsection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Avoids confusion with the existing `mlflow skills` CLI group that
inspects bundled Assistant skills. Updated all CLI command references
and narrative text in both the main RFC and implementation details.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bundle, import, and introspect commands now live under
`mlflow skills-registry bundles` instead of using flat
prefixed names (e.g., `bundles create-version` instead of
`create-bundle-version`).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All members are skills in this RFC. RFC-0009 can add the column
with a default of 'skill' via a standard schema migration when
it introduces non-skill member types.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add `list-package-managers` CLI command and SDK function
- Use fixed `.mlflow-skills/` directory for cached content instead
  of temporary directories
- Note that plugins may write native lockfiles alongside cached
  content for MLflow-free collaboration
- Add `check_requirements()` preflight method to plugin interface
- Include tracking server URL in `mlflow-skills.lock` so
  `--from-lock` can connect without separate configuration

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…te RFC

Remove all install commands, package manager plugin interface,
mlflow-skills.lock resolution lock, and install_count from RFC-0008.
This content will be covered in a separate RFC per reviewer feedback.

User journeys now use pull + manual harness installation. Pull and
plugin import remain in scope. Saved removed content to
.local/deferred-install.md for the new RFC.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jwm4

jwm4 commented Aug 3, 2026

Copy link
Copy Markdown
Author

This push removes install commands, the package manager plugin interface, the mlflow-skills.lock resolution lock, and install_count from RFC-0008. This content will be covered in a separate RFC, per @B-Step62's feedback in #3698119390 and #3698098572. User journeys now use pull + manual harness installation. Pull and plugin import remain in scope.

Fully moot threads (will be addressed in the new RFC):

  • #3640623518 - CLI to list supported harnesses (mprahl)
  • #3641310784 - --from-lock naming convention (mprahl)
  • #3641331561 - Path convention for cached content (mprahl)
  • #3641344037 - Package manager native lockfile (mprahl)
  • #3641353931 - Package manager preflight check (mprahl)
  • #3641358363 - Tracking server URL in lock file (mprahl)
  • #3641381603 - CLI to show available package managers (mprahl)
  • #3641405405 - Track install count (mprahl)
  • #3683042583 - Add install_count to dataclasses/response models (khaledsulayman)
  • #3683042587 - Store skill content in .mlflow-skills/ (khaledsulayman)
  • #3684568618 - Simplify install CLI (B-Step62)
  • #3684703334 - Sync locally installed versions / update command (B-Step62)
  • #3684710574 - Uninstall command (B-Step62)
  • #3684767003 - install_count on version object (B-Step62)
  • #3698098572 - Defer lock file to post v1 (B-Step62)
  • #3698119390 - Defer package manager design (B-Step62)
  • #3635515366 - Pull-then-install re-downloads from source (HumairAK)

I marked these as Resolved since the content is no longer in this RFC. All feedback will be tracked and addressed in the new RFC.

-- Bill Murdock (with assistance from Claude Code)

jwm4 and others added 3 commits August 3, 2026 16:56
Per reviewer feedback from mprahl: add agent setup integration,
MCP server skill search, and skill signature/trusted publisher
support as future improvements.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Skill names are already human-readable (e.g., code-review), so a
separate display_name adds complexity without clear benefit. Can be
reintroduced later if needed. Softened UI "consistent with" to
"modeled on" since MCP Server Registry still has display_name.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These are local working notes that should not be in the PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@mprahl
mprahl self-requested a review August 4, 2026 20:09
# Explicit: all fields specified
mlflow.genai.register_skill(
name="code-review",
source_type="git",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: Does it make sense to have a generic source field that maps to different classes such as GitSource, OCISource, etc. so that the required fields for each type is clear?

1. Register individual skill versions pointing to their sources:
```bash
# Minimal: name and source type inferred
mlflow skills register \

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: similar to my previous comment, it may be nice to have mlflow skills register git or mlflow skills register oci so that you know which args are required.

…e, unify content_path

Drop content_digest from MVP scope. Make source_type server-inferred
from the source value rather than user-specified. Unify content_path
into source (local paths detected by absence of :// scheme). Use
controlled artifact path for MLflow storage with create-then-upload
flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
source_type: SkillSourceType | None = None
source: str | None = None
subpath: str | None = None
status: SkillStatus = SkillStatus.DRAFT

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@B-Step62, @jwm4 , do you think defaulting the status to active makes sense? This would reduce the cognitive load for a user since unlike an MCP server that is essentially an application, I think a skill that gets published is almost always going to be active unless they are specific evaluation runs comparing tweaks to skills.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mprahl Really like that idea!

Comment thread rfcs/0008-mvp-skill-registry/implementation-details.md Outdated
harnesses. Discovers plugins via the entrypoint mechanism."""


def search_skill_traces(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jwm4 Can you checkout this comment? I don't think we should add a different search trace API for skills. The filter string can handle this well.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@B-Step62 , since this iteration of the RFC is no longer including how traces should be linked to skills. I think we should either:

  1. Add a manual way to link skills to a trace like MLflow does for prompts.
  2. We remove trace searching via skill usage from the RFC and add it in the follow up PR.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW, I've taken a note on this topic to make sure I address it in the trace linking PR. I haven't thought through that one carefully enough to know exactly where it's going to land, but I'll be sure to take into account this discussion and specifically the concern about having a separate search trace API for skills.

@mprahl

mprahl commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

@jwm4 @B-Step62 , I think the main remaining sticking point is what to call skill bundles.

My preference is Agent Plugin. This tells you what kind of plugin it is and people will automatically think of Claude Code or Cursor plugins.

Are we okay to move forward with this?

@B-Step62 B-Step62 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, assuming remaining updates we agreed on comment threads will be addressed. Thank you @jwm4 for the hard work on pushing this through!

@mprahl

mprahl commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

@jwm4 @HumairAK @B-Step62 , just bumping this comment here:
#26 (comment)

## Create a skill bundle

```python
mlflow.genai.create_skill_bundle_version(

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curious, since skills within a bundle can be individually versioned, and the same common skill can be potentially consumed by many bundles, do we intend to have a simple way to update all affected bundles to include/update the new skill version?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question. I just added two user journeys that address this for both cases:

Monolithic agent plugins (created via import): You can re-import from the updated source. Import matches discovered skills to existing members by comparing plugin-relative directory paths against the #subpath fragments in the previous agent plugin version. Matching subpaths get new skill versions; new subpaths become new skills; removed subpaths are omitted from the new version. So mlflow agent-plugins import --source ...@v2.0.0 is all you need.

Assembled agent plugins (manually composed): You register the new skill version, then create a new agent plugin version with the updated member reference. The skill detail view shows agent plugin memberships, so you can find which agent plugins include a given skill. There's no bulk "update all agent plugins that use this skill" operation in the MVP, but aliases give you a safe rollout mechanism: agents using skills:/pr-workflow@production keep resolving to the old version until you explicitly update the alias.

See the "Update an imported agent plugin" and "Update an assembled agent plugin after a member skill changes" journeys in the latest push.

Posted by Bill Murdock with assistance from Claude Code

and `search_skill_traces()`, is part of the MVP scope and will be
added to this RFC as a separate PR. The trace manifest mechanism
depends on the installation RFC below.
- **Installation and package manager integration.** Harness-specific

@aaronteo-db aaronteo-db Aug 5, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this will be really useful, and can be a simple way for users to integrate skills/bundles quickly to specific harnesses (without manual installation), since another evaluation they could perform could be using the same skill bundle version for different harnesses, and comparing which AI harnesses performs better

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree. We originally had this in scope for the MVP. I think it will be high priority for post-MVP.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup agreed, let's discuss on this in the follow-up RFC and target to ship it soon.

@mprahl

mprahl commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

@jwm4 I think the rename of skill bundles to "agent plugins" and this comment are all that are remaining from what I can see:
#26 (comment)

It may be worth having Claude double check for open threads that don't have a response yet.

@jwm4

jwm4 commented Aug 5, 2026

Copy link
Copy Markdown
Author

@mprahl Good idea. Here's my read on threads that don't have a definitive conclusion yet. Please let me know if I'm missing any or have the status wrong.

Updated status report (2026-08-06):

# Item Status Notes
1 UUID primary keys Done Replaced with (workspace, organization, name) composite key per Matt and Yuki's agreement. Organization is optional, defaults to empty string.
2 Drop UI wireframes Done Trimmed to short paragraph. Matt fine with keeping or dropping.
3 Rename SkillBundle Done Renamed to AgentPlugin throughout both documents.
4 Competitors section Deferred Matt: defer to follow-up, do market research in parallel with implementation.
5 Default status to "active" Done Changed per Matt and Yuki's agreement. Divergence note added re RFC-0004.
6 Keep pull Aligned Matt votes to keep. Yuki's concern was about install (now deferred to separate RFC).
7 Per-version status Done Keeping per-version status, defaulting to active. Matt and Humair agreed.
8 Typed source classes Open Matt proposed GitSource, OCISource, etc. Yuki liked it. Intersects with source/ref/subpath proposal. Not yet addressed.
9 CLI subcommands per source type Open Matt suggested mlflow skills register git. Not yet addressed.
10 Fluent API / load_skill Open Yuki suggests load_skill for consistency with prompt registry naming. Matt agrees CLIs should wrap Python APIs. Not yet addressed.
11 Bundle member URI format Aligned Query args over fragments. Matt proposed, Yuki +1'd. Not yet addressed in the RFC.
12 member_type in bundle members Deferred Matt prefers to drop for now, add later when needed.
13 subpath in bundle members Open Yuki questioned whether it belongs. Not yet responded to.

Summary: 5 items done, 3 deferred/aligned without code changes needed, 4 still open (8, 9, 10, 13). Items 8 and 9 are related (typed sources + CLI surface). Item 11 is agreed but not yet in the RFC.

New item: There is an emerging open standard for agent plugins at agent-plugins.org (spec repo). I'd like to work on aligning this RFC with that effort.

Posted by Bill Murdock with assistance from Claude Code

jwm4 and others added 10 commits August 5, 2026 14:16
Add server-assigned UUID PKs (skill_id, skill_bundle_id) to all
entities while keeping names unique per workspace via unique
constraint, following the GatewayEndpoint pattern. Update all
schema tables, dataclasses, store methods, SDK functions, REST
endpoints, and code examples to use UUID parameters.

Trim UI section from detailed card/filter/detail-view specs to a
short paragraph deferring layouts and card designs to UI mocks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…etails

Rename entity types, DB tables, SDK functions, CLI commands, REST
endpoints, code examples, and prose from "skill bundle" to "agent
plugin" per reviewer consensus. CLI commands move from
"mlflow skills bundles" to "mlflow agent-plugins".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When name is omitted and the server cannot access the source
(e.g., private repos requiring client-side credentials),
registration fails with an error. Name must be provided
explicitly for private sources.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove the manual monolithic agent plugin example that called
register_skill() without a source, which does not produce the
intended embedded skill. Monolithic agent plugins are created
through import_plugin().

Clarify that git source_type inference checks for .git before the
@ref portion, not at the end of the full source string.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…kinds

- Import into an existing monolithic agent plugin now matches skills by
  subpath against the previous version's member list, enabling plugin
  updates without name-based matching.
- New user journey for updating an assembled agent plugin when a member
  skill publishes a new version.
- All versions of a given agent plugin must be the same kind (monolithic
  or assembled); the server rejects mismatches.
- New embedded skills from re-import use the agent plugin version number.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Drop skill_id/agent_plugin_id UUIDs in favor of a composite primary
key. Organization defaults to empty string and scopes ownership so
the same skill name can exist under different organizations. Add
validation rules: reserve _ as empty-org placeholder, forbid purely
numeric names and URI-significant characters. Update all schema,
dataclasses, store interface, SDK, REST paths, URIs, and code
examples across both files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Skill registration is typically a publish action on known-good
content. Users who need a review gate can set status=draft
explicitly. Add divergence note explaining the difference from
RFC-0004.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow callers to create agent plugin versions as draft when they
need review-before-publish. Update evaluation and CI journeys to
create draft versions before promotion. Add status to store
interface, SDK function, and REST request model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Make the Agent Plugins format (agent-plugins.org) the canonical package
representation for AgentPluginVersion. Each version stores an immutable
plugin.json manifest, uses string versions from the manifest, and adds
SemVer-aware latest resolution. Import auto-detects Agent Plugins v1,
Claude Code, and generic formats. Introduces agent-plugins:/ URI scheme,
register_agent_plugin() convenience API, and free-text search across
manifest metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jwm4

jwm4 commented Aug 11, 2026

Copy link
Copy Markdown
Author

Status update (2026-08-11)

Major change: Agent Plugins alignment

The latest push aligns the AgentPlugin entity with the open Agent Plugins specification (spec repo). Key changes:

  • Each AgentPluginVersion stores an immutable canonical plugin.json manifest, following RFC-0004's hybrid server_json storage pattern.
  • Agent plugin versions now use manifest-supplied string versions instead of server-assigned integers. Latest resolution uses SemVer precedence when all candidates are valid SemVer, falling back to creation time otherwise.
  • A new agent-plugins:/ URI scheme replaces the shared skills:/ grammar for agent plugins, avoiding ambiguity with string versions.
  • Import auto-detects three input formats in priority order: Agent Plugins v1, Claude Code, and the generic skill-directory layout. Standard manifests take precedence; validation failures are fatal rather than silently falling back.
  • A register_agent_plugin() convenience API creates or reuses the parent and registers a canonical version in one call.
  • Free-text search_text covers manifest description, keywords, author name, and organization alongside existing structured filter_string.
  • MCP content (mcp.json) in monolithic packages is recognized and preserved but not individually registered. MCP membership is follow-up work for RFC-0009.

Fluent API / load_skill

Replied on this thread: load_prompt serves a specific inference-time purpose (cached, lineage-linked template retrieval) that doesn't have a skill equivalent. Skills are consumed through pull (fetch to disk) and get_skill/get_skill_version for metadata. A load_skill convenience can be added later if needed.

Remaining open items

# Item Status Notes
8 Typed source classes Open (optional) Matt proposed GitSource, OCISource. Yuki liked it. Not yet addressed.
9 CLI subcommands per source type Open (optional) Matt suggested mlflow skills register git. Related to #8.
11 Bundle member URI format Needs discussion Matt and Yuki agreed on query args over fragments, but the RFC still uses #subpath fragments for embedded skill members. Need to reconcile.
13 subpath in bundle members Open Yuki questioned whether subpath belongs in the member table. Not yet responded to.

Items 8 and 9 were both marked "Optional" by Matt. Items 11 and 13 are related (both about how embedded skill locations are represented in member references).

Posted by Bill Murdock with assistance from Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants