CGV-TK/1.0 · companion of CGV-WB/1.0 · 3 October 2026

Gateway and Claude Code Router

Side by side. Claude apps gateway on the left. Claude Code Router on the right. British English. Facts locked 3 October 2026. A hole stays unverified.

Use this first. Two columns, then the mix-ups, then Connect.

Markdown twin: claude-gateway-vs-ccr.md

Neighbour, not this twin: claude-mod-landscape.html

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
Gateway on the left hop, CCR on the right hop. The sign-in method is not the base-URL method.

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, port 8080, with a separate public_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 UI http://127.0.0.1:3458. In Docker, host port 3458 proxies to the in-container gateway 127.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.

Default subset: R01, R02, R03, R04, R05, R18. The full twenty rows are on Inventories. Badge on each chip matches that row. On a comparison row, the badge is the weaker cell.

Do not mix them up

IDRule
DEC-01CCR is not the Claude apps gateway. Do not describe one with the other's ports, sign-in, or licence.
DEC-02Gateway sign-in is forceLoginMethod gateway plus forceLoginGatewayUrl. ANTHROPIC_BASE_URL is a different connection, including when it points at CCR.
DEC-03ANTHROPIC_BASE_URL alone does not move billing off a claude.ai subscription. A gateway credential or /login does.
DEC-04CCR 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-05Anthropic 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-06GET /protocol on a running apps gateway is that product's endpoint list. The public compatibility guide is a different document.
DEC-07A historical CCR config.json shape is not current. The live file seen in this fetch is config.sqlite.

DEC-08 and DEC-09 are on Reference. DEC-01 to DEC-07 are the mix-ups that change a design.

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 --> keep
Left: forceLoginMethod and forceLoginGatewayUrl. Right: ANTHROPIC_BASE_URL, which leaves a saved claude.ai login in place.

Two ways in

Left · Claude apps gateway

Gateway sign-in

  • forceLoginMethod gateway
  • forceLoginGatewayUrl example https://claude-gateway.internal.example.com
  • parentSettingsBehavior merge
  • /login only 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_URL for /v1/messages
  • Optional /v1/messages/count_tokens
  • Setting only this does not replace a saved claude.ai login
  • A gateway credential or /login does switch that path
  • The method changes which betas and model IDs Claude Code sends

Client variables

Anthropic docs. Not a CCR feature list. V04 to V06 do not close GAP-04.

IDVariableWhat the fetch saysBadgeSource
V01ANTHROPIC_BASE_URLPoints 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
V02ANTHROPIC_AUTH_TOKENSent as Authorization Bearer.✓SRC-03
V03ANTHROPIC_API_KEYSent as x-api-key.✓SRC-03
V04ANTHROPIC_BEDROCK_BASE_URLUsed 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
V05ANTHROPIC_VERTEX_BASE_URLUsed with CLAUDE_CODE_USE_VERTEX=1. Same caveat as V04 for CCR (GAP-04).✓SRC-03
V06ANTHROPIC_FOUNDRY_BASE_URLFoundry base URL for a gateway in front of that upstream. Not a CCR feature claim (GAP-04).✓SRC-03
V07ANTHROPIC_AWS_BASE_URLClaude Platform on AWS. A gateway in front of that platform must also forward anthropic-workspace-id.✓SRC-03; SRC-04
V08allowedProvidersA 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
V09forceLoginMethod, forceLoginGatewayUrl, parentSettingsBehaviorGateway 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"| over
Apps gateway only. Non-granted model is 400. Over the optional cap is 429 billing_error. The amount is an estimate in USD cents.
flowchart 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 --> local
OIDC and a credential that stays on the gateway, versus a local management token, client keys, and local upstream keys.
flowchart 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
CCR: local limits and an estimated cost in the logs. No organisation cap API in the pages fetched.

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 to availableModels. 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.type billing_error, x-should-retry false. Amounts are estimates, not the provider invoice. Postgres is required.

Example body, USD cents. Header x-api-key.

