# Tokens CLI (এক command-এ agent set up)

> Tokens CLI দিয়ে browser-এ Sign in করুন, default model বেছে নিন, আর এক command-এ OpenCode, Claude Code, Codex CLI ও Crush সেটআপ করুন। যে file বদলায় তার প্রতিটার backup থাকে।

Tokens CLI হলো একটাই JavaScript file, যা আপনার coding agent-গুলোকে Tokens-এর সঙ্গে জুড়ে দেয়। একটা `setup` command browser-এ আপনাকে Sign in করায়, key তৈরি করে, default model বেছে নিতে দেয়, আর OpenCode, Claude Code, Codex CLI ও Crush-এর config লিখে দেয়। Node.js 18 বা নতুন সংস্করণ লাগে, আর কোনো dependency নেই।

## Tokens CLI install করুন ও চালান

Global-ভাবে কিছু install করতে হয় না। File-টা download করে Node দিয়ে চালান:

:::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
```

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

:::

এটা সাধারণ, পড়ার মতো JavaScript (প্রায় 650 লাইন)। Download করা script চালাতে সতর্ক থাকা উচিত, আর আপনার থাকাই ভালো। তাই ওই command-এর দ্বিতীয় অংশ চলার আগে `tokens.mjs` খুলে একবার পড়ে নিন।

শুরুর আগে দেখুন আপনার অ্যাকাউন্টে plan আছে অথবা Wallet-এ ব্যালান্স আছে। খালি অ্যাকাউন্টে CLI কোনো কাজের কিছু করতে পারে না।

## `setup` ধাপে ধাপে কী করে

### 1. Browser দিয়ে Sign in করায়

`--key` না দিলে CLI একটা device login শুরু করে। এটা একটা link আর `ABCD-EFGH`-এর মতো একটা code দেখায়, আর link-টা আপনার browser-এ খুলে দেয়। যে পাতা খুলবে ([/dashboard/connect/cli](/dashboard/connect/cli)), সেখানকার code আপনার terminal-এর code-এর সঙ্গে মেলে কি না দেখে approve করুন। CLI অপেক্ষা করে, approve হলে `CLI (<your platform and Node version>)` নামে একটা নতুন API key পায়। এটা সাধারণ key: [/dashboard/keys](/dashboard/keys)-এ দেখতে পাবেন, আর চাইলে সেখানেই revoke করতে পারবেন।

যে machine-এ browser নেই (SSH, container), সেখানে `--no-browser` যোগ করুন, আর দেখানো link-টা অন্য যেকোনো device-এ খুলুন যেখানে আপনি Sign in করা।

### 2. Model-এর তালিকা দেখায়, default জিজ্ঞেস করে

CLI gateway-র base URL পড়ে `https://tokens.bd/api/gateway/config` থেকে, তারপর key দিয়ে `GET /v1/models` call করে। প্রথম 10টা model দেখিয়ে একটা বাছতে বলে; Enter চাপলে প্রথমটা নেয়। প্রথম 10-এর বাইরের কোনো model চাইলে `--model` দিয়ে দিন।

### 3. Credentials সেভ করে

Base URL আর key সেভ হয় এখানে:

- macOS / Linux: `~/.config/tokens/credentials.json` (অথবা `$XDG_CONFIG_HOME/tokens/credentials.json`), শুধু আপনিই পড়তে পারবেন (mode 600)
- Windows: `%APPDATA%\tokens\credentials.json`

পরে `usage` আর `models` এই file ব্যবহার করে, তাই key আর আলাদা করে দিতে হয় না।

### 4. আপনার agent খোঁজে, আর কী বদলাবে তা দেখায়

OpenCode, Claude Code, Codex CLI আর Crush খুঁজে দেখে, তাদের config folder দিয়ে অথবা `PATH`-এ থাকা program দিয়ে। কোন কোন file বদলাবে সেটা হুবহু দেখায় আর জিজ্ঞেস করে `Continue? [Y/n]`। আপনি উত্তর না দেওয়া পর্যন্ত কিছু লেখা হয় না।

