You can use a Claude or ChatGPT subscription inside Cursor without connecting it to Cursor's own chat. Install the official Claude Code or Codex extension, sign in, and work in its panel alongside the editor.
But if you want those subscriptions in the Cursor chat you already use, that is a different setup. You need a proxy that connects Cursor to the provider. I built Ungate for this.
The important difference is not just where the chat panel sits. With the official extensions, you use Claude Code or Codex as your agent. With Ungate, you use Cursor as your agent, with Claude or GPT behind it.
What Ungate connects
Ungate is an open-source Cursor extension that connects Claude and ChatGPT subscriptions to native Cursor chat. You sign in through OAuth in your browser. A local proxy translates Cursor's OpenAI-format requests into the provider's format and translates the responses back, including tool calls.
Cursor still handles the conversation, project context, tools, and change review. Ungate does not run Claude Code or Codex inside Cursor, and it does not import their conversations or agent configuration.
The proxy also needs a public address because Cursor calls a custom OpenAI Base URL from its backend, not directly from your laptop. Ungate manages a Cloudflare tunnel for this, so you do not need to install and configure cloudflared yourself. I explain the routing in this post about why localhost does not work.
What the official extensions give you
Anthropic's Claude Code extension (anthropic.claude-code) and OpenAI's Codex extension (openai.chatgpt) both work in Cursor. Each brings its own agent interface and conversation history into the editor.
That separate environment is not necessarily a disadvantage. If you want Claude Code's workflow, including its subagents, slash commands, and MCP support, the official extension gives you Claude Code. Codex similarly provides its own agent workflow and can delegate tasks to Codex in the cloud.
A proxy does not reproduce those features. When Claude receives a request through Ungate, it receives the instructions, context, and tool definitions supplied by Cursor, with the adaptations needed for the provider. The model may be the same, but the surrounding agent is not. You should not expect identical behavior from Claude in Cursor and Claude Code just because you selected the same model.
The same distinction applies to GPT through Ungate versus the Codex extension.
Working with both subscriptions in one chat
The reason I use the proxy route is that I want to keep working in Cursor's native chat rather than move between provider-specific conversations.
For example, I can ask GPT through my ChatGPT subscription to draft a solution, then switch to Claude through my Claude subscription and ask it to review the proposal in the same conversation. I do not have to copy the discussion into another panel or explain the task again.
Both turns still use Cursor's agent environment. Switching the model does not switch the conversation to Claude Code or Codex; it changes which model answers inside Cursor.
With the two official extensions, Claude Code and Codex keep separate conversations. That works well if you use them for separate tasks. It is less convenient if your workflow depends on passing the same discussion between the two providers.
There is no requirement to choose one route permanently. You can keep an official extension for tasks where you want that agent's workflow and use Ungate when you want your subscriptions in native Cursor chat.
Setup
For the official route, install the Claude Code or Codex extension from Cursor's Extensions panel and authenticate using the provider's supported options. You do not configure Cursor's custom OpenAI Base URL for those extensions.
For Ungate, search for @id:orchidfiles.ungate in Cursor's Extensions panel. Open its dashboard, connect your provider accounts, and start the tunnel. Then configure Cursor with the tunnel URL, the proxy API key, and the custom model IDs you want to use.
The proxy route has more initial configuration because you are connecting a subscription to Cursor's agent rather than installing the provider's agent. The steps are covered in the full subscription setup guide.
Subscription limits and provider terms
Ungate does not turn a subscription into unlimited API access. Requests use your account's subscription allowance, and the provider decides which models and usage levels that account can access. A custom model ID does not grant access to a model your account cannot use.
The official extensions are the provider-supported way to use those subscriptions for coding. Ungate is an unofficial third-party integration, and that matters independently of whether it works technically.
Anthropic's authentication and credential rules explicitly restrict third-party applications from offering Claude.ai login or routing requests through users' subscription credentials. Ungate's Claude integration should not be presented as a provider-approved alternative. For ChatGPT, this article does not establish permission from OpenAI to use its subscription through Ungate either.
Open-source code lets you inspect how the proxy handles requests and credentials. It does not establish permission from a provider or guarantee that an account will remain unrestricted.
Which route I would choose
If you want Claude Code or Codex, use their official extensions. You get the agent you intended to use, its own features, and the provider-supported subscription integration. A separate panel is a reasonable tradeoff for that.
If you want Cursor's agent, context, tools, and diff review, but want Claude and ChatGPT subscriptions behind the model picker, that is what Ungate is for. The main benefit is keeping the conversation in Cursor, including when you switch between providers. The tradeoffs are the proxy setup and the unofficial status of the integration.
Choose the agent you want to work with first. Then choose how to connect the model.
GitHub repository: https://github.com/orchidfiles/ungate
My Blog: orchidfiles.com
Telegram Channel: @orchidfiles
Top comments (1)
This is an interesting distinction. I think we sometimes focus too much on which model we're using and overlook the agent and workflow around it. Same model, different harness, potentially very different results.
Personally, I like the idea of switching models without losing the conversation context. Having to explain the same problem twice just to get a second opinion feels like unnecessary friction.