
equipr installs skills, commands, and MCP servers from a marketplace or an Agent Plugins source into whichever coding agents are present on a machine: Claude Code, Codex, OpenCode, and Pi. It works through each agent's own personal config surfaces rather than a plugin system. It is a single Go binary, MIT licensed, and available now via Homebrew or as a standalone install script.

## The problem it addresses

Claude Code has a marketplace mechanism for distributing and updating skills that none of the other three agents come close to matching. Codex, OpenCode, and Pi have no built-in equivalent. The alternatives are copying a skill's files by hand, which then has to be kept current on its own since nothing does that automatically, or installing an npm package for the skills some maintainers publish that way. The [Agent Plugins specification](https://agent-plugins.org/specification) exists to standardize the package format itself, but it does not yet define how any individual agent installs from a source or keeps that installation up to date. That part is still left to each agent's own tooling, or to something else.

The same gap shows up again with isolated per-agent containers, of the kind [Fragua](/blog/2026/07/introducing-fragua/) uses: each container needs the same sources installed, and each one is a separate place that update has to reach.

## What equipr resolves

equipr treats a source as one of two shapes. A repository with `.claude-plugin/marketplace.json` at its root is a marketplace holding one or more plugins. A repository with `plugin.json` at its root is a single [Agent Plugins](https://agent-plugins.org/specification)-conformant package. Both resolve to the same internal model, addressed the same way:

```
<source-id>/<plugin>:<component>
```

```console
$ equipr add https://github.com/coreyhaines31/marketingskills
Fetching https://github.com/coreyhaines31/marketingskills
Added marketingskills (marketplace, fetched via git) with 1 plugin(s)
  - marketing-skills 2.10.0

$ equipr list
marketingskills     marketplace
  marketing-skills  2.10.0  49 skills

$ equipr install marketingskills/marketing-skills:seo-audit --yes
Installed 1 component(s) into 3 agent(s):
  [claude-code] seo-audit (copy -> ~/.claude/skills/seo-audit)
  [opencode] seo-audit (symlink -> ~/.config/opencode/skills/seo-audit)
  [pi] seo-audit (symlink -> ~/.pi/agent/skills/seo-audit)
```

`equipr status` reports whether each recorded install still matches its source. `equipr update` re-fetches every registered source and re-applies anything that changed. `equipr doctor` reports broken symlinks and orphaned records.

## Where each agent differs

The four agents agree on very little beyond the skill file format itself. A `SKILL.md` is the one point of real convergence across all four. Everywhere else, they differ:

| Agent       | Skills directory             | MCP config                         |
| ----------- | ----------------------------- | ----------------------------------- |
| Claude Code | `~/.claude/skills/`          | `~/.claude.json`                   |
| Codex       | `~/.codex/skills/`           | `~/.codex/config.toml`             |
| OpenCode    | `~/.config/opencode/skills/` | `~/.config/opencode/opencode.json` |
| Pi          | `~/.pi/agent/skills/`        | `~/.config/mcp/mcp.json`           |

Three different config formats, and OpenCode's MCP schema is not merely a different filename: it requires an explicit `type` and a `command` array where Claude Code infers both from a single string. equipr's install step translates a source's MCP configuration into each target's native shape rather than writing one format everywhere.

## Installing into each agent

equipr places skill and command files where each agent expects them, and merges MCP servers into each agent's existing config without disturbing anything else already there: no unrelated key is touched, no unrelated setting is reformatted. Installing is the same command regardless of which agent it's going into; equipr absorbs the difference in how each one stores things.

## npm sources without an npm install

equipr accepts an npm package as a source. It does not run `npm install`. It runs `npm pack`, extracts the resulting tarball into its own cache alongside git and archive sources, and reads `plugin.json`, `skills/`, `commands/`, and `mcp.json` out of the result. No dependency tree is installed alongside it, and nothing registers as a plugin or a global package in the process.

## What equipr does not do

equipr never registers itself as a native plugin inside any agent: no entry in Claude Code's `/plugin` list, no npm-global registration, nothing to unregister if the binary is removed. It writes to personal config directories and stops.

## What this reinforced

Treating each agent's personal config surface as the integration point, rather than any agent's own plugin system, is what let one tool support four incompatible agents from a single codebase. The harder requirement turned out to be the opposite of adding capability: writing less to any given file, and writing it more carefully, specifically the single-key-merge discipline for MCP config. That constraint did more to make the tool trustworthy than any feature did.

## Install

```bash
curl -fsSL https://github.com/maquina-app/equipr/releases/latest/download/install.sh | sh
```

Checksum-verified, installs to `/usr/local/bin` when writable, `~/.local/bin` otherwise. A Homebrew tap is also available: `brew install maquina-app/tap/equipr`.

The [equipr documentation](/documentation/tools/equipr/) covers every command, every flag, where each file lands per agent, and exit codes for scripting. Source is on [GitHub](https://github.com/maquina-app/equipr), MIT licensed.

Maquina's own Claude Code plugins are distributed as a marketplace equipr can install from: see [AI Tools](/documentation/ai-tools/).
