Skip to content

Marketplaces & plugins

This is where agentsync earns its keep. A plugin is a bag of components — MCP servers, skills, subagents, commands, hooks, LSP servers. Install it once and every enabled agent gets the components it understands.

  1. Add a marketplace (a registry of plugins):

    Terminal window
    agentsync marketplace add github:anthropics/claude-plugins-official
  2. Install a plugin from it:

    Terminal window
    agentsync plugin add atlassian@anthropic
  3. Fetch from the networkplugin outdated is the polling verb of the daily loop:

    Terminal window
    agentsync plugin outdated
  4. Apply — renders from the local cache to all agents:

    Terminal window
    agentsync apply

Each component in a plugin is projected independently per agent — fully, lossily, or skipped — and the report tells you exactly which:

plugin: atlassian@anthropic
claude ✓ full (1 mcp, 5 commands)
opencode ◐ partial (1 mcp; 5 commands → projected)

Inspect a plugin’s coverage without applying:

Terminal window
agentsync plugin explain atlassian@anthropic
agentsync plugin explain atlassian@anthropic --json

Two keys in a plugin’s TOML decide which agents its components render to:

~/.agentsync/plugins/atlassian.toml
[plugin]
id = "atlassian@anthropic"
agents = ["claude"] # only fan this plugin out to Claude
# native_agents = ["claude"] # OMIT unless an agent installs this itself (see below)

agents is your allowlist — ["*"], or omitted, means every enabled agent. It is a deliberate, security-relevant choice: a plugin’s MCP servers, hooks, and skills can carry ${secret:…} credentials, so agents = ["claude"] keeps that blast radius scoped to Claude only.

native_agents is different in kind — not a preference but a fact about your machine. An agent whose own plugin manager installs a plugin (you ran /plugin install in Claude Code) already serves its components. agentsync never disables a plugin inside another tool’s plugin manager, so projecting the same components into that agent’s standalone paths would simply duplicate them: two of every skill, subagent and command, and every hook firing twice. Listing the agent here stops the projection for that agent only.

A component renders for an agent when agents targets it and native_agents does not claim it.

Terminal window
agentsync plugin add <id[@marketplace]>
agentsync plugin upgrade <id[@marketplace]>
agentsync plugin enable <id[@marketplace]>
agentsync plugin disable <id[@marketplace]>
agentsync plugin remove <id[@marketplace]>
agentsync plugin list

disable/enable flip only the disabled bit and install refreshes only the fetched fields — so your agents and native_agents targeting survives the full lifecycle untouched.