Claude, Codex, Antigravity & more in GitHub Copilot Chat. No API key, just OAuth.
TypeScript
26
408 commits
updated Sep 30, 2026
The VS Code extension that brings your Claude, ChatGPT / Codex, Antigravity, and more subscriptions into GitHub Copilot Chat
No API key — just OAuth.
…and use them to write your Git commit messages, too.
[!WARNING] Use entirely at your own risk and discretion. This extension routes chat through your personal AI subscription accounts over OAuth. Accessing subscriptions outside their official apps may violate provider terms and could result in rate limiting or account suspension.
Requires VS Code 1.131+ and the GitHub Copilot Chat extension.
Universal Chat Provider: Add Account), pick a provider, and complete OAuth in your browser. Models refresh automatically.Manage everything from the status bar item or the Universal Chat Provider: Manage Provider command — inspect quota, redeem OpenAI-provided Codex reset credits, list/remove accounts, restart, update, or reset the managed server.
Let your models handle Copilot's light background tasks and Explore searches. Run Universal Chat Provider: Set Utility Model (or use the status bar menu), pick a model (and thinking effort), done. A small, fast, inexpensive model is usually the best fit. Clear it to undo.
The command points Copilot's chat.utilityModel, chat.utilitySmallModel, and chat.exploreAgent.defaultModel settings at your selected model, so commit messages, chat titles, summaries, and Explore searches run through your accounts. It also sets chat.byokUtilityModelDefault to mainAgent, so remaining utility flows fall back to your selected chat model instead of Copilot's. When the model supports thinking levels, the command also asks for the utility Thinking Effort; commit messages use chat.utilitySmallModel plus that effort. No Copilot subscription required.
The extension runs CLIProxyAPI locally and registers its models with VS Code. Your subscriptions then appear directly in the Copilot Chat model picker.
| Key | Description | Type | Default |
|---|---|---|---|
| ▿ Connection | |||
universalChatProvider.server.mode | How CLIProxyAPI is provided. | string | "managed" |
universalChatProvider.baseUrl | CLIProxyAPI server URL. Used only in external mode. | string | "http://127.0.0.1:8317" |
universalChatProvider.server.managementKey | External mode only. Enter your server's existing management key, not its bcrypt hash. Managed mode generates and stores its own key automatically and ignores this setting. | string | "" |
| ▿ Managed Server | |||
universalChatProvider.server.updatePolicy | How managed CLIProxyAPI updates are handled. | string | "automatic" |
universalChatProvider.server.version | CLIProxyAPI release used when update policy is Manual. Use latest or an exact version (8.0.3 or newer). | string | "latest" |
universalChatProvider.server.extraConfig | Custom YAML overrides for the managed server, such as proxy, retries, and account selection. Overriding connection settings, credentials, or providers can break the extension. | string | "# requests:\n# proxy-url: http://127.0.0.1:7890\n# routing:\n# strategy: fill-first\n# retry:\n# request-retry: 3" |
| ▿ Status Bar | |||
universalChatProvider.showQuotaWarnings | Warn in the status bar when the model in use is low on quota. | boolean | true |
universalChatProvider.quotaWarningThreshold | Remaining-quota percent below which the status bar warning appears. | number | 10 |
| ▿ Provider Specific | |||
universalChatProvider.codex.webSearch | Let Codex look things up online and open web pages while it answers. | boolean | false |
universalChatProvider.claude.webSearch | Let Claude look things up online while it answers. | boolean | false |
| ▿ Advanced | |||
universalChatProvider.debugLevel | Diagnostic detail to collect. Request Logging prompts before restarting the managed server and writes sensitive payloads to disk. | string | "off" |
| Command | Title |
|---|---|
universalChatProvider.manage | Universal Chat Provider: Manage Provider |
universalChatProvider.login | Universal Chat Provider: Add Account (Login) |
universalChatProvider.manageAccounts | Universal Chat Provider: Manage Accounts |
universalChatProvider.showQuota | Universal Chat Provider: Show Quota |
universalChatProvider.restartServer | Universal Chat Provider: Restart Managed Server |
universalChatProvider.updateBinary | Universal Chat Provider: Update Proxy Binary |
universalChatProvider.resetServer | Universal Chat Provider: Reset Managed Server |
universalChatProvider.configure | Universal Chat Provider: Configure Connection |
universalChatProvider.refresh | Universal Chat Provider: Refresh Models |
universalChatProvider.setUtilityModel | Universal Chat Provider: Set Utility Model (commit messages, chat titles, summaries) |
universalChatProvider.clearCredentials | Universal Chat Provider: Clear Stored API Key |
universalChatProvider.showLogs | Universal Chat Provider: Show Logs |
universalChatProvider.showServerLogs | Universal Chat Provider: Show Server Output |
universalChatProvider.openSettings | Universal Chat Provider: Open Settings |
The extension requires CLIProxyAPI 8.0.3 or newer. The extension sends a model-scoped prompt_cache_key derived from Copilot's conversation ID, with an opening-message fingerprint fallback. It does not also send X-Session-ID to the proxy.
Endpoints added through the extension receive these CLIProxyAPI header defaults, matched by exact hostname:
| Hostname | Upstream header | Value |
|---|---|---|
opencode.ai | x-opencode-session | $CPA-SESSION-ID |
openrouter.ai | x-session-id | $CPA-SESSION-ID |
The proxy resolves $CPA-SESSION-ID from its session identity. Existing managed endpoints receive missing defaults when their config is regenerated. Existing headers take precedence regardless of casing, including empty values; server.extraConfig remains the final override. Other endpoints are unchanged.
Existing external-server endpoints are not rewritten. Add the relevant mapping under that provider's headers in your CLIProxyAPI configuration, or re-add the endpoint through the extension. Migrate custom mappings that copy $X-Session-ID to $CPA-SESSION-ID, since the extension no longer supplies the former header. Update older pinned or external proxies before relying on this behavior. A one-time session/cache reset may occur when changing identity sources.
Set universalChatProvider.server.extraConfig to a CLIProxyAPI v8 YAML mapping in the multiline settings field. For example:
routing:
strategy: fill-first
retry:
request-retry: 5
Mappings merge recursively; other values replace generated values, and invalid YAML is rejected before a requested restart stops the server.
Updates download automatically by default and restart the managed server as soon as no requests are active. Change universalChatProvider.server.updatePolicy to suggestUpdates or manual if you'd rather review or pin them yourself. Manual mode uses the configured version, which defaults to latest; enter an exact version (8.0.3 or newer) to pin it. An installed release older than 8.0.3 is replaced with a supported one regardless of the update policy.
Prefer to run CLIProxyAPI yourself, such as on a remote or shared machine?
universalChatProvider.server.mode to external.The server must run CLIProxyAPI 8.0.3 or newer. Adding or removing an OpenAI-compatible endpoint through the extension saves the server's config.yaml in the v8 layout; CLIProxyAPI keeps unrecognized sections as comments.
The API key is stored in VS Code SecretStorage. In external mode, the extension never starts or stops the server. To use Add Account and Manage Accounts, enter your server's existing management key, not its bcrypt hash, in universalChatProvider.server.managementKey. Managed mode generates and stores its own key automatically and ignores this setting.
pnpm install
pnpm vscode:dts
pnpm check # lint + typecheck + tests + build
pnpm ext:package # produce an installable .vsix
Press F5 from VS Code Insiders to launch the Extension Development Host with the proposed APIs enabled.
MIT · Not affiliated with GitHub, OpenAI, Anthropic, or Google.
59 followers · starred Jul 2026
TypeScript
91.7%
JavaScript
8.3%
Claude, Codex, Antigravity & more in GitHub Copilot Chat. No API key, just OAuth.
TypeScript
26
408 commits
updated Sep 30, 2026
The VS Code extension that brings your Claude, ChatGPT / Codex, Antigravity, and more subscriptions into GitHub Copilot Chat
No API key — just OAuth.
…and use them to write your Git commit messages, too.
[!WARNING] Use entirely at your own risk and discretion. This extension routes chat through your personal AI subscription accounts over OAuth. Accessing subscriptions outside their official apps may violate provider terms and could result in rate limiting or account suspension.
Requires VS Code 1.131+ and the GitHub Copilot Chat extension.
Universal Chat Provider: Add Account), pick a provider, and complete OAuth in your browser. Models refresh automatically.Manage everything from the status bar item or the Universal Chat Provider: Manage Provider command — inspect quota, redeem OpenAI-provided Codex reset credits, list/remove accounts, restart, update, or reset the managed server.
Let your models handle Copilot's light background tasks and Explore searches. Run Universal Chat Provider: Set Utility Model (or use the status bar menu), pick a model (and thinking effort), done. A small, fast, inexpensive model is usually the best fit. Clear it to undo.
The command points Copilot's chat.utilityModel, chat.utilitySmallModel, and chat.exploreAgent.defaultModel settings at your selected model, so commit messages, chat titles, summaries, and Explore searches run through your accounts. It also sets chat.byokUtilityModelDefault to mainAgent, so remaining utility flows fall back to your selected chat model instead of Copilot's. When the model supports thinking levels, the command also asks for the utility Thinking Effort; commit messages use chat.utilitySmallModel plus that effort. No Copilot subscription required.
The extension runs CLIProxyAPI locally and registers its models with VS Code. Your subscriptions then appear directly in the Copilot Chat model picker.
| Key | Description | Type | Default |
|---|---|---|---|
| ▿ Connection | |||
universalChatProvider.server.mode | How CLIProxyAPI is provided. | string | "managed" |
universalChatProvider.baseUrl | CLIProxyAPI server URL. Used only in external mode. | string | "http://127.0.0.1:8317" |
universalChatProvider.server.managementKey | External mode only. Enter your server's existing management key, not its bcrypt hash. Managed mode generates and stores its own key automatically and ignores this setting. | string | "" |
| ▿ Managed Server | |||
universalChatProvider.server.updatePolicy | How managed CLIProxyAPI updates are handled. | string | "automatic" |
universalChatProvider.server.version | CLIProxyAPI release used when update policy is Manual. Use latest or an exact version (8.0.3 or newer). | string | "latest" |
universalChatProvider.server.extraConfig | Custom YAML overrides for the managed server, such as proxy, retries, and account selection. Overriding connection settings, credentials, or providers can break the extension. | string | "# requests:\n# proxy-url: http://127.0.0.1:7890\n# routing:\n# strategy: fill-first\n# retry:\n# request-retry: 3" |
| ▿ Status Bar | |||
universalChatProvider.showQuotaWarnings | Warn in the status bar when the model in use is low on quota. | boolean | true |
universalChatProvider.quotaWarningThreshold | Remaining-quota percent below which the status bar warning appears. | number | 10 |
| ▿ Provider Specific | |||
universalChatProvider.codex.webSearch | Let Codex look things up online and open web pages while it answers. | boolean | false |
universalChatProvider.claude.webSearch | Let Claude look things up online while it answers. | boolean | false |
| ▿ Advanced | |||
universalChatProvider.debugLevel | Diagnostic detail to collect. Request Logging prompts before restarting the managed server and writes sensitive payloads to disk. | string | "off" |
| Command | Title |
|---|---|
universalChatProvider.manage | Universal Chat Provider: Manage Provider |
universalChatProvider.login | Universal Chat Provider: Add Account (Login) |
universalChatProvider.manageAccounts | Universal Chat Provider: Manage Accounts |
universalChatProvider.showQuota | Universal Chat Provider: Show Quota |
universalChatProvider.restartServer | Universal Chat Provider: Restart Managed Server |
universalChatProvider.updateBinary | Universal Chat Provider: Update Proxy Binary |
universalChatProvider.resetServer | Universal Chat Provider: Reset Managed Server |
universalChatProvider.configure | Universal Chat Provider: Configure Connection |
universalChatProvider.refresh | Universal Chat Provider: Refresh Models |
universalChatProvider.setUtilityModel | Universal Chat Provider: Set Utility Model (commit messages, chat titles, summaries) |
universalChatProvider.clearCredentials | Universal Chat Provider: Clear Stored API Key |
universalChatProvider.showLogs | Universal Chat Provider: Show Logs |
universalChatProvider.showServerLogs | Universal Chat Provider: Show Server Output |
universalChatProvider.openSettings | Universal Chat Provider: Open Settings |
The extension requires CLIProxyAPI 8.0.3 or newer. The extension sends a model-scoped prompt_cache_key derived from Copilot's conversation ID, with an opening-message fingerprint fallback. It does not also send X-Session-ID to the proxy.
Endpoints added through the extension receive these CLIProxyAPI header defaults, matched by exact hostname:
| Hostname | Upstream header | Value |
|---|---|---|
opencode.ai | x-opencode-session | $CPA-SESSION-ID |
openrouter.ai | x-session-id | $CPA-SESSION-ID |
The proxy resolves $CPA-SESSION-ID from its session identity. Existing managed endpoints receive missing defaults when their config is regenerated. Existing headers take precedence regardless of casing, including empty values; server.extraConfig remains the final override. Other endpoints are unchanged.
Existing external-server endpoints are not rewritten. Add the relevant mapping under that provider's headers in your CLIProxyAPI configuration, or re-add the endpoint through the extension. Migrate custom mappings that copy $X-Session-ID to $CPA-SESSION-ID, since the extension no longer supplies the former header. Update older pinned or external proxies before relying on this behavior. A one-time session/cache reset may occur when changing identity sources.
Set universalChatProvider.server.extraConfig to a CLIProxyAPI v8 YAML mapping in the multiline settings field. For example:
routing:
strategy: fill-first
retry:
request-retry: 5
Mappings merge recursively; other values replace generated values, and invalid YAML is rejected before a requested restart stops the server.
Updates download automatically by default and restart the managed server as soon as no requests are active. Change universalChatProvider.server.updatePolicy to suggestUpdates or manual if you'd rather review or pin them yourself. Manual mode uses the configured version, which defaults to latest; enter an exact version (8.0.3 or newer) to pin it. An installed release older than 8.0.3 is replaced with a supported one regardless of the update policy.
Prefer to run CLIProxyAPI yourself, such as on a remote or shared machine?
universalChatProvider.server.mode to external.The server must run CLIProxyAPI 8.0.3 or newer. Adding or removing an OpenAI-compatible endpoint through the extension saves the server's config.yaml in the v8 layout; CLIProxyAPI keeps unrecognized sections as comments.
The API key is stored in VS Code SecretStorage. In external mode, the extension never starts or stops the server. To use Add Account and Manage Accounts, enter your server's existing management key, not its bcrypt hash, in universalChatProvider.server.managementKey. Managed mode generates and stores its own key automatically and ignores this setting.
pnpm install
pnpm vscode:dts
pnpm check # lint + typecheck + tests + build
pnpm ext:package # produce an installable .vsix
Press F5 from VS Code Insiders to launch the Extension Development Host with the proposed APIs enabled.
MIT · Not affiliated with GitHub, OpenAI, Anthropic, or Google.
59 followers · starred Jul 2026
TypeScript
91.7%
JavaScript
8.3%