Skip to main content

Multi-Agent Support

Bloom supports multiple AI coding agents, enabling you to choose the best tool for each workflow. You can configure different agents for interactive sessions (like bloom enter and bloom refine) versus autonomous task execution (bloom run).

Philosophy

Bloom trusts each agent to know its own capabilities. Agents inject their own system prompts with their features, tools, and limitations. This means:

  • Agents can add features without requiring Bloom updates
  • You can customize agents via their own configuration (MCP servers, extensions, etc.)
  • Bloom focuses on orchestration, not capability tracking

Supported Agents

AgentCLI CommandProviderBest For
ClaudeclaudeAnthropicGeneral development, web research
CopilotcopilotGitHubGitHub-integrated workflows
CodexcodexOpenAIStructured output, exploratory work
GoosegooseMulti-providerExtensible automation via MCP
OpenCodeopencodeMulti-providerCode intelligence via LSP
CursoragentCursorIDE-style development, cloud execution

Configuration

Agent configuration is stored in ~/.bloom/config.yaml:

gitProtocol: ssh

agent:
# Default agents for each mode
defaultInteractive: claude # For bloom enter, bloom refine
defaultNonInteractive: claude # For bloom run (autonomous tasks)

# Per-agent model configuration
claude:
defaultModel: sonnet
models:
- sonnet
- haiku
- opus

opencode:
defaultModel: github-copilot/claude-sonnet-4
models:
- github-copilot/claude-sonnet-4
- openai/gpt-4o

copilot:
defaultModel: claude-sonnet-4.5
models:
- claude-sonnet-4.5
- gpt-5.2-codex
- gemini-3-pro-preview

Configuration Options

FieldTypeDefaultDescription
agent.defaultInteractivestringclaudeAgent for interactive sessions
agent.defaultNonInteractivestringclaudeAgent for autonomous tasks
agent.[name].defaultModelstring(agent default)Default model for this agent
agent.[name].modelsstring[][]Available models for switching

Agent Names

Valid agent names: claude, copilot, codex, goose, opencode, cursor

Configuration Commands

# View current configuration
bloom config

# Set default agents
bloom config set-interactive claude
bloom config set-noninteractive opencode

# Set model for an agent
bloom config set-model claude opus

# Discover and manage models
bloom config models # Show configured models
bloom config models copilot --discover # Discover from CLI
bloom config models opencode -d -s # Discover and save

Choosing an Agent

For Interactive Development (bloom enter, bloom refine)

Use CaseRecommended AgentWhy
General developmentClaudeRich tool ecosystem, web search
GitHub-focused workCopilotNative GitHub MCP integration
Extensible automationGooseMCP extensions for custom capabilities

For Autonomous Tasks (bloom run)

Use CaseRecommended AgentWhy
Standard task executionClaudeTodoWrite for progress tracking
Code-heavy refactoringOpenCodeLSP provides accurate code intelligence
Exploratory workCodexSession forking to try alternatives

Installation

Each agent has its own installation process. See their official documentation:

AgentOfficial Docs
ClaudeClaude Code Docs
CopilotGitHub Copilot CLI
CodexOpenAI Codex CLI
GooseGoose Docs
OpenCodeOpenCode Docs
CursorCursor CLI Docs

Troubleshooting

Agent Not Found

If you get "command not found" errors:

  1. Verify the CLI is installed: which <agent-name>
  2. Check your PATH includes the installation directory
  3. For npm packages: ensure global npm bin is in PATH

Authentication Errors

  • Claude: Check ANTHROPIC_API_KEY environment variable
  • Copilot: Run gh auth status to verify GitHub auth
  • Codex: Check OPENAI_API_KEY environment variable
  • Goose: Run goose configure to set up provider
  • OpenCode: Verify provider-specific API keys are set
  • Cursor: Run agent login or check CURSOR_API_KEY environment variable

Model Not Found

When specifying models:

  • Claude: Use Anthropic model names (e.g., opus, sonnet)
  • Copilot: Use provider-qualified names (e.g., claude-3.5-sonnet)
  • Codex: Use OpenAI model names
  • OpenCode: Use provider/model format (e.g., anthropic/claude-sonnet-4)
  • Cursor: Use model names as shown in Cursor settings (e.g., gpt-4o, claude-3.5-sonnet)

Architecture

Bloom uses a provider abstraction layer to support multiple agents:

┌─────────────────┐
│ Bloom TUI │
└────────┬────────┘

┌────────▼────────┐
│ Agent Factory │ ← Reads ~/.bloom/config.yaml
└────────┬────────┘

┌────┴────┬────────┬────────┬─────────┬────────┐
▼ ▼ ▼ ▼ ▼ ▼
┌───────┐ ┌───────┐ ┌─────┐ ┌─────┐ ┌────────┐ ┌──────┐
│Claude │ │Copilot│ │Codex│ │Goose│ │OpenCode│ │Cursor│
└───┬───┘ └───┬───┘ └──┬──┘ └──┬──┘ └───┬────┘ └──┬───┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
claude copilot codex goose opencode agent
CLI CLI CLI CLI CLI CLI

Each provider implements the Agent interface:

  • run(options): Execute a prompt and return results
  • getActiveSession(): Get current session for monitoring

See the source code in src/agents/ for details on adding new agent providers.