| Agent       | File                                                  | কী লেখা হয়                                                                                                                     |
| ----------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| OpenCode    | `~/.config/opencode/opencode.json`                    | আপনার key-সহ একটা `tokens` provider (`@ai-sdk/openai-compatible`), আর `model` সেট হয় `tokens/<model>`                           |
| Claude Code | `~/.claude/settings.json`                             | `env.ANTHROPIC_BASE_URL`, `env.ANTHROPIC_AUTH_TOKEN` আর `env.ANTHROPIC_MODEL`                                                   |
| Codex CLI   | `~/.codex/config.toml` (অথবা `$CODEX_HOME/config.toml`)| চিহ্ন দেওয়া একটা block, যাতে `[model_providers.tokens]` (`env_key = "TOKENS_API_KEY"`, `wire_api = "responses"`) আর `[profiles.tokens]` | 
| Crush       | `~/.config/crush/crush.json`                          | আপনার key ও model-সহ `openai-compat` ধরনের একটা `tokens` provider                                                              |

JSON file-গুলো merge হয়, তাই আপনার বাকি সেটিংস থেকে যায়। Codex-এর block থাকে `# >>> tokens` আর `# <<< tokens` marker-এর মাঝখানে, আর আবার setup চালালে সেটা একই জায়গায় বদলে যায়।

### 5. আগে প্রতিটা file-এর backup নেয়

কোনো file বদলানোর আগে CLI সেটা `<file>.tokens-backup-<timestamp>` নামে copy করে রাখে, যেমন `settings.json.tokens-backup-2026-10-03T09-15-00-000Z`। আগের অবস্থায় ফিরতে চাইলে backup-টা মূল file-এর ওপর copy করে দিন।

কোনো file নিরাপদে edit করা না গেলে (comment থাকা JSON, syntax error, বা এমন Codex config যাতে আগে থেকেই নিজের `[model_providers.tokens]` table আছে), CLI সেটা ছোঁয় না, `skipped` লিখে দেয়, আর আপনাকে `/dashboard/connect?agent=<agent>`-এর paste-in settings-এ যেতে বলে।

### 6. Codex CLI: একটা ধাপ হাতে করতে হবে

Codex key পড়ে environment variable থেকে, তাই তার config file-এ কোনো secret থাকে না। Setup-এর পরে variable-টা আপনার shell profile-এ যোগ করুন, আর Codex চালান profile দিয়ে:

:::code-tabs

```bash title="macOS / Linux"
export TOKENS_API_KEY="tok_live_your_key"
codex --profile tokens
```

```powershell title="Windows PowerShell"
setx TOKENS_API_KEY "tok_live_your_key"
# open a new terminal, then:
codex --profile tokens
```

:::

CLI এই লাইনটা আপনার আসল key বসিয়ে ছাপিয়ে দেয়। আরও জানতে দেখুন [Codex CLI](/docs/codex-cli)।

:::note
OpenCode, Claude Code আর Crush key রাখে আপনার home directory-র config file-এ। ওই file-গুলো dotfiles repository-তে commit করবেন না।
:::

## Command আর flag

```text
node tokens.mjs setup  [--base-url URL] [--key KEY] [--model ID] [--agents opencode,claude,codex,crush]
                       [--yes] [--dry-run] [--no-browser]
node tokens.mjs usage  [--json]
node tokens.mjs models
node tokens.mjs logout
node tokens.mjs version
node tokens.mjs help
```

| Flag             | কী করে                                                                                                          |
| ---------------- | --------------------------------------------------------------------------------------------------------------- |
| `--base-url URL` | Tokens site, `https://tokens.bd`। `TOKENS_BASE_URL` set না থাকলে প্রথমবার দিতে হয়; এরপর সেভ থাকে।                |
| `--key KEY`      | Browser login-এর বদলে আগের একটা key ব্যবহার করে।                                                                |
| `--model ID`     | Picker ছাড়াই default model ঠিক করে। Model-টা এমন হতে হবে যা key দিয়ে চালানো যায়।                              |
| `--agents LIST`  | শুধু এই agent-গুলো সেটআপ করে (`opencode`, `claude`, `codex`, `crush`), detect না হলেও।                            |
| `--yes`          | নিশ্চিত করার প্রশ্ন বাদ দেয়। Script-এ লাগে, কারণ সেখানে প্রশ্নের default উত্তর "no"।                              |
| `--dry-run`      | কোন কোন file লেখা হতো তা দেখায়, কিছু না লিখে এবং credentials সেভ না করে।                                       |
| `--no-browser`   | Sign-in link খুলে না দিয়ে ছাপিয়ে দেয়।                                                                         |

