Sider

Use Sider in your coding agent

Set up Claude Code, Codex CLI, OpenCode and other coding agents to use this service: get an API key, then follow the guide of your tool. Its commands and settings already have this service's address.

Before you start

API key

API keys are given out on request by the administrator of this service.

Base URL

OpenAI-compatible API

https://sider.ai.id/v1

Anthropic-compatible API (Claude Code)

https://sider.ai.id

Each guide below already uses the right one.

Model

The examples use deepseek-4.1-unrestricted. You can use any model of the model list on the status page. Pick one that supports tool calling: coding agents use tools to read and edit files and to run commands.

Claude Code

by Anthropic · Anthropic Messages API

Anthropic's coding agent for the terminal: it reads your project, edits files and runs commands.

  1. Install Claude Code with Anthropic's installer (or npm install -g @anthropic-ai/claude-code with Node.js 22 or later). Then open a new terminal and check that claude --version prints a version number.

    macOS, Linux, WSL
    curl -fsSL https://claude.ai/install.sh | bash
    Windows (PowerShell)
    irm https://claude.ai/install.ps1 | iex
  2. Create the file ~/.claude/settings.json (on Windows %USERPROFILE%\.claude\settings.json) with the content below; the command for your system opens it in an editor (in nano, Ctrl+O and Enter save, Ctrl+X exits). If the file already exists, add these entries to it. ANTHROPIC_BASE_URL is the address without /v1: Claude Code adds /v1/messages itself.

    macOS, Linux
    mkdir -p ~/.claude && nano ~/.claude/settings.json
    Windows (PowerShell)
    New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude" | Out-Null; notepad "$env:USERPROFILE\.claude\settings.json"
    ~/.claude/settings.json
    {
      "env": {
        "ANTHROPIC_BASE_URL": "https://sider.ai.id",
        "ANTHROPIC_MODEL": "deepseek-4.1-unrestricted",
        "ANTHROPIC_DEFAULT_OPUS_MODEL": "deepseek-4.1-unrestricted",
        "ANTHROPIC_DEFAULT_SONNET_MODEL": "deepseek-4.1-unrestricted",
        "ANTHROPIC_DEFAULT_HAIKU_MODEL": "deepseek-4.1-unrestricted",
        "ANTHROPIC_DEFAULT_FABLE_MODEL": "deepseek-4.1-unrestricted",
        "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "8192"
      },
      "disableAutoMode": "disable"
    }
  3. Keep your API key out of that file, in the environment variable ANTHROPIC_AUTH_TOKEN (Claude Code sends it as Authorization: Bearer): replace YOUR_API_KEY with your key, run the command for your system once, then close the terminal and open a new one.

    macOS (zsh)
    echo 'export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"' >> ~/.zshrc
    Linux (bash)
    echo 'export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"' >> ~/.bashrc
    Windows (PowerShell)
    setx ANTHROPIC_AUTH_TOKEN "YOUR_API_KEY"
  4. In your project folder, start Claude Code. The first time, pick a theme, press Enter after the security notes and choose Yes, I trust this folder; there is no sign-in. Type /status: it shows Anthropic base URL https://sider.ai.id, Auth token ANTHROPIC_AUTH_TOKEN and Model deepseek-4.1-unrestricted. Then ask something. A sign-in screen means that ANTHROPIC_AUTH_TOKEN is not set in this terminal.

    In your project folder
    claude

