# OpenCode

> opencode.json-এ OpenCode-এর OpenAI-compatible provider হিসেবে Tokens যোগ করুন, key রাখুন TOKENS_API_KEY-তে, compaction ঠিকমতো চলার জন্য context limit দিন, আর model বদলান।

OpenCode হলো AI SDK provider package-এর ওপর বানানো open-source terminal coding agent। এটা Tokens-এ জোড়া লাগে `@ai-sdk/openai-compatible` দিয়ে, যা chat completions পাঠায় `https://tokens.bd/v1`-এ।

## Tokens CLI দিয়ে দ্রুত setup

[Tokens CLI](/docs/tokens-cli) browser দিয়ে আপনাকে sign in করায়, key তৈরি করে, default model বেছে নিতে দেয় আর OpenCode-এ একটা `tokens` provider যোগ করে। এর জন্য Node 18 বা তার পরের version লাগবে।

:::code-tabs

```bash title="macOS / Linux"
curl -fsSL https://tokens.bd/cli/tokens.mjs -o tokens.mjs && node tokens.mjs setup --base-url https://tokens.bd --agents opencode
```

```powershell title="Windows PowerShell"
iwr https://tokens.bd/cli/tokens.mjs -OutFile tokens.mjs; node tokens.mjs setup --base-url https://tokens.bd --agents opencode
```

:::

CLI provider-টা `~/.config/opencode/opencode.json`-এ merge করে, `"model": "tokens/<your model>"` সেট করে, আর পুরোনো file-টা `opencode.json.tokens-backup-<timestamp>` নামে backup রাখে। দুটো কথা মনে রাখবেন:

- key-টা file-এ লেখা হয় `options.apiKey` হিসেবে। home folder-এর file-এ এটা ঠিক আছে, কিন্তু কোনো repository-তে copy করবেন না।
- model-এ `limit` সেট করা হয় না। পরে (নিচে দেখুন) আসল context আর output limit নিজে বসিয়ে নিন। নইলে OpenCode লম্বা session ঠিকমতো compact করতে পারবে না।

আপনার `opencode.json`-এ comment থাকলে CLI file নতুন করে লেখার ঝুঁকি নেয় না। সে আপনাকে snippet-এর জন্য [/dashboard/connect](/dashboard/connect)-এ পাঠিয়ে দেয়।

## opencode.json নিজে সাজান

OpenCode এখনো না থাকলে install করুন:

```bash
curl -fsSL https://opencode.ai/install | bash
# or
npm install -g opencode-ai
```

আপনার key export করুন (spend cap দিয়ে key কীভাবে বানাবেন, তা আছে [API keys](/docs/api-keys)-এ):

:::code-tabs

```bash title="macOS / Linux"
export TOKENS_API_KEY="tok_live_your_key"
```

```powershell title="Windows PowerShell"
$env:TOKENS_API_KEY = "tok_live_your_key"   # this window
setx TOKENS_API_KEY "tok_live_your_key"     # new windows
```

:::

এরপর provider যোগ করুন। global file হলো `~/.config/opencode/opencode.json`। চাইলে project-এর root-এও নিজস্ব `opencode.json` রাখতে পারেন, আর `OPENCODE_CONFIG` দিয়ে অন্য কোনো path দেখানো যায়। OpenCode এই file-গুলো একটা দিয়ে আরেকটা বদলে ফেলে না, merge করে।

```json title="~/.config/opencode/opencode.json"
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "tokens": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Tokens",
      "options": {
        "baseURL": "https://tokens.bd/v1",
        "apiKey": "{env:TOKENS_API_KEY}"
      },
      "models": {
        "deepseek/deepseek-v4.1-flash": {
          "name": "DeepSeek V4.1 Flash",
          "limit": { "context": 128000, "output": 8192 }
        }
      }
    }
  },
  "model": "tokens/deepseek/deepseek-v4.1-flash"
}
```

`{env:TOKENS_API_KEY}` লিখলে OpenCode key-টা environment থেকে পড়ে, তাই file commit করলেও ভয় নেই। `limit`-এর সংখ্যাগুলো placeholder: model-এর আসল context window আর max output [/models](/models)-এ ওই model-এর পাতা থেকে copy করে বসান।

