The intelligent package manager for agent artifacts. Find skills, agents, commands, hooks, MCP servers and plugins across every repo you follow, then pick the ones you want into your own Claude Code plugin, pinned to the commits you picked from.
// Why
The problem
Good agent artifacts are scattered across hundreds of repos and marketplaces. Installing a whole plugin to get one skill drags in agents, hooks and MCP servers you didn’t want, under names you don’t control, at whatever commit happens to be current.
// How
What ipm does
- Follow repos.
ipm marketplacelists curated repos andipm marketplace add obra/superpowersfollows one.ipm catalog synchas pnpm fetch every repo and pin it to a commit. - Catalog them.
ipm catalog syncalso builds a catalog of everything those repos hold: one record per repo, marketplace, plugin, skill, agent, command, hook and MCP server, linked to what owns it. - Search.
ipm search "c# testing"runs hybrid keyword and semantic search over the catalog, on a local Typesense server.ipm show treeandipm show graphshow where anything comes from. - Pick into packs.
ipm pack add my-pack <id>…collects skills, agents, commands and whole plugins from any of your repos into a named pack in your project’sipm.toml. - Or do it all in one screen.
ipm tuihas a tab each for searching and collecting, your packs, your installs and the marketplace, with keys instead of IDs. - Build and install plugins.
ipm pack buildbuilds each pack into a Claude Code plugin and a local marketplace under.ipm/. Your picks load asmy-pack:<item>; whole plugins come along as pinned dependencies.ipm install claudebuilds when needed and installs a pack into Claude Code.
ipm marketplace add obra/superpowers wshobson/agents
ipm catalog sync
ipm catalog serve && ipm catalog rebuild
ipm search tdd --type skill
ipm pack new my-pack --description "My picks"
ipm pack add my-pack 'skill:obra/superpowers:skills/test-driven-development'
ipm install claude my-pack
// Principles
Why it is different
- Pinned and reproducible. Every item is pinned to a commit in
.ipm/ipm.lock. Commit it, and a teammate who runsipm pack buildgets byte-identical plugins. - No upstream code runs. pnpm always runs with
--ignore-scripts, and repos’ own npm dependencies are never installed. Sources are content, not code. - Your namespace. Picked items load under your pack’s name, not a dozen upstream plugin names.
- Built on pnpm. Fetching, pinning, a content-addressable store and cheap linking come from pnpm;
ipmdoesn’t reinvent them. - You stay in control. Building never touches your Claude Code configuration;
ipm install claudeinstalls a pack, at the scope you choose, only when you ask.
// Next
Where next
| If you want to | Read |
|---|---|
Install ipm and run it for the first time | Getting started |
| Understand sources, the catalog, packs and scopes | Concepts |
| Build a plugin from items in several repos | Build your own plugin |
| Look up a command or flag | Commands |
| Fix an error message | Troubleshooting |
| Know how it works inside | How it works |