opencode-multi-model
v0.2.2
Published
Launch multiple AI models in tmux sessions - OpenCode Plugin, CLI, and Project Tool
Maintainers
Readme
opencode-multi-model
Launch multiple AI models in tmux sessions. Available as:
- OpenCode Plugin
- Standalone CLI
- Project-level tool
Installation
As OpenCode Plugin
Add to your OpenCode config (opencode.json):
{
"plugin": ["opencode-multi-model"]
}As Standalone CLI
# Using bunx (no install)
bunx opencode-multi-model open my-session -m openai/gpt-5.2 anthropic/claude-3-5-sonnet
# Or install globally
bun install -g opencode-multi-model
opencode-multi-model open my-session -m openai/gpt-5.2As Project Tool
If you installed it via bun and want to use it as a project tool, import it from the package:
// .opencode/tools/multi-model.ts
import { openTool as open, closeTool as close } from "opencode-multi-model"
export { open, close }If you are developing this package locally and want to test it in a project without publishing, import via relative paths:
// .opencode/tools/multi-model.ts
import { openTool } from "../../src/tools/open"
import { closeTool } from "../../src/tools/close"
export { openTool as open, closeTool as close }Usage
Plugin Usage
Open a session:
Use multi-model-open tool:
sessionName: my-session, models: ["openai/gpt-5.2", "anthropic/claude-3-5-sonnet"]Close a session (using tool):
call tool multi-model-close with sessionName: my-sessionCleanup archive tags (using tool):
call tool multi-model-cleanupClose a session (using manual command):
tmux kill-session -t my-session && rm -rf ~/.local/share/opencode/multi-model/my-session && git worktree prune && git branch -D $(git branch --format='%(refname:short)' --list 'opencode/my-session/*')CLI Usage
Open a session:
# Basic usage
opencode-multi-model open my-session -m openai/gpt-5.2 anthropic/claude-3-5-sonnet
# With custom binary (via flag)
opencode-multi-model open my-session -m openai/gpt-5.2 -b kilo
# With custom binary (via env)
export OPENCODE_MULTI_MODEL_BINARY=kilo
opencode-multi-model open my-session -m openai/gpt-5.2Close a session (CLI command):
# Close and cleanup worktrees
opencode-multi-model close my-sessionCleanup archive tags (CLI command):
# Delete all archive tags from local and remote repositories
opencode-multi-model cleanup
# Delete all archive tags without confirmation prompts
opencode-multi-model cleanup --force
# Delete only local archive tags, skip remote deletion
opencode-multi-model cleanup --no-remote
# Delete archive tags and push deletions to a specific remote
opencode-multi-model cleanup --remote originClose a session (manual command):
tmux kill-session -t my-session && rm -rf ~/.local/share/opencode/multi-model/my-session && git worktree prune && git branch -D $(git branch --format='%(refname:short)' --list 'opencode/my-session/*')Help:
opencode-multi-model --help
opencode-multi-model open --help
opencode-multi-model close --help
opencode-multi-model cleanup --helpConfiguration
Custom Binary
By default uses opencode. To use kilo instead:
Via environment variable:
export OPENCODE_MULTI_MODEL_BINARY=kiloVia CLI flag:
opencode-multi-model open my-session -m openai/gpt-5.2 -b kiloPriority: CLI flag > Environment variable > Default ("opencode")
CLI Reference
open - Create a new multi-model tmux session
opencode-multi-model open <session-name> [options]Arguments:
<session-name>- Name for the tmux session (required)
Options:
| Option | Description |
|--------|-------------|
| -m, --models <models...> | Model IDs to launch (space-separated) |
| -b, --binary <binary> | Binary to use (opencode or kilo). Defaults to env var OPENCODE_MULTI_MODEL_BINARY or 'opencode' |
close - Close a multi-model tmux session
opencode-multi-model close <session-name> [options]Arguments:
<session-name>- Name of the tmux session to close (required)
Options:
| Option | Description |
|--------|-------------|
| --keep-worktrees | Do not remove worktrees and delete branches |
| --no-tags | Do not create archive tags before deleting branches |
| -f, --force | Skip confirmation prompts |
cleanup - Delete all archive tags from local and remote repositories
Archive tags have the format: archive/<branch-name>-<timestamp>. These are created by the close command to preserve branch state before deletion.
opencode-multi-model cleanup [options]Options:
| Option | Description |
|--------|-------------|
| -f, --force | Skip confirmation prompts |
| -r, --remote <remote> | Remote name to push deletions to (default: first remote from git remote -v) |
| --no-remote | Only delete local tags, skip remote |
Global Options
| Option | Description |
|--------|-------------|
| -h, --help | Display help information |
| -V, --version | Display version number |
How it works
open command
The open command performs the following steps:
Validation: Checks that session name andmodels are provided, no duplicate models exist, and verifies git repo, tmux, and binary are available
Model verification: Validates models against
opencode modelsoutput to ensure only valid model IDs are usedGit worktree creation: For each model, creates:
- A git worktree at
~/.local/share/opencode/multi-model/<session>/<model>/ - A branch named
opencode/<session>/<model>
- A git worktree at
Tmux session: Creates a tmux session with one window per model, each window's working directory set to its corresponding worktree
Launch: Sends the launch command to each window to start the binary with the specified model
close command
The close command performs the following steps:
Kill tmux session: Terminates the tmux session if it exists
Worktree discovery: Finds all worktrees under
~/.local/share/opencode/multi-model/<session>/Worktree cleanup (unless
--keep-worktrees):- Removes each gitworktree
- Creates an archive tag (unless
--no-tags):archive/<branch>-<timestamp>for recovery - Deletes the associated branches
Directory cleanup: Removes the base session directory
cleanup command
The cleanup command performs the following steps:
Archive tag discovery: Finds all git tags matching the pattern
archive/*Local tag deletion: Deletes all archive tags from the local repository
Remote tag deletion (unless
--no-remote):- Determines which remote to use (user-specified, first available, or skip)
- Pushes tag deletions to the remote repository
Summary: Reports the number of tags deleted locally and remotely
Requirements
- tmux
- git
- opencode or kilo binary
- Bun runtime
Development
For local development and testing without publishing:
# Install dependencies
bun install
# Setup git hooks
bun run setup
# Build
bun run build
# Run tests
bun test
# Test CLI locally
bun dist/cli.js open test-session -m openai/gpt-5.2
bun dist/cli.js close test-sessionArchitecture
├── src/
│ ├── index.ts # Plugin entry point
│ ├── cli.ts # CLI entry point
│ ├── types.ts # Shared TypeScript types
│ ├── core/
│ │ ├── index.ts # Core exports
│ │ ├── open.ts # Launch session logic
│ │ ├── close.ts # Close session logic
│ │ ├── cleanup.ts # Cleanup archive tags logic
│ │ └── utils.ts # Helper functions
│ └── tools/
│ ├── open.ts # Open tool definition
│ ├── close.ts # Close tool definition
│ └── cleanup.ts # Cleanup tool definition
├── tests/
│ └── multi-model.test.ts # Tests
├── package.json
├── tsconfig.json
└── README.mdLocal code coverage
The test suite can generate a coverage report locally.
# Run tests with coverage (HTML report generated in ./coverage)
npm run coverage # or: bun run coverage
# Open the HTML report
open coverage/index.html # macOSThe coverage directory is ignored by Git but can be inspected to see which lines are exercised.
License
MIT
