# Multi-Provider OpenCode Configuration

Example config combining OpenCode Go, local models (via llama-swap), and OpenRouter in one file.

## ~/.config/opencode/opencode.json

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "openrouter": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "OpenRouter",
      "options": {
        "baseURL": "https://openrouter.ai/api/v1",
        "apiKey": "{env:OPENROUTER_API_KEY}"
      },
      "models": {
        "anthropic/claude-sonnet-4": {
          "name": "Claude Sonnet 4",
          "limit": { "context": 200000, "output": 65536 }
        },
        "deepseek/deepseek-chat": {
          "name": "DeepSeek V3",
          "limit": { "context": 128000, "output": 65536 }
        }
      }
    },
    "local-llamaswap": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Local Models (llama-swap)",
      "options": {
        "baseURL": "http://127.0.0.1:9292/v1",
        "apiKey": ""
      },
      "models": {
        "qwen3.6-35b": {
          "name": "Qwen 3.6-35B (daily driver)",
          "limit": { "context": 128000, "output": 65536 }
        },
        "qwen3-coder-30b": {
          "name": "Qwen 3-Coder-30B",
          "limit": { "context": 128000, "output": 65536 }
        }
      }
    }
  }
}
```

## Notes

- The `{env:VAR_NAME}` syntax for apiKey does NOT work with `@ai-sdk/openai-compatible` providers. Use the literal key instead if env-var resolution fails.
- Local models using llama-swap: model IDs must match what `curl http://localhost:9292/v1/models` returns.
- OpenCode Go credentials are stored in `~/.local/share/opencode/auth.json`, not in the opencode.json config file.
