Skip to main content
Emdash currently supports 22 CLI coding agents and is adding new providers regularly. Each agent runs in its own isolated Git worktree, allowing you to run multiple agents in parallel on different tasks.

Provider list

All 22 providers are defined in src/shared/providers/registry.ts as ProviderDefinition objects that configure how Emdash spawns and interacts with each CLI.
If you’re missing a provider, open an issue or submit a PR following the Contributing Guide.
ProviderStatusInstallation
Amp✅ Supportednpm install -g @sourcegraph/amp@latest
Auggie✅ Supportednpm install -g @augmentcode/auggie
Autohand Code✅ Supportednpm install -g autohand-cli
Charm✅ Supportednpm install -g @charmland/crush
Claude Code✅ Supportedcurl -fsSL https://claude.ai/install.sh | bash
Cline✅ Supportednpm install -g cline
Codebuff✅ Supportednpm install -g codebuff
Codex✅ Supportednpm install -g @openai/codex
Continue✅ Supportednpm i -g @continuedev/cli
Cursor✅ Supportedcurl https://cursor.com/install -fsS | bash
Droid✅ Supportedcurl -fsSL https://app.factory.ai/cli | sh
Gemini✅ Supportednpm install -g @google/gemini-cli
GitHub Copilot✅ Supportednpm install -g @github/copilot
Goose✅ Supportedcurl -fsSL https://github.com/block/goose/releases/download/stable/download_cli.sh | bash
Kilocode✅ Supportednpm install -g @kilocode/cli
Kimi✅ Supporteduv tool install --python 3.13 kimi-cli
Kiro✅ Supportedcurl -fsSL https://cli.kiro.dev/install | bash
Mistral Vibe✅ Supportedcurl -LsSf https://mistral.ai/vibe/install.sh | bash
OpenCode✅ Supportednpm install -g opencode-ai
Pi✅ Supportednpm install -g @mariozechner/pi-coding-agent
Qwen Code✅ Supportednpm install -g @qwen-code/qwen-code
Rovo Dev✅ Supportedacli rovodev auth login

Verifying installation

Emdash automatically detects installed CLI providers when you create a new task. To verify an agent is properly installed:
1

Check CLI availability

Test the provider’s CLI command directly:
# Most providers support --version
claude --version
codex --version
qwen --version
2

Verify in Emdash

Open Emdash and create a new task. The provider dropdown will only show detected agents.
3

Check PATH (macOS/Linux)

If a provider isn’t detected, ensure its installation directory is in your PATH. Emdash’s main.ts adds common locations:
  • Homebrew: /opt/homebrew/bin, /usr/local/bin
  • npm global: ~/.npm-global/bin, /usr/local/lib/node_modules
  • nvm: ~/.nvm/versions/node/*/bin

Provider configuration

Each provider definition in registry.ts includes:
export type ProviderDefinition = {
  id: ProviderId;
  name: string;
  docUrl?: string;
  installCommand?: string;
  commands?: string[];           // For CLI detection
  versionArgs?: string[];        // Usually ['--version']
  cli?: string;                  // Binary name
  autoApproveFlag?: string;      // e.g. '--dangerously-skip-permissions'
  initialPromptFlag?: string;    // How to pass initial prompt
  useKeystrokeInjection?: boolean; // For agents without prompt flags
  resumeFlag?: string;           // How to resume sessions
  sessionIdFlag?: string;        // Session isolation (Claude only)
  defaultArgs?: string[];        // Default CLI arguments
  icon?: string;                 // Icon filename
  terminalOnly?: boolean;        // All current providers are terminal-only
};

Key fields

Flag to run the agent in full-auto mode without user confirmation prompts. Examples:
  • Claude: --dangerously-skip-permissions
  • Codex: --full-auto
  • Qwen: --yolo
How the agent accepts the initial prompt:
  • Empty string (''): Positional argument
  • Flag like -i or -p: Separate flag + argument
  • undefined: No CLI prompt support (not usable for PR generation)
When true, Emdash types the prompt into the TUI after startup (used for Amp and OpenCode which lack CLI prompt flags).
Claude-only feature. Emdash generates a deterministic UUID from the task/conversation ID and passes it via --session-id for multi-chat isolation.

Adding a new provider

To add support for a new CLI agent:
1

Update the registry

Add a new ProviderDefinition to src/shared/providers/registry.ts:
{
  id: 'my-agent',
  name: 'My Agent',
  docUrl: 'https://my-agent.dev/docs',
  installCommand: 'npm install -g my-agent',
  commands: ['my-agent'],
  versionArgs: ['--version'],
  cli: 'my-agent',
  autoApproveFlag: '--auto',
  initialPromptFlag: '-p',
  icon: 'my-agent.svg',
  terminalOnly: true,
}
2

Add API key passthrough

If your agent requires API keys, add them to AGENT_ENV_VARS in src/main/services/ptyManager.ts:
const AGENT_ENV_VARS = [
  'OPENAI_API_KEY',
  'ANTHROPIC_API_KEY',
  'MY_AGENT_API_KEY', // Add here
  // ...
];
3

Add provider icon

Place the icon in src/renderer/assets/providers/ (SVG or PNG).
4

Test the integration

  • Install the CLI locally
  • Create a task with the new provider
  • Verify it spawns correctly and receives prompts
All new providers must pass format, lint, and type checks:
pnpm run format
pnpm run lint
pnpm run type-check
pnpm exec vitest run

Provider differences

Spawn modes

Emdash uses three PTY spawn strategies:
  1. Shell-based (startPty): {cli} {args}; exec {shell} -il — user gets a shell after agent exits
  2. Direct spawn (startDirectPty): Spawns the CLI directly using cached path (faster, preferred)
  3. SSH (startSshPty): Wraps ssh -tt {target} for remote development

Session isolation

Only Claude Code supports multi-session isolation via --session-id. For other providers, each conversation in a task shares the same CLI process.

Resume support

Providers with resumeFlag can continue previous sessions:
  • Claude: -c -r
  • Qwen: --continue
  • Kilocode: --continue
  • Gemini: --resume

Build docs developers (and LLMs) love