177 lines
5.6 KiB
Plaintext
177 lines
5.6 KiB
Plaintext
---
|
|
title: "Opencode"
|
|
description: "Use Opencode with Bifrost to access any AI provider through a terminal-based coding assistant with virtual keys and observability."
|
|
icon: "codepen"
|
|
---
|
|
|
|
[Opencode](https://github.com/sst/opencode) is an AI-powered coding application that supports OpenAI-compatible APIs. By pointing it at Bifrost, you get access to any provider/model in your Bifrost configuration, plus governance features like virtual keys, built-in observability, and per-model options for reasoning effort, thinking budget, and more.
|
|
|
|

|
|
|
|
<Note>
|
|
If your Allowed Headers are already set to `*`, you can skip this note. If not and you face issues integrating Bifrost with OpenCode, try switching to `*` or adding the specific headers required by your client. By default, Bifrost whitelists: `Content-Type`, `Authorization`, `X-Requested-With`, `X-Stainless-Timeout`, and `X-Api-Key`.
|
|
</Note>
|
|
|
|
## Setup
|
|
|
|
### 1. Configure OpenCode to work with Bifrost
|
|
|
|
OpenCode uses a JSON config file (`opencode.json`) to configure providers. Point your provider's `baseURL` to Bifrost.
|
|
|
|
### Using OpenAI-compatible endpoint
|
|
|
|
Route OpenAI and other providers through Bifrost's OpenAI endpoint:
|
|
|
|
```jsonc
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"provider": {
|
|
"openai": {
|
|
"name": "Bifrost",
|
|
"options": {
|
|
"baseURL": "http://localhost:8080/openai",
|
|
"apiKey": "your-bifrost-key"
|
|
},
|
|
"models": {
|
|
"openai/gpt-5": {},
|
|
"anthropic/claude-sonnet-4-5-20250929": {},
|
|
"gemini/gemini-2.5-pro": {}
|
|
}
|
|
}
|
|
},
|
|
"model": "openai/gpt-5"
|
|
}
|
|
```
|
|
|
|
### Using Anthropic endpoint
|
|
|
|
Route Anthropic models through Bifrost's Anthropic endpoint:
|
|
|
|
```jsonc
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"provider": {
|
|
"anthropic": {
|
|
"name": "Bifrost",
|
|
"options": {
|
|
"baseURL": "http://localhost:8080/anthropic/v1",
|
|
"apiKey": "your-bifrost-key"
|
|
},
|
|
"models": {
|
|
"anthropic/claude-sonnet-4-5-20250929": {}
|
|
}
|
|
}
|
|
},
|
|
"model": "anthropic/claude-sonnet-4-5-20250929"
|
|
}
|
|
```
|
|
|
|
<Tip>
|
|
You can also use the `/connect` command in the OpenCode TUI to configure credentials interactively, then update the `baseURL` in your config file.
|
|
</Tip>
|
|
|
|
## Virtual Keys
|
|
|
|
When Bifrost has [virtual key authentication](/features/governance/virtual-keys) enabled, set `apiKey` in your provider options to your virtual key:
|
|
|
|
```jsonc
|
|
"options": {
|
|
"baseURL": "http://localhost:8080/openai",
|
|
"apiKey": "bf-your-virtual-key-here"
|
|
}
|
|
```
|
|
|
|
This lets you enforce usage limits, budgets, and access control per user or environment. For team deployments, create a separate virtual key for each team — each key can have its own rate limits, budgets, and provider access rules configured in the Bifrost dashboard.
|
|
|
|
## Model Selection
|
|
|
|
Set your default models in `opencode.json`:
|
|
|
|
```jsonc
|
|
{
|
|
"model": "openai/gpt-5",
|
|
"small_model": "anthropic/claude-haiku-4-5"
|
|
}
|
|
```
|
|
|
|
Switch models in the TUI with <key>ctrl</key>+<key>p</key>
|
|
|
|

|
|
|
|
- Use powerful models like `openai/gpt-5` or `anthropic/claude-sonnet-4-5-20250929` for complex coding tasks
|
|
- Use fast models like `groq/llama-3.3-70b-versatile` for quick completions
|
|
- Set `small_model` to a lighter model for faster, lower-cost operations
|
|
|
|
## Using Multiple Providers
|
|
|
|
Bifrost routes requests to the correct provider based on the model name. Use the `provider/model-name` format to access any configured provider through the single OpenAI endpoint:
|
|
|
|
```
|
|
anthropic/claude-sonnet-4-5-20250929
|
|
openai/gpt-5
|
|
gemini/gemini-2.5-pro
|
|
mistral/mistral-large-latest
|
|
```
|
|
|
|
You can configure models from different providers with per-model options:
|
|
|
|
```jsonc
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"theme": "opencode",
|
|
"autoupdate": true,
|
|
"provider": {
|
|
"openai": {
|
|
"name": "Bifrost",
|
|
"options": {
|
|
"baseURL": "http://localhost:8080/openai",
|
|
"apiKey": "your-bifrost-key"
|
|
},
|
|
"models": {
|
|
"openai/gpt-5": {
|
|
"options": {
|
|
"reasoningEffort": "high",
|
|
"textVerbosity": "low",
|
|
"reasoningSummary": "auto",
|
|
"include": [
|
|
"reasoning.encrypted_content"
|
|
]
|
|
}
|
|
},
|
|
"anthropic/claude-sonnet-4-5-20250929": {
|
|
"options": {
|
|
"thinking": {
|
|
"type": "enabled",
|
|
"budgetTokens": 16000
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Supported Providers
|
|
|
|
Bifrost supports the following providers with the `provider/model-name` format:
|
|
|
|
`openai`, `azure`, `gemini`, `vertex`, `bedrock`, `mistral`, `groq`, `cerebras`, `cohere`, `perplexity`, `xai`, `ollama`, `openrouter`, `huggingface`, `nebius`, `parasail`, `replicate`, `vllm`, `sgl`
|
|
|
|
<Warning>
|
|
Non-native models **must support tool use** for OpenCode to work properly. OpenCode relies on tool calling for file operations, terminal commands, and code editing. Models without tool use support will fail on most operations.
|
|
</Warning>
|
|
|
|
<Note>
|
|
OpenCode connects to Bifrost via a single endpoint. Bifrost handles routing to the correct provider based on the model name — no per-provider configuration needed.
|
|
</Note>
|
|
|
|
## Observability
|
|
|
|
All OpenCode traffic through Bifrost is logged. Monitor it at `http://localhost:8080/logs` — filter by provider, model, or search through conversation content to track usage.
|
|
|
|
## Next Steps
|
|
|
|
- [Provider Configuration](/quickstart/gateway/provider-configuration) — Configure AI providers in Bifrost
|
|
- [Virtual Keys](/features/governance/virtual-keys) — Set up usage limits and access control
|