lidge-jun/opencodexPublic

Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code

AI summary: A universal provider proxy that allows tools like OpenAI Codex and Claude Code to use any LLM backend.

Stars
8.3K
+679 today
Forks
624
Watchers
14
Open issues
45
Open PRs
25
Contributors
~40
Commits
2.7K
Branches
14

TypeScriptMITCreated Jun 18, 2026Last push todayLatest release v2.7.42+2.4K stars this week+2.6K this month

Star history

since Jun 14, 2026
02.5K5K7.5KJun 2026Jul 2026Jul 2026Aug 2026
8.3K stars as of Aug 7, 2026, tracked back to Jun 14, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 26 commits2026-06-19: 79 commits2026-06-20: 115 commits2026-06-21: 55 commits2026-06-22: 20 commits2026-06-23: 7 commits2026-06-24: 57 commits2026-06-25: 67 commits2026-06-26: 20 commits2026-06-27: 47 commits2026-06-28: 87 commits2026-06-29: 125 commits2026-06-30: 59 commits2026-07-01: 46 commits2026-07-02: 16 commits2026-07-03: 23 commits2026-07-04: 4 commits2026-07-05: 21 commits2026-07-06: 12 commits2026-07-07: 40 commits2026-07-08: 7 commits2026-07-09: 51 commits2026-07-10: 60 commits2026-07-11: 37 commits2026-07-12: 56 commits2026-07-13: 24 commits2026-07-14: 34 commits2026-07-15: 31 commits2026-07-16: 36 commits2026-07-17: 35 commits2026-07-18: 74 commits2026-07-19: 25 commits2026-07-20: 63 commits2026-07-21: 39 commits2026-07-22: 120 commits2026-07-23: 187 commits2026-07-24: 125 commits2026-07-25: 133 commits2026-07-26: 234 commits2026-07-27: 152 commits2026-07-28: 4 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
2,453 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Breakout launch

    8,282 stars in 50 days

  • Rising fast

    +2,373 stars this week

  • Very active

    2,453 commits in 52 weeks

  • Well documented

    High community health score

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What opencodex does

Opencodex acts as a translation layer and proxy, breaking the vendor lock-in of specific AI coding tools. It allows applications designed specifically for OpenAI Codex, Claude Code, or Claude Desktop to connect to virtually any other LLM, such as Gemini, Grok, DeepSeek, or local Ollama instances. By standardizing the API calls, it enables developers to swap out the underlying intelligence of their favorite CLI or GUI tools without modifying the tools themselves.

Developers who use AI coding assistants and want flexibility in choosing their underlying LLM provider, especially those interested in local models or cost savings. Requires Node.js and basic CLI knowledge.

  • Universal API translation: Intercepts requests formatted for specific providers and translates them to work with any supported LLM.
  • Broad model support: Connects to Claude, Gemini, Grok, DeepSeek, Ollama, and OpenRouter.
  • Drop-in replacement: Works seamlessly with existing tools like Codex CLI and Claude Code without requiring changes to the host application.
  • Local model integration: Allows developers to use powerful coding tools with completely local, private models via Ollama.
  • Simplified configuration: Requires only two commands to set up and redirect traffic to the desired model.

Where teams use it

Bypassing vendor lock-in

Allows users to continue using the Claude Code interface but route the actual queries to a cheaper or faster model like Gemini.

Privacy-focused development

Enables the use of advanced coding CLIs with local Ollama models, ensuring code never leaves the machine.

Cost optimization

Lets developers route simple queries to cheaper models while reserving expensive models for complex tasks, all from the same interface.

Testing model capabilities

Provides an easy way to compare how different LLMs perform within the same familiar coding tool environment.

Getting started: npm install -g @bitkyc08/opencodex && opencodex start

README

main branch

make codex open!

Universal provider proxy for OpenAI Codex, Claude Code, Claude Desktop & Grok Build
Two commands, and every one of them runs any LLM you point it at.

Follow @claudeebum on X npm version license node version

npm install -g @bitkyc08/opencodex
ocx start        # proxy + dashboard on localhost:10100
Claude Code running a routed model through opencodex — the status bar shows gpt-5.6-luna-medium as the active model
Claude Code, running any model.
The picker is stock Claude Code. The brain behind it isn't.
opencodex demo — running a task in the Codex app on a routed non-OpenAI model
Codex, running any model.
Pick a provider and go — same workflow, different brain.
Claude Desktop answering as Claude Opus 4.8, then dispatching a GPT-5.6 Sol subagent through opencodex
Claude Desktop, running any model.
Opus answers, then hands the task to a GPT-5.6 Sol subagent.
Grok Build running GPT-5.6 Sol through opencodex and calling a Kimi K3 subagent
Grok Build, running any model.
Sol drives the session and calls a Kimi K3 subagent.

English · 한국어 · 简体中文 · Русский · 日本語 · 📖 Full documentation →

opencodex architecture — Codex CLI routes through opencodex proxy to any LLM provider

Use Claude, Gemini, Grok, GLM, DeepSeek, Kimi, Qwen, Ollama, or any other LLM with Codex — and with Claude Code, Claude Desktop, and Grok Build — without waiting for anyone to add support.

Subagents cross the boundary too: Claude Desktop can answer as Opus and hand the next step to a GPT-5.6 Sol subagent, and Grok Build can drive a session on Sol while calling Kimi K3 — each side keeping its own native UI.

