Skip to main content
A plugin is one install that adds skills, MCP servers and commands to the whole workspace. Its id is plug_ plus 16 base62 characters. A marketplace is a git repo whose index lists plugins, with id mkt_…. For why plugin parts are read-only, see Plugins and skills.

States

A plugin has no lifecycle status. Its one switch is enabled. Uninstall deletes the plugin and every part it owns. There is no uninstalled state. A refresh replaces the parts in one step, so a run sees the old set or the new set. Plugin parts are read-only. On a plugin skill you can change only enabledByDefault. On a plugin MCP server you can change only enabled, connectionId, secretRef, authKind and headerName. To change anything else, create your own standalone copy and turn the plugin’s part off.

Fields

string
required
Always plugin.
string
required
plug_… id.
string
required
Stable name, unique in the workspace. For a marketplace plugin, the entry name.
string
required
Readable name. You can change it.
string
Version from the manifest. Null when the manifest has none.
string
required
Manifest format: anthropic, codex, cursor or agent-plugins.
string
Marketplace it came from. Null for a direct install.
string
github, git-url, git-subdir or local-device. Null when unknown.
boolean
required
Whether the plugin is on for the workspace.
string
Description. Null when unset.
string
Homepage URL. Null when unset.
object
required
Count of each part kind the plugin declares. Pinework installs skills, MCP servers and commands. It records the other kinds without installing them.
string
required
Install time, ISO 8601.
string
required
Last change time, ISO 8601.
object
name and email, each null when unset. Detail only.
object
url, ref and sha it was fetched at, each nullable. Detail only.
object[]
Install and refresh only. Each has a code: duplicate-within-bundle, mcp-name-taken or connection-dropped.
A marketplace object has these fields:
string
required
mkt_…, or the name for a built-in.
string
required
The index’s own name. --marketplace takes it.
string
required
The repo the index lives in.
string
required
The ref it is read at. HEAD means the default branch.
string
required
The index file that matched.
integer
required
Plugins you can install from it.
object[]
required
Entries Pinework will not install, each with name and reason.
boolean
required
true for claude-plugins-official and cursor-plugins.
string
required
When the index was last read.

CLI

A device install takes --source-type local-device, --device-id, --vendor and --manifest-path. refresh fetches only plugins with a git source.

API

{marketplace} takes a mkt_… id or a name. An agent’s install, update, refresh, uninstall, or marketplace change becomes an approval request. The call returns HTTP 202. A marketplace entry with an npm or command source is skipped. Pinework fetches plugin content from git only.

Errors

Shared codes are in API errors.

Limits

  • A plugin holds at most 100 parts.
  • A plugin archive holds at most 10,000 entries and 256 MiB.
  • A marketplace index file is read up to 4 MiB, with a 10-second timeout.
  • A list page returns 25 plugins by default and 100 at most.
  • The q search takes up to 100 characters.
  • A pasted install command holds up to 8,192 characters.
Pinework looks for a marketplace index at .agents/plugins/marketplace.json, .claude-plugin/marketplace.json and .cursor-plugin/marketplace.json.

Plugins and skills

Why plugin parts are read-only.

Install a plugin

Install from a marketplace and fork a part.

Skill

The skills a plugin installs.

Connection

Credentials for plugin MCP servers.