opencode with SeibertGPT

Coding agent for the terminal and as a desktop app – reads, changes and tests code in your project.

Developertested with opencode 2.0.18 on September 26, 2026 · all tools

1. Prerequisites

You need a SeibertGPT plan and an API key. You get both after signing in.

2. Download for macOS

  • With Homebrew: brew install --cask opencode-desktop (app) or brew install anomalyco/tap/opencode-v2 (terminal).

3. Set up

Paste the command into the terminal. The script asks for your key, stores it securely on your computer and sets up the config. The key is only sent to the SeibertGPT API at https://api.seibert.ai/v1.

Setup command
curl -fsSL "https://gpt.seibert.ai/en/clients/opencode/setup.sh" | sh
View the script first

Set the key as an environment variable

Run this in the terminal and paste the key when asked. It's stored in the Keychain, and the shell reads it at startup:

Command
security add-generic-password -U -s seibertgpt -a "$USER" -w
echo 'export SEIBERTGPT_API_KEY="$(security find-generic-password -ws seibertgpt 2>/dev/null)"' >> ~/.zshrc

Store the config file

Download the file and put it in the folder shown. If there's already an opencode.json there, copy over only the block under “provider” → “seibertgpt”.

Choose the model

Start opencode, run /models and choose “SeibertGPT” → deepseek-v41-flash-fast.

File: ~/.config/opencode/opencode.json · Download opencode.json

Important: if opencode.json already exists, don't replace it. The file also contains your other settings; copy over only our entries.

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "model": "seibertgpt/deepseek-v41-flash-fast",
  "small_model": "seibertgpt/deepseek-v41-flash-fast",
  "provider": {
    "seibertgpt": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "SeibertGPT",
      "options": {
        "baseURL": "https://api.seibert.ai/v1",
        "apiKey": "{env:SEIBERTGPT_API_KEY}"
      },
      "models": {
        "deepseek-v41-flash": {
          "name": "Standard with thinking",
          "tool_call": true,
          "attachment": true,
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 32000
          }
        },
        "deepseek-v41-flash-fast": {
          "name": "No thinking – fast",
          "tool_call": true,
          "attachment": true,
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 32000
          }
        },
        "deepseek-v41-flash-low": {
          "name": "Low reasoning effort",
          "tool_call": true,
          "attachment": true,
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 32000
          }
        },
        "deepseek-v41-flash-high": {
          "name": "High reasoning effort",
          "tool_call": true,
          "attachment": true,
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 32000
          }
        },
        "deepseek-v41-flash-max": {
          "name": "Maximum reasoning effort",
          "tool_call": true,
          "attachment": true,
          "modalities": {
            "input": [
              "text",
              "image"
            ],
            "output": [
              "text"
            ]
          },
          "limit": {
            "context": 1000000,
            "output": 32000
          }
        }
      }
    }
  }
}

4. Test

In the project folder, ask “Which files are here?” – opencode should list the files using a tool.

5. Troubleshooting

Desktop app can't find the key (macOS)

The setup script takes care of this; manually: start the app from the terminal with “open -a OpenCode”.

Context too large

Summarize the history with /compact or start over with /new.

HTTP 401 – key rejected

The key was copied incorrectly or has been revoked. Create a new key under Account → API keys.

HTTP 403 – IP binding

Your key is currently bound to a different IP (e.g. another device). Wait for the lock period to expire or release the binding under Account → API keys.

HTTP 413 – cold_request_too_large

A new or long-paused session starts with a lot of context. Start a new session or shorten the history.

“Hinweis von SeibertGPT: Der Kontext ist zu … gefüllt” (German context notice)

You're approaching your plan's context limit. Summarize the history (e.g. /compact) or start over.

Nothing works after an update

These tools change quickly. The version the guide was tested with is shown at the top – let us know if something no longer matches.