model-এর reference লিখতে হয় `provider_id/model_id` ধাঁচে। আমাদের model id-তেই একটা slash আছে, তাই পুরো reference দাঁড়ায় `tokens/deepseek/deepseek-v4.1-flash`।

### Config বানিয়ে নিন

একটা model বেছে নিন, নিচের generator আপনার জন্য provider block ভরে দেবে:

::config-generator{format="opencode"}

### /connect দিয়ে key রাখা

key environment-এ না রেখেও চলে: OpenCode TUI-তে `/connect` চালান, "Other" বেছে নিন, provider id দিন `tokens`, আর key paste করুন। OpenCode সেটা রাখে `~/.local/share/opencode/auth.json`-এ। provider id আপনার config-এর id-র সাথে হুবহু মিলতে হবে, আর তারপর `options` থেকে `apiKey` বাদ দিতে পারবেন।

## Model বদলানো

`provider.tokens.models`-এর নিচে আরও entry যোগ করুন, প্রতিটা model-এর জন্য একটা করে, id নিন [/models](/models) বা `GET /v1/models` থেকে:

```json
"models": {
  "deepseek/deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash", "limit": { "context": 128000, "output": 8192 } },
  "moonshotai/kimi-k3": { "name": "Kimi K3", "limit": { "context": 128000, "output": 8192 } }
}
```

দ্বিতীয় id-টা একটা উদাহরণ, ঠিক id [/models](/models)-এ মিলিয়ে নিন। এরপর TUI-তে `/models` দিয়ে model বদলাতে পারেন, নয়তো top-level `model` পাল্টে দিন, কিংবা একবারের জন্য `--model` দিন। OpenCode-এর হালকা কাজের জন্য সস্তা model চাইলে `small_model`-ও একই `tokens/...` ধাঁচে লিখতে হয়। বাছাইয়ে সাহায্য পাবেন [Choosing a model](/docs/choosing-a-model)-এ।

## ঠিকমতো চলছে কি না দেখুন

```bash
opencode models tokens
opencode run --model tokens/deepseek/deepseek-v4.1-flash "Reply with OK"
```

প্রথম command-এ আপনার Tokens model-গুলোর list আসার কথা, আর দ্বিতীয়টা ছোট একটা উত্তর ছাপবে। TUI-তে `/models` দিলেও একই list দেখা যায়।

## সমস্যা হলে

**401 `missing_api_key`।** `{env:TOKENS_API_KEY}` ফাঁকা string হয়ে গেছে, কারণ যে shell থেকে OpenCode চালু করেছেন সেখানে variable-টা সেট নেই। Windows-এ `setx`-এর পর নতুন terminal খুলুন।

**model list-এ নেই, অথবা 404 `model_not_found` আসছে।** `models`-এর ভেতরের key-টা Tokens-এর id-র সাথে হুবহু মিলছে কি না দেখুন, আর `model` যে `tokens/` আর তার পরে ওই id দিয়ে লেখা, সেটাও। slash-ওয়ালা model id নিয়ে OpenCode-এর docs আলাদা করে কিছু বলে না। OpenRouter-ধাঁচের id-ও একই রকম, তাই বানান ভুল হওয়ার সম্ভাবনাই বেশি।

**ভুল package।** `@ai-sdk/openai-compatible` ব্যবহার করুন, এটা chat completions বোঝে। `@ai-sdk/openai` যায় Responses API-তে, যেটা সব upstream support করে না ([Responses API](/docs/responses) দেখুন)।

**লম্বা session compact না হয়ে ব্যর্থ হয়।** `limit.context` আর `limit.output`-এ model-এর আসল value বসান।

**`/connect`-এর key কাজ করছে না।** `/connect`-এ যে provider id লিখেছেন, সেটা ঠিক `tokens` হতে হবে।

**CLI OpenCode বাদ দিয়ে গেছে।** আপনার file-এ comment আছে, নয়তো JSON ভুল। ওপরের block-টা নিজের হাতে বসিয়ে নিন।

402, 403 আর 429 error-এর জন্য [Troubleshooting](/docs/troubleshooting) দেখুন।

---
Page: https://tokens.bd/bn/docs/opencode