{"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.

The JSON key organization is the API spelling. Prose in this page says organisation. 50000 cents is the example amount, not a recommendation.

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
Apps gateway call order. Model id is translated per upstream. Credential stays on the gateway.
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
CCR call order. The agent never has to know which provider was picked. This is not the diagram above.

Stories

Left · Claude apps gateway

Gateway story

  1. Start claude gateway --config gateway.yaml on Linux.
  2. Point clients at gateway sign-in.
  3. Browser device flow. One OIDC issuer.
  4. Messages API in. Translated model id out to the organisation upstream.
  5. Optional cap returns 429. A model outside the group returns 400.

Right · Claude Code Router

CCR story

  1. Desktop app, ccr ui (Node.js 22 or newer), or Docker.
  2. Agents use port 3456. Management UI is port 3458.
  3. Profiles pick the model per agent.
  4. Conditions, prefixes, rewrites, retries, ordered fallbacks.
  5. 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"| p3456
8080 plus a public URL, versus 3456 for models and 3458 for the UI. Docker publishes 3458 and proxies to 3456.

Where 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, port 8080, with a separate public_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 UI http://127.0.0.1:3458. In Docker, host port 3458 proxies to the in-container gateway 127.0.0.1:3456.

Useful on a gateway host: private network, HTTPS, Postgres 14 or newer. Plain HTTP only for loopback. Windows is not a server. Useful for CCR: the desktop app on macOS, Windows, or Linux, or the CLI on Node.js 22 or newer. Fail if you expose CCR remotely without reading the Docker guide: the guide says to read it first. The failure mode was not quoted, so it stays unverified.

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
Left job: the organisation holds the upstream. Right job: the user routes to providers they chose. Anthropic does not support non-Claude models through any gateway.
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
Shipped with the CLI versus a separate gateway that must forward new fields. CCR's fetched pages do not document the request-shape case.

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.

✓ SRC-01 · SRC-02

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.

✓ SRC-03 · SRC-06

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.

✓ SRC-01

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.

?? GAP-03 · ✓ the citations SRC-04 SRC-06 SRC-07

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
One concern per row. Left cell is the apps gateway. Right cell is CCR. A hole stays unverified.

All twenty rows

Same cells as CGV-WB/1.0 Part 1. Filter does not drop rows from the Markdown twin. ✓ is a fetched fact. ~ is partial or an absence in the pages fetched. ?? is unverified. The row badge is the weaker cell.

IDConcernClaude apps gatewayClaude Code RouterBadgeSource
R01What it isAnthropic 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
R02Who it sits betweenSits 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
R03Who runs itThe 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
R04Where clients send trafficClients 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
R05Upstreams namedAmazon 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
R06Native Bedrock, Foundry, or VertexThose 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
R07ProductsClaude 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
R08How Claude Code is pointed at itManaged 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
R09AuthOIDC 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
R10Model accessThe 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
R11Spend capsOptional 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
R12Where it runsLinux 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
R13What breaksA 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
R14LicenceNot stated on the gateway docs. Unverified.MIT on the README and on the npm page.??GAP-05; SRC-06; SRC-11
R15Version seen on 3 October 2026Client 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
R16Stars and forksNot 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
R17Config that was actually seenQuickstart 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
R18EndorsementDocumented 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
R19Protocol list versus the public guideGET /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
R20Billing off a claude.ai subscriptionA 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
Six unverified branches. Do not close them with a guess.

Gaps

IDGapBadge
GAP-01The 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-02No 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-03The 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-04Whether CCR speaks Bedrock InvokeModel, Foundry, or Vertex as native upstreams was not stated. Protocols listed are OpenAI, Anthropic Messages, and Gemini.??
GAP-05No licence text for the claude binary on the gateway docs.??
GAP-06Fork 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

IDDecision
DEC-01CCR is not the Claude apps gateway. Do not describe one with the other's ports, sign-in, or licence.
DEC-02Gateway sign-in is forceLoginMethod gateway plus forceLoginGatewayUrl. ANTHROPIC_BASE_URL is a different connection, including when it points at CCR.
DEC-03ANTHROPIC_BASE_URL alone does not move billing off a claude.ai subscription. A gateway credential or /login does.
DEC-04CCR 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-05Anthropic 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-06GET /protocol on a running apps gateway is that product's endpoint list. The public compatibility guide is a different document.
DEC-07A historical CCR config.json shape is not current. The live file seen in this fetch is config.sqlite.
DEC-08Git 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-09A 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
The comparison only claims what this fetch supported. Two named pages add no extra sentence.

Sources

IDNameURLRole in this edition
SRC-01Claude apps gatewayhttps://code.claude.com/docs/en/claude-apps-gatewayFetched 3 October 2026. Product, quickstart fields, clients, auth, hosting, breakage, managed settings.
SRC-02Spend limitshttps://code.claude.com/docs/en/claude-apps-gateway-spend-limitsFetched 3 October 2026. Caps, 429 body, example POST. Amount unit is USD cents.
SRC-03LLM gateway (other gateways)https://code.claude.com/docs/en/llm-gatewayFetched 3 October 2026. Client variables, endorsement sentence, non-Claude models.
SRC-04LLM gateway protocolhttps://code.claude.com/docs/en/llm-gateway-protocolFetched 3 October 2026. Public compatibility guide. Distinct from GET /protocol on a running apps gateway.
SRC-05Gateways indexhttps://code.claude.com/docs/en/gatewaysNamed 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-06Claude Code Router READMEhttps://github.com/musistudio/claude-code-routerFetched 3 October 2026. Stars 37524 that day. Product claims, provider list, MIT.
SRC-07CCR troubleshootinghttps://ccrdesk.top/en/troubleshooting/Fetched 3 October 2026. Does not document Claude Code request-shape breakage.
SRC-08CCR Docker guidehttps://ccrdesk.top/en/guides/docker/Fetched 3 October 2026. Port proxy and public base URL.
SRC-09CCR CLI guidehttps://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-10CCR provider guidehttps://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-11npm packagehttps://www.npmjs.com/package/@musistudio/claude-code-routerFetched 3 October 2026. Version 3.1.1, MIT, updated 16 September 2026 15:28 EEST.
SRC-12gateway.yaml referencehttps://code.claude.com/docs/en/claude-apps-gateway-configNot 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

GroupFieldValue named
listenhost0.0.0.0
listenport8080
listenpublic_urlhttps://claude-gateway.internal.example.com
oidcissuerNamed. Example value not copied.
oidcclient_idNamed. Example value not copied.
oidcclient_secret${OIDC_CLIENT_SECRET}
sessionjwt_secret${GATEWAY_JWT_SECRET}
sessionttl_hours1
storepostgres_url${GATEWAY_POSTGRES_URL}
upstreamsproviderbedrock
upstreamsregionus-east-1
upstreamsauth{}
as namedauto_include_builtin_modelstrue

GAP-01. Do not treat this table as the configuration reference.