Skip to main content

polyclaude — use OpenAI, Gemini, and any OpenAI-compatible model inside the Claude Code CLI

PyPI version Python versions License

Claude Code is a great terminal coding agent — but it only talks to Anthropic's models. polyclaude lets you keep the exact Claude Code experience (its UI, tools, and agent loop) while the actual model behind it is GPT, Gemini, a Groq model, an OpenRouter model, or a local Ollama model.

It works by running a tiny local proxy that speaks Claude Code's API on one side and your provider's API on the other, translating between them on the fly. Claude Code itself is never modified.

Claude Code  ⇄  Anthropic Messages API  ⇄  [ polyclaude ]  ⇄  OpenAI / Gemini / …

Install

pipx install polyclaude      # recommended
# or: uv tool install polyclaude
# or: pip install polyclaude

You'll also need Claude Code installed (claude on your PATH) and an API key for whichever provider you want to use.

Use

export GEMINI_API_KEY=...        # or OPENAI_API_KEY, GROQ_API_KEY, …
polyclaude --gemini              # Claude Code, powered by Gemini
polyclaude --openai              # …powered by GPT
polyclaude --openai --model gpt-4.1
polyclaude --gemini --model gemini-2.5-pro

That's it — you're dropped into a normal Claude Code session running on the model you chose. First run auto-configures the local proxy certificate; nothing else to set up.

Pass arguments straight through to claude after --:

polyclaude --gemini -- -p "explain this repo"

Providers

Provider Flag Key env Default model
Google Gemini --gemini GEMINI_API_KEY gemini-2.5-pro
OpenAI --openai OPENAI_API_KEY gpt-4.1
Groq --groq GROQ_API_KEY llama-3.3-70b-versatile
OpenRouter --openrouter OPENROUTER_API_KEY anthropic/claude-3.5-sonnet
Ollama (local) --ollama qwen2.5-coder

Any model your key can access works via --model, including the newest ones (Gemini 3.x, GPT-5.x). polyclaude handles the provider-specific details so tool calling and reasoning keep working:

  • Gemini 3.x thinking models need their function-call thought signatures round-tripped across turns — handled automatically.
  • GPT-5.5 / 5.6 can't use tools and reasoning together on the standard endpoint; polyclaude routes them through OpenAI's /responses API so you get both (tune depth with --reasoning low|medium|high).
  • Reasoning models reject non-default sampling params — dropped automatically.
  • Turns that hit the output-token cap are transparently continued.

Run polyclaude --list to see everything.


Specialize the agent

Give the agent a persona/use-case with a profile — it's appended to the system prompt for the main loop only, so Claude Code's own tooling keeps working:

polyclaude --gemini --profile datascience
polyclaude --openai --profile reviewer
polyclaude --gemini --profile ./my-profile.md      # your own file

Bundled profiles: datascience, reviewer, concise. Or replace the whole system prompt with --system path/to/file.md.


Resume a session

Claude Code keeps your conversations; resume them straight through polyclaude:

polyclaude --gemini --continue     # continue the most recent session
polyclaude --gemini --resume       # pick one from a list

Reskin (optional, cosmetic)

By default the welcome screen still reads "Claude Code" and shows a Claude model name even though another model is answering. --reskin recolors the UI, relabels it to polyclaude, and shows the real model name:

polyclaude --gemini --reskin              # green accent + polyclaude label
polyclaude --openai --reskin --hue 200    # a different accent colour

This is display-only — it rewrites the terminal output as it's drawn; the Claude Code binary is never modified and your keystrokes pass through untouched.

How it works

polyclaude starts mitmproxy locally with a small addon and points Claude Code at it (via HTTPS_PROXY + NODE_EXTRA_CA_CERTS, scoped to that one process). The addon intercepts requests to api.anthropic.com/v1/messages, translates the Anthropic request into the provider's format, calls the provider, and streams the reply back in Anthropic's event format. Every other host is passed straight through untouched.

Only sessions you launch with polyclaude are affected — your normal claude is unchanged and still uses Anthropic.


FAQ

Does this change my Claude Code install? No. It only sets proxy environment variables for the session it launches.

Do my keys leave my machine? Only to the provider you choose (Google, OpenAI, etc.), exactly as if you called their API directly. polyclaude has no servers.

Quality feels off on some models. Different models behave differently inside Claude Code's harness (its prompt and tools are tuned for Claude). Larger/newer models fare better; try --reasoning high on OpenAI and compare providers.

Can I use my own endpoint? Yes — anything OpenAI-compatible. Point at it and go (OpenRouter, vLLM, LM Studio, etc.).


Notes

For personal and development use, with your own API keys. Respect the terms of service of Claude Code and of whichever model provider you use.

License

MIT © Devesh Pratap

Star History

Star History Chart

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polyclaude-0.1.2.tar.gz (9.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

polyclaude-0.1.2-py3-none-any.whl (18.8 kB view details)

Uploaded Python 3

File details

Details for the file polyclaude-0.1.2.tar.gz.

File metadata

  • Download URL: polyclaude-0.1.2.tar.gz
  • Upload date:
  • Size: 9.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for polyclaude-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2752f3bf3d83d44434c811c15c0bf05ecb26a5fc0bbe4086b2441a69ad89c5d0
MD5 1e37b889f1bd27e55c5ec275bf348f58
BLAKE2b-256 e106921db1d4e7d55d365e7622a45e2b748fbd24fd7a8fa8719c16acb8acaa09

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyclaude-0.1.2.tar.gz:

Publisher: release.yml on ibedevesh/polyclaude

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file polyclaude-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: polyclaude-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 18.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for polyclaude-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d65aa38d830654fe58db3117dcb2d7a7a86fb1cdc3bf1d4f215b559570d7f87f
MD5 b93ddac5cd8424a46a2086c2c1f8ba66
BLAKE2b-256 f9ffffe730288c834f00c32ec5bc61c8835d0dc817fef308b91e4039ba1c9621

See more details on using hashes here.

Provenance

The following attestation bundles were made for polyclaude-0.1.2-py3-none-any.whl:

Publisher: release.yml on ibedevesh/polyclaude

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page