Open source · MIT · A Shipwright side project

Codextender

Claude Code, on your Codex plan.

A small local proxy that lets Claude Code sessions run on the models of your ChatGPT Codex plan. Your hooks, skills, subagents and slash commands stay exactly as they are. Nothing to rewrite.

The idea

Keep the harness. Change only the model behind it.

Free and open source. Needs a logged-in Codex CLI, Node 20.12+ and Python 3.11+.

two terminals

# 1 · start the proxy

# 1 · start the proxy

$ npx @svenroth-ai/codextender@latest --port 4000

$ npx @svenroth-ai/codextender@latest --port 4000

✓ proxy up on 127.0.0.1:4000 · model sol

✓ proxy up on 127.0.0.1:4000 · model sol

# 2 · launch Claude Code against it

# 2 · launch Claude Code against it

$ ANTHROPIC_BASE_URL=http://127.0.0.1:4000 \

$ ANTHROPIC_BASE_URL=http://127.0.0.1:4000 \

ANTHROPIC_MODEL=sol \

ANTHROPIC_MODEL=sol \

claude

claude

Same Claude Code. Same hooks, skills and agents. Codex model underneath.

Same Claude Code. Same hooks, skills and agents. Codex model underneath.

Why it exists · one bottleneck

“Shipwright runs so much work in parallel that the limits of a single plan became my bottleneck.”

A Codex path for Shipwright, Codex Light, is started. Porting a full plugin suite takes time, though: hooks, packaging, reviewers, the Command Center. I wanted the extra capacity now. Claude Code can already point itself at a different backend, so I built the piece in between. Everything else stays:

Same Claude Code session, same terminal

Hooks and skills run unchanged

Subagents and slash commands work

Auto mode keeps working

Signs in with your existing Codex login

A second plan’s limits on top of the first

No separate CLI, and nothing rewritten to be Codex-compatible. A few environment variables, and the same setup runs on a different model. Which comes down to one simple idea:

Keep the harness, change the model.

Keep the harness, change the model.

Keep the harness, change the model.

Want to know more about Shipwright, where Codextender came from?

What is Shipwright?

01 · How it works

01 · How it works

One local proxy, three jobs.

One local proxy, three jobs.

Claude Code already lets you point it at a different backend. Codextender is that backend: a small proxy on your machine, built on LiteLLM, that hands each request to the Codex plan you already pay for.

Claude Code already lets you point it at a different backend. Codextender is that backend: a small proxy on your machine, built on LiteLLM, that hands each request to the Codex plan you already pay for.

Client

Claude Code

Your session, hooks, skills and agents

Translator

Codextender

Local proxy · 127.0.0.1:4000

Model

Codex backend

Your Codex plan quota

01

Speaks Claude Code’s language.

It accepts the Anthropic Messages API that Claude Code sends, so nothing on the Claude Code side changes.

02

Translates for Codex.

It turns each request into OpenAI’s Responses API and sends it to the Codex backend your codex CLI already talks to.

03

Uses the login you have.

It signs in with the credentials from codex login. No API key, no separate billing, no per-token charges.

What you get

Several models, one proxy.

Map opus, sonnet and haiku to different Codex models and switch per session, no restart.

Auto mode works.

Claude Code’s auto-mode classifier request is served instead of rejected.

Stays logged in.

The login refreshes on a timer in the background, also after the machine wakes from sleep.

Prompt cache stays warm.

Repeated turns keep a stable prompt prefix, so Codex can reuse what it already processed.

Long sessions.

The real 1’050’000-token context window is reported, so Claude Code does not compact early.

Windows autostart.

An optional script starts the proxy at logon, quietly, with a log file you can check.

Other local proxies solve the same problem. This is one way to do it.

Other local proxies solve the same problem. This is one way to do it.

02 · The annoying parts

02 · The annoying parts

What had to be figured out.

What had to be figured out.

Found by testing against the live endpoint, one 400 error at a time. If you build something similar yourself, these are the walls you will meet.

Found by testing against the live endpoint, one 400 error at a time. If you build something similar yourself, these are the walls you will meet.

01

Wrong host, hard 400.

