Compatibility
A side-by-side view of Soubi's twenty-two adapters and the fallbacks that matter.
Soubi resolves every feature against the selected harness before it writes files. The result is native support, a documented translation, an explicit drop, or a target-only failure.
Use this page to compare targets. The adapter index has emitted paths and translation details for each harness.
Core adapters
| Feature | Claude | Codex | Gemini | OpenCode | Cursor | Copilot | Windsurf | Pi | Hermes | Kiro | Amp | Droid |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| instructions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◐ |
| skill | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| command | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| agent | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | ◐ | ✅ | ◐ | ✅ |
| hook | ✅ | ✅ | ✅ | ✅¹ | ✅ | ✅ | — | ✅¹ | ✅² | ✅ | ✅¹ | ✅ |
| MCP | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ◐ | ✅ | ✅ | ✅ |
| tool | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| asset | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Additional adapters
| Feature | OMP | Devin | Kimi | Qoder | Kilo | MastraCode | Grok | Antigravity | Maki | Herdr |
|---|---|---|---|---|---|---|---|---|---|---|
| instructions | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◐ | ✅ | ✅ | ◐ |
| skill | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ◐ | ◐ |
| command | ✅ | ◐ | ✅ | ✅ | ✅ | ✅ | ◐ | ◐ | ✅ | ◐ |
| agent | ◐ | ✅ | ◐ | ✅ | ✅ | ◐ | ✅ | ✅ | ◐ | ◐ |
| hook | ✅¹ | ✅ | ✅ | ✅ | ✅¹ | ✅ | ✅ | ✅ | ◐ | — |
| MCP | — | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| tool | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — |
| asset | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
✅ native or lossless generated support · ◐ usable translation with a warning · — dropped with a warning
¹ OpenCode, Kilo, Pi, OMP, and Amp generate TypeScript callbacks instead of declarative hook files.
² Hermes generates a Python plugin. MCP servers are written as a config.yaml merge fragment instead of replacing the user's global configuration.
The differences that affect design
Generated runtime code
Some harnesses expose an SDK instead of a file schema. Soubi generates code for those surfaces:
- OpenCode and Kilo use TypeScript plugin modules for hooks and tools.
- Pi and OMP use TypeScript extensions.
- Amp uses its TypeScript Plugin API.
- Hermes uses a Python plugin.
- Maki uses a Lua plugin.
The generated source is part of the artifact. You can inspect it in .soubi-out/<harness>/ before installation.
Agent fallbacks
Custom agents are the least portable feature:
- Kimi and MastraCode turn agents into invocable specialist skills.
- Amp and Maki turn agents into delegation tools backed by their runtime APIs.
- OMP folds the role into instructions.
- Herdr exposes the definition as a readable action.
- Windsurf and Pi drop it because there is no safe equivalent.
If the agent is load-bearing, set onUnsupported: "fail" on that definition. Only incompatible targets are excluded.
Global configuration
Most adapters emit repository-local files. Three targets need extra attention:
- Windsurf MCP installation writes to its global MCP configuration.
- Hermes emits a merge fragment for the global
config.yaml. - Maki installs plugins to a user-global directory and should use
soubi install --harness maki --global.
Preview those installs with --dry-run.
Check the exact result
The table summarizes feature-level support. Hook events and handler types are more specific, so use check for the plugin you are actually shipping:
pnpm soubi check ./my-plugin --harness claude,codex,opencodeDiagnostics name the feature, target, fallback tier, and emitted replacement. See fallback tiers for control over drop, degrade, and fail behavior.