mrkeyoor.com_
Sun 01 Nov 21:55 UTC
AI Toolsevaluationupdated 29 Sept 2026

CLIProxyAPI review

CLIProxyAPI is a Go gateway that lets OpenAI, Gemini, Claude, Codex, and Grok clients talk to several model providers through compatible APIs. It can pool OAuth accounts and API credentials, translate request formats, and route retries so one client does not need a separate integration for every provider.

+671stars / 7d
Verdict

Our CLIProxyAPI run passed all 158 Go tests after a 57-second install and 144-second build, making it a credible gateway for operators who need several coding-model protocols behind one endpoint. Use it if account pooling and format translation remove more work than credential care adds. Choose a smaller proxy if an OpenAI-compatible API key is your only upstream, or if your deployment requires immutable secret files.

We ran it

Lab card: what happened when we ran CLIProxyAPIScreenshot of CLIProxyAPI (github.com/router-for-me/CLIProxyAPI)
Install✓ · 57s155 packages
Build✓ · 144s
Tests✓ · 138s158 passed · 0 failed of 158 (go test)
Repo1663 files~586,220 lines of source · 27.9 MB · 6 CI workflows · Dockerfile · tests dir

Answers from our run

Does CLIProxyAPI build from source?

Dependencies installed in 57 seconds (155 packages), and the build succeeded in 144 seconds. We cloned commit acdace9 into a clean Debian container with 3 CPUs and no project-specific setup.

Do CLIProxyAPI's tests pass?

Yes. The project's own test command finished in 138 seconds and reported 158 passed, 0 failed (go test).

Who should not use CLIProxyAPI?

Teams that require configuration and secrets to stay in separate read-only stores: open issue 6201 says client keys and upstream credentials can share the mutable config file.

What are the alternatives to CLIProxyAPI?

LiteLLM, Portkey AI Gateway, Open WebUI. Our CLIProxyAPI run passed all 158 Go tests after a 57-second install and 144-second build, making it a credible gateway for operators who need several coding-model protocols behind one endpoint.

Setup3/5Green build, but credentials and writable OAuth state need care
Docs4/5Detailed config and SDK docs, though the README starts with sponsors
Community5/553,548 stars, 646 open issues and PRs, and same-day activity
Maturity4/5158 tests passed; active translation and credential bugs remain

Who it’s for

Developers who want one local endpoint for OpenAI, Gemini, Claude, Codex, and Grok compatible clients.
Small platform teams prepared to manage several OAuth accounts or provider API credentials.
Go developers who need the included SDK for embedding routing and translation in another service.
Operators who will monitor quota, cooldown, credential refresh, and protocol translation failures.

Who it’s NOT for

Teams that require configuration and secrets to stay in separate read-only stores: open issue 6201 says client keys and upstream credentials can share the mutable config file.
Services that treat an HTTP 200 as proof a streamed request succeeded: issue 6204 documents a provider failure that reached downstream clients inside the stream after the 200 status was committed.
Operators who cannot check file ownership on OAuth credentials: issue 6197 reports that an unwritable refreshed token can work in memory, then fail with invalid_grant after a restart.
Anyone wanting a narrow OpenAI-compatible forwarder: this project also handles account pools, protocol translation, retries, cooldowns, management access, plugins, and mutable OAuth state.

Setup reality

Our sandbox installed commit acdace9 in 57 seconds with 155 packages. The build succeeded in 144 seconds, and all 158 Go tests passed in 138 seconds. The checkout held 1,663 files, about 586,220 lines of source, and used 27.9 MB.

A useful deployment still needs a client API key plus at least one upstream API credential or OAuth login. The sample config also covers the listener, TLS, management secret, account routing, retries, cooldowns, and provider-specific behavior. Docker Compose mounts separate config, auth, log, and plugin paths.

The default listener host is empty, which the sample config says binds all IPv4 and IPv6 interfaces. Remote management is off by default and requires its own key. OAuth token files must remain writable by the service so refreshes survive restarts.

One endpoint translates five client families

CLIProxyAPI sits between coding clients and model providers. Its README names OpenAI, Gemini, Claude, Codex, and Grok compatible interfaces, with streaming, tools, images, WebSockets where supported, and an embeddable Go SDK. The useful part is account pooling: several OAuth logins or API credentials can sit behind one client key, with round-robin routing and failover when a credential cools down. That is much more capable than a URL forwarder, and it asks more of its operator.

The project makes the most sense when protocol mismatch is already costing you time. A Codex client can call a Responses endpoint while the gateway routes work toward another supported shape. Claude Code can use its own interface without forcing every upstream into that exact wire format. Each translation adds a place where tool calls, streaming errors, or model capabilities can change meaning. The repository's roughly 586,220 source lines reflect that wide compatibility surface.