opencodex is a lightweight local proxy that translates Codex's Responses API into whatever your provider speaks. Streaming, tool calls, reasoning tokens, images — everything works, in both directions.

It can also manage a ChatGPT account pool for Codex auth. Add multiple ChatGPT / Codex accounts, refresh their 5h / weekly / 30d quota in the dashboard, and let new sessions auto-route to the lowest-usage healthy account. Existing Codex threads stay pinned to the account that started them, so long SSH, tmux, or mobile-connected sessions do not jump accounts mid-conversation.

Codex CLI / App / SDK ──/v1/responses──▶ opencodex ──▶ Any provider
                                              │
              Anthropic · Google · xAI · Kimi · Ollama Cloud · Groq
              OpenRouter · Azure · DeepSeek · GLM · …and OpenAI itself
flowchart LR
  codex[Codex session<br/>CLI, App, SSH, mobile] --> proxy[opencodex]
  proxy --> existing{Existing thread?}
  existing -->|yes| pinned[Keep the same<br/>ChatGPT account]
  existing -->|new session| quota[Refresh quota<br/>5h, weekly, 30d]
  quota --> pick[Pick lowest-usage<br/>healthy account]
  pick --> upstream[ChatGPT / Codex backend]
  pinned --> upstream
  upstream --> outcomes[Quota / auth outcome]
  outcomes -->|429| cooldown[Cooldown + failover]
  outcomes -->|401 / 403| reauth[Mark reauth needed]
  cooldown --> quota
Loading

Supported platforms

OS Status Service manager
macOS (arm64 / x64) Fully supported launchd
Linux (x64 / arm64) Fully supported systemd (user unit)
Windows (x64) Fully supported Task Scheduler (hidden) / opt-in native service (--native, WinSW)

Requires Node 18+. The Bun runtime is bundled automatically on npm install — no separate Bun install needed. All three platforms work natively (no WSL needed on Windows).

Quick start

# Install (bundles the Bun runtime automatically — only Node 18+ required)
# Prefer a user-owned Node (nvm/fnm) — avoid `sudo npm install -g …`
npm install -g @bitkyc08/opencodex

# Interactive setup (writes config, injects into Codex, and offers autostart shim install)
ocx init

# Start the proxy
ocx start

# If you skipped it during init, install the on-demand autostart shim later
ocx codex-shim install

# Use Codex normally — it now routes through opencodex
codex "Write a hello world in Rust"
"bundled Bun runtime is missing" / npm blocked Bun install scripts?

