flowchart TB cc["Claude Code"] gw["Claude apps gateway"] ccr["CCR on 127.0.0.1 port 3456"] orgUp["Organisation upstream"] prov["Provider the user configured"] cc -->|"gateway sign-in"| gw cc -->|"ANTHROPIC_BASE_URL"| ccr gw --> orgUp ccr --> prov
1. Read the two columns2. Read the seven mix-ups3. Open Connect4. Check Gaps before a schema or a fork count
Side by side
Left · Claude apps gateway
Anthropic apps gateway
- ✓ R01 Anthropic self-hosted gateway inside the claude binary, started with
claude gateway --config gateway.yaml. Anthropic does not host the data plane. - ✓ R02 Sits between Claude Code (and opt-in Claude Desktop) and an upstream the organisation holds. Corporate OIDC, per-group model access, and OTLP telemetry are part of that product description.
- ✓ R03 The organisation, on a Linux server. macOS is only for local development. Windows is not a server.
- ✓ R04 Clients speak the Anthropic Messages API to the gateway. The quickstart listener is host
0.0.0.0, port8080, with a separatepublic_url. - ✓ R05 Amazon Bedrock, Claude Platform on AWS, Google Cloud Agent Platform, Microsoft Foundry, or the Anthropic API, with failover. Nothing is sent to Anthropic unless the Anthropic API is a configured upstream.
- ✓ R18 Documented by Anthropic as its own gateway, released with the CLI.
Right · Claude Code Router
Claude Code Router
- ✓ R01 Community local model gateway and control plane, repository musistudio/claude-code-router, licence MIT. One local endpoint that routes, fails over, and logs to providers the user configures.
- ✓ R02 Agents talk to the local gateway. CCR then calls the provider the user selected. It does not claim to be an organisation control plane.
- ✓ R03 The user, via the desktop app, the npm CLI
@musistudio/claude-code-router, or Docker. - ✓ R04 Default model gateway
http://127.0.0.1:3456. Default management UIhttp://127.0.0.1:3458. In Docker, host port 3458 proxies to the in-container gateway127.0.0.1:3456. - ✓ R05 README lists OpenAI Chat/Responses, Anthropic Messages, Gemini Generate Content/Interactions, OpenRouter, DeepSeek, SiliconFlow, Moonshot, Kimi Code, Mistral, Z.AI, Bailian, and custom compatible providers.
- ✓ R18 Anthropic does not endorse, maintain, or audit third-party gateways, and does not support routing Claude Code to non-Claude models through any gateway. The CCR README is explicitly about routing to those other providers.
Do not mix them up
| ID | Rule |
|---|---|
| DEC-01 | CCR is not the Claude apps gateway. Do not describe one with the other's ports, sign-in, or licence. |
| DEC-02 | Gateway sign-in is forceLoginMethod gateway plus forceLoginGatewayUrl. ANTHROPIC_BASE_URL is a different connection, including when it points at CCR. |
| DEC-03 | ANTHROPIC_BASE_URL alone does not move billing off a claude.ai subscription. A gateway credential or /login does. |
| DEC-04 | CCR port 3456 is the model gateway. Port 3458 is the management UI. In Docker, 3458 is the public front door and proxies to 3456. The apps-gateway quickstart listener is 0.0.0.0:8080 with a separate public_url. |
| DEC-05 | Anthropic does not support non-Claude models through any gateway. The CCR README is about routing to other providers. A CCR route is not an Anthropic-supported path. |
| DEC-06 | GET /protocol on a running apps gateway is that product's endpoint list. The public compatibility guide is a different document. |
| DEC-07 | A historical CCR config.json shape is not current. The live file seen in this fetch is config.sqlite. |
flowchart TB
subgraph gateSign["Gateway sign-in"]
flm["forceLoginMethod gateway"]
flu["forceLoginGatewayUrl"]
end
subgraph otherGw["Other gateway including CCR"]
base["ANTHROPIC_BASE_URL"]
keep["Does not replace a saved claude.ai login"]
end
flm --> flu
base --> keepTwo ways in
Left · Claude apps gateway
Gateway sign-in
forceLoginMethodgatewayforceLoginGatewayUrlexamplehttps://claude-gateway.internal.example.comparentSettingsBehaviormerge/loginonly if the host is private or a declared owned public block- Browser device flow only. No unattended CI token.
Right · Claude Code Router
Base URL, including CCR
ANTHROPIC_BASE_URLfor/v1/messages- Optional
/v1/messages/count_tokens - Setting only this does not replace a saved claude.ai login
- A gateway credential or
/logindoes switch that path - The method changes which betas and model IDs Claude Code sends
Client variables
| ID | Variable | What the fetch says | Badge | Source |
|---|---|---|---|---|
| V01 | ANTHROPIC_BASE_URL | Points Claude Code at an Anthropic Messages gateway (/v1/messages, optional /v1/messages/count_tokens). Setting only this does not replace a saved claude.ai login. | ✓ | SRC-03 |
| V02 | ANTHROPIC_AUTH_TOKEN | Sent as Authorization Bearer. | ✓ | SRC-03 |
| V03 | ANTHROPIC_API_KEY | Sent as x-api-key. | ✓ | SRC-03 |
| V04 | ANTHROPIC_BEDROCK_BASE_URL | Used with CLAUDE_CODE_USE_BEDROCK=1. This is a Claude Code client variable. It is not evidence that CCR speaks Bedrock InvokeModel (GAP-04). | ✓ | SRC-03 |
| V05 | ANTHROPIC_VERTEX_BASE_URL | Used with CLAUDE_CODE_USE_VERTEX=1. Same caveat as V04 for CCR (GAP-04). | ✓ | SRC-03 |
| V06 | ANTHROPIC_FOUNDRY_BASE_URL | Foundry base URL for a gateway in front of that upstream. Not a CCR feature claim (GAP-04). | ✓ | SRC-03 |
| V07 | ANTHROPIC_AWS_BASE_URL | Claude Platform on AWS. A gateway in front of that platform must also forward anthropic-workspace-id. | ✓ | SRC-03; SRC-04 |
| V08 | allowedProviders | A managed machine can be pinned to one base URL with allowedProviders set to a list containing customEndpoint. Claude Code v2.1.285 or newer. | ✓ | SRC-03 |
| V09 | forceLoginMethod, forceLoginGatewayUrl, parentSettingsBehavior | Gateway sign-in, not the ANTHROPIC_BASE_URL path. Quickstart example URL https://claude-gateway.internal.example.com. parentSettingsBehavior value merge. | ✓ | SRC-01 |
flowchart TB
req["Gateway request"]
allow{"Model granted to the IdP group"}
deny["400"]
cap{"Optional USD cent cap"}
ok["Call the configured upstream"]
over["429 billing_error"]
req --> allow
allow -->|"no"| deny
allow -->|"yes"| cap
cap -->|"under or no cap"| ok
cap -->|"over cap"| overflowchart TB
subgraph gwA["Gateway"]
oidc["OIDC one issuer"]
bearer["Short-lived bearer default ttl_hours 1"]
cred["Upstream credential stays on the gateway"]
end
subgraph ccrA["CCR"]
web["Management token"]
client["Separate client API keys"]
local["Upstream keys in the local data directory"]
end
oidc --> bearer
bearer --> cred
web --> client
client --> localflowchart TB key["CCR client key"] lim["Local request token and image limits"] log["Logs show an estimated cost"] noOrg["No organisation Admin API in pages fetched"] key --> lim lim --> log key --> noOrg
Routing and money
Left · Claude apps gateway
Allowlist and caps
- ✓ R10 The gateway translates model IDs per upstream (
auto_include_builtin_models). IdP groups map toavailableModels. A model that was not granted returns 400. The developer picks inside the allowlist. - ~ R11 Optional per-user, per-IdP-group, and organisation caps in USD cents, for a day, a week, or a month. Over the cap: HTTP 429,
error.typebilling_error,x-should-retryfalse. Amounts are estimates, not the provider invoice. Postgres is required.
{"scope":{"type":"organization"},"amount":"50000","period":"monthly"}Right · Claude Code Router
Routes and local limits
- ✓ R10 Conditions on headers and bodies, prefixes, rewrites, retries, and ordered fallbacks. Profiles set the model per agent.
- ~ R11 Separate client keys with expiration, and local request, token, and image limits. Logs show an estimated cost. No organisation Admin API and no IdP-group USD caps in the pages fetched. That absence is not a proof those APIs do not exist elsewhere.
sequenceDiagram participant Code as Claude Code participant Gate as Apps gateway participant Up as Configured upstream Code->>Gate: Anthropic Messages API Gate->>Up: Model id translated for that upstream Up-->>Gate: Provider response Gate-->>Code: Messages response
sequenceDiagram participant Agent as Agent participant Ccr as CCR gateway participant Prov as Selected provider Agent->>Ccr: Request to the local gateway Ccr->>Prov: Call after route and fallback Prov-->>Ccr: Provider response Ccr-->>Agent: Response
Stories
Left · Claude apps gateway
Gateway story
- Start
claude gateway --config gateway.yamlon Linux. - Point clients at gateway sign-in.
- Browser device flow. One OIDC issuer.
- Messages API in. Translated model id out to the organisation upstream.
- Optional cap returns 429. A model outside the group returns 400.
Right · Claude Code Router
CCR story
- Desktop app,
ccr ui(Node.js 22 or newer), or Docker. - Agents use port 3456. Management UI is port 3458.
- Profiles pick the model per agent.
- Conditions, prefixes, rewrites, retries, ordered fallbacks.
- Provider keys stay in the local data directory.
flowchart LR
subgraph appsGw["Claude apps gateway"]
p8080["Listener host 0.0.0.0 port 8080"]
purl["Separate public_url"]
end
subgraph ccrLocal["CCR defaults"]
p3456["Model gateway port 3456"]
p3458["Management UI port 3458"]
end
p8080 --> purl
p3458 -->|"Docker front door proxies to 3456"| p3456Where it is allowed to run
Left · Claude apps gateway
Linux server
- ✓ R12 Linux server. macOS only for local development. Windows is not a server. Postgres 14 or newer. Private network. HTTPS. Plain HTTP only for loopback.
- ✓ R04 Clients speak the Anthropic Messages API to the gateway. The quickstart listener is host
0.0.0.0, port8080, with a separatepublic_url.
Right · Claude Code Router
Local app, CLI, or Docker
- ✓ R12 Desktop app on macOS, Windows, and Linux. CLI needs Node.js 22 or newer. The Docker guide says read it before exposing CCR remotely. What that guide requires beyond that sentence was not copied here.
- ✓ R04 Default model gateway
http://127.0.0.1:3456. Default management UIhttp://127.0.0.1:3458. In Docker, host port 3458 proxies to the in-container gateway127.0.0.1:3456.
flowchart LR org["Organisation"] keep["Hold the upstream and the data plane"] gw["Claude apps gateway"] user["User"] route["One local endpoint to chosen providers"] ccr["Claude Code Router"] org --> keep keep --> gw user --> route route --> ccr
flowchart TB shape["Claude Code request shape changes"] gwShip["Apps gateway ships with the CLI"] other["A separate gateway"] ccrDoc["CCR README and troubleshooting"] off["Gateway session turns listed features off"] drop["Dropped new headers or body fields break features"] gap["Request-shape outcome not documented there"] shape --> gwShip gwShip --> off shape --> other other --> drop shape --> ccrDoc ccrDoc --> gap
Useful
Left · Claude apps gateway
Organisation holds the data plane
OIDC groups, an allowlist, failover across the named upstreams, optional USD-cent caps. Nothing goes to Anthropic unless the Anthropic API is a configured upstream. /login only for a private host or a declared owned public block.
Right · Claude Code Router
One local endpoint
Routes to the providers the README lists, for the agents CCR claims, with local logs. Routing to a non-Claude model is outside Anthropic support.
Fails or goes quiet
Left · Claude apps gateway
Features drop on a gateway session
A separate gateway must forward new headers and body fields. This gateway ships with the CLI so operators do not keep an allowlist. A gateway session turns off server-side WebSearch, the 1-hour cache TTL, Remote Control, design login and design sync, and feature-flag features such as /import. Backwards compatibility is not promised. No unattended CI token.
Right · Claude Code Router
Request-shape outcome not written down
README and troubleshooting do not document Claude Code request-shape breakage. Unverified. Anthropic's guide (not CCR) says stripping anthropic-beta or rewriting bodies yields 400s. v3.0.22 notes an SSE multi-byte fix and a Claude Code path fix in the local-agent auth hook. Those notes are not a compatibility promise.
flowchart TB row["One concern per row"] left["Left cell is Claude apps gateway"] right["Right cell is Claude Code Router"] gap["A hole stays unverified"] row --> left row --> right row --> gap
All twenty rows
| ID | Concern | Claude apps gateway | Claude Code Router | Badge | Source |
|---|---|---|---|---|---|
| R01 | What it is | Anthropic self-hosted gateway inside the claude binary, started with claude gateway --config gateway.yaml. Anthropic does not host the data plane. | Community local model gateway and control plane, repository musistudio/claude-code-router, licence MIT. One local endpoint that routes, fails over, and logs to providers the user configures. | ✓ | SRC-01; SRC-06; SRC-11 |
| R02 | Who it sits between | Sits between Claude Code (and opt-in Claude Desktop) and an upstream the organisation holds. Corporate OIDC, per-group model access, and OTLP telemetry are part of that product description. | Agents talk to the local gateway. CCR then calls the provider the user selected. It does not claim to be an organisation control plane. | ✓ | SRC-01; SRC-06 |
| R03 | Who runs it | The organisation, on a Linux server. macOS is only for local development. Windows is not a server. | The user, via the desktop app, the npm CLI @musistudio/claude-code-router, or Docker. | ✓ | SRC-01; SRC-06; SRC-09 |
| R04 | Where clients send traffic | Clients speak the Anthropic Messages API to the gateway. The quickstart listener is host 0.0.0.0, port 8080, with a separate public_url. | Default model gateway http://127.0.0.1:3456. Default management UI http://127.0.0.1:3458. In Docker, host port 3458 proxies to the in-container gateway 127.0.0.1:3456. | ✓ | SRC-01; SRC-06; SRC-08 |
| R05 | Upstreams named | Amazon Bedrock, Claude Platform on AWS, Google Cloud Agent Platform, Microsoft Foundry, or the Anthropic API, with failover. Nothing is sent to Anthropic unless the Anthropic API is a configured upstream. | README lists OpenAI Chat/Responses, Anthropic Messages, Gemini Generate Content/Interactions, OpenRouter, DeepSeek, SiliconFlow, Moonshot, Kimi Code, Mistral, Z.AI, Bailian, and custom compatible providers. | ✓ | SRC-01; SRC-06 |
| R06 | Native Bedrock, Foundry, or Vertex | Those clouds are named gateway upstreams (R05). A gateway in front of Claude Platform on AWS must also forward anthropic-workspace-id. | Not stated. Protocols listed for CCR are OpenAI, Anthropic Messages, and Gemini. Whether CCR speaks Bedrock InvokeModel, Foundry, or Vertex as native upstreams is unverified. | ?? | SRC-03; SRC-04; GAP-04 |
| R07 | Products | Claude Code v2.1.195 or newer. Claude Platform on AWS as an upstream needs v2.1.198 or newer on the server. Claude Desktop Cowork and Code tabs, plus Chat if enabled, via /user/bootstrap (server v2.1.203 or newer). Not a claude.ai session: no /design-sync, /design-login, or Remote Control. No unattended CI token; browser device flow only. | Claims Claude Code (CLI and app), Claude Design, Codex (CLI and app), Grok CLI, Kimi CLI, Kilo Code, OpenCode (CLI and app), Pi, ZCode, WorkBuddy, and compatible API clients. Does not claim claude.ai, Desktop policy, or the Anthropic API. | ✓ | SRC-01; SRC-06 |
| R08 | How Claude Code is pointed at it | Managed settings: forceLoginMethod gateway, forceLoginGatewayUrl, parentSettingsBehavior merge. Claude Code only connects at /login if the host resolves to private addresses or a declared owned public block. | ANTHROPIC_BASE_URL can point Claude Code at an Anthropic Messages gateway, including CCR. Setting only that variable does not replace a saved claude.ai login. A gateway credential or /login does. These are different connection methods. The compatibility guide says the method changes which betas and model IDs Claude Code sends. | ✓ | SRC-01; SRC-03; SRC-04 |
| R09 | Auth | OIDC only: Okta, Entra ID, Google Workspace, Keycloak, Dex, PingFederate, or any OIDC IdP. SAML and LDAP are not supported. One issuer. Short-lived bearer, default ttl_hours 1. The upstream credential stays on the gateway. | Management UI/RPC token (ccr_web_token or CCR_WEB_AUTH_TOKEN) and separate CCR client API keys (Authorization Bearer or x-api-key). Upstream keys stay in the local data directory. Local login import where supported. No corporate OIDC or SSO in the fetched README or CLI guide. That absence is not a proof it cannot exist on an unfetched page. | ~ | SRC-01; SRC-06; SRC-09 |
| R10 | Model access | The gateway translates model IDs per upstream (auto_include_builtin_models). IdP groups map to availableModels. A model that was not granted returns 400. The developer picks inside the allowlist. | Conditions on headers and bodies, prefixes, rewrites, retries, and ordered fallbacks. Profiles set the model per agent. | ✓ | SRC-01; SRC-06 |
| R11 | Spend caps | Optional per-user, per-IdP-group, and organisation caps in USD cents, for a day, a week, or a month. Over the cap: HTTP 429, error.type billing_error, x-should-retry false. Amounts are estimates, not the provider invoice. Postgres is required. | Separate client keys with expiration, and local request, token, and image limits. Logs show an estimated cost. No organisation Admin API and no IdP-group USD caps in the pages fetched. That absence is not a proof those APIs do not exist elsewhere. | ~ | SRC-02; SRC-06; SRC-09 |
| R12 | Where it runs | Linux server. macOS only for local development. Windows is not a server. Postgres 14 or newer. Private network. HTTPS. Plain HTTP only for loopback. | Desktop app on macOS, Windows, and Linux. CLI needs Node.js 22 or newer. The Docker guide says read it before exposing CCR remotely. What that guide requires beyond that sentence was not copied here. | ✓ | SRC-01; SRC-06; SRC-08; SRC-09 |
| R13 | What breaks | A separate gateway must forward new headers and body fields or features break. This gateway is released with the CLI so operators do not keep an allowlist. On a gateway session the CLI turns off server-side WebSearch, the 1-hour cache TTL, Remote Control, design login and design sync, and feature-flag features such as /import. Indefinite backwards compatibility of the protocol is not guaranteed. | The current README and the ccrdesk troubleshooting page do not document Claude Code request-shape breakage. What happens when the request shape changes is unverified (GAP-03). Tag v3.0.22 notes fixes for SSE corrupting multi-byte characters split across chunks, and for the Claude Code path in the local-agent auth hook. Anthropic's compatibility guide, which is not a CCR document, says stripping anthropic-beta or rewriting bodies yields 400s. | ~ | SRC-01; SRC-04; SRC-06; SRC-07; GAP-03 |
| R14 | Licence | Not stated on the gateway docs. Unverified. | MIT on the README and on the npm page. | ?? | GAP-05; SRC-06; SRC-11 |
| R15 | Version seen on 3 October 2026 | Client and server floors are in R07. No separate gateway package version was in the fetch. | npm showed 3.1.1, MIT, updated 16 September 2026 15:28 EEST. Tag v3.0.22 published 24 August 2026 15:23 EEST is not that npm package version. | ✓ | SRC-01; SRC-06; SRC-11 |
| R16 | Stars and forks | Not a public GitHub project in this comparison. No star count. | Stars seen on 3 October 2026: 37524. That integer is the fetched count. Fork count is not reliable and stays unverified. | ~ | SRC-06; GAP-06 |
| R17 | Config that was actually seen | Quickstart groups are in Part 6. The full gateway.yaml reference was not fetched. Unverified beyond those named fields. | Config directory ~/.claude-code-router (Windows %APPDATA%\claude-code-router). Live config is config.sqlite, not a JSON file the current README shows. Generated runtime file gateway.config.json. The current README has no config.json schema. The linked configuration page is a dashboard-widget guide, not a schema. | ?? | SRC-01; SRC-06; SRC-08; GAP-01; GAP-02 |
| R18 | Endorsement | Documented by Anthropic as its own gateway, released with the CLI. | Anthropic does not endorse, maintain, or audit third-party gateways, and does not support routing Claude Code to non-Claude models through any gateway. The CCR README is explicitly about routing to those other providers. | ✓ | SRC-01; SRC-03; SRC-06 |
| R19 | Protocol list versus the public guide | GET /protocol on a running Claude apps gateway is that product's own endpoint list. It is not the public compatibility guide. | Not claimed for CCR. The public guide is https://code.claude.com/docs/en/llm-gateway-protocol. | ✓ | SRC-01; SRC-04 |
| R20 | Billing off a claude.ai subscription | A gateway credential or /login is what switches the client. Gateway sign-in is the managed-settings path in R08. | ANTHROPIC_BASE_URL alone does not switch billing off a claude.ai subscription, including when that URL is CCR. | ✓ | SRC-03 |
flowchart TB gaps["Unverified on 3 October 2026"] yaml["Full gateway.yaml reference"] schema["Current CCR JSON schema"] shape["CCR when the request shape changes"] native["CCR native Bedrock Foundry or Vertex"] lic["claude binary licence"] forks["Fork count"] gaps --> yaml gaps --> schema gaps --> shape gaps --> native gaps --> lic gaps --> forks
Gaps
| ID | Gap | Badge |
|---|---|---|
| GAP-01 | The full gateway.yaml reference at https://code.claude.com/docs/en/claude-apps-gateway-config was not fetched in full. Keys not named in the quickstart are unverified. | ?? |
| GAP-02 | No current CCR JSON schema. The current README does not contain a config.json schema. The linked configuration page is a dashboard-widget guide. An older config.json shape exists in a historical commit and is not current. | ?? |
| GAP-03 | The README and the ccrdesk Q&A do not state what happens when the Claude Code request shape changes. GitHub issues about beta-header overwrites were not fetched in full. | ?? |
| GAP-04 | Whether CCR speaks Bedrock InvokeModel, Foundry, or Vertex as native upstreams was not stated. Protocols listed are OpenAI, Anthropic Messages, and Gemini. | ?? |
| GAP-05 | No licence text for the claude binary on the gateway docs. | ?? |
| GAP-06 | Fork count for musistudio/claude-code-router is not reliable. Stars seen on 3 October 2026 were 37524. That star integer is a fetched count, not a fork count. | ?? |
Edition decisions
| ID | Decision |
|---|---|
| DEC-01 | CCR is not the Claude apps gateway. Do not describe one with the other's ports, sign-in, or licence. |
| DEC-02 | Gateway sign-in is forceLoginMethod gateway plus forceLoginGatewayUrl. ANTHROPIC_BASE_URL is a different connection, including when it points at CCR. |
| DEC-03 | ANTHROPIC_BASE_URL alone does not move billing off a claude.ai subscription. A gateway credential or /login does. |
| DEC-04 | CCR port 3456 is the model gateway. Port 3458 is the management UI. In Docker, 3458 is the public front door and proxies to 3456. The apps-gateway quickstart listener is 0.0.0.0:8080 with a separate public_url. |
| DEC-05 | Anthropic does not support non-Claude models through any gateway. The CCR README is about routing to other providers. A CCR route is not an Anthropic-supported path. |
| DEC-06 | GET /protocol on a running apps gateway is that product's endpoint list. The public compatibility guide is a different document. |
| DEC-07 | A historical CCR config.json shape is not current. The live file seen in this fetch is config.sqlite. |
| DEC-08 | Git tag v3.0.22 (24 August 2026 15:23 EEST) is not the npm package version fetched the same day (3.1.1, updated 16 September 2026 15:28 EEST). |
| DEC-09 | A gap stays unverified. It is not a finding that the missing thing is false. |
flowchart LR anth["Anthropic docs fetched 3 Oct 2026"] gh["CCR README"] npm["npm page"] desk["ccrdesk guides fetched"] page["This comparison"] anth --> page gh --> page npm --> page desk --> page
Sources
| ID | Name | URL | Role in this edition |
|---|---|---|---|
| SRC-01 | Claude apps gateway | https://code.claude.com/docs/en/claude-apps-gateway | Fetched 3 October 2026. Product, quickstart fields, clients, auth, hosting, breakage, managed settings. |
| SRC-02 | Spend limits | https://code.claude.com/docs/en/claude-apps-gateway-spend-limits | Fetched 3 October 2026. Caps, 429 body, example POST. Amount unit is USD cents. |
| SRC-03 | LLM gateway (other gateways) | https://code.claude.com/docs/en/llm-gateway | Fetched 3 October 2026. Client variables, endorsement sentence, non-Claude models. |
| SRC-04 | LLM gateway protocol | https://code.claude.com/docs/en/llm-gateway-protocol | Fetched 3 October 2026. Public compatibility guide. Distinct from GET /protocol on a running apps gateway. |
| SRC-05 | Gateways index | https://code.claude.com/docs/en/gateways | Named in the 3 October 2026 source list. No sentence in this twin is sourced only from this page, because the fetch notes did not quote a distinct claim from it. |
| SRC-06 | Claude Code Router README | https://github.com/musistudio/claude-code-router | Fetched 3 October 2026. Stars 37524 that day. Product claims, provider list, MIT. |
| SRC-07 | CCR troubleshooting | https://ccrdesk.top/en/troubleshooting/ | Fetched 3 October 2026. Does not document Claude Code request-shape breakage. |
| SRC-08 | CCR Docker guide | https://ccrdesk.top/en/guides/docker/ | Fetched 3 October 2026. Port proxy and public base URL. |
| SRC-09 | CCR CLI guide | https://ccrdesk.top/en/guides/cli/ | Fetched 3 October 2026. Used with the README for the OIDC absence and the CLI entry (ccr ui, Node.js 22 or newer). |
| SRC-10 | CCR provider guide | https://ccrdesk.top/en/guides/provider/ | Named in the 3 October 2026 source list. Provider names in this twin are the README list. No extra provider was taken from this page. |
| SRC-11 | npm package | https://www.npmjs.com/package/@musistudio/claude-code-router | Fetched 3 October 2026. Version 3.1.1, MIT, updated 16 September 2026 15:28 EEST. |
| SRC-12 | gateway.yaml reference | https://code.claude.com/docs/en/claude-apps-gateway-config | Not fetched in full. GAP-01. Do not treat Part 6 as that page. |
Limitations
- Formative. Not an audit and not a recommendation.
- Pages were not re-fetched after 3 October 2026.
- SRC-12 was not fetched in full.
- An absence in a CCR page is not a proof of absence in the project.
- 37524 stars is the count seen that day, not a fork count.
- Tag v3.0.22 is not npm 3.1.1.
- Inline script passed node --check. Headless Chrome clicked every tab: SVG present, no Mermaid syntax error. Not a human visual review.
- CML-TK/1.0 is a neighbour about extensions, not this comparison.
Quickstart fields named, not a schema
| Group | Field | Value named |
|---|---|---|
| listen | host | 0.0.0.0 |
| listen | port | 8080 |
| listen | public_url | https://claude-gateway.internal.example.com |
| oidc | issuer | Named. Example value not copied. |
| oidc | client_id | Named. Example value not copied. |
| oidc | client_secret | ${OIDC_CLIENT_SECRET} |
| session | jwt_secret | ${GATEWAY_JWT_SECRET} |
| session | ttl_hours | 1 |
| store | postgres_url | ${GATEWAY_POSTGRES_URL} |
| upstreams | provider | bedrock |
| upstreams | region | us-east-1 |
| upstreams | auth | {} |
| as named | auto_include_builtin_models | true |