Skip to content

Providers

Flightdeck uses a multi-provider architecture that lets you swap between AI coding assistants without changing your workflow. All providers communicate via the ACP (Agent Client Protocol) over stdio — a universal transport that eliminates the need for provider-specific SDKs.

Supported Providers

ProviderIconBinaryRequired Env VarsStatus
GitHub Copilot🐙copilotNone (uses gh auth)GA
Google Gemini CLI💎geminiGEMINI_API_KEYGA
Claude Agent (ACP)🟠claude-agent-acpANTHROPIC_API_KEYGA
Codex (ACP)🤖codex-acpOPENAI_API_KEYGA
Cursor↗️agentCURSOR_API_KEYPreview
OpenCode🔓opencodeNone (manages own keys)Preview
Kimi CLI🌙kimiNone (uses kimi login)GA
Qwen Code🔮qwenNone (Qwen OAuth or OPENAI_API_KEY)GA

Configuration

Set your active provider in flightdeck.config.yaml:

yaml
provider:
  id: copilot    # One of: copilot, gemini, claude, codex, cursor, opencode, kimi, qwen-code

Config File Locations

Config files are resolved in this order (later overrides earlier):

  1. Built-in defaults
  2. ~/.flightdeck/config.yaml (user-level, auto-created on first run)
  3. ./flightdeck.config.yaml (repo-level overrides)
  4. FLIGHTDECK_CONFIG env var (explicit path)
  5. Environment variables (startup-only)
  6. API PATCH (runtime changes)

Config is hot-reloaded — changes take effect without restarting the server.

Switching Providers

To switch providers, update the provider.id field and set any required environment variables:

yaml
# Example: Switch to Claude
provider:
  id: claude
  envOverride:
    ANTHROPIC_API_KEY: sk-ant-...

# Example: Switch to Gemini
provider:
  id: gemini
  envOverride:
    GEMINI_API_KEY: AIza...

# Example: Switch to Codex
provider:
  id: codex
  envOverride:
    OPENAI_API_KEY: sk-...

You can also set env vars in your shell instead of using envOverride:

bash
export ANTHROPIC_API_KEY=sk-ant-...

Advanced Options

yaml
provider:
  id: copilot
  binaryOverride: /custom/path/copilot   # Override binary path
  argsOverride: ['--acp', '--stdio']      # Override spawn arguments
  envOverride:                            # Extra environment variables
    SOME_VAR: value

Model Selection

Each provider maps models to three quality tiers:

TierUse CaseExample Models
fastQuick tasks, low costclaude-haiku-4.5, gemini-2.5-flash-lite, gpt-5.1-codex-mini
standardGeneral developmentclaude-sonnet-4.6, gemini-2.5-flash, gpt-5.3-codex
premiumComplex architectureclaude-opus-4.6, gemini-2.5-pro, gpt-5.4

Provider Tier Mappings

ProviderFastStandardPremium
GitHub Copilotclaude-haiku-4.5claude-sonnet-4.6claude-opus-4.6
Gemini CLIgemini-2.5-flash-litegemini-2.5-flashgemini-2.5-pro
Claude Agenthaikudefaultopus
Codexgpt-5.1-codex-minigpt-5.3-codexgpt-5.4
Cursorclaude-haiku-4.5claude-sonnet-4.6claude-opus-4.6
OpenCodeanthropic/claude-haiku-4-5anthropic/claude-sonnet-4-6anthropic/claude-opus-4-6

Per-Role Model Defaults

Configure default models for each agent role:

yaml
models:
  defaults:
    lead: [claude-opus-4.6]
    developer: [claude-opus-4.6]
    architect: [claude-opus-4.6]
    code-reviewer: [gemini-3-pro-preview, claude-opus-4.6]
    critical-reviewer: [gemini-3-pro-preview]
    readability-reviewer: [gemini-3-pro-preview]
    tech-writer: [claude-sonnet-4.6, gpt-5.2]
    secretary: [gpt-4.1, gpt-5.2]
    qa-tester: [claude-sonnet-4.6]

When a list is provided, Flightdeck uses the first available model based on the active provider's capabilities.

Known Models

The models.known list defines which models appear in the UI model selector:

yaml
models:
  known:
    - claude-opus-4.6
    - claude-sonnet-4.6
    - claude-haiku-4.5
    - gemini-3-pro-preview
    - gpt-5.4
    - gpt-5.3-codex
    # ... see flightdeck.config.example.yaml for full list

Provider UI

The Settings → Providers section lets you manage providers from the dashboard:

  • Enable/disable providers with toggle switches
  • Drag-and-drop to set provider preference order
  • Select preferred models per provider
  • Test authentication with the auth test button
  • View status — detected, authenticated, or needs setup

Architecture

All providers use the same adapter pattern:

CLI Binary → ACP (stdio/JSON-RPC) → AcpAdapter → AgentManager

The AcpAdapter is the single production adapter — it handles spawning the CLI binary, managing the JSON-RPC session, and translating ACP messages to Flightdeck's internal event system.

Key components:

  • PROVIDER_REGISTRY (packages/shared/src/domain/provider.ts) — Single source of truth for all provider metadata
  • AdapterFactory — Creates adapter instances with model resolution and env setup
  • AcpAdapter — Universal transport, implements the AgentAdapter interface
  • ProviderManager (packages/server/src/providers/ProviderManager.ts) — Runtime provider management

Cross-Provider Model Resolution

When an agent requests a model that's native to a different provider backend (e.g., requesting a GPT model while using Copilot), the model resolver:

  1. Checks if the model is in the current provider's nativeModelProviders
  2. Applies any restrictedModels constraints
  3. Maps through modelAliases if needed (e.g., Claude's opus alias)
  4. Falls back to the provider's standard tier model if no match

Session Resume

All providers support loadSession (the ability to load a previous session). However, richer session capabilities vary:

  • Full session management (fork + list + resume): Claude, OpenCode
  • Partial (list + resume, no fork): Kimi, Qwen Code
  • List only (can list sessions but not resume/fork): Copilot, Codex
  • loadSession only (no sessionCapabilities): Gemini

The supportsLoadSession flag in PROVIDER_REGISTRY is true for all providers. The distinction between loadSession and sessionCapabilities.resume is important — see the ACP Capabilities reference for probe-verified details.

Documentation generated by AI

Documentation generated by AI