A 57-second install led to a green 158-test run

We cloned commit acdace9 in an unprivileged Debian container with 3 CPUs, 8 GB of RAM, Go 1.24, and no secrets. The checkout contained 1,663 files, occupied 27.9 MB, and held about 586,220 lines of source. Installation succeeded in 57 seconds and brought in 155 packages. The build took 144 seconds. That is a serious Go codebase, though the local setup did not require a database or a browser toolchain.

The repository has 6 CI workflow files, a Dockerfile, a Compose file, and a tests directory. Those are useful signs for a gateway that handles live credentials. They do not prove that any particular provider login will work for you because our sandbox carried no secrets. We checked compilation and the supplied Go suite, not account authorization, provider quotas, model quality, or request latency.

What happened when we ran it

Our run completed all 158 Go tests in 138 seconds, with 158 passing and 0 failing. Combined with the successful 144-second build, commit acdace9 gave us a clean engineering baseline. We did not record an inference benchmark, and the lab block contains no latency or throughput result. Any claim about requests per second, failover speed, or streaming delay would need a separate run with real provider credentials.

The 155 installed packages and green suite also need the right interpretation. They tell us the source resolved and its tests passed in a fresh container on September 28, 2026. They do not exercise an OAuth refresh across a restart or prove every source and destination protocol pair. For this gateway, production risk sits at those boundaries, so a staging check should include the exact client, provider, stream mode, and tool payload your team uses.

OAuth files must survive refreshes and restarts

The v8 sample configuration listens on port 8317 and uses an empty host value by default, which binds all IPv4 and IPv6 interfaces. Client API keys belong under access settings. OAuth material lives in an auth directory, while Compose mounts config, auth files, logs, and plugins separately. Keep the service behind TLS or a trusted local network, set a real client key, and leave remote management disabled unless you have a reason to expose it.

Open issue 6197 describes a sharp operational failure in v8.0.4: an OAuth refresh succeeded in memory when its credential file was not writable, but the rotated token did not persist. Requests kept working until restart, then the provider returned invalid_grant and required an interactive login. The report came from one deployment, not our sandbox, yet its lesson is direct. Run login as the service user and alert on refresh persistence errors.

Stream translation can hide a provider failure behind HTTP 200

Protocol translation is the reason to install CLIProxyAPI and the part that deserves the hardest acceptance test. In issue 6204, a Devin trailer error was detected internally after streaming had begun, while the downstream HTTP status remained 200. The reporter found that response.failed was dropped by the relevant translators, leaving clients to understand an in-band error frame. That report covers one path in v7.3.4, so it does not establish that every stream is affected.

Current activity is intense. GitHub showed 53,548 stars, 69 open issues, 577 open pull requests, and a push on September 29, 2026. Release v8.0.4 shipped the same day with fixes for Codex function arguments and Claude MCP alias translation. Fast changes are welcome in a compatibility gateway, but 646 combined open issues and pull requests make version pinning and provider-level smoke tests sensible before each upgrade.

The passing suite earns a trial, not unattended trust

CLIProxyAPI solves a specific integration problem well: one endpoint can serve several coding clients while routing across multiple credentials and provider formats. Our 158 passing tests make it reasonable to trial, and the active release pace suggests compatibility work is happening quickly. Production approval should depend on a smaller matrix of your own flows. Test one non-streaming request, one stream, one tool call, a quota failure, an OAuth refresh, and a restart for each provider you intend to keep. That is the price of turning several changing APIs into one address.

Alternatives

ProjectWhat it isPick it when
LiteLLM gh↗A Python gateway and SDK that presents many model providers through OpenAI-style APIs.pick this instead when broad API-key provider coverage and spend controls matter more than CLI subscription OAuth flows.
Portkey AI GatewayA TypeScript AI gateway focused on routing, fallbacks, caching, and observability.pick this instead when gateway policy and request tracing matter more than pooling coding-tool accounts.
Open WebUI gh↗A self-hosted model interface with user management and connections to several model backends.pick this instead when people need a browser chat product rather than an API translation layer.

What people are saying

  1. [github-trending] router-for-me/CLIProxyAPI

Sources

  1. CLIProxyAPI repository and README
  2. CLIProxyAPI v8 sample configuration
  3. CLIProxyAPI v8.0.4 release
  4. Issue 6197: OAuth refresh persistence failure
  5. Issue 6204: streamed failure translated under HTTP 200
  6. Issue 6201: configuration and credential separation

More ai tools reviews

kornia · skills · anarlog · pr-agent · agent-sprite-forge · KiroCrew · the whole board →

Related reading