opencodex bundles the Bun runtime as a dependency and runs it via a Node launcher, so you do not need to install Bun yourself. If you see a "bundled Bun runtime is missing" error, the install skipped lifecycle scripts (including npm blocking bun's postinstall under allowScripts) or optional dependencies. Reinstall without those flags, allowing bun's install script:

npm install -g --allow-scripts=bun @bitkyc08/opencodex   # no --ignore-scripts, no --omit=optional

# if the original install used sudo, keep using sudo:
sudo npm install -g --allow-scripts=bun @bitkyc08/opencodex

npm's own warning suggests an abbreviated command without the package name — that would reinstall the current directory, so always pass @bitkyc08/opencodex explicitly.

If you installed with sudo into a root-owned prefix, the sudo reinstall above unblocks that prefix — but prefer migrating to a user-owned Node (nvm, fnm, or a user npm prefix) when you can.

Add a provider

The fastest way to add a provider is through the web dashboard:

ocx gui

This opens the dashboard at http://localhost:10100. From there:

  1. Click "Add Provider"
  2. Pick from 40+ built-in providers — or enter a custom OpenAI-compatible endpoint
  3. Paste your API key (or log in via OAuth for Anthropic, xAI, and Kimi)
  4. Models are auto-discovered from the provider's /v1/models endpoint

Your new provider is ready to use immediately. No restart needed.

You can also add providers through ocx init (interactive CLI) or by editing ~/.opencodex/config.json directly.

Model routing

Target any configured provider and model using the provider/model syntax:

Providers whose own model ids contain / (zenmux, openrouter, nvidia, …) are exposed to Codex with inner slashes aliased to - (e.g. zenmux/moonshotai-kimi-k3-free); the proxy transparently routes them back to the native id, and the raw full-slash form keeps working too.

# Use Claude Opus through Anthropic
codex -m "anthropic/claude-opus-5" "Explain this stack trace"

# Use Gemini through Google
codex -m "google/gemini-3-pro" "Write unit tests for auth.ts"

# Use GLM through Ollama Cloud
codex -m "ollama-cloud/glm-5.2" "Write a SQL migration"

# Use a local model through Ollama
codex -m "ollama/llama3" "Refactor this function"

When you omit the provider/ prefix, opencodex routes to the default provider — or auto-matches based on the model name pattern (e.g., claude-* routes to Anthropic, gpt-* routes to OpenAI).

Combo aliases are exact public model ids and may be bare names or use a custom namespace. If a combo alias exactly matches a configured non-OpenAI provider/model selector, the combo intentionally takes precedence in routing, /v1/models, and the Codex catalog. Renaming that alias or deleting the combo immediately restores the physical provider selector.

Routed models also appear in the Codex App model picker with per-model reasoning effort controls:

Current Codex builds can expose low, medium, high, xhigh, max, and ultra reasoning controls when a model advertises them. opencodex keeps xhigh and max distinct unless a provider config explicitly maps one to the other. ultra mirrors upstream Codex semantics: it selects maximum reasoning plus proactive multi-agent delegation in the client, and is converted to max before any request reaches a provider. Routed models advertise it only when a provider config opts in via reasoningEfforts.

GPT-5.6 Sol/Terra/Luna are seeded as rollout-ready catalog entries for the OpenAI API key and OpenRouter presets (gpt-5.6-sol, gpt-5.6-terra, gpt-5.6-luna; OpenRouter uses openai/...). They remain preview-gated by upstream availability; opencodex only prepares the routing and catalog metadata for accounts and providers that can serve them.

Codex App showing opencodex routed models with reasoning effort picker

OpenAI provider account modes

Provider ID Route Credential Behavior
openai Codex login Main + added Codex accounts Pool by default; optional Direct mode
openai-apikey OpenAI API API key/key pool No Codex account routing
  • Pool includes the main Codex login and added accounts, with affinity, quota, cooldown, and failover.
  • Direct short-circuits pool state and uses only the current caller/main-login bearer.
  • Fresh installs and configs with no persisted mode default to Pool. Change the mode on the dashboard's Providers page; model ids stay bare in either mode.
  • The legacy public provider id chatgpt is hidden after migration. The original config is retained once at ~/.opencodex/config.json.pre-openai-tiers-v2.bak; restore it with cp ~/.opencodex/config.json.pre-openai-tiers-v2.bak ~/.opencodex/config.json.
  • Current configs use openaiProviderTierVersion: 2. Earlier v1 three-provider configs migrate automatically into the single openai row.
  • The API tier includes Pro virtual models (gpt-5.6-sol-pro, gpt-5.6-terra-pro, gpt-5.6-luna-pro). At the wire level, each rewrites to its base model with reasoning.mode: "pro".
  • Its catalog is fixed to eight ids: gpt-5.5, gpt-5.6, Sol/Terra/Luna, and the three corresponding Pro virtual ids. There is no generic gpt-5.6-pro alias.
  • Compact requests keep the selected tier but send the base model without a reasoning object.
  • Official API metadata is 1,050,000 context tokens and 922,000 max input tokens.

Use gpt-5.6-sol for the configured openai account mode and openai-apikey/gpt-5.6-sol for the API key. Codex-login and API credentials never fall through to one another.

Pool account behavior

Open Codex Auth in the dashboard to add accounts and choose which account should handle the next Codex session. opencodex keeps these behaviors:

  • Existing sessions keep affinity. A thread id is bound to the selected account and reused on later turns, so a long request or a mobile/SSH-attached session keeps using the same account.
  • New sessions can auto-route. When auto-switch is enabled, opencodex compares the hottest known quota window across 5h, weekly, and 30d usage, then picks a lower-usage eligible account for new sessions once the active account crosses the threshold.
  • Quota lookup is built in. The dashboard can refresh all account quotas in one click, and the request log labels pool traffic with non-PII account ordinals.
  • Failures fail closed. Token failures mark reauthentication instead of falling back to another credential silently; 429 quota responses put the account in cooldown and can fail over future work to another eligible pool account.

Highlights

  • Use any LLM with Codex. 5 protocol adapters cover Anthropic Messages, Google Gemini, Azure, OpenAI Responses passthrough, and every OpenAI-compatible Chat Completions endpoint — that's 40+ providers out of the box.
  • Use any LLM with Claude Code too. The same daemon serves the Anthropic Messages API (/v1/messages + count_tokens): ocx claude launches Claude Code fully wired, and routed models appear in its native /model picker via gateway model discovery (claude-ocx-<provider>--<model> aliases, Claude Code 2.1.129+). Configure slots and model maps on the dashboard's Claude page. The Claude page also carries a separate Desktop profile with Opus, Fable, Sonnet, and Haiku families, accessible drag/keyboard controls, and JSON import/export.
  • Use any LLM with GitHub Copilot App too. Point Copilot's Model providers at http://127.0.0.1:10100/v1 — OpenCodex serves OpenAI-compatible GET /v1/models and POST /v1/chat/completions so routed models sync into the app. See docs/github-copilot-app.md.
  • Pool ChatGPT accounts safely. Keep existing Codex threads on one account while new sessions can auto-pick a lower-usage account from the pool, with quota refresh and non-PII request labels.
  • Log in once, skip the API key. OAuth support for xAI, Anthropic, and Kimi means you can authenticate with your existing account. Tokens auto-refresh. Or forward your codex login, paste an API key, or use ${ENV_VAR} references — your call.
  • Works everywhere Codex does. Injects into Codex CLI, TUI, App, and SDK automatically. Routed models show up in Codex's model picker just like native ones.
  • History-safe injection. On local installs the proxy points Codex's own built-in openai provider at itself via a single openai_base_url line — new threads keep their native provider tag, so ongoing chat history is never remapped and an unclean shutdown can't hide it. (Threads re-tagged by older versions are migrated back once on the first start; remote/LAN binds use a dedicated provider entry instead, since they need an API-key header.)
  • Delegate to the right model. Feature up to five routed or native models in Codex's subagent picker from the dashboard or config — route complex tasks to a reasoning model, fast tasks to a cheap one. On the v2 multi-agent surface (GPT-5.6 Sol/Terra) the proxy injects compact, schema-agnostic delegation guidance: an eligible preferred sub-agent model and effort (injectionModel / injectionEffort), the configured intersection of Codex's picker-visible, v2-compatible, priority-sorted first five with available effort ladders, and the fork_turns rules that let cross-model spawn_agent calls apply their overrides. Known limitation: when a native parent spawns a routed child, the task body can currently arrive backend-encrypted and be lost (#92) — use the v1 surface for reliable cross-provider delegation. Want your own wording? Set injectionPrompt with {{model}} / {{effort}} / {{roster}} placeholders.
  • Prepare for preview-gated OpenAI rollouts. GPT-5.6 Sol/Terra/Luna entries preserve the upstream effort ladders. Direct/Multi use the 372k Codex contract; OpenAI API and OpenRouter use 1.05M metadata when upstream access is available.
  • Give any model superpowers. Non-OpenAI models get real web search and image understanding via a gpt-5.4-mini sidecar over your ChatGPT login.
  • Generate images natively. Codex's standalone image_gen tool uses POST /v1/images/generations for generation and POST /v1/images/edits for edits; it is separate from the hosted Responses image_generation tool.
  • See what's happening. The web dashboard shows providers, OAuth status, model selection, and a live request log, including cached/cache-write token counts when upstream reports them — no more guessing why a request failed.
  • Runs in the background. Install as a system service (launchd / systemd / Task Scheduler) and forget about it. On macOS/Linux the proxy starts at login; on Windows the default Task Scheduler backend starts at logon (windowless), or use ocx service install --native for a real Windows service that starts at boot.
  • Clean exit, zero residue. ocx stop (or the dashboard's Stop button) shuts down the proxy, stops the background service if one is installed, and restores Codex to its original configuration. Plain codex works exactly as it did before — no leftover config, no orphaned processes.

Providers & adapters

Provider Adapter Auth
OpenAI (ChatGPT login) openai-responses forward (no key)
OpenAI (API key) openai-responses key
Umans AI Coding Plan anthropic key
Anthropic Claude anthropic oauth / key
xAI Grok openai-chat oauth / key
Kimi (Moonshot) openai-chat oauth / key
Google Gemini google key
Azure OpenAI azure-openai key
Cursor (experimental) cursor dashboard/local config; live transport; unsafe native local exec is opt-in
Ollama Cloud + 17-provider catalog openai-chat key
Ollama / vLLM / LM Studio (local) openai-chat key (usually blank)
Any OpenAI-compatible endpoint openai-chat key

Plus DeepSeek, Groq, OpenRouter, Together, Fireworks, Cerebras, Mistral, Hugging Face, NVIDIA NIM, MiniMax, Qwen Cloud, Tencent Cloud Coding Plan, SiliconFlow, and more. See the full list with ocx init or in the provider docs.

Cursor support is a staged experimental bridge: it appears in ocx init and the dashboard Add Provider picker as a local config with Cursor's static public model catalog. Live HTTP/2 transport is enabled when a Cursor access token is configured. Cursor server-driven native read/write/delete/ls/grep/shell/fetch execution is disabled by default because it bypasses Codex's approval and sandbox path. Request text such as a Codex danger-full-access sandbox marker never authorizes native local exec; set nativeLocalExec: "on" only for trusted local experiments where every data-plane caller is trusted. nativeLocalExec: "codex-sandbox" is accepted for backwards compatibility but fails closed like off; legacy unsafeAllowNativeLocalExec: true remains an explicit operator opt-in. MCP, screen recording, and computer-use are exposed through executor hooks; when no local executor is configured, opencodex returns typed no-executor results instead of policy-blocking the request. Cursor OAuth and live model discovery are enabled for the experimental Cursor adapter.

CLI

ocx init                       # interactive setup
ocx start [--port 10100]       # start the proxy; falls back to a free port if busy
ocx stop                       # stop + restore native Codex
ocx restore                    # restore without stopping (alias: ocx eject)
ocx uninstall                  # remove service/shim/config and restore native Codex
ocx ensure                     # start if needed + refresh Codex config/cache
ocx sync                       # refresh models + re-inject into Codex
ocx codex-shim install         # run `ocx ensure` whenever `codex` is launched
ocx status                     # is the proxy running?
ocx login <provider>          # OAuth login (xai, anthropic, kimi, cursor, ...)
ocx logout <provider>          # remove a stored login
ocx account <list|current|use> # list/switch accounts & API-key pools (masked; also refresh/auto-switch/remove/add-key)
ocx gui                        # open the web dashboard
ocx claude [args...]           # launch Claude Code wired to the proxy (model discovery on)
ocx claude desktop             # save and apply the Claude Desktop four-family profile
ocx service [install|start|stop|status|uninstall]   # install/update/start background service
ocx update [--tag preview]     # update opencodex; preview installs stay on @preview

Claude Desktop profile

The dashboard's Claude → Desktop view sorts routes into four families: Opus, Fable, Sonnet, and Haiku. New routes start in Opus, and the first Opus route is the initial application default. Every non-empty family has one default. You can drag a route, or use its visible move control with a mouse, touch, or keyboard. Save and apply writes the profile to Claude Desktop. JSON export and import are available for backup or moving the same setup to another machine.

If Claude Desktop's footer picker does not change the model for an already-running 3P conversation, use /model <id> in that conversation. OpenCodex routes the model id carried by each request; Logs → requestedModel shows which id Desktop actually sent.

ocx claude desktop [apply]                         # save and apply the current profile
ocx claude desktop show [--json]                   # inspect routes, families, and defaults
ocx claude desktop move <route> <family> [--default]
ocx claude desktop default <family> <route|none>
ocx claude desktop export <path|->                 # use - to write JSON to stdout
ocx claude desktop import <path> [--apply]         # validate, then save; optionally apply

Families are opus, fable, sonnet, and haiku. Non-Anthropic routes receive stable Claude-shaped aliases with a synthetic 2026 date slot; that date is an internal slot, not the model's release date. Real Anthropic Claude routes keep their real model ids. Use none only for an empty family; a non-empty family always needs a default. The older apply forms ocx claude desktop --static, --hybrid, and --discovery-only remain supported.

Autostart: service vs shim

opencodex has two ways to auto-start the proxy:

ocx service / ocx service install ocx codex-shim install
How OS service manager (launchd / systemd / schtasks) Wraps script launchers for codex; real codex.exe is left untouched
When Always running after login On-demand — runs ocx ensure when codex is launched
Restart Auto-restarts on crash Starts once per codex invocation
Codex updates Unaffected A completed stable launcher replacement is repaired by the next ordinary ocx command
Remove ocx service uninstall ocx codex-shim uninstall

Use the service for always-on proxy (recommended for development machines). Use the shim for lightweight, on-demand proxy startup without a background daemon. Shim autostart is enabled by default and can be disabled from the GUI dashboard. If the configured proxy port is already busy, ocx start automatically picks another free local port and updates Codex to use it.

If an external Codex update overwrites an installed shim, the next ordinary ocx command backs up the stable new launcher and restores the shim. A launcher that is still changing is left untouched and retried later. Repair failures warn without failing the requested command; use ocx codex-shim install as the manual fallback. Set codexShimAutoRestore to false, or set OPENCODEX_CODEX_SHIM_AUTO_RESTORE=0 for a process-level opt-out.

Uninstall

Before removing the npm package, clean up local state:

ocx uninstall
npm uninstall -g @bitkyc08/opencodex

ocx uninstall stops the proxy, removes any installed service, removes the Codex shim, restores native Codex config/catalog/history, and deletes ~/.opencodex.

Configuration

Config lives at ~/.opencodex/config.json. If the file cannot be parsed (e.g. truncated or manually broken JSON), opencodex backs it up to config.json.invalid-<timestamp>, prints a warning, and falls back to defaults — so your original file is never silently lost.

Here's a typical multi-provider setup:

{
  "port": 10100,
  "defaultProvider": "anthropic",
  "providers": {
    "anthropic": {
      "adapter": "anthropic",
      "baseUrl": "https://api.anthropic.com",
      "authMode": "oauth",
      "defaultModel": "claude-sonnet-4-6"
    },
    "ollama-cloud": {
      "adapter": "openai-chat",
      "baseUrl": "https://ollama.com/v1",
      "apiKey": "${OLLAMA_API_KEY}",
      "defaultModel": "glm-5.2"
    }
  }
}

Provider entries can also annotate routed catalog metadata and output defaults. Use contextWindow for a provider-wide Codex-visible context cap, modelContextWindows for model-specific caps, and modelInputModalities for model-specific catalog input hints such as ["text"] or ["text", "image"]. For Responses models that reject Codex reasoning-summary delivery fields, set modelSupportsReasoningSummaries.<model-id> to false; this updates the catalog and strips stale summary-delivery fields at the adapter boundary. For OpenAI-compatible chat providers whose upstream default response budget is too small, set defaultMaxOutputTokens or per-model modelMaxOutputTokens; explicit max_output_tokens from the client still wins, and unset configs still omit max_tokens. Context values cap live /models metadata; they never raise a smaller live context window. The bundled GPT-5.6 Sol/Terra/Luna fallback metadata uses a 1,050,000-token context window for OpenAI API key and OpenRouter catalog entries; it does not bypass upstream preview access. See the configuration reference for the full field list.

GLM-5.2 1M context via Z.AI: through the openai-chat adapter, both glm-5.2 and glm-5.2[1m] work — opencodex strips the trailing [1m] suffix before sending the request, since OpenAI-compatible endpoints reject the bracketed id (Z.AI 400 code 1211). The [1m] suffix is a Claude-Code / Anthropic-endpoint convention; to use it natively, point the anthropic adapter at Z.AI's coding base (https://api.z.ai/api/coding/paas/v4). Set the 1M context window via the model catalog (modelContextWindows), not the model name.

Local models work too. Point opencodex at any OpenAI-compatible server running on your machine:

{
  "port": 10100,
  "defaultProvider": "ollama",
  "providers": {
    "ollama": {
      "adapter": "openai-chat",
      "baseUrl": "http://localhost:11434/v1",
      "authMode": "key",
      "apiKey": "",
      "defaultModel": "llama3"
    },
    "vllm": {
      "adapter": "openai-chat",
      "baseUrl": "http://localhost:8000/v1",
      "authMode": "key",
      "apiKey": "",
      "defaultModel": "Qwen/Qwen3-32B"
    }
  }
}

WebSocket transport is off by default. Set "websockets": true only if you want Codex to advertise and use the Responses WebSocket path instead of HTTP/SSE.

Remote access

By default opencodex binds to 127.0.0.1 (loopback) and requires no extra authentication. If you set "hostname": "0.0.0.0" to expose the proxy on the LAN, opencodex requires a bearer token to protect both the management API (/api/*) and the data-plane (/v1/responses, /v1/images/generations, and /v1/images/edits):

export OPENCODEX_API_AUTH_TOKEN="your-secret-token"
ocx start

The proxy refuses to start without this variable when binding beyond loopback. If you install a background service for LAN access, export the same variable before ocx service install so the service manager receives it. Clients (scripts, remote machines) must include the token in every request:

x-opencodex-api-key: your-secret-token

The token is compared in constant time to prevent timing attacks.

opencodex automatically remaps Codex resume history so old OpenAI chats and opencodex-created project threads stay visible in Codex App while the proxy is active. opencodex records the original provider/source metadata in ~/.opencodex/codex-history-backup.json. ocx stop / ocx restore restores backed-up OpenAI rows to OpenAI, and ejects any remaining opencodex user threads to OpenAI as well so native Codex does not try to resume a thread whose provider no longer exists in config.toml.

If you tested an older development build where syncResumeHistory already remapped history before backup support existed, you can also run the explicit recovery command:

ocx recover-history --legacy-openai

See the Configuration reference for every field.

Documentation

The public docs — install, providers, routing, sidecars, Codex integration, Codex App model picker, and CLI/config reference — are built from docs-site/ and published to opencodex.me.

Maintainer source-of-truth notes live under structure/. Historical investigations remain under docs/. Contributor setup lives in CONTRIBUTING.md, and security reporting guidance lives in SECURITY.md.

Development

Source development requires the bun CLI on your PATH. This is separate from the published npm package's bundled Bun runtime, which is used only by installed ocx commands.

git clone https://github.com/lidge-jun/opencodex.git
cd opencodex
bun install
bun run dev:proxy    # start the proxy API in dev mode
bun run dev:gui      # start the dashboard dev server in another terminal
bun x tsc --noEmit   # typecheck

bun run dev remains an alias for bun run dev:proxy for compatibility. In a source checkout, the proxy API exposes /healthz, /v1/responses, POST /v1/images/generations, POST /v1/images/edits, and /api/*; GET / serves the packaged dashboard only after bun run build:gui has produced gui/dist. While hacking on the dashboard, run the frontend separately:

bun run dev:gui

See Contributing.

Disclaimer

opencodex is an independent, community-maintained project and is not affiliated with or endorsed by OpenAI, Anthropic, or any other provider.

Some providers — notably Anthropic (Claude) — may suspend or restrict accounts that route API traffic through third-party proxies. Use at your own risk (UAYOR). Before connecting a provider, review its Terms of Service to confirm that proxy-based access is permitted. The opencodex maintainers are not responsible for any account actions taken by upstream providers.

License

MIT

View on GitHub

Recent activity

commits and pull requests

Recent open issues

view all

Releases and announcements

150 total
  1. v2.7.43-preview.20260728v2.7.43-preview.20260728Jul 27, 2026pre-release

    Published to npm as `@bitkyc08/opencodex@2.7.43-preview.20260728` with dist-tag `preview`. <!-- Release notes generated using configuration in .github/release.yml at f868351d518c968517a704b82c236ff3e86649da --> ## What's Changed ### New Features * feat(logs): correlate requests by conversation id (#330) by @Wibias in https://github.com/lidge-jun/opencodex/pull/522 * feat(storage): archived cleanup with quarantine (phase 2 of #42) by @Wibias in https://github.com/lidge-jun/opencodex/pull/529 ### Bug Fixes * fix(codex): make manual account selection immediate by @Ingwannu in https://github.com/lidge-jun/opencodex/pull/506 * fix(ci): repair invalid LLM JSON escapes in issue translation by @Wibias in https://github.com/lidge-jun/opencodex/pull/510 * fix(openai-responses): handle image tool conflicts in additional_tools by @RailyW in https://github.com/lidge-jun/opencodex/pull/492 * fix(release): carry preview changelog into latest notes by @Wibias in https://github.com/lidge-jun/opencodex/pull/482 * fix(service): retry Windows background install with UAC elevation by @Wibias in https://github.com/lidge-jun/opencodex/pull/408 * fix(ci): sticky visible issue-translation control comment

  2. v2.7.42v2.7.42Jul 27, 2026

    Published to npm as `@bitkyc08/opencodex@2.7.42` with dist-tag `latest`. <!-- Release notes generated using configuration in .github/release.yml at 34493b12666a5fd69d69d730b13eabb5ec9d7235 --> ## What's Changed ### New Features * feat(logs): correlate requests by conversation id (#330) by @Wibias in https://github.com/lidge-jun/opencodex/pull/522 * feat(storage): archived cleanup with quarantine (phase 2 of #42) by @Wibias in https://github.com/lidge-jun/opencodex/pull/529 ### Bug Fixes * fix(codex): make manual account selection immediate by @Ingwannu in https://github.com/lidge-jun/opencodex/pull/506 * fix(ci): repair invalid LLM JSON escapes in issue translation by @Wibias in https://github.com/lidge-jun/opencodex/pull/510 * fix(openai-responses): handle image tool conflicts in additional_tools by @RailyW in https://github.com/lidge-jun/opencodex/pull/492 * fix(release): carry preview changelog into latest notes by @Wibias in https://github.com/lidge-jun/opencodex/pull/482 * fix(service): retry Windows background install with UAC elevation by @Wibias in https://github.com/lidge-jun/opencodex/pull/408 * fix(ci): sticky visible issue-translation control comments by @Wibias in ht

  3. v2.7.41v2.7.41Jul 26, 2026

    Published to npm as `@bitkyc08/opencodex@2.7.41` with dist-tag `latest`. <!-- Release notes generated using configuration in .github/release.yml at ac73f189cf7e3f4ee55690ed8dc7e354b7e6ed10 --> ## What's Changed ### New Features * feat: quota-aware subagent model fallback chain (#374) by @Wibias in https://github.com/lidge-jun/opencodex/pull/391 * feat(api-access): expose gateway endpoints and external model catalog by @Wibias in https://github.com/lidge-jun/opencodex/pull/392 * feat(grok): auto-configure Grok Build and harden strict-client compatibility by @lidge-jun in https://github.com/lidge-jun/opencodex/pull/403 * feat(oauth): reliability, credential integrity, and diagnostics by @Wibias in https://github.com/lidge-jun/opencodex/pull/479 ### Bug Fixes * fix(ci): silence English translation noise and harden related-issue matches by @Wibias in https://github.com/lidge-jun/opencodex/pull/458 * fix(update): reclaim configured port after stop instead of hopping by @Wibias in https://github.com/lidge-jun/opencodex/pull/456 * fix(proxy): stop empty 503 bodies becoming Codex Unknown error (#452) by @Wibias in https://github.com/lidge-jun/opencodex/pull/463 * fix(gui): react-doctor s

  4. v2.7.41-preview.20260726v2.7.41-preview.20260726Jul 26, 2026pre-release

    Published to npm as `@bitkyc08/opencodex@2.7.41-preview.20260726` with dist-tag `preview`. <!-- Release notes generated using configuration in .github/release.yml at 19ad2de5d8d5dc1c2c0f5b1e12d6e6ad8ccee754 --> ## What's Changed ### New Features * feat: quota-aware subagent model fallback chain (#374) by @Wibias in https://github.com/lidge-jun/opencodex/pull/391 * feat(api-access): expose gateway endpoints and external model catalog by @Wibias in https://github.com/lidge-jun/opencodex/pull/392 * feat(grok): auto-configure Grok Build and harden strict-client compatibility by @lidge-jun in https://github.com/lidge-jun/opencodex/pull/403 * feat(oauth): reliability, credential integrity, and diagnostics by @Wibias in https://github.com/lidge-jun/opencodex/pull/479 ### Bug Fixes * fix(ci): silence English translation noise and harden related-issue matches by @Wibias in https://github.com/lidge-jun/opencodex/pull/458 * fix(update): reclaim configured port after stop instead of hopping by @Wibias in https://github.com/lidge-jun/opencodex/pull/456 * fix(proxy): stop empty 503 bodies becoming Codex Unknown error (#452) by @Wibias in https://github.com/lidge-jun/opencodex/pull/463 * fix(gu

  5. v2.7.40v2.7.40Jul 25, 2026

    Published to npm as `@bitkyc08/opencodex@2.7.40` with dist-tag `latest`. <!-- Release notes generated using configuration in .github/release.yml at b0413c6e18522232d42d23b58c420c335ea881ee --> ## What's Changed ### New Features * feat(gui): configure Codex auto-switch threshold by @csa906 in https://github.com/lidge-jun/opencodex/pull/337 * feat(gui): Dashboard workspace view + drop Providers classic toggle by @Wibias in https://github.com/lidge-jun/opencodex/pull/428 * feat(gui): improve models workspace layout stability by @Wibias in https://github.com/lidge-jun/opencodex/pull/438 * feat(gui): Subagents workspace view by @Wibias in https://github.com/lidge-jun/opencodex/pull/441 * feat(gui): Usage workspace view by @Wibias in https://github.com/lidge-jun/opencodex/pull/442 * feat(gui): API Keys workspace view by @Wibias in https://github.com/lidge-jun/opencodex/pull/444 * feat(gui): Claude Code workspace view by @Wibias in https://github.com/lidge-jun/opencodex/pull/446 ### Bug Fixes * fix(claude): sanitize WebSearch domain filters for routed models by @Wibias in https://github.com/lidge-jun/opencodex/pull/383 * fix(codex): clear stale weekly quota on WHAM/header refresh (#382)

Commits per week

last 52 weeks
6920Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 0 commitsWeek of 2025-08-24: 0 commitsWeek of 2025-08-31: 0 commitsWeek of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 220 commitsWeek of 2026-06-21: 273 commitsWeek of 2026-06-28: 360 commitsWeek of 2026-07-05: 228 commitsWeek of 2026-07-12: 290 commitsWeek of 2026-07-19: 692 commitsWeek of 2026-07-26: 390 commitsAug 3, 2025Jul 26, 2026
2.5K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 45 commitsSun 1:00 — 34 commitsSun 2:00 — 35 commitsSun 3:00 — 45 commitsSun 4:00 — 16 commitsSun 5:00 — 29 commitsSun 6:00 — 8 commitsSun 7:00 — 9 commitsSun 8:00 — 10 commitsSun 9:00 — 2 commitsSun 10:00 — 5 commitsSun 11:00 — 5 commitsSun 12:00 — 14 commitsSun 13:00 — 16 commitsSun 14:00 — 19 commitsSun 15:00 — 21 commitsSun 16:00 — 12 commitsSun 17:00 — 17 commitsSun 18:00 — 32 commitsSun 19:00 — 19 commitsSun 20:00 — 26 commitsSun 21:00 — 23 commitsSun 22:00 — 22 commitsSun 23:00 — 14 commitsMon 0:00 — 15 commitsMon 1:00 — 17 commitsMon 2:00 — 23 commitsMon 3:00 — 23 commitsMon 4:00 — 2 commitsMon 5:00 — 7 commitsMon 6:00 — 6 commitsMon 7:00 — 8 commitsMon 8:00 — 6 commitsMon 9:00 — 6 commitsMon 10:00 — 24 commitsMon 11:00 — 23 commitsMon 12:00 — 41 commitsMon 13:00 — 37 commitsMon 14:00 — 15 commitsMon 15:00 — 9 commitsMon 16:00 — 26 commitsMon 17:00 — 22 commitsMon 18:00 — 17 commitsMon 19:00 — 6 commitsMon 20:00 — 16 commitsMon 21:00 — 15 commitsMon 22:00 — 8 commitsMon 23:00 — 24 commitsTue 0:00 — 11 commitsTue 1:00 — 19 commitsTue 2:00 — 8 commitsTue 3:00 — 1 commitsTue 4:00 — 14 commitsTue 5:00 — 11 commitsTue 6:00 — 14 commitsTue 7:00 — 3 commitsTue 8:00 — 4 commitsTue 9:00 — 3 commitsTue 10:00 — 7 commitsTue 11:00 — 5 commitsTue 12:00 — 4 commitsTue 13:00 — 9 commitsTue 14:00 — 0 commitsTue 15:00 — 5 commitsTue 16:00 — 14 commitsTue 17:00 — 5 commitsTue 18:00 — 4 commitsTue 19:00 — 4 commitsTue 20:00 — 20 commitsTue 21:00 — 8 commitsTue 22:00 — 4 commitsTue 23:00 — 6 commitsWed 0:00 — 11 commitsWed 1:00 — 15 commitsWed 2:00 — 15 commitsWed 3:00 — 17 commitsWed 4:00 — 2 commitsWed 5:00 — 4 commitsWed 6:00 — 9 commitsWed 7:00 — 9 commitsWed 8:00 — 20 commitsWed 9:00 — 22 commitsWed 10:00 — 13 commitsWed 11:00 — 12 commitsWed 12:00 — 5 commitsWed 13:00 — 8 commitsWed 14:00 — 6 commitsWed 15:00 — 6 commitsWed 16:00 — 17 commitsWed 17:00 — 11 commitsWed 18:00 — 20 commitsWed 19:00 — 6 commitsWed 20:00 — 10 commitsWed 21:00 — 10 commitsWed 22:00 — 4 commitsWed 23:00 — 9 commitsThu 0:00 — 13 commitsThu 1:00 — 11 commitsThu 2:00 — 3 commitsThu 3:00 — 3 commitsThu 4:00 — 0 commitsThu 5:00 — 1 commitsThu 6:00 — 8 commitsThu 7:00 — 1 commitsThu 8:00 — 15 commitsThu 9:00 — 25 commitsThu 10:00 — 5 commitsThu 11:00 — 4 commitsThu 12:00 — 5 commitsThu 13:00 — 11 commitsThu 14:00 — 17 commitsThu 15:00 — 24 commitsThu 16:00 — 29 commitsThu 17:00 — 28 commitsThu 18:00 — 23 commitsThu 19:00 — 38 commitsThu 20:00 — 31 commitsThu 21:00 — 41 commitsThu 22:00 — 34 commitsThu 23:00 — 15 commitsFri 0:00 — 18 commitsFri 1:00 — 17 commitsFri 2:00 — 24 commitsFri 3:00 — 23 commitsFri 4:00 — 12 commitsFri 5:00 — 9 commitsFri 6:00 — 13 commitsFri 7:00 — 14 commitsFri 8:00 — 17 commitsFri 9:00 — 14 commitsFri 10:00 — 18 commitsFri 11:00 — 18 commitsFri 12:00 — 23 commitsFri 13:00 — 17 commitsFri 14:00 — 9 commitsFri 15:00 — 10 commitsFri 16:00 — 4 commitsFri 17:00 — 2 commitsFri 18:00 — 8 commitsFri 19:00 — 1 commitsFri 20:00 — 26 commitsFri 21:00 — 13 commitsFri 22:00 — 14 commitsFri 23:00 — 19 commitsSat 0:00 — 18 commitsSat 1:00 — 27 commitsSat 2:00 — 16 commitsSat 3:00 — 11 commitsSat 4:00 — 13 commitsSat 5:00 — 19 commitsSat 6:00 — 7 commitsSat 7:00 — 12 commitsSat 8:00 — 11 commitsSat 9:00 — 2 commitsSat 10:00 — 7 commitsSat 11:00 — 10 commitsSat 12:00 — 15 commitsSat 13:00 — 11 commitsSat 14:00 — 13 commitsSat 15:00 — 7 commitsSat 16:00 — 25 commitsSat 17:00 — 21 commitsSat 18:00 — 25 commitsSat 19:00 — 33 commitsSat 20:00 — 29 commitsSat 21:00 — 29 commitsSat 22:00 — 17 commitsSat 23:00 — 32 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits2,048 (75%)
Community commits686 (25%)

2,734 commits in total over the last year.

DateListRankStars gained
Jul 23, 2026daily#14+5
Jul 22, 2026daily#21+4
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    453.6K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    385.5K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    238.5K stars · JavaScript