Port an Existing Plugin
Reverse-generate a portable Soubi plugin from an existing native plugin.
Already have a Claude Code plugin? soubi port reads the native tree and re-expresses it in Soubi's file conventions so you can compile it to every other harness.
pnpm soubi port ./my-claude-plugin --out ./my-pluginWhat it maps
| Native (Claude) | Portable (Soubi) |
|---|---|
.claude-plugin/plugin.json | plugin.config.ts (definePlugin) |
AGENTS.md / CLAUDE.md | AGENTS.md |
skills/<n>/SKILL.md (+ assets) | copied verbatim (read natively) |
commands/<n>.md | copied verbatim |
agents/<n>.md | copied verbatim |
hooks/hooks.json | one hooks/<event>.ts per entry (defineHook) |
.mcp.json | mcp.ts (defineMcpServers) |
Generated tool servers (<id>-tools) are intentionally skipped — re-author those as a tools.ts module so they stay portable.
After porting
Review the output, then validate it against every harness:
pnpm soubi check --cwd ./my-pluginAnything that can't be expressed natively on a target will surface as a fallback tier warning rather than a silent loss.