`usage` দেখায় আপনার plan, প্রতিটা usage window (progress bar আর reset হওয়ার সময়সহ), Wallet-এর ব্যালান্স, আর key-র cap ও allowed model। `usage --json` ছাপে `GET /v1/tokens/usage`-এর raw response ([usage, limits and alerts](/docs/usage-and-alerts) দেখুন)। `models` ছাপে আপনার key যেসব model চালাতে পারে তাদের id, প্রতি লাইনে একটা।

:::tip[Dry run-এও Sign in হয়]
`--dry-run` কোনো file লেখে না, কিন্তু `--key` ছাড়া এটা তবুও browser login চালায়, আর তাতে একটা key তৈরি হয়ে যায়। কোনো পার্শ্বপ্রতিক্রিয়া ছাড়া preview দেখতে চাইলে সঙ্গে আগের একটা key দিন: `node tokens.mjs setup --base-url https://tokens.bd --dry-run --key "$TOKENS_API_KEY"`।
:::

## Environment variable

| Variable          | কীসের জন্য                                                                   |
| ----------------- | ---------------------------------------------------------------------------- |
| `TOKENS_BASE_URL` | `--base-url` না দিলে Base URL এখান থেকে নেয়                                  |
| `TOKENS_API_KEY`  | `--key` না দিলে key এখান থেকে নেয়; সেভ করা credentials-এর চেয়ে এটা আগে ধরা হয় |

CLI key বাছে এই ক্রমে: `--key`, তারপর `TOKENS_API_KEY`, তারপর সেভ করা credentials file।

## সমস্যা হলে

**"Your account has no models available yet. Subscribe or add funds first."** Key কাজ করছে, কিন্তু কোনো model চালানোর অনুমতি নেই। [/dashboard/billing](/dashboard/billing)-এ গিয়ে plan-এ সাবস্ক্রাইব করুন বা Wallet-এ টাকা যোগ করুন, তারপর আবার `setup` চালান।

**"That API key was not accepted."** Key-টা rotate বা revoke হয়ে গেছে, নয়তো ভুল টাইপ হয়েছে। `--key` ছাড়া `setup` চালিয়ে নতুন key নিন, অথবা দেখুন আপনার environment-এ থাকা পুরোনো কোনো `TOKENS_API_KEY` সেভ করা key-কে ঢেকে দিচ্ছে কি না।

**কোনো file `skipped` দেখাচ্ছে।** ওতে comment আছে, নয়তো format অপ্রত্যাশিত। ওই agent নিজে হাতে সেটআপ করুন [/dashboard/connect](/dashboard/connect) বা তার guide থেকে: [OpenCode](/docs/opencode), [Claude Code](/docs/claude-code), [Codex CLI](/docs/codex-cli), [Crush](/docs/crush)।

**"No supported agents were found."** তবুও আপনার key সেভ হয়ে গেছে। আগে agent install করুন, অথবা `--agents claude`-এর মতো করে একটাকে জোর করে দিন। Cursor, Cline, Zed, Aider আর অন্যগুলোর জন্য [/dashboard/connect](/dashboard/connect) ব্যবহার করুন।

**"The code expired" বা "Timed out waiting for approval."** Code-টা সময়সীমার মধ্যে approve করুন (সর্বোচ্চ 15 মিনিট)। নতুন code পেতে command আবার চালান।

**"Could not reach https://tokens.bd."** আপনার network বা proxy দেখুন, আর [status page](/status) দেখুন।

## Log out আর uninstall

```bash
node tokens.mjs logout
```

`logout` শুধু এই কম্পিউটারে সেভ করা credentials file মুছে দেয়, আর কিছু না। **Key চালু থাকে।** সেটা বন্ধ করতে [/dashboard/keys](/dashboard/keys)-এ গিয়ে revoke করুন।

আপনার agent থেকে Tokens সরাতে চাইলে `.tokens-backup-` copy-গুলো ফিরিয়ে দিন, অথবা CLI যা যোগ করেছিল তা মুছুন (OpenCode ও Crush-এর `tokens` provider, Claude Code-এর `env`-এর তিনটা `ANTHROPIC_*` entry, Codex-এর `config.toml`-এর চিহ্ন দেওয়া block)। তারপর `tokens.mjs` মুছুন, আর সব ঠিক আছে মনে হলে backup file-গুলোও। CLI আর কিছু disk-এ রেখে যায় না।

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