{
  "version": "adapters/v1",
  "adapters": [
    {
      "id": "cursor",
      "wrapper": "wrappers/ca.sh",
      "description": "Cursor/composer wrapper.",
      "listModels": true,
      "metered": false,
      "models": ["composer-2.5"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "claude",
      "wrapper": "wrappers/claude.sh",
      "description": "Claude Code wrapper.",
      "listModels": false,
      "metered": false,
      "models": ["opus", "sonnet", "haiku"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "codex",
      "wrapper": "wrappers/codex.sh",
      "description": "Codex wrapper.",
      "listModels": true,
      "metered": true,
      "models": [
        "gpt-5.6-sol-low", "gpt-5.6-sol-medium", "gpt-5.6-sol-high",
        "gpt-5.6-terra-low", "gpt-5.6-terra-medium", "gpt-5.6-terra-high",
        "gpt-5.6-luna-low", "gpt-5.6-luna-medium", "gpt-5.6-luna-high"
      ],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "north",
      "wrapper": "wrappers/na.sh",
      "description": "North wrapper via ccr.",
      "listModels": true,
      "metered": false,
      "models": ["cohere/north-mini-code:free"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "pi",
      "wrapper": "wrappers/pi.sh",
      "description": "Pi wrapper via openai-codex provider.",
      "listModels": true,
      "metered": true,
      "models": ["gpt-5.6-sol-medium", "gpt-5.6-terra-medium", "gpt-5.6-terra-low", "gpt-5.6-luna-medium", "gpt-5.6-luna-low"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "grok",
      "wrapper": "wrappers/grok.sh",
      "description": "Grok Build headless wrapper (grok -p).",
      "listModels": true,
      "metered": false,
      "models": ["grok-4.5", "grok-composer-2.5-fast"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "canary",
      "wrapper": "wrappers/canary-stub.sh",
      "description": "Deterministic offline fake agent for release-train canary runs.",
      "listModels": false,
      "metered": false,
      "models": ["canary-coder", "canary-reviewer", "canary-reviewer-fail", "canary-reviewer-heals", "canary-fixer", "canary-fixer-heals", "canary-fixer-noop"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "opencode",
      "wrapper": "wrappers/opencode.sh",
      "description": "opencode CLI; free deepseek/nemotron models via OpenCode Zen.",
      "listModels": true,
      "metered": false,
      "models": ["opencode/deepseek-v4-flash-free", "opencode/nemotron-3-ultra-free"],
      "safeProbeArgv": ["--health"]
    },
    {
      "id": "solweb",
      "wrapper": "wrappers/sw.sh",
      "description": "Claude Code driven by the sol-web browser session via ccr. One seat per wave — the browser is the limit.",
      "listModels": true,
      "metered": false,
      "models": ["sol-web-instant", "sol-web-medium", "sol-web-high", "sol-web-xhigh", "sol-web-pro"],
      "safeProbeArgv": ["--health"]
    }
  ]
}
