agent-orchestrator/docs/providers/ref-providers.md
Hibryda b6c1d4b6af docs: add 11 new documentation files across all categories
New reference docs:
- agents/ref-btmsg.md: inter-agent messaging schema and CLI
- agents/ref-bttask.md: kanban task board operations
- providers/ref-providers.md: Claude/Codex/Ollama/Aider comparison
- config/ref-settings.md: (already committed)

New guides:
- contributing/dual-repo-workflow.md: community vs commercial repos
- plugins/guide-developing.md: Web Worker sandbox API and publishing

New pro docs:
- pro/features/knowledge-base.md: persistent memory + symbol graph
- pro/features/git-integration.md: context injection + branch policy
- pro/marketplace/README.md: 13 plugins catalog

Split files:
- architecture/data-model.md: from architecture.md (schemas, layout)
- production/hardening.md: from production.md (supervisor, sandbox, WAL)
- production/features.md: from production.md (FTS5, plugins, secrets, audit)
2026-03-17 04:18:05 +01:00

6.3 KiB

Provider Reference

Agents Orchestrator supports 4 agent providers. Each provider has its own sidecar runner, message adapter, and capability set. Providers are selected per-project in groups.json or via the Settings tab.

Provider summary

Provider ID Default Model Sidecar Runner API
Claude Code claude claude-opus-4-6 claude-runner.mjs Claude Agent SDK
Codex CLI codex gpt-5.4 codex-runner.mjs @openai/codex-sdk
Ollama ollama qwen3:8b ollama-runner.mjs REST (localhost:11434)
Aider aider openrouter/anthropic/claude-sonnet-4 aider-runner.mjs OpenRouter / direct

Capabilities

Each provider declares capabilities that gate UI features:

Capability Claude Codex Ollama Aider
hasProfiles Yes No No No
hasSkills Yes No No No
hasModelSelection Yes Yes Yes Yes
hasSandbox No Yes No No
supportsSubagents Yes No No No
supportsCost Yes No No No
supportsResume Yes Yes No No

When a capability is false, the corresponding UI element is hidden. For example, profile selectors and skill autocomplete only appear for Claude.

Provider type

type ProviderId = 'claude' | 'codex' | 'ollama' | 'aider';

Defined in src/lib/providers/types.ts.

Provider selection

Set provider on a ProjectConfig in groups.json:

{
  "id": "my-project",
  "name": "My Project",
  "cwd": "/home/user/code/project",
  "provider": "codex",
  "model": "o3"
}

If omitted, defaults to claude.

Claude Code

  • Source: src/lib/providers/claude.ts
  • Runner: sidecar/claude-runner.ts (compiled to sidecar/dist/claude-runner.mjs)
  • SDK: @anthropic-ai/claude-agent-sdk query() function
  • CLI detection: Auto-detects Claude CLI at startup. Checks paths in order: ~/.local/bin/claude, ~/.claude/local/claude, /usr/local/bin/claude, /usr/bin/claude, then which claude. Agent errors immediately if not found.
  • Config dir: Override with CLAUDE_CONFIG_DIR for multi-account setups. Mapped to claude_config_dir in AgentQueryOptions.

Available models:

Model ID Label
claude-opus-4-6 Opus 4.6
claude-sonnet-4-6 Sonnet 4.6
claude-haiku-4-5-20251001 Haiku 4.5

Codex CLI

  • Source: src/lib/providers/codex.ts
  • Runner: sidecar/codex-runner.ts (compiled to sidecar/dist/codex-runner.mjs)
  • SDK: @openai/codex-sdk (dynamic import; graceful failure if not installed)
  • Sandbox: Maps agor sandbox settings to Codex approval modes.
  • Env: Requires OPENAI_API_KEY.

Available models:

Model ID Label
gpt-5.4 GPT-5.4
o3 o3
o4-mini o4-mini

Ollama

  • Source: src/lib/providers/ollama.ts
  • Runner: sidecar/ollama-runner.ts (compiled to sidecar/dist/ollama-runner.mjs)
  • API: Direct HTTP to localhost:11434 (native fetch, zero external deps)
  • Prereq: Ollama must be running locally before starting an agent session.

Available models:

Model ID Label
qwen3:8b Qwen3 8B
qwen3:32b Qwen3 32B
llama3.3:70b Llama 3.3 70B
deepseek-r1:14b DeepSeek R1 14B
codellama:13b Code Llama 13B

Aider

  • Source: src/lib/providers/aider.ts
  • Runner: sidecar/aider-runner.ts (compiled to sidecar/dist/aider-runner.mjs)
  • Routing: Supports OpenRouter, OpenAI direct, Anthropic direct, and Ollama local models via model ID prefixes.
  • Env: Requires OPENROUTER_API_KEY for OpenRouter models, OPENAI_API_KEY for OpenAI direct, ANTHROPIC_API_KEY for Anthropic direct.
  • Autonomous mode: Supports restricted (surfaces commands for approval) and autonomous (auto-executes with audit logging) via autonomousMode project config.

Available models:

Model ID Label
openrouter/anthropic/claude-sonnet-4 Claude Sonnet 4 (OpenRouter)
openrouter/anthropic/claude-haiku-4 Claude Haiku 4 (OpenRouter)
openrouter/openai/gpt-4.1 GPT-4.1 (OpenRouter)
openrouter/openai/o3 o3 (OpenRouter)
openrouter/google/gemini-2.5-pro Gemini 2.5 Pro (OpenRouter)
openrouter/deepseek/deepseek-r1 DeepSeek R1 (OpenRouter)
openrouter/meta-llama/llama-4-maverick Llama 4 Maverick (OpenRouter)
anthropic/claude-sonnet-4-5-20250514 Claude Sonnet 4.5 (direct)
o3 o3 (OpenAI direct)
ollama/qwen3:8b Qwen3 8B (Ollama)

Sidecar architecture

Each provider has a runner script compiled to a standalone ESM bundle in sidecar/dist/. The sidecar communicates with the Rust backend via stdio NDJSON.

Build all runners:

npm run build:sidecar

Provider routing

SidecarManager.resolve_sidecar_for_provider(provider) selects the runner file based on ProviderId. The sidecar process runs under Deno (preferred, faster startup) with Node.js as fallback.

Environment stripping

The sidecar strips provider-specific environment variables to prevent cross-contamination. The function strip_provider_env_var() in agor-core/src/sidecar.rs filters the process environment:

  • Stripped: CLAUDE_*, CODEX_*, OLLAMA_* (and similar provider vars)
  • Preserved: CLAUDE_CODE_EXPERIMENTAL_* (whitelist for experimental flags)
  • Preserved: Standard vars (HOME, PATH, USER, SHELL, TERM, XDG_*, RUST_LOG, etc.)

This is applied in two layers:

  1. Rust: env_clear() + filtered clean_env on the spawned process
  2. JavaScript: Runner SDK env option for provider-specific overrides

Message adapters

Each provider has a message adapter that parses provider-specific output into a common AgentMessage format:

Provider Adapter Tests
Claude src/lib/adapters/claude-messages.ts 25 tests
Codex src/lib/adapters/codex-messages.ts 19 tests
Ollama src/lib/adapters/ollama-messages.ts 11 tests
Aider sidecar/aider-parser.ts 72 tests

Adapters are registered in src/lib/adapters/message-adapters.ts and routed by ProviderId. The dispatcher (src/lib/agent-dispatcher.ts) delegates to the correct adapter based on the session's provider.