Plugin & Distribution
The MultiTerminal plugin is the unit that packages the skills, agents, hooks, and the bundled MCP/channel server and ships them to Claude Code. The desktop app hosts the data and UI; the plugin gives every Claude Code agent its skills, hooks, and messaging surface. This page covers the manifest, the directory layout, and how the plugin is distributed through the marketplace.
On This Page
What the plugin is
A Claude Code plugin is a self-contained bundle that Claude Code loads to extend an agent's behavior. The MultiTerminal plugin packages four things into one installable unit:
- Skills — 15 slash commands that orchestrate the kanban/review workflow (see Skills & Commands).
- Agents — 9 specialist subagents the workflow skills dispatch for review, debugging, and session work.
- Hooks — lifecycle scripts that inject identity/context and react to session events (see Hooks).
- An MCP/channel server — the bundled
multiterminal-channelserver that bridges agent-to-agent messaging into Claude Code as native channel events. - Agent rules — a top-level
CLAUDE.mdcarrying the agent behavioral instructions (kanban workflow, MCP tools, messaging, task terminology).
Installing the plugin is what turns a plain Claude Code session into a MultiTerminal-aware agent — one that knows its identity, its task, its messages, and its team.
The plugin.json manifest
Every plugin is described by .claude-plugin/plugin.json. MultiTerminal's declares the name, version, author, and — importantly — the bundled MCP server and channel:
{
"name": "multiterminal",
"description": "Multi-agent coordination system for Claude Code. Hooks, skills,
and agents for kanban task management, review pipelines, team
orchestration, and session lifecycle.",
"version": "1.0.0",
"author": { "name": "ClarionLive", "email": "noreply@multiterminal.dev" },
"mcpServers": {
"multiterminal-channel": {
"command": "node",
"args": ["${CLAUDE_PLUGIN_ROOT}/server/multiterminal-channel.mjs"]
}
},
"channels": [ { "server": "multiterminal-channel" } ]
}
The mcpServers block makes Claude Code launch the bundled channel server (via node, resolved through ${CLAUDE_PLUGIN_ROOT} so the path is install-location independent), and the channels block registers that server as a native messaging channel. Skills and agents are discovered by convention from the skills/ and agents/ directories; hooks are wired separately in hooks/hooks.json — they don't need to be re-listed in the manifest.
Directory layout
The plugin root contains these top-level entries:
| Path | Contents |
|---|---|
.claude-plugin/plugin.json | The manifest (name, version, MCP server, channel). |
skills/<name>/SKILL.md | The 15 skills, each in its own folder with frontmatter + instructions (some carry a references/ subfolder). |
agents/*.md | The 9 specialist agent definitions, plus report-template.html (the shared review-report template). |
hooks/hooks.json + hooks/*.js | The hook registry and its Node scripts (plus _sqlite.js for native-module resolution and migration/policy notes). |
server/ | multiterminal-channel.mjs (the channel MCP server), its package.json, and node_modules. |
vendor/ | Vendored node_modules — notably the prebuilt better-sqlite3 native binary the hooks depend on. |
CLAUDE.md | Agent behavioral rules shipped to every session. |
The bundled channel server & vendored binary
The plugin bundles its runtime dependencies so a clean install needs no build toolchain on the typical target.
multiterminal-channel.mjs
A Channels MCP server (one per terminal) that bridges MultiTerminal's agent-to-agent messaging into Claude Code. It listens on an HTTP port for incoming messages, pushes them into the session as <channel> events, and exposes send/reply tools so Claude can message back — the current transport, which replaced the legacy [cm] ConPTY nudge (see Channels). It reads CHANNEL_PORT, MULTITERMINAL_NAME, MULTITERMINAL_ID, and MT_API_URL from the environment and depends on @modelcontextprotocol/sdk.
vendor/ — better-sqlite3
DB-backed features (profiles, session lifecycle, activity, the kanban board) use the native better-sqlite3 module. A prebuilt binary for win32-x64 is checked into git verbatim under vendor/node_modules/better-sqlite3, so hooks resolve it automatically with no npm install. On a mismatched runtime (different Node ABI, or non-Windows/ARM) the binary won't load and DB features disable for the session — the rest of the plugin still works. Fixes: rebuild it, use a global install, or point MT_BETTER_SQLITE3 at an explicit build.
Distribution via the marketplace
The plugin ships through a Claude Code marketplace — a small repository that advertises one or more installable plugins. The marketplace root holds .claude-plugin/marketplace.json plus the plugins themselves under plugins/:
{
"name": "multiterminal-marketplace",
"description": "MultiTerminal plugins for Claude Code multi-agent coordination",
"owner": { "name": "ClarionLive" },
"plugins": [
{
"name": "multiterminal",
"description": "Multi-agent coordination system for Claude Code. ...",
"source": "./plugins/multiterminal",
"category": "productivity"
}
]
}
The marketplace points at the plugin via a relative source path, so the marketplace repo and the plugin travel together. A user adds the marketplace once, then installs (or later updates) the plugin from it.
Installing & updating
From the marketplace README, the install flow is:
# Add the marketplace, then install the plugin
claude plugin marketplace add ClarionLive/multiterminal-marketplace
claude plugin install multiterminal@multiterminal-marketplace
# Later, to pull updates
claude plugin marketplace update multiterminal-marketplace
Or use the interactive /plugin menu inside Claude Code and pick multiterminal from the multiterminal-marketplace source. Requirements: a recent Claude Code version — one that supports the args-array hook form (args: string[]) and plugin channels, Node.js 18+ on PATH (hooks and the channel server run under Node), and for the bundled DB binary, a win32-x64 runtime (other platforms work after a one-line npm rebuild).
Plugin vs. the desktop app
MultiTerminal has two halves that work together:
- The desktop app (the WinForms host) owns the data and the UI — it runs the REST API on
:5050, the SQLite databases, the kanban board, the panels, and the Office/Agent visualizations. - The plugin gives the Claude Code agents their surface — the skills they run, the hooks that inject identity/context, the specialist agents, and the channel server for messaging. Its hooks and the channel server reach the app over the same
:5050REST API and the shared SQLite stores.
In short: the app is where the work and the team live; the plugin is what makes each Claude Code session a participating member of that team. Neither requires you to hand-wire the other — installing the plugin and running the app is enough for a session to find its identity, task, inbox, and teammates. For the data side, see Architecture; for the messaging internals, see MCP Architecture and Distribution.