The public API rejects newer Codex-plan models even with a valid token. The fix is the ChatGPT-internal Codex endpoint your codex CLI already uses.

02

Undocumented required fields.

The endpoint needs streaming and storage flags set explicitly, and refuses max_tokens and user outright.

03

System prompts rejected.

Claude Code’s system prompt arrived in a role the endpoint refuses. Codextender folds it into the instructions field instead.

04

A cache that never warmed.

One header line that Claude Code changes on every request made each turn look new. Stripping it keeps the prompt prefix stable.

05

Tool use broke silently.

After a tool call, the endpoint returns an empty output list, so the stop reason came back wrong and Claude Code never ran the tool. A small patch corrects it.

In one line

Each fix calls LiteLLM’s real code, then corrects one thing at a public boundary. No fork.

03 · Install

03 · Install

Two terminals, one proxy.

Two terminals, one proxy.

You need a Codex CLI that is logged in (codex login), Node 20.12+ and Python 3.11+. Start the proxy, then launch Claude Code against it.

You need a Codex CLI that is logged in (codex login), Node 20.12+ and Python 3.11+. Start the proxy, then launch Claude Code against it.

# terminal 1 · start the proxy

# terminal 1 · start the proxy

$ npx @svenroth-ai/codextender@latest --port 4000

$ npx @svenroth-ai/codextender@latest --port 4000

# terminal 2 · launch Claude Code

# terminal 2 · launch Claude Code

ANTHROPIC_BASE_URL=http://127.0.0.1:4000 \

ANTHROPIC_BASE_URL=http://127.0.0.1:4000 \

ANTHROPIC_AUTH_TOKEN=sk-codextender-local \

ANTHROPIC_AUTH_TOKEN=sk-codextender-local \

ANTHROPIC_MODEL=sol \

ANTHROPIC_MODEL=sol \

ANTHROPIC_DEFAULT_OPUS_MODEL=sol \

ANTHROPIC_DEFAULT_OPUS_MODEL=sol \

ANTHROPIC_DEFAULT_SONNET_MODEL=sol \

ANTHROPIC_DEFAULT_SONNET_MODEL=sol \

ANTHROPIC_DEFAULT_HAIKU_MODEL=sol \

ANTHROPIC_DEFAULT_HAIKU_MODEL=sol \

CLAUDE_CODE_MAX_CONTEXT_TOKENS=1050000 \

CLAUDE_CODE_MAX_CONTEXT_TOKENS=1050000 \

claude

claude

The three DEFAULT variables map Claude Code’s opus, sonnet and haiku to your Codex aliases. Forget one, and the proxy’s error message tells you which to set. Model names follow what your plan offers today.

The three DEFAULT variables map Claude Code’s opus, sonnet and haiku to your Codex aliases. Forget one, and the proxy’s error message tells you which to set. Model names follow what your plan offers today.

Full docs on GitHub

04 · Where Codextender runs for me

04 · Where Codextender runs for me

Shipwright, in short.

Shipwright, in short.

Shipwright is the harness your AI follows, the discipline layer that keeps it true to what you already decided. The full development lifecycle, orchestrated as a sequence of inspectable phases, not a black box. Run it from the CLI, manage it from the Command Center, iterate daily.

Shipwright is the harness your AI follows, the discipline layer that keeps it true to what you already decided. The full development lifecycle, orchestrated as a sequence of inspectable phases, not a black box. Run it from the CLI, manage it from the Command Center, iterate daily.

Specify

Design

Plan

Build

Test

Secure

Who it is for

Technical people who build with AI and want it done properly, without running a full engineering process by hand.

$

npx @svenroth-ai/shipwright@latest

Free and open source. The Command Center is the optional visual home: every project, task and run on one board.

Free and open source. The Command Center is the optional visual home: every project, task and run on one board.

1

2

3

1

2

3

The Command Center · task board

Every task has its lane on the board.

Pipeline and campaign lanes, one card per task. Each card shows where the task stands and launches or resumes it from there.

1

All projects. Every piece of work, on one board.

2

Backlog to done. An iterate is a card with its state.

3

Inbox and Triage. Every permission prompt in one place, and findings from hooks and CI, ready to become tasks.

