> ## Documentation Index
> Fetch the complete documentation index at: https://docs.opper.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub Copilot

> Run Copilot Chat and agent mode in VS Code on any Opper model, via the Opper extension

The [Opper extension for VS Code](https://marketplace.visualstudio.com/items?itemName=opperai.opper-vscode) adds Opper's models to the VS Code chat model picker, so Copilot Chat — agent mode included — runs on any model Opper can reach. Inline completions stay on GitHub's own service.

Models added this way need **no Copilot subscription and no GitHub sign-in**.

## Setup

<Steps>
  <Step title="Install the extension">
    ```bash theme={null}
    code --install-extension opperai.opper-vscode
    ```
  </Step>

  <Step title="Add your API key">
    Run **Opper: Manage API Key** from the Command Palette and paste a key from [platform.opper.ai](https://platform.opper.ai). It is stored in VS Code's `SecretStorage`, never in `settings.json`.
  </Step>

  <Step title="Pick a model">
    Open Copilot Chat and choose an Opper model from the picker. Nothing is listed until a key is set — the model list is scoped to it.
  </Step>
</Steps>

## What the picker shows

The catalogue is fetched at runtime, so there is nothing to hand-list and nothing to keep in sync. Alongside concrete models such as `anthropic/claude-sonnet-4-5`, two Opper-specific entries appear:

* **Pools** — a bare name like `claude-sonnet-4-5` that load-balances across every provider serving that model. A pool only advertises a capability every member has.
* **Dynamic routes** — your deployed [routing graphs](/control-plane/route), as `dynamic/<name>`. The graph picks the model per request.

Each entry's detail line carries where the model is hosted and whether zero data retention is on. `opper.euOnly` and `opper.zdrOnly` narrow the list; the gear beside "Opper" in the picker → **Choose what to list…** turns models, pools and routes on and off individually.

## Scoped to your rules

Discovery is filtered server-side by your [model access rules](/control-plane/rules/model-access), so a model your policy denies is never offered. Those rules are scoped to the API key's *project* — the gear menu leads with which project you are on (`Opper · <org> · project <name> · N models`), which is the quickest way to spot a key pointing somewhere unexpected.

<Note>
  Copilot Business / Enterprise users may need their org admin to enable the "Bring Your Own Language Model Key in VS Code" policy. Individual plans, and no plan at all, are unaffected.
</Note>

<Tip>
  Prefer a generic OpenAI-compatible bridge? The community [OAI Compatible Provider](https://marketplace.visualstudio.com/items?itemName=johnny-zhao.oai-compatible-copilot) extension also works — point `oaicopilot.baseUrl` at `https://api.opper.ai/v3/compat` — but you list each model id by hand and get no pools, routes or residency metadata.
</Tip>

## Related

<CardGroup cols={2}>
  <Card title="GitHub Copilot CLI" icon="https://mintcdn.com/opper/H-iiE_tAhHpUz1kK/images/tools/github-copilot.svg?fit=max&auto=format&n=H-iiE_tAhHpUz1kK&q=85&s=2adc18689aa5c4cee9df752dcce3aeb0" href="/integrations/coding-agents/github-copilot-cli" width="24" height="24" data-path="images/tools/github-copilot.svg">
    GitHub's terminal agent, on any Opper model.
  </Card>

  <Card title="Routing graphs" icon="signs-post" href="/control-plane/route">
    Deploy a route and pick it from the model picker.
  </Card>
</CardGroup>
