Soubi

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-plugin

What it maps

Native (Claude)Portable (Soubi)
.claude-plugin/plugin.jsonplugin.config.ts (definePlugin)
AGENTS.md / CLAUDE.mdAGENTS.md
skills/<n>/SKILL.md (+ assets)copied verbatim (read natively)
commands/<n>.mdcopied verbatim
agents/<n>.mdcopied verbatim
hooks/hooks.jsonone hooks/<event>.ts per entry (defineHook)
.mcp.jsonmcp.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-plugin

Anything that can't be expressed natively on a target will surface as a fallback tier warning rather than a silent loss.

On this page