Kanban Task Board

Backlog to Done, one button to start a run.

Global Inbox

Every question Claude asks, in one place.

Multi-project

Many projects, one board.

05 · How I use it in Shipwright

05 · How I use it in Shipwright

Every task picks its runtime: Claude or Codex.

Every task picks its runtime: Claude or Codex.

In the Command Center, each new task has a runtime toggle. With Codextender as the engine, a Codex task is still a normal Claude Code session. Every Shipwright hook, gate and review keeps running, on a different model.

In the Command Center, each new task has a runtime toggle. With Codextender as the engine, a Codex task is still a normal Claude Code session. Every Shipwright hook, gate and review keeps running, on a different model.

Command Center: New Iterate dialog with a Claude or Codex runtime toggle

1

2

3

The task

Choose the runtime per task.

Every launch surface has the same toggle: new task, new iterate, new pipeline. A task keeps the runtime it was created with.

1

Runtime. Claude or Codex, picked when the task is created.

2

Autonomy. Guided asks before it acts. Autonomous runs on its own.

3

Launch. The command starts in the embedded terminal on the task page.

Command Center settings: which runtimes a task can use, and whether a Codex task runs via Codex Light or Codextender

1

2

3

The settings

Codex Light or Codextender: same task, different engine.

Codex Light runs the real Codex CLI in its own terminal. It is the start of a native Codex port of Shipwright. Porting a full plugin suite turned out to be a lot of work, so I built Codextender to use the limits of both subscriptions sooner: a normal Claude Code session pointed at your Codex plan, with every Shipwright hook and review running as usual. Both options stay, and the task looks the same either way.

1

Runtimes. Both, Claude only, or Codex only, for the days Claude’s quota is used up.

2

Engine. Codex Light or Codextender, chosen once in settings.

3

Port. Where your local Codextender proxy listens.

Shipwright knows who wrote the code.

When a GPT model authored the change, the external review switches to reviewers from Anthropic (Opus) and GLM, instead of the standard setup with OpenAI (Sol) and GLM. A change is never checked by the same model family that wrote it.

Masterclass coming soon

Founding access to the Shipwright Masterclass is open right now.

Founding access to the Shipwright Masterclass is open right now.

Founding access to the Shipwright Masterclass is open right now.

The harness is free. The Masterclass is where you master it: the discipline and judgment to run Shipwright across real projects. It is in active development, and founders get in first and help shape it.

The harness is free. The Masterclass is where you master it: the discipline and judgment to run Shipwright across real projects. It is in active development, and founders get in first and help shape it.

The harness is free. The Masterclass is where you master it: the discipline and judgment to run Shipwright across real projects. It is in active development, and founders get in first and help shape it.

Founding seats still available

$49

Founding · first 50

$97

Early access

$497

Full price

Get the founding offer · $49

Lowest price it will ever be. Fully refundable until launch.

Ship right, not just fast.

Questions

Questions

Before you try it.

Before you try it.

Is Codextender free?

Yes. It is open source under the MIT license, on GitHub and on npm. You only need a ChatGPT plan that includes Codex.

Do I need Shipwright?

No. Codextender is a separate project and works with any Claude Code setup. Shipwright is where I use it every day.

Which models can I use?

Whatever your Codex plan offers right now. There is no built-in model list on purpose: the lineup changes, so you pass the model name yourself.

Is this allowed?

It reuses your own Codex login from a third-party client, against the endpoint the codex CLI uses. My reading of public information is that this fits how OpenAI has treated subscription-based tools since April 2026. That is my reading, not a confirmation from OpenAI, and policy in this area has shifted more than once this year.

What are the limits?

It is built for one person on one machine, not as a hardened shared proxy. The login refresh runs on a timer, so an expired token is caught at the next check, not on the first failed request.

What is the Masterclass?

The place where you learn to run Shipwright on real projects. It is in active development. A founding seat is $49 and fully refundable until launch.

Who’s behind it

Ship right, not just fast.

I’ve spent 20+ years on the process of shipping software cleanly, including FINMA-regulated banking and digital-asset environments, where every change comes with proof that it is safe. Shipwright encodes that discipline so you don’t have to carry it in your head.