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 network — plugin 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. add rewrites only the three fields it re-fetches (id, version, manifest_sha) and carries every other field agentsync models in plugins/<id>.toml forward from the file you have; a key you omitted, or an agents or update you left empty, is written with its default. The file is rewritten, so comments and unmodelled keys are not kept. Your agents and native_agents targeting survives the full lifecycle.