Plugin Config
Set plugin identity, target defaults, MCP servers, and packaged files in plugin.config.ts.
plugin.config.ts describes the plugin as a whole. It is optional; without it, Soubi uses the source directory name as the plugin ID.
Define the plugin
import { defineConfig } from "soubi";
export default defineConfig({
id: "diff-river",
description: "Review a diff with focused specialist agents.",
version: "0.1.0",
author: "Your team",
marketplace: {
category: "code-review",
keywords: ["diff", "review"],
},
});id is required when the file exists. Keep it stable: generated server names, ownership records, and some native manifests use it as identity.
Config fields
| Field | Purpose |
|---|---|
id | Stable plugin identifier |
description | Human-readable summary |
version | Version written into native manifests where supported |
author | Author metadata |
marketplace | Additional catalog metadata passed to compatible targets |
harnesses | Default list of adapters to build |
harnessDefaults | Per-target fallback defaults and adapter-specific values |
mcpServers | Named stdio or HTTP MCP servers |
assets | Existing files to package with the plugin |
files | In-memory files with explicit destination paths |
Choose default targets
Omit harnesses to build every registered adapter. Set it when the plugin intentionally supports a smaller target set:
export default defineConfig({
id: "diff-river",
harnesses: ["claude", "codex", "opencode"],
});A CLI --harness flag narrows the active targets for that command.
Set target defaults
Use harnessDefaults for policy that applies to every feature emitted for one target:
export default defineConfig({
id: "diff-river",
harnessDefaults: {
codex: { onUnsupported: "fail" },
},
});A feature-level onUnsupported value takes precedence. Read Fallback Tiers before making an entire target strict.
Package additional files
Use assets for existing paths and files for generated or in-memory content. Assets covers directory loading, executable files, and portable destination paths.