Table of Contents generated with DocToc
- Installing Apache Magpie from agent marketplaces
Installing Apache Magpie from agent marketplaces
From 0.2.0, Apache Magpie ships manifests so its skills can be installed
through the plugin/extension mechanisms of the major AI coding agents,
in addition to the canonical /magpie-setup snapshot adoption (see
install-recipes.md).
[!IMPORTANT] The marketplace path is a discovery and trial channel: it drops the 70 skills into your agent so you can use them immediately. It does not set up the full adoption machinery (the committed pin, the gitignored snapshot, drift detection, agentic overrides, or the secure-agent setup). For a project that adopts Magpie for real, use
/magpie-setup— the marketplace install and full adoption are complementary, not exclusive.
[!NOTE] The canonical release of Apache Magpie remains the signed source artefact on
dist.apache.orgper the ASF release policy. Marketplace entries are a convenience layer that reference the releasedX.Y.Zgit tag; they are derived from — not a substitute for — the ASF source release.
[!WARNING] Marketplace/plugin support is still young in most agentic CLIs. Agent Plugins 1.0 standardised the package format in August 2026, but it deliberately specifies no install mechanism or marketplace format — so install commands, catalog schemas, and the client-specific manifests still change between releases (see Verification status). If a marketplace install breaks, or your agent has no marketplace at all, the non-marketplace install is always available, universal, and portable: adopt Magpie with
/magpie-setupfrom either the signed SVN release (dist.apache.org) or the GitHub repo (git tag or branch) — seeinstall-recipes.md. That path is harness-neutral: it wires the skills into any agent’s directory via the universal.agents/skills/layout, so it works on every agentic CLI — not only the ones with a marketplace. Rule of thumb: use a marketplace for a quick trial on a supported agent; use/magpie-setupfor a stable, portable install.
Two manifest families: Agent Plugins 1.0 and client-specific
Magpie ships both of the manifest shapes an agent may look for, because as of 2026-08 no single one is read by every client.
Agent Plugins 1.0 (published
2026-08-06 by a TSC drawn from Amazon, Cursor, Microsoft, OpenAI, and Vercel;
Google has since joined) is the vendor-neutral standard. A conformant plugin is
a directory with a root plugin.json declaring the
canonical $schema, plus skills in skills/<name>/SKILL.md and — optionally —
MCP servers in a root mcp.json. Magpie’s skill tree already had exactly that
layout, so conformance needed no file moves: the root plugin.json is the
only addition.
Client-specific manifests stay alongside it, because the clients that predate the standard still read their own:
| Manifest | Read by | Why it is still needed |
|---|---|---|
plugin.json (root) |
VS Code, GitHub Copilot (CLI + app + SDK) | The AP1 manifest. VS Code auto-detects the format from the root manifest and treats the $schema value as the AP1 marker |
.claude-plugin/plugin.json |
Claude Code (also read by VS Code) | Claude Code documents only this path, and AP1’s schema is closed — it has no place for the hooks block or the skills path |
.codex-plugin/plugin.json |
OpenAI Codex CLI | Codex documents this as its plugin entry point, with its own interface / apps / hooks fields |
gemini-extension.json |
Google Gemini CLI | Gemini’s extension format is unrelated to AP1; Google has announced support for the standard but not a migration for this file |
apm.yml |
microsoft/apm |
A cross-client compiler, not a client — its own package schema |
The manifests do not conflict: they sit at different paths, each client reads
the one it documents, and every one of them points at the same single skills/
tree. tools/dev/check-family-plugins.py enforces that they all carry the same
version and shared metadata, and that the AP1 manifest stays inside its closed
ten-field schema — a Claude-only key such as skills or hooks copied into it
is a fatal manifest error for an AP1 client, not an ignorable one.
[!NOTE] AP1 covers skills and MCP servers only. It deliberately specifies no hooks, agents, commands, or marketplace/registry format. So Magpie’s
SessionStartupgrade prompt and its marketplace catalogs remain client-specific by necessity, not by choice — see Automatic upgrade detection.
Choosing a plugin: all-in-one vs per-family
The framework ships as eleven plugins. You can install either the all-in-one plugin or any number of per-family plugins — and you can mix several families. Pick based on the trade-off between install simplicity and always-on token cost (each installed skill advertises a short description to the model on every turn — see “always-on” cost below).
All-in-one — magpie
- ✅ One install; all 70 skills; nothing to decide. Uses the real
skills/directory, so no symlinks — works on Windows out of the box. - ⚠️ Adds ~21.7k always-on tokens to every session, including families you may never use — that context (and cost) is spent whether or not you invoke a Magpie skill that turn.
- Best when you genuinely want everything, or you’re on Windows without symlink support.
Per-family — magpie-<family> (recommended)
- ✅ Install only the families you use, so the always-on cost is proportional
(
magpie-security≈ 3.9k,magpie-pairing≈ 0.6k). Install several to mix and match. - ⚠️ You manage a few installs instead of one; adding a family later is a separate install; relies on git symlinks (see the Windows note below).
- Best for day-to-day use where you want a lean context window.
Mixing is fine — e.g. install magpie-release-management + magpie-security
and nothing else. The two are not exclusive with the all-in-one either, but
installing both magpie and a family plugin just double-loads those skills,
so pick one approach.
| Family plugin | Skills | ~Always-on tokens |
|---|---|---|
magpie-security |
12 | ~3.9k |
magpie-release-management |
10 | ~2.9k |
magpie-setup |
9 | ~2.6k |
magpie-pr-management |
8 | ~2.4k |
magpie-issue |
8 | ~2.4k |
magpie-repo-health |
7 | ~2.1k |
magpie-contributor-growth |
6 | ~1.8k |
magpie-utilities |
4 | ~1.4k |
magpie-mentoring |
4 | ~1.2k |
magpie-pairing |
2 | ~0.6k |
magpie (all) |
70 | ~21.7k |
Skills are invoked under the installing plugin’s namespace — e.g.
/magpie:release-vote-tally (all-in-one) or
/magpie-release-management:release-vote-tally (family plugin).
Per-family plugins reference the shared skills/ tree via symlinks (no copies),
so there is a single source of truth for every skill.
[!IMPORTANT] Windows + per-family plugins. The per-family plugins rely on git symlinks (each
plugins/magpie-<family>/skills/<skill>links to the sharedskills/<skill>). Git for Windows does not materialise real symlinks unlesscore.symlinksis enabled and the account may create them (Windows Developer Mode, or an elevated shell) — otherwise the clone writes each symlink as a plain text file and that family’s skills won’t load. On Windows, either enable symlink support (git config --global core.symlinks true+ Developer Mode) or install the all-in-onemagpieplugin, which uses the realskills/directory and needs no symlinks. macOS and Linux are unaffected. (Verified on macOS: a/plugin marketplace addGitHub clone preserves and resolves the symlinks.)
[!IMPORTANT] The per-family plugins are not Agent Plugins 1.0 packages. AP1 requires a symlink’s final target to resolve inside the plugin root, and each family plugin’s
skills/<skill>deliberately points out of its own root at the shared../../../skills/<skill>tree. Materialising them as real directories would mean vendored copies of every skill — which PRINCIPLES §13 rules out, and which would leave eleven divergent copies to keep in sync. So the families stay a Claude Code feature (Claude Code resolves the symlinks, as verified above), and AP1 clients install the all-in-onemagpieplugin, whoseskills/is the real tree and needs no symlink at all. If per-family granularity on AP1 clients turns out to be worth its cost, the way to get it is to generate materialised family directories as a release artefact rather than commit them — deliberately deferred, not overlooked.
Skill names differ by install method
The same skill is invoked by a different name depending on how you
installed it. The portable /magpie-setup install bakes a magpie- prefix into
each skill’s name (so framework skills never collide with your own); the
marketplace plugins namespace with plugin:skill and keep the bare skill name.
| Skill (directory) | Portable — /magpie-setup snapshot |
Marketplace — all-in-one magpie |
Marketplace — family plugin |
|---|---|---|---|
release-vote-tally |
/magpie-release-vote-tally |
/magpie:release-vote-tally |
/magpie-release-management:release-vote-tally |
security-issue-triage |
/magpie-security-issue-triage |
/magpie:security-issue-triage |
/magpie-security:security-issue-triage |
setup |
/magpie-setup |
/magpie:setup |
/magpie-setup:setup |
Why the difference:
- Portable install (
/magpie-setupsnapshot) — thesetupskill symlinks each framework skill under amagpie-<name>entry (e.g.skills/release-vote-tally/→magpie-release-vote-tally), and the skill’s own frontmattername:carries the samemagpie-prefix. It is therefore invoked as a single hyphenated token,/magpie-<name>. The prefix is the namespace — it keeps framework skills from clashing with the adopter’s own skills. - Marketplace install — the plugin name is the namespace, applied with a
colon:
/<plugin>:<skill>. Themagpie-frontmatter prefix is ignored (the plugin already namespaces), so the skill keeps its bare directory name. With the all-in-one plugin that’s/magpie:<skill>; with a family plugin it’s/magpie-<family>:<skill>.
Throughout this repo’s own docs and skills, cross-references use the
portable form (/magpie-<name>), because that is the canonical install.
When you install via a marketplace, translate /magpie-<name> to
/<plugin>:<name> (drop the magpie- prefix, add the plugin namespace).
Supported agents
Every method below uses the GitHub repository
apache/magpie as the marketplace —
no third-party or vendor “official” directory is required. Pin to a released
tag (e.g. 0.2.0) for reproducibility, or track main for the latest.
Quick reference:
| Agent | One-liner | Manifest in this repo |
|---|---|---|
| Claude Code | /plugin marketplace add apache/magpie → /plugin install magpie@apache-magpie |
.claude-plugin/marketplace.json + .claude-plugin/plugin.json |
| OpenAI Codex CLI | codex plugin marketplace add apache/magpie → install magpie |
.codex-plugin/plugin.json, .agents/plugins/marketplace.json |
| VS Code / GitHub Copilot | install straight from the repo URL https://github.com/apache/magpie, or add it as a plugin marketplace |
root plugin.json (AP1), marketplace.json (repo root) |
| Google Gemini CLI | gemini extensions install https://github.com/apache/magpie |
gemini-extension.json |
| Cursor | add via the plugin/skill install flow pointing at the repo | root plugin.json (AP1) |
| microsoft/apm | apm install apache/magpie (compiles to Claude/Cursor/Codex/Copilot/Gemini) |
apm.yml |
| Kiro | install per-skill from a GitHub subdirectory, or the AP1 package | root plugin.json (AP1), native skills/<name>/SKILL.md |
| OpenCode | clone skills into .opencode/skills/, or use a community installer |
native skills/<name>/SKILL.md |
Detailed steps per agent follow.
Claude Code
-
In a Claude Code session, add the marketplace from GitHub — this clones the repo and reads
.claude-plugin/marketplace.json:/plugin marketplace add apache/magpie -
Install the all-in-one plugin, or just the families you use:
/plugin install magpie@apache-magpie # everything (~21.7k always-on) /plugin install magpie-security@apache-magpie # one family (~3.9k always-on) /plugin install magpie-release-management@apache-magpie -
Confirm it is enabled (the
magpieplugin should appear as installed):/plugin -
Invoke any skill under the plugin namespace, e.g.:
/magpie:release-vote-tally /magpie:security-issue-triage -
Update later with
/plugin marketplace update apache-magpiethen/plugin update magpie@apache-magpie. On a version change the bundledSessionStarthook also prompts you to run/magpie-setup upgrade.
To pin a specific version instead of tracking main, add the marketplace
from the tag: /plugin marketplace add apache/magpie@0.2.0.
OpenAI Codex CLI
-
Add the marketplace (reads
.agents/plugins/marketplace.json):codex plugin marketplace add apache/magpie -
Install the plugin:
codex plugin install magpie -
List / verify — inside Codex run
/plugins, or from the shellcodex plugin list.
Only the all-in-one magpie plugin is offered here — the per-family
plugins are Claude Code-only, for the reason recorded
above. The catalog is checked
against that rule by tools/dev/check-family-plugins.py, so it cannot drift
into advertising a plugin Codex could not install.
Codex’s plugin/marketplace verbs are still evolving. If a command name differs, check
codex plugin --help.
VS Code and GitHub Copilot
Agent Plugins 1.0 support is generally available in VS Code, Copilot CLI, the
Copilot app, and the Copilot SDK on all Copilot plans. VS Code auto-detects the
plugin format from the root manifest, and Magpie’s root
plugin.json declares the AP1 $schema, so it is loaded
as an AP1 package. Two ways in:
-
Straight from the repo URL — no marketplace needed. Point VS Code’s plugin install at:
https://github.com/apache/magpieVS Code clones the repo and installs the plugin.
-
As a marketplace — add
apache/magpieas a plugin marketplace (CLI or the coding-agent settings) and installmagpiefrom it. That path reads the rootmarketplace.json.
Either way the 70 skills become available to the agent under the plugin. As
with Codex, only the all-in-one magpie plugin is offered — the per-family
plugins are Claude Code-only, for the reason recorded
above.
[!NOTE] VS Code ignores client extension data and directories in an AP1 package. Magpie’s
.claude-plugin/hook block is therefore inert here — the upgrade prompt is Claude Code-only (see Automatic upgrade detection). Existing Copilot plugins that do not target AP1 remain supported, so the rootmarketplace.jsonkeeps working regardless.
Google Gemini CLI
-
Install the extension straight from GitHub (reads
gemini-extension.jsonand auto-discovers the skills underskills/):gemini extensions install https://github.com/apache/magpie -
Verify:
gemini extensions list -
Use the skills by asking the agent in natural language or by skill name.
-
Update with
gemini extensions update magpie. Gemini has no lifecycle hook, so the shippedGEMINI.mdreminds you to run/magpie-setup upgradewhen the version changes.
Cursor
Cursor is one of the Agent Plugins 1.0 launch clients (and sits on the spec’s
TSC), so it reads the root plugin.json. Add Magpie
through Cursor’s plugin/skill install flow (Customize → Plugins/Skills)
pointing at github.com/apache/magpie.
Confirm the exact add flow in Cursor’s current docs — its self-serve marketplace surface is evolving.
microsoft/apm (multiplexer)
apm compiles one package to several agents at once (Claude, Cursor, Codex,
Copilot, Gemini).
-
From your project root:
apm install apache/magpie(reads
apm.yml,type: skill). -
apmdeploys the skills into each supported agent’s directory and writes anapm.lock.yaml— commit it to pin the exact resolved commit.
apmschema is v0.1 and may change; verify verbs withapm --help.
Kiro (AWS)
Kiro installs skills per-skill from a GitHub subdirectory (it does not consume the repo root). For each skill you want, point Kiro’s “install from GitHub” at that skill’s subdir on a pinned tag, e.g.:
https://github.com/apache/magpie/tree/0.2.0/skills/release-vote-tally
Kiro reads the skills/<name>/SKILL.md there.
OpenCode
OpenCode reads native Agent Skills from .opencode/skills/. Either:
- clone the skill directories you want into
.opencode/skills/(project) or~/.opencode/skills/(personal) fromgithub.com/apache/magpie, or - use a community installer (e.g. the
opencode-skills-collectionnpm package) pointed at this repo.
Not supported
- Windsurf — has no skills/rules marketplace; project rules are plain
.windsurfrulesfiles with no install mechanism. Skills would have to be converted by hand; there is no distribution channel. - Goose (Block) — its extension registry is Model Context Protocol
(MCP) servers, not
SKILL.mdskills. Distributing Magpie there would require wrapping skills behind an MCP server (a rebuild, not packaging).
Automatic upgrade detection
When the marketplace updates the plugin to a new version, Magpie prompts you
to run /magpie-setup upgrade — which reconciles the gitignored snapshot,
the agentic overrides, and drift. This is detect-and-prompt, not auto-run:
a plugin hook cannot invoke a slash command, and Magpie never mutates an
adopter repo without the guided skill’s confirmation, so the trigger is
automatic while the changes stay confirmed.
| Agent | Mechanism |
|---|---|
| Claude Code | SessionStart hook hooks/check-upgrade.sh compares the installed version to a marker in the plugin’s persistent data dir and prompts on change. Deterministic. |
| Codex CLI | The same hooks/check-upgrade.sh, wired inline via the plugin’s hooks block — Codex uses the same event schema and the same SessionStart event. Codex sets PLUGIN_ROOT/PLUGIN_DATA (and the CLAUDE_* pair for compatibility), which the script reads. See the caveat below. |
| VS Code / Copilot, Cursor, Kiro (AP1) | None. Agent Plugins 1.0 specifies no hook component and VS Code ignores client extension directories, so there is nothing to fire. Re-run /magpie-setup upgrade after updating. |
| Gemini CLI | No lifecycle hook; the extension context file GEMINI.md instructs the agent to compare the extension version to a recorded marker and prompt on change (LLM-driven, advisory). |
| Other agents | Re-run /magpie-setup upgrade manually after updating the package. |
[!WARNING] Codex plugin-local hooks may not fire yet. openai/codex#16430 reports that the runtime executes only the global
hooks.jsoneven though the plugin docs describe plugin-local hooks. The manifest is written to the documented schema so it starts working when the runtime catches up; until then, treat the Codex upgrade prompt as best-effort and re-run/magpie-setup upgrademanually.
The hook writes its prompt to stdout, which is what a SessionStart hook
exiting 0 has added to the session context — stderr on a zero exit reaches only
the debug log. It is read-only apart from writing its own version marker, which
goes to the client-provided persistent data directory (CLAUDE_PLUGIN_DATA /
PLUGIN_DATA), falling back to $XDG_STATE_HOME/magpie — never inside the
plugin checkout, which a plugin update may replace wholesale. It makes no
network calls and touches nothing in the adopter repo.
Versioning
The plugin version tracks the framework version in pyproject.toml, which is
the single authority every manifest mirrors verbatim — including the .devN
suffix. Between releases the manifests therefore read 0.2.0.dev0, not
0.2.0: a bare 0.2.0 would advertise a release that does not exist yet. Only
a tagged release carries a bare version, and only released versions are ever
published to a marketplace, so the PEP 440 suffix never reaches a consumer.
Nothing is hand-edited. pyproject.toml feeds the four ecosystem manifests,
and the all-in-one .claude-plugin/plugin.json
in turn feeds the ten per-family manifests and the marketplace entries, which
also inherit author, homepage, repository, and license. Bump
project.version and run python3 tools/dev/check-family-plugins.py --fix; the
same script, run as a prek hook, fails the build on any manifest left behind at
the old version. See
release-management-config.md
(version_manifest_files).
Verification status
Every manifest here has been checked against the vendor’s published documentation; what varies is whether it has also been exercised against a live install.
| Manifest | Schema source | Status |
|---|---|---|
root plugin.json |
Agent Plugins 1.0.0 spec + plugin.schema.json |
Conforms to the published closed schema; enforced by check-family-plugins.py. Not yet live-installed |
.claude-plugin/* |
Claude Code plugins reference | Verified live — claude plugin validate . --strict passes with 0 warnings; a family plugin installs and loads from a local marketplace replica |
.codex-plugin/plugin.json, .agents/plugins/marketplace.json |
Codex plugin docs (Package your plugin) |
Matches the documented entry point, field set, and repo-marketplace path. Not yet live-installed; see the plugin-local hooks caveat above |
root marketplace.json |
Copilot / VS Code plugin marketplace docs | Legacy-format catalog, explicitly still supported alongside AP1. Not yet live-installed |
gemini-extension.json |
Gemini CLI extensions docs | Follows the published schema. Google has joined the AP1 TSC but has published no migration for this file — keep both |
apm.yml |
microsoft/apm schema v0.1 |
Pre-1.0 and the most likely to churn; re-check before publish |
The skills themselves are checked against the
Agent Skills specification, which AP1
defers to. Worth stating explicitly, because it looks like a problem and is
not: 41 of the 70 description fields contain the framework’s
<placeholder> syntax (<tracker>, <upstream>, …). The spec constrains
description on length only — 1–1024 characters, non-empty — and places no
restriction on angle brackets; the character-class rules apply to name, which
every skill satisfies. So the placeholders are conformant, not a portability
risk to design around.
Re-check each against the vendor’s current documentation before a marketplace publish. Manifests that fail live validation should be fixed here and re-released — none of them change how the ASF source release is built or signed.