> For the complete documentation index, see [llms.txt](https://docs.tabnine.com/main/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tabnine.com/main/getting-started/tabnine-plugin-for-opencode/troubleshooting.md).

# Troubleshooting

Symptom-by-symptom fixes for the most common problems with `tabnine`, plus how to put together diagnostics for a support ticket.

### `tabnine: command not found`

The installer makes sure `~/.local/bin` is on your PATH. If it wasn't already there, the installer added a block to your shell rc file on macOS/Linux, or updated the user-scope `Path` variable on Windows. Any such change only applies to new shells.

{% stepper %}
{% step %}

### Open a new terminal window

Run `tabnine` again.
{% endstep %}

{% step %}

### Add `~/.local/bin` to your PATH

If you installed with `--no-modify-path` (or `-NoModifyPath` on Windows), add `~/.local/bin` to your PATH yourself.
{% endstep %}
{% endstepper %}

See [Install](/main/getting-started/tabnine-plugin-for-opencode/install.md) for details on what the installer changes.

### "could not find the Tabnine opencode binary"

If the launcher prints:

```
tabnine: could not find the Tabnine opencode binary.
```

followed by a line saying it expected the binary at `~/.tabnine/opencode/bin/opencode` and asking you to reinstall Tabnine opencode (or set `OPENCODE_BIN`), the installed tree at `~/.tabnine/opencode` is missing or incomplete. Rerun the installer to repair it. See [Install](/main/getting-started/tabnine-plugin-for-opencode/install.md). (`OPENCODE_BIN` is a development override; reinstalling is the fix for a normal install.)

### No models in the picker or placeholder entries

When no real model is available, the model list shows a placeholder entry that tells you what to do:

* A **Login required** entry means you aren't signed in. Sign in, then restart:

  ```bash
  tabnine auth login
  ```
* A **Models unavailable** entry means model discovery failed or returned no agent-capable models. Verify your Tabnine host and that your token is valid, then restart.

You may also see a one-line startup notice describing the reason, for example that you aren't logged in (run `tabnine auth login`, or set `TABNINE_TOKEN`).

{% hint style="info" %}
**The placeholder message says `opencode auth login`, but type `tabnine auth login`.** Inside the Tabnine distribution there's no `opencode` command on your PATH. The launcher forwards `auth login` (and every other argument) to the bundled binary for you.
{% endhint %}

Placeholders can't call tools, and chatting with one selected fails at the Tabnine endpoint. They exist only to keep the provider visible and point you at the fix. After signing in, **restart the CLI**: real models are discovered at startup. For the full sign-in and model reference, see [Signing In and Working with Models](/main/getting-started/tabnine-plugin-for-opencode/sign-in-and-models.md).

### Browser sign-in times out or the callback can't connect

The browser sign-in flow waits up to 5 minutes end to end. If it doesn't complete, you'll see:

```
Tabnine authentication timed out after 5 minutes. Please try again, or set TABNINE_TOKEN for non-interactive auth.
```

{% stepper %}
{% step %}

### Retry browser sign-in

Run `tabnine auth login` again and finish the browser step promptly.
{% endstep %}

{% step %}

### Configure the callback port and host

If the browser can't reach the local callback (for example, a firewall restricts local ports), pin the callback port with the `OAUTH_CALLBACK_PORT` environment variable and allow that port. An invalid value fails with `Invalid value for OAUTH_CALLBACK_PORT: "<value>"`. You can also change the bind host with `TABNINE_LOGIN_CALLBACK_HOST` (default `localhost`).
{% endstep %}

{% step %}

### Authenticate with a token

If a browser flow isn't practical, set `TABNINE_TOKEN` to a Tabnine PAT, or use the **Paste Tabnine access token (PAT)** login method. See [Signing In and Working with Models](/main/getting-started/tabnine-plugin-for-opencode/sign-in-and-models.md).
{% endstep %}
{% endstepper %}

### Behind a corporate proxy or custom CA

There are no Tabnine-specific config keys for networking. These are environment variables set in your shell or CI job, plus your OS trust store.

* **Proxy**: `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY` (lowercase variants too) are honored by default, with no opt-in flag needed. All outbound traffic (LLM, auth, model discovery, MCP) inherits them. Proxy credentials may be embedded in the proxy URL.
* **Loopback is handled for you**: the launcher appends `localhost,127.0.0.1` to `NO_PROXY` (preserving your existing entries), so local traffic is never routed through the proxy.
* **Custom CA**: the bundled opencode binary trusts your OS certificate store (Keychain on macOS, the Windows system store, `ca-certificates` on Linux) on every launch. For an extra PEM bundle, set `NODE_EXTRA_CA_CERTS` to its path. Setting `NODE_TLS_REJECT_UNAUTHORIZED=0` disables certificate verification entirely; we recommend against it.

**opencode reference:** proxy and custom-CA support are standard opencode features; see the opencode [Network docs](https://opencode.ai/docs/network/).

### Quota and license messages

If a chat request fails with a message like:

```
You have exceeded your monthly token quota for Tabnine Agent for July.
Please contact your admin for more details.
```

your organization's usage quota for the month has been reached (the message names the exact scope, whether you, your team, or your organization, and the metered unit). Before the limit is hit you may also see warning toasts as usage crosses 80/90/95/100% of the limit, for example: "You have used 90% of the configured token limit. Requests are still going through; you may be blocked when the limit is reached."

If you instead see:

```
Agents are unavailable for your account. Your current license does not include agent access.
Please ask your organization admin to enable agents for you.
```

your license doesn't include agent access.

{% hint style="info" %}
**These limits are set by your organization.** Administrators configure quotas and license entitlements in the Tabnine admin console. There is nothing to change on your machine. See [Cost Control](/main/administering-tabnine/managing-your-team/settings/agent-settings.md) and [License](/main/administering-tabnine/managing-your-team/settings/license-settings.md).
{% endhint %}

### Windows uninstall ends with a "batch file cannot be found" error

On Windows, run the PowerShell uninstaller directly, with `-ExecutionPolicy Bypass` so it runs even under a restrictive execution policy:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File $env:USERPROFILE\.tabnine\opencode\uninstall-tabnine.ps1
```

The `uninstall.cmd` wrapper can end with a spurious "batch file cannot be found" error because `cmd.exe` re-reads the file it is deleting. The `.ps1` is the supported entry point, and running it as shown above avoids the default Restricted policy blocking the unsigned script. See [Install](/main/getting-started/tabnine-plugin-for-opencode/install.md) for uninstall options.

### Prepare an issue report for support

The fastest way to hand Tabnine support what they need is the `/prepare-issue-report` command in the TUI (also in the command palette as **Prepare an issue report for support**). It collects the Tabnine log, the opencode log, version and model information, and a redacted copy of the current conversation into a single archive you attach to your ticket.

{% stepper %}
{% step %}

#### Run the command

Type `/prepare-issue-report` in the TUI, or open the command palette (**Ctrl+P**) and choose **Prepare an issue report for support**.
{% endstep %}

{% step %}

#### Review and accept

A confirmation dialog states exactly what will be collected and, in detail, what is stripped out of the conversation. Nothing is written to disk until you accept.
{% endstep %}

{% step %}

#### Attach the archive to your ticket

Once you accept, a `.tar.gz` archive is written to a private folder on your machine, and a dialog shows its full path. Attach that file to your support request.
{% endstep %}
{% endstepper %}

**What the archive contains:**

| File                | Content                                                                                        |
| ------------------- | ---------------------------------------------------------------------------------------------- |
| `tabnine.log`       | This session's Tabnine log, capped at the last 10 MiB                                          |
| `opencode.log`      | opencode's own log, capped at the last 10 MiB                                                  |
| `conversation.json` | The current session, redacted (see below)                                                      |
| `info.json`         | Tabnine and opencode versions, the model in use, and the collection status of every file above |

If no session is open, for example from the home screen, `conversation.json` is still written but its `messages` array is empty, since there is no conversation to include.

**What is redacted from the conversation.** Before `conversation.json` is written:

* Message text is cut down to its first 30 characters.
* Tool results are removed entirely.
* Tool inputs keep their parameter names, but every value is replaced with `null`.
* Reasoning is removed entirely.
* Tool names and message roles are kept as they are.

{% hint style="info" %}
**Nothing is uploaded.** The archive is written to a local, private folder only. Sharing it with support is your choice, and the confirmation dialog says so before anything is collected.
{% endhint %}

If a log can't be found or read, that fact is recorded in `info.json` (for example, `opencode.log: not found`) rather than failing the whole report, and the archive is still produced with everything else it could collect. If the report can't be built at all, a dialog names the reason, and you can fall back to collecting logs manually (see below).

For headless runs or CI, where there's no TUI to run the command from, use manual log collection instead.

### Collect debug logs

For most support requests, `/prepare-issue-report` above already covers this; use the steps below only for headless/CI runs, or when support asks for a debug-level log the command doesn't capture.

For advanced cases, capture a debug log of the failing session. Debug logging is controlled by the `TABNINE_DEBUG` environment variable (set it in your shell for the run, not in a config file). Ordinary runs don't produce a debug log, so enable it explicitly:

{% stepper %}
{% step %}

### Enable debug logging

Set `TABNINE_DEBUG=1`, and point the log at a known path with `TABNINE_LOG_FILE` so you know exactly where it lands:

```bash
TABNINE_DEBUG=1 TABNINE_LOG_FILE=~/tabnine-debug.log tabnine
```

{% endstep %}

{% step %}

### Reproduce the problem and attach the log

Debug logs are written to a file (never to the terminal) and don't contain your secrets.
{% endstep %}
{% endstepper %}

If you enable `TABNINE_DEBUG` without setting `TABNINE_LOG_FILE`, the debug log is written to your system's temporary directory in a file named `tabnine-plugin-<ISO-timestamp>-<pid>.log`, one file per process. Setting `TABNINE_LOG_FILE` is the reliable way to capture the log at a path you choose.

For opencode's own logs, launch with `tabnine --print-logs`, or look in `~/.local/share/opencode/log/`.

**opencode reference:** log collection and general debugging are standard opencode features; see the opencode [Troubleshooting docs](https://opencode.ai/docs/troubleshooting/).

### Get your version for support

Always include your version when reporting a problem:

```bash
tabnine --version
```

If you used `/prepare-issue-report`, the version is already recorded in the report's `info.json`, so you don't need this step separately.

For headless and CI issues, see [Scripts and CI](/main/getting-started/tabnine-plugin-for-opencode/scripts-and-ci.md). To reinstall or check what the installer changed, see [Install](/main/getting-started/tabnine-plugin-for-opencode/install.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tabnine.com/main/getting-started/tabnine-plugin-for-opencode/troubleshooting.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
