Let plugins provide agent skills#725
Conversation
# Conflicts: # crates/mesh-llm-host-runtime/src/cli/commands/agent_cli.rs
# Conflicts: # crates/mesh-llm-host-runtime/src/cli/mod.rs
There was a problem hiding this comment.
Pull request overview
Adds a new mesh-llm-skills workspace crate plus a plugin-manager discovery layer that lets installed plugins ship Agent Skills (skills/<name>/SKILL.md) which are copied into per-agent skill roots. Introduces a mesh-llm skills install CLI subcommand and wires best-effort skill installs into the goose, pi, opencode, and claude launch commands. Updates workspace, Docker, and CI scripts to include the new crate, and documents the feature in docs/plugins/README.md and docs/CLI.md.
Changes:
- New
mesh-llm-skillscrate with skill model, target resolution, marker-based install/update/conflict classification, and dry-run/force support. - New
plugin_manager::skillsmodule discovering enabled-plugin skills and a newskills installCLI subcommand dispatched from the host runtime. - Agent launchers (
goose,pi,opencode,claude) callinstall_skills_for_agentbefore launching; workspace/Docker/CI helper lists updated for the new crate.
Reviewed changes
Copilot reviewed 17 out of 18 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
Cargo.toml / Cargo.lock |
Register mesh-llm-skills as a workspace member and dependency of plugin-manager. |
crates/mesh-llm-skills/Cargo.toml |
New crate manifest with anyhow, dirs, serde, serde_json, tempfile. |
crates/mesh-llm-skills/src/lib.rs |
Skill data model, target resolution/detection, install/classification logic, marker handling, tests. |
crates/mesh-llm-plugin-manager/Cargo.toml |
Add dependency on mesh-llm-skills. |
crates/mesh-llm-plugin-manager/src/lib.rs |
Re-export skill types and add skills module. |
crates/mesh-llm-plugin-manager/src/skills.rs |
Discover SKILL.md / skills/<name>/SKILL.md in enabled plugins and call into installer. |
crates/mesh-llm-host-runtime/src/cli/mod.rs |
Add Skills command, SkillCommand::Install, and SkillAgentArg enum. |
crates/mesh-llm-host-runtime/src/cli/commands/mod.rs |
Wire Skills command dispatch. |
crates/mesh-llm-host-runtime/src/cli/commands/skills.rs |
Implements explicit install command and best-effort launch-time install helper. |
crates/mesh-llm-host-runtime/src/cli/commands/agent_cli.rs |
Invoke install_skills_for_agent in Goose, Claude, Pi, and OpenCode launch paths. |
docker/Dockerfile.client, fly/Dockerfile |
Explicit COPY entries for the new crate in build stages. |
.github/workflows/docker-precheck.yml |
Add new crate to enforced copy list. |
scripts/affected-crates.sh, scripts/plan-clippy-batches.sh |
Register the new crate in CI helpers and weights. |
docs/plugins/README.md, docs/CLI.md |
Document skill packaging, target table, and skills install switches. |
ndizazzo
left a comment
There was a problem hiding this comment.
Really interesting idea - specifically, for Blackboard it makes sense to teach agents how to use it intrinsically.
Since this is a generally an improvement that depends on individual plugins adding skills, I think it's safe and doesn't violate the boundaries of what mesh-llm provides... However, I do share the same sentiment that @michaelneale mentioned a few days ago that we want to be deliberate about where/what we provide and at what layer of the stack.
Some minor inline comments/stuff, but generally nothing blocking ✅
|
@ndizazzo @michaelneale thanks for the reviews 👍 |
|
@ndizazzo @michaelneale updated with suggested changes |
* origin/main: require clippy before Rust PRs (#741) Let plugins provide agent skills (#725) Add model metadata to models API (#735) Guard release version mismatches (#726) Add split readiness doctor (#723) Make GPU inventory backend-authoritative with ROCm diagnostics (#677) # Conflicts: # Cargo.lock
Summary
Plugins can now ship Agent Skills that mesh-llm installs into supported agent clients. A plugin exposes skills by bundling skill folders in its native plugin archive, for example:
The mesh plugin installer extracts the archive as before. The new skill installer discovers enabled installed plugins, finds
skills/<name>/SKILL.mdunder their install paths, and copies those skills into agent-specific skill directories. It preserves user-owned skill directories unless the explicit installer is run with--force.CLI and Agent Behavior
Adds:
By default,
skills installwrites only to detected agent locations. It can also target explicit agents or all supported locations.Agent launchers now install available plugin skills before launching the target agent:
mesh-llm gooseinstalls Goose skillsmesh-llm piinstalls Pi skillsmesh-llm opencodeinstalls OpenCode skillsmesh-llm claudeinstalls Claude Code skillsLaunch-time install failures warn and continue so the agent session is not blocked by a local skill filesystem issue.
Plugin Author Story
Plugin authors define skills by adding normal Agent Skill directories to their release archive:
Skill names are validated for portable lowercase ASCII/hyphen naming. Skills should use relative references and avoid OS-specific absolute paths unless the skill explicitly documents platform requirements.
Example plugin PR: Mesh-LLM/blackboard#1 updates Blackboard to bundle its existing
skills/blackboard/SKILL.mdin release archives.Validation
cargo fmt --all -- --checkcargo check -p mesh-llm-skillscargo check -p mesh-llm-plugin-managercargo check -p mesh-llm-host-runtimecargo check -p mesh-llmcargo test -p mesh-llm-skills --libcargo test -p mesh-llm-plugin-manager --libcargo run -p xtask -- repo-consistency ci-crate-listscargo run -p xtask -- repo-consistency release-targetsNote:
cargo test -p mesh-llm-host-runtime --libwas attempted but did not run because this local checkout is missing the nativellama-commonstatic library required byskippy-ffi.