by mode-io
Manage skills across Codex CLI, Claude Code, Cursor, OpenCode, and OpenClaw from one local app.
# Add to your Claude Code skills
git clone https://github.com/mode-io/skill-managerAI extensions are scattered across harness-specific folders, MCP config files, and marketplace sources. Skill Manager gives those pieces one local control surface:
| Product idea | What it means | |---|---| | In use | Skill Manager controls the item and can enable or disable it across harnesses. | | Needs review | Skill Manager found local state, config differences, or inventory issues that need a decision. | | Discover | Browse marketplaces and preview external tools. |
Start with the whole extension portfolio: what is in use, what needs review, what can be discovered, and where extensions are active.

Use Skills as shared local packages instead of maintaining separate copies per harness.
Typical flow:

No comments yet. Be the first to share your thoughts!
Use MCP servers as one normalized config that can be written into each harness shape.
Typical flow:

Marketplace is the discovery surface:

brew tap mode-io/tap
brew install skill-manager
skill-manager start
npm install -g @mode-io/skill-manager
skill-manager start
| Harness | Skills | MCP servers | |---|---:|---:| | Codex CLI | Yes | Yes | | Claude Code | Yes | Yes | | Cursor | Yes | Yes | | OpenCode | Yes | Yes | | OpenClaw | Yes | Not Yet |
Skill Manager is a local configuration-management tool. It runs on your machine and reads or writes local harness extension state.
Actions that can change local state include:
App-owned files live under ~/Library/Application Support/skill-manager on macOS.
Before adoption, each harness points at its own local skill folder. After adoption, Skill Manager keeps one canonical package in its shared local store and exposes it to selected harnesses with local links. Disabling a harness removes that harness binding without deleting the package.
MCP servers are stored as normalized Skill Manager records, then translated into the config shape each harness expects:
mcp_servers.mcpServers JSON entries.When Skill Manager finds different configs for the same MCP server, it asks you to resolve the source of truth first.
CLI marketplace entries are preview-only.
On macOS, app-owned files live under ~/Library/Application Support/skill-manager.
Useful paths:
~/Library/Application Support/skill-manager/shared~/Library/Application Support/skill-manager/mcp/manifest.json~/Library/Application Support/skill-manager/marketplace~/Library/Application Support/skill-manager/settings.jsonMost users do not need to change these locations. If you manage skills in a custom environment, you can override individual skill roots with environment variables.
| Harness | Env var | Default Skill Manager skill root |
|---|---|---|
| Codex | SKILL_MANAGER_CODEX_ROOT | ~/.agents/skills |
| Claude | SKILL_MANAGER_CLAUDE_ROOT | ~/.claude/skills |
| Cursor | SKILL_MANAGER_CURSOR_ROOT | ~/.cursor/skills |
| OpenCode | SKILL_MANAGER_OPENCODE_ROOT | ~/.config/opencode/skills |
| OpenClaw | n/a | ~/.openclaw/skills |
MCP config locations are harness-owned. Skill Manager writes only to verified config paths and skips unsupported harness writes.
skill-manager supports Python 3.11+. CI validates backend compatibility on Python 3.11 through 3.14, while packaging and release builds stay pinned to Python 3.11 for determinism.
scripts/install-dev.sh
scripts/start-dev.sh
Stop the managed local instance:
scripts/stop-dev.sh
The split dev flow is available when you want Vite hot reload:
npm run dev
npm run dev:backend
Default local URLs:
http://127.0.0.1:5173http://127.0.0.1:8000http://127.0.0.1:8000/api/healthValidation:
scripts/install-dev.sh
npm run typecheck
bash scripts/test_backend.sh
npm test
npm run build
Marketplace is temporarily unavailable, verify your network connection and try again.npm install -g @mode-io/skill-manager reports that Homebrew already owns skill-manager, uninstall the Homebrew formula first. The inverse also applies: uninstall the npm package before switching back to Homebrew.