# OpenCode Integration

Launch [OpenCode](https://opencode.ai) with Treasure AI as the backend, using your existing [AI Suite credits](https://www.treasuredata.com/terms/ai-suite-credits-definition/).

`tdx opencode` starts a local proxy, reuses your tdx authentication, and makes compatible models available under the **Treasure AI** provider. The active tdx profile determines the account and region.

## Quick start

Install OpenCode using the [upstream installation instructions](https://opencode.ai/docs/), then sign in to tdx and launch:

```bash
tdx auth setup
tdx opencode
```

Select a model from the **Treasure AI** provider in OpenCode, or pass its full `td-llm-proxy/<model-id>` name:

```bash
tdx opencode -- --model td-llm-proxy/claude-sonnet-5-5
```

You need a Treasure AI account with LLM access and the `opencode` executable on your `PATH`.

## Usage

```bash
tdx opencode [options] -- [opencode-args...]
```

Arguments after `--` are passed to OpenCode. Place tdx options before the separator.

```bash
# Use a specific tdx profile
tdx --profile production opencode

# Start the interactive UI with a prompt
tdx opencode -- --prompt "Explain this codebase"

# Run a prompt without the interactive UI
tdx opencode -- run --model td-llm-proxy/claude-sonnet-5-5 "Explain this codebase"

# Continue the most recent OpenCode session
tdx opencode -- --continue

# Use your own OpenCode provider configuration
tdx opencode --no-proxy
```

The selected profile is also inherited by `tdx` commands run inside OpenCode. Restart OpenCode to switch the launcher's account or region.

## Options

| Option | Description |
|  --- | --- |
| `--no-proxy` | Launch with your own OpenCode providers, without the Treasure AI proxy or injected provider config |
| `--disable-1h-cache` | Skip tdx's one-hour prompt-cache default, preserving explicit cache TTLs |
| `--llm-proxy [url]` | Use Treasure AI pass-through mode, optionally with a custom upstream URL; proxy mode is already the default |


Standard tdx global options also apply, including `--profile <name>` and `--debug`.

## Models and reasoning effort

List the models the launcher offers in OpenCode:

```bash
tdx opencode -- models td-llm-proxy
```

[`tdx ai models --feature v1_messages`](/ja/treasure-code/commands/ai) shows the full catalog of Messages API models and routing aliases. The launcher offers non-deprecated chat models and the `auto` alias, displayed as **Auto**.

The launcher loads model names, context limits, supported reasoning efforts, and prices from your account's model catalog. When a context limit is available, it also sets OpenCode's output limit to 32,000 tokens. If no live or cached catalog is available, it declares only **Auto**, without catalog metadata.

Auto uses the smallest context limit and shared reasoning efforts among its resolved candidates. It has no fixed cost metadata because the serving model varies; use [`tdx usage`](/ja/treasure-code/commands/usage) for cost estimates.

For signed-in users at `treasure.ai` or `treasure-data.com`, interactive proxy sessions default to `td-llm-proxy/auto`. Explicit model options, resumed sessions (`-c`/`--continue` or `-s`/`--session`), and subcommands such as `run` or `serve` keep their own model selection.

Models with supported reasoning efforts expose variants such as **Low**, **Medium**, **High**, **XHigh**, and **Max**, depending on the model. Select a variant in OpenCode to change the reasoning effort.

## Session-scoped configuration

The Treasure AI provider is passed through `OPENCODE_CONFIG_CONTENT` for the launched process. If you already set this variable, tdx merges its provider settings into it and preserves unrelated settings.

The launcher does not write provider settings to your OpenCode config on each launch. On upgrading from an older tdx version, it removes the legacy `td-llm-proxy` provider only when its `options.baseURL` is exactly `{env:TD_LLM_PROXY_BASE_URL}/v1`, preserving comments and other settings. It checks `opencode.jsonc`, `opencode.json`, and `config.json` in `~/.config/opencode` and prints a notice for each cleanup. User-owned providers with other URLs are kept.

With `--no-proxy`, provider injection and legacy cleanup are skipped.

## Prompt caching

In proxy mode, tdx defaults existing ephemeral cache markers to a **one-hour TTL** for Claude model IDs and Auto routing aliases. It applies this to system, message, and tool blocks without replacing an explicit TTL. Other model IDs keep their existing cache settings.

To skip the one-hour default:

```bash
tdx opencode --disable-1h-cache
```

This flag leaves OpenCode's cache markers and explicit TTL settings intact. One-hour cache writes can cost more than five-minute writes. For Claude models, OpenCode's cache-write price uses the catalog's one-hour rate when available and the default is enabled.

## Usage report

```bash
tdx usage
tdx usage --json
```

Proxy requests are recorded in the shared tdx usage ledger under the `tdx-opencode` source. Usage is tracked per session using request metadata when present, otherwise OpenCode's `x-opencode-session-id` header, with `default` as the fallback.

[`tdx usage`](/ja/treasure-code/commands/usage) estimates costs using catalog prices, including cache and long-context rates. OpenCode's displayed model costs omit long-context pricing because its fixed threshold does not match all catalog thresholds. Use `tdx usage` for the catalog-aware estimate. Requests made through your own providers with `--no-proxy` are not recorded by the tdx proxy.

## Client identification

TD-proxied LLM requests use `X-TD-Client: tdx/opencode`. Child `tdx` commands inherit this identity through `TDX_CLIENT`, including with `--no-proxy`. The User-Agent retains `tdx/<version>` and adds `client=tdx/opencode` in its comment; `X-TD-Client-Version` remains the tdx version. Parent startup requests and OAuth token refresh requests are outside this attribution.

## Production account 1

`tdx opencode` is unavailable on production account 1 (TD account ID 1 on a non-dev, non-staging site), including with `--no-proxy`, because local conversation non-persistence cannot be enforced. Use [`tdx claude`](/ja/treasure-code/commands/claude#production-account-1) for that account. Launching OpenCode requires a successful TD account lookup.

## Troubleshooting

**OpenCode CLI not found:** Install OpenCode and ensure `opencode` is on your `PATH`.

**Authentication fails:** Check `tdx status`, run `tdx auth setup` if needed, and relaunch.

**Treasure AI models are missing:** Launch with `tdx opencode` rather than plain `opencode`, and check that `--no-proxy` is not set. List the injected models with `tdx opencode -- models td-llm-proxy`.

**Invalid `OPENCODE_CONFIG_CONTENT`:** Correct the JSON/JSONC object in that environment variable and retry. The launcher reports the parsing error before starting OpenCode.

## Learn more

- [OpenCode CLI documentation](https://opencode.ai/docs/cli/)
- [`tdx claude`](/ja/treasure-code/commands/claude)
- [`tdx codex`](/ja/treasure-code/commands/codex)
- [`tdx usage`](/ja/treasure-code/commands/usage)