# OpenCode

> Add Tchavi to OpenCode as a custom OpenAI-compatible provider and pay for it with mobile money.

- Canonical: https://tchavi.com/en/docs/coding-agents/opencode

---


Part of the [coding agents](/docs/coding-agents) guides.

OpenCode reaches any OpenAI-compatible endpoint through a custom provider block, so Tchavi drops in as one more provider in the `/models` picker.

## 1. Declare the provider

Put this in `opencode.json` at the root of your project, or in `~/.config/opencode/opencode.json` to apply it everywhere:

```json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "tchavi": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Tchavi",
      "options": {
        "baseURL": "https://tchavi.com/api/v1",
        "apiKey": "{env:TCHAVI_API_KEY}"
      },
      "models": {
        "claude-sonnet-4-6": { "name": "Claude Sonnet 4.6" },
        "gpt-5.4": { "name": "GPT-5.4" },
        "deepseek-v4-pro": { "name": "DeepSeek V4 Pro" }
      }
    }
  }
}
```

## 2. Export the key and start

```bash
export TCHAVI_API_KEY=sk-tch-your-key
opencode
```

`{env:TCHAVI_API_KEY}` is what keeps the key out of the file, which matters because `opencode.json` sits in your repository. Run `/models` and the three entries appear under **Tchavi**.

## Adding more models

Add any model you want to the `models` map — the keys are Tchavi model ids, exactly as `GET /v1/models` returns them. A model missing from the map simply does not appear in the picker; nothing else breaks.

You can also declare a context window per model, which OpenCode uses to decide when to compact:

```json
"deepseek-v4-pro": {
  "name": "DeepSeek V4 Pro",
  "limit": { "context": 128000, "output": 8192 }
}
```

<Callout type="note" title="Which npm package">
  Use `@ai-sdk/openai-compatible`, which posts to `/v1/chat/completions`. The `@ai-sdk/openai`
  package targets the Responses API instead. Tchavi serves both, but the models map and streaming
  behave most predictably on the first.
</Callout>

<Callout type="warning" title="Keep the key out of the repository">
  If you put the provider block in the project's `opencode.json`, the `{env:...}` reference is the
  only thing standing between your key and a commit. Writing the key inline there will publish it
  the first time you push.
</Callout>

---

Next: [Deep Code](/docs/coding-agents/deep-code) · Back to [coding agents](/docs/coding-agents)