Good to know

  • The five model entries name deepseek-4.1-unrestricted for the main conversation and for the models Claude Code calls opus, sonnet, haiku and fable, which its subagents and helpers ask for. Without them those requests name Claude models that this service does not have, and fail with 404. To use another model, change all five.
  • Claude Code asks for answers of up to 32,000 tokens; many models allow fewer, and their providers refuse such requests (400). CLAUDE_CODE_MAX_OUTPUT_TOKENS asks for 8,192 instead: raise it if your model allows more. While a request runs, its output limit also counts against the daily token limit of your account, if it has one.
  • disableAutoMode starts Claude Code in Manual mode: it asks before it edits files or runs commands. In auto mode, its default, a classifier checks commands before they run with an extra request of tens of thousands of tokens to deepseek-4.1-unrestricted, which counts against your limits, and blocks the command when it can't read the answer. Remove the line to use auto mode anyway.
  • Choose a model that supports tool calling (function calling): Claude Code reads, edits and runs everything through tools.
  • The WebSearch tool runs on Anthropic's servers. It works only when deepseek-4.1-unrestricted is served by an Anthropic-compatible provider that supports it and the admin forwards Anthropic's server tools; otherwise searches fail.
  • Claude Code does not know the model names of this service, so at start it warns that it assumes a context window of 200k tokens. If deepseek-4.1-unrestricted has another window (on the Models tab of your dashboard, or its context_length in GET https://sider.ai.id/v1/models with your API key), add "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "…" with that number to env, so that Claude Code compacts the conversation in time.

See the Claude Code documentation for every setting.

Codex CLI

by OpenAI · OpenAI Responses API

OpenAI's coding agent for the terminal: it reads your project, edits files and runs commands.

  1. Install the Codex CLI with OpenAI's installer (or npm install -g @openai/codex). Then open a new terminal and check that codex --version prints a version number.

    macOS, Linux
    curl -fsSL https://chatgpt.com/codex/install.sh | sh
    Windows (PowerShell)
    powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"
  2. Open ~/.codex/config.toml (on Windows %USERPROFILE%\.codex\config.toml) with the command for your system (in nano, Ctrl+O and Enter save, Ctrl+X exits) and add the settings below. If the file already has settings, put the first three lines above its first line in brackets, such as [features], and remove its own lines with the same names. base_url ends with /v1: Codex adds /responses.

    macOS, Linux
    mkdir -p ~/.codex && nano ~/.codex/config.toml
    Windows (PowerShell)
    New-Item -ItemType Directory -Force "$env:USERPROFILE\.codex" | Out-Null; notepad "$env:USERPROFILE\.codex\config.toml"
    ~/.codex/config.toml
    model = "deepseek-4.1-unrestricted"
    model_provider = "aiter"
    web_search = "disabled"
    
    [model_providers.aiter]
    name = "Sider"
    base_url = "https://sider.ai.id/v1"
    env_key = "AITER_API_KEY"
    wire_api = "responses"
  3. Keep your API key out of that file, in the environment variable AITER_API_KEY that env_key names: replace YOUR_API_KEY with your key, run the command for your system once, then close the terminal and open a new one.

    macOS (zsh)
    echo 'export AITER_API_KEY="YOUR_API_KEY"' >> ~/.zshrc
    Linux (bash)
    echo 'export AITER_API_KEY="YOUR_API_KEY"' >> ~/.bashrc
    Windows (PowerShell)
    setx AITER_API_KEY "YOUR_API_KEY"
  4. In your project folder, start Codex; there is no sign-in. Type /status: it shows Model deepseek-4.1-unrestricted and Model provider aiter. Then ask something. Missing environment variable: `AITER_API_KEY` means that the variable is not set in this terminal; once it is, run codex app-server daemon restart, because the background server of Codex keeps the environment it started with.

    In your project folder
    codex

Good to know

  • Choose a model whose name does not start with the name of an OpenAI model that Codex knows, such as gpt-5.5 or openai/gpt-5.5: for such names Codex adds tools of other types (apply_patch as a custom tool, and tool_search) that this service refuses with 400.
  • For other names Codex warns Model metadata for `deepseek-4.1-unrestricted` not found and uses defaults, among them a context window of 272,000 tokens. If deepseek-4.1-unrestricted has a smaller one (on the Models tab of your dashboard, or its context_length in GET https://sider.ai.id/v1/models with your API key), add model_context_window = … with that number next to model, so that Codex compacts the conversation in time.
  • Choose a model that supports tool calling (function calling): Codex runs commands and edits files through tools.
  • To have the model think more, add model_reasoning_effort = "high" (or "low", "medium") next to model: it reaches the model as reasoning_effort. A model without reasoning may refuse it with 400; without the setting Codex sends none.
  • web_search = "disabled" turns off the web search of Codex, which runs on OpenAI's servers: this service has no web search and leaves that tool out anyway.

See the Codex CLI documentation for every setting.

Antigravity

by Google · OpenAI Chat Completions API

Google's agentic IDE, whose built-in agent runs only the models Google provides and cannot be pointed at another API: in Antigravity you use Sider through the Cline extension.

  1. In Antigravity's editor, open the Extensions view, search for this ID and install Cline, published by saoudrizwan (not Cline (Nightly) or a look-alike).

    Extension ID
    saoudrizwan.claude-dev
  2. Open Cline from its icon in the side bar. The first time, choose Bring my own API key and Continue; later, its gear icon opens Settings → API Configuration. Set API Provider to OpenAI Compatible and fill in these fields; the Model ID list shows the models your key may use.

    Base URL
    https://sider.ai.id/v1
    OpenAI Compatible API Key
    YOUR_API_KEY
    Model ID
    deepseek-4.1-unrestricted
  3. Under Model Configuration, set Max Output Tokens (8192 is a safe start; raise it if the model allows more) and Context Window Size, the model's context window shown on the Models tab of your dashboard. Clear Supports Images if the model does not read images.

  4. Open your project's folder, start a new task in Cline (+) and ask for something that needs a tool, such as listing the project's files. Route POST /chat/completions not found (404) means the base URL lacks /v1; Invalid API key (401), that the key is wrong.

Good to know

  • Antigravity's own agent cannot use Sider: Google's plans page lists no support for bring-your-own-key or bring-your-own-endpoint, and the Antigravity CLI takes only Gemini-compatible endpoints, which this service does not offer. Cline works next to it, in its own panel.
  • Pick a model that supports tool calling (function calling): Cline reads and edits files and runs commands through tools.
  • Without Max Output Tokens, Cline asks for up to 32,000 output tokens, which many models refuse (400 upstream_bad_request) and which, if your account has a daily token limit, is reserved from it while the request runs.
  • Leave Reasoning Effort at none unless the model reasons: Cline sends the effort as reasoning_effort, which models without reasoning may refuse.
  • Cline keeps the API key in its own settings on your computer; it does not read AITER_API_KEY.

See the Cline documentation for every setting.

OpenCode

by Anomaly · OpenAI Chat Completions API

An open-source coding agent for the terminal, also available as a desktop app and an IDE extension, that works with any OpenAI-compatible provider.

  1. Install OpenCode. On Windows the npm command needs Node.js; scoop install opencode or choco install opencode work as well. OpenCode recommends WSL on Windows: inside WSL, use the macOS/Linux command.

    macOS, Linux
    curl -fsSL https://opencode.ai/install | bash
    Windows (PowerShell)
    npm install -g opencode-ai
  2. Save this as OpenCode's config for all your projects, ~/.config/opencode/opencode.json (Windows: %USERPROFILE%\.config\opencode\opencode.json; create the folder if it is missing), or as opencode.json in a project's folder for that project only. If the file exists already, add the model line and the aiter entry (under provider) to it instead. Under models, list each model you want to use, with its limits (see below).

    ~/.config/opencode/opencode.json
    {
      "$schema": "https://opencode.ai/config.json",
      "model": "aiter/deepseek-4.1-unrestricted",
      "provider": {
        "aiter": {
          "npm": "@ai-sdk/openai-compatible",
          "name": "Sider",
          "options": {
            "baseURL": "https://sider.ai.id/v1",
            "apiKey": "{env:AITER_API_KEY}"
          },
          "models": {
            "deepseek-4.1-unrestricted": {
              "limit": {
                "context": 128000,
                "output": 8192
              }
            }
          }
        }
      }
    }
  3. Put your API key in the environment variable AITER_API_KEY, in the terminal you start OpenCode from. It lasts until the terminal closes: to keep it, add the line to ~/.zshrc or ~/.bashrc (macOS, Linux), or run setx AITER_API_KEY "YOUR_API_KEY" once and open a new terminal (Windows).

    macOS, Linux
    export AITER_API_KEY="YOUR_API_KEY"
    Windows (PowerShell)
    $env:AITER_API_KEY = "YOUR_API_KEY"
  4. In the same terminal, check the config: opencode models aiter lists aiter/deepseek-4.1-unrestricted. Then start OpenCode in your project's folder; below the prompt it shows deepseek-4.1-unrestricted and Sider. Ask for something that needs a tool, such as listing the project's files. /models switches between the models of your config.

    In your project's folder
    opencode models aiter
    opencode

Good to know

  • Pick a model that supports tool calling (function calling): OpenCode reads and edits files and runs commands through tools, in every turn.
  • limit.output caps each answer. Without it OpenCode asks for 32,000 tokens, which many models refuse (400 upstream_bad_request) and which, if your account has a daily token limit, is reserved from it while the request runs. 8192 is a safe start; raise it if the model allows more.
  • limit.context is the model's context window, shown on the Models tab of your dashboard: OpenCode compacts the conversation before it outgrows the model.
  • Rather not use an environment variable? Run opencode auth login, choose Other, enter aiter and your API key, then delete the apiKey line from the config. Missing API key (401) means OpenCode sent no key: the variable is not set in the terminal that started it.
  • A model that answers 503 with served for Anthropic's Messages API only works through Anthropic's API: add "provider": { "npm": "@ai-sdk/anthropic" } to its entry under models. The base URL and the key stay the same.

See the OpenCode documentation for every setting.

Hermes Agent

by Nous Research · OpenAI Chat Completions API

Nous Research’s open-source agent for the terminal: it runs commands, edits files, and keeps memories and skills across sessions.

  1. Install Hermes Agent with its official installer, which brings the Python it needs. On Windows, use PowerShell, or the Linux command inside WSL2. At the end, the installer opens the setup wizard.

    macOS, Linux, Windows (WSL2)
    curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
    Windows (PowerShell)
    iex (irm https://hermes-agent.nousresearch.com/install.ps1)
  2. In the wizard, choose Full setup, then the provider Custom endpoint (enter URL manually). Enter the API base URL https://sider.ai.id/v1 and your API key (YOUR_API_KEY): Hermes checks them and lists the models your key may use. If the wizard did not open, or to change this later, run hermes model in a new terminal.

    API base URL
    https://sider.ai.id/v1
  3. Choose the API compatibility mode Chat Completions and the model deepseek-4.1-unrestricted, then press Enter at Context length (Hermes reads it from the service) and at Display name. For the rest of the wizard, keep the defaults and skip keys you do not have. Hermes saves the settings in ~/.hermes/config.yaml and the key in ~/.hermes/.env (on Windows without WSL, in %LOCALAPPDATA%\hermes).

    Model
    deepseek-4.1-unrestricted
  4. Open a new terminal and start Hermes. The welcome banner shows the model deepseek-4.1-unrestricted. Ask, for example, Which files are in this folder? Hermes runs a command to find out, then answers.

    macOS, Linux, Windows
    hermes

Good to know

  • Pick a model that supports tool calling: Hermes does its work through tools. It also needs a context window of at least 64K tokens and refuses a smaller model at startup (below the minimum 64,000 required by Hermes Agent). It reads the window from this service’s model list (context_length); for a model listed without one it guesses from the name or assumes 256K, so set the real window if you know it: hermes config set model.context_length 131072.
  • Each request carries Hermes’s system prompt and tool list (hermes prompt-size shows the size), and its side tasks use your model on this service too: session titles, context compression, the background memory review, and image descriptions (only with a model that accepts images). All of it counts toward your key’s limits; side tasks go to another provider (OpenRouter, Nous Portal) only if you set one up in Hermes. To save tokens, turn the automatic review off: hermes config set auxiliary.background_review.enabled false.
  • Hermes asks for reasoning_effort: medium unless you pick another level, and this service passes it on to the model’s provider. If the provider refuses it, Hermes says the model rejects reasoning effort and goes on without it. Reasoning tokens count as output: lower the level with /reasoning low in a session, or for good with hermes config set agent.reasoning_effort low.

See the Hermes Agent documentation for every setting.

omp (oh-my-pi)

by Stencil Labs · OpenAI Chat Completions API

A coding agent for the terminal, forked from Pi, with language servers, a debugger, subagents and many more tools built in.

  1. Install omp. The installer puts a ready-built omp in place, or installs it with Bun when Bun 1.4.4 or newer is there; brew install can1357/tap/omp works too. If the terminal then cannot find omp, follow the PATH line the installer prints and open a new terminal; omp --version shows the version.

    macOS, Linux
    curl -fsSL https://omp.sh/install | sh
    Windows (PowerShell)
    irm https://omp.sh/install.ps1 | iex
  2. Put your API key in the environment variable AITER_API_KEY of the terminal where you start omp: omp reads it from there, so the key stays out of its files. The variable lasts until you close the terminal. To keep it, add the line to ~/.zshrc (macOS) or ~/.bashrc (Linux); on Windows, run setx AITER_API_KEY "YOUR_API_KEY" once and open a new terminal.

    macOS, Linux
    export AITER_API_KEY="YOUR_API_KEY"
    Windows (PowerShell)
    $env:AITER_API_KEY = "YOUR_API_KEY"
  3. Add this service to ~/.omp/agent/models.yml (on Windows %USERPROFILE%\.omp\agent\models.yml): create the file with this content, or add the aiter entry under providers in the file you have. apiKey holds the variable's name, not the key. Add an entry to models for each model you use; the notes explain contextWindow and maxTokens.

    ~/.omp/agent/models.yml
    providers:
      aiter:
        baseUrl: "https://sider.ai.id/v1"
        api: openai-completions
        apiKey: AITER_API_KEY
        compat:
          maxTokensField: max_tokens
        models:
          - id: "deepseek-4.1-unrestricted"
            contextWindow: 128000
            maxTokens: 8192
  4. Check the connection: omp sends one request to deepseek-4.1-unrestricted through this service and prints the answer, such as OK. omp models aiter lists the models omp read from the file; a mistake in the file shows as models.yml validation failed with the field at fault.

    Terminal
    omp -p --model aiter/deepseek-4.1-unrestricted "Reply with only OK"
  5. Start omp in your project folder. The first start opens a setup wizard: on Set up your providers press Esc (the key is already in AITER_API_KEY), and on Choose your default model type aiter, select aiter/deepseek-4.1-unrestricted and press Enter. If omp was set up before, open /model and assign aiter/deepseek-4.1-unrestricted to Default.

    Terminal, in your project folder
    omp

Good to know

  • omp edits files and runs commands through tool calls: use a model that supports tool calling (function calling). Its tools that need other kinds of models, such as image generation or speech, do not work through this service, which serves chat models.
  • apiKey: AITER_API_KEY makes omp read the key from that variable at each request. When the variable is not set, omp sends the name itself as the key and this service answers 401 invalid_api_key: set the variable in the terminal that starts omp. 404 model_not_found means this key cannot use a model of that ID (IDs are case-sensitive).
  • contextWindow is the model's context window in tokens: omp compacts the conversation before it is full, and compacts and tries again when this service answers 400 context_length_exceeded. Use the model's window from the Models tab of your dashboard, or its context_length in GET https://sider.ai.id/v1/models with your API key, when it is listed. maxTokens is the longest answer omp asks for: 8192 suits most models; raise it for a model that allows longer answers, or lower it when requests fail with 400 upstream_bad_request about the output limit. With a daily token limit, each request reserves its prompt and maxTokens until it ends.
  • maxTokensField: max_tokens sends the output limit in the field the providers behind this service read; without it omp sends max_completion_tokens, which some providers ignore. OpenAI's reasoning models (o-series, GPT-5) refuse max_tokens (400 upstream_bad_request): give such a model compat: { maxTokensField: max_completion_tokens } in its entry.
  • omp sends reasoning settings such as reasoning_effort for a model marked reasoning: true, and for one it knows by its ID as a reasoning model. A provider that does not take them refuses the request (400 upstream_bad_request): then set reasoning: false on that model.

See the omp (oh-my-pi) documentation for every setting.

Pi

by Earendil · OpenAI Chat Completions API

A minimal, extensible coding agent for the terminal, created by Mario Zechner: it reads and edits your files and runs commands.

  1. Install Pi. The installer also sets up Node.js if needed; with Node.js 22.19 or newer, npm install -g --ignore-scripts @earendil-works/pi-coding-agent works as well. pi --version then shows the version.

    macOS, Linux
    curl -fsSL https://pi.dev/install.sh | sh
    Windows (PowerShell)
    powershell -c "irm https://pi.dev/install.ps1 | iex"
  2. Put your API key in the environment variable AITER_API_KEY of the terminal where you start Pi: Pi reads it from there, so the key stays out of its files. The variable lasts until you close the terminal. To keep it, add the line to ~/.zshrc (macOS) or ~/.bashrc (Linux); on Windows, run setx AITER_API_KEY "YOUR_API_KEY" once and open a new terminal.

    macOS, Linux
    export AITER_API_KEY="YOUR_API_KEY"
    Windows (PowerShell)
    $env:AITER_API_KEY = "YOUR_API_KEY"
  3. Add this service to ~/.pi/agent/models.json (on Windows %USERPROFILE%\.pi\agent\models.json): create the file with this content, or add the aiter entry to providers in the file you have. Add an entry to models for each model you use; the notes explain contextWindow and maxTokens.

    ~/.pi/agent/models.json
    {
      "providers": {
        "aiter": {
          "name": "Sider",
          "baseUrl": "https://sider.ai.id/v1",
          "api": "openai-completions",
          "apiKey": "$AITER_API_KEY",
          "compat": {
            "supportsDeveloperRole": false,
            "maxTokensField": "max_tokens"
          },
          "models": [
            {
              "id": "deepseek-4.1-unrestricted",
              "contextWindow": 128000,
              "maxTokens": 8192
            }
          ]
        }
      }
    }
  4. Start Pi in your project folder with this model and send a short request, such as Reply with only OK: the answer comes from deepseek-4.1-unrestricted through this service. To start with this model every time, open /model, select it and press Ctrl+S. If Pi answers No API key found for aiter, AITER_API_KEY is not set in this terminal.

    Terminal, in your project folder
    pi --model aiter/deepseek-4.1-unrestricted

Good to know

  • Pi edits files and runs commands through tool calls: use a model that supports tool calling (function calling).
  • contextWindow is the model's context window in tokens: Pi compacts the conversation before it is full, and compacts and tries again when this service answers 400 context_length_exceeded. Use the model's window from the Models tab of your dashboard, or its context_length in GET https://sider.ai.id/v1/models with your API key, when it is listed. maxTokens is the longest answer Pi asks for: 8192 suits most models; raise it for a model that allows longer answers, or lower it when requests fail with 400 upstream_bad_request about the output limit. With a daily token limit, each request reserves its prompt and maxTokens until it ends.
  • supportsDeveloperRole: false keeps Pi's instructions in a system message, which every OpenAI-compatible provider takes, also for a model marked reasoning; this service passes a developer message on unchanged, and providers of other models may refuse it. maxTokensField: "max_tokens" sends the output limit in the field the providers behind this service read; without it Pi sends max_completion_tokens, which some providers ignore. OpenAI's reasoning models (o-series, GPT-5) refuse max_tokens (400 upstream_bad_request): give such a model "compat": { "maxTokensField": "max_completion_tokens" } in its entry.
  • Pi sends no reasoning_effort for these models, so each model reasons as its provider does by default; its thinking shows when the provider streams it. Add "reasoning": true to a model only when its provider takes reasoning_effort: /thinking then sets the level. Providers of other models refuse it.
  • When a request fails: 401 invalid_api_key means the key in AITER_API_KEY is wrong or was regenerated; 404 model_not_found means this key cannot use a model of that ID (IDs are case-sensitive). Pi reads $AITER_API_KEY this way since version 0.77: update an older Pi with pi update, or install it again as in step 1 if it comes from the old package @mariozechner/pi-coding-agent.

See the Pi documentation for every setting.