Your own provider models inside the GitHub Copilot CLI /model picker
Copilot BYOK Switcher adds your own provider models to the GitHub Copilot CLI /model picker, in
the same session as the GitHub models. Pick an Anthropic, OpenAI, DeepSeek, Qwen, GLM, Kimi or
other provider model and the session talks straight to that provider with your key, while GitHub
authentication and every other Copilot feature keep working. The picker is filled by live
discovery from each configured provider. This is an independent, unofficial project and is not
affiliated with GitHub.
Install the CLI from the npm registry:
npm install -g copilot-byok-switcher# 1. Store a key for each provider you own (prompted, never echoed)
copilot-byok keys set openai
copilot-byok keys set anthropic
# 2. See what is active
copilot-byok --list-providers
# 3. Start Copilot
copilot-byokOpen /model inside the session and pick one of your models. Arguments after -- go to Copilot
unchanged:
copilot-byok -- -p "fix the failing test" --allow-all-tools- Your provider models appear in the Copilot CLI
/modelpicker next to GitHub's, in the same session. - Use as many providers per session as you configure.
- GitHub models stay available while BYOK is active, and models can be switched with
/modelwithout restarting. - Live discovery: each configured provider is asked what it serves at startup, with a remembered list as the fallback when a request fails.
- Zero AI credits for BYOK turns; you pay your provider directly.
- Credentials come from environment variables or an opt-in local key store, and never reach the Copilot process in router mode.
- No TLS interception: the router binds to loopback and exits with the session.
- Windows, macOS and Linux are supported with Node.js only, with no build step.
- Node.js 22.13 or newer.
- GitHub Copilot CLI 1.0.79 or newer, available as
copilotonPATH(setCOPILOT_BINto override). - A GitHub Copilot account, on any plan including free.
Everything has a working default. The most useful settings are listed below; the full reference,
the custom providers.json format, the command list and single-provider mode are in the
configuration guide.
| Setting | Purpose | Default |
|---|---|---|
COPILOT_BIN |
Path to the real Copilot CLI when it is not on PATH under that name |
copilot from PATH |
COPILOT_BYOK_CONFIG |
Provider configuration file (same as --config) |
Built-in catalog |
COPILOT_BYOK_KEYSTORE |
Where stored keys live | Platform config directory |
COPILOT_BYOK_PROGRESS=off |
Turns off the startup progress line | Progress line on |
COPILOT_BYOK_DEBUG=1 |
Streams router events live instead of only to the log | Log only |
COPILOT_BYOK_PROVIDER_TIMEOUT_MS |
Idle timeout on a provider request | 10 minutes |
All 28 built-in providers, the environment variable for each key, and the model-discovery behavior are documented in the providers guide.
No TLS is intercepted, no certificate authority is installed, the router listens on loopback only
and exits with the session, provider keys never reach Copilot or GitHub, and your GitHub token
passes through the router unlogged because it has to. Provider keys come from environment
variables or the opt-in key store; keys in the store are plain text on disk protected by file
permissions, so environment variables remain the safer default. SECURITY.md covers the full
model, including what the undocumented COPILOT_API_URL dependency means for you.
No provider is active. Run copilot-byok --list-providers to see which provider is unlocked by
which environment variable or stored key.
The provider catalog changed since the session started. Restart copilot-byok.
The key for that provider is wrong or expired. This is not a GitHub authentication failure.
COPILOT_API_URL may no longer work on your CLI version. Run copilot-byok --native for a stock
session and check the router notes in how it works.
Discovery queries each configured provider in parallel; the progress line names the provider being
waited on. Start with --no-discovery to work from remembered lists. More failure modes are in
troubleshooting.
Requirements: Node.js 22.13 or newer, npm, and the committed package-lock.json.
git clone https://github.com/TheStreamCode/copilot-byok-switcher.git
cd copilot-byok-switcher
npm ci
npm run check
npm run test:coverage
npm pack --dry-run
npm audit --omit=dev --audit-level=highThere is no build step: plain ESM JavaScript runs directly. Tests use the built-in node:test
runner. See AGENTS.md for repository conventions and CONTRIBUTING.md before opening a pull
request.
See SUPPORT.md. Usage questions belong in GitHub Discussions, reproducible defects in GitHub
Issues, and security problems in SECURITY.md through GitHub Security Advisories.
See CONTRIBUTING.md. Run npm run check before opening a pull request; CI runs the tests on
Node.js 22 and 24 across Linux, macOS and Windows.
MIT — see LICENSE. Copyright (c) 2026 Michael Gasperini (Mikesoft).
Maintained by Michael Gasperini (Mikesoft). If this project is useful to you, consider sponsoring its maintenance.