Why I Run Claude Code and Codex Side By Side

Claude Code has rate-limited me four times this week. Every time, I switched to Codex and kept working. The project didn’t care. My flow didn’t break. I didn’t even really notice until I sat down to write this.

That only works because of one small decision I made a while back: my coding workflow doesn’t care which agent is running it.

The setup

Claude Code is my primary. Not because it’s the smartest agent on every task (it isn’t), but because it’s by far the most enjoyable to work with. The UI, the interaction flow, the way it handles multi-step work, the whole thing feels like a damn video game. It also does great work on frontend, which is most of what I’m shipping day to day anyway. I pay for the $100 Max plan and it earns its keep many times over.

Codex I had gotten coincidentally - just because it’s bundled with my ChatGPT sub. I’ve never really clicked with it. I kept coming back to Claude Code for anything time sensitive or requiring iteration (as most things do when you work with real people). A few weeks ago though, when OpenAI released their ‘codex rescue’ skill for Claude Code, I started having Claude point Codex at tasks I didn’t want to burn Claude Code quota on, and it turned out to be perfectly capable, just a different flavor. Now I run Codex alongside Claude Code on most projects to tackle different tasks in parallel.

Of course, the two agents expect slightly different things. Claude Code reads CLAUDE.md for project instructions. Codex reads AGENTS.md. Each has its own skills system, its own memory layer, its own way of loading context.

If I had to manually maintain two parallel sets of configs, switching would be expensive and I wouldn’t be able to do it flexibly. So I don’t.

The trick

CLAUDE.md and AGENTS.md are the same file on my machine. One is a symlink to the other. Both agents read identical project instructions without me having to think about it.

For skills and configs that live in one agent’s ecosystem but not the other, I just ask the agent to port them over. “Here’s how Claude Code defines this skill, write the equivalent for Codex.” Takes seconds. Codex just reads claude’s directory and repackages the skill file.

That’s it. That’s the whole setup. Once it’s in place, switching between Claude Code and Codex mid-task costs nothing. They’re reading the same project context, following the same instructions, and if you gave me a black box test where they both had the same frontend and worked at the same speed I probably couldn’t tell which one is driving.

What this unlocks

Rate limit arbitrage. I usually have two to four agents running in parallel on whatever I’m building. You burn through limits fast doing that. When Claude Code taps out, I shift the work to Codex and keep going. The dead time basically disappears. This alone pays for the Codex side of the equation.

Downtime resilience. Claude goes down more often than Codex in my experience. Codex has its own bad days. But they almost never overlap. So when one platform is having issues I just keep working on the other.

Task routing. Claude Code is my default because I like using it, but Codex pulls ahead on certain tasks. Long grindy operations. A specific flavor of complex reasoning that Claude Code tends to wander aimlessly on. When I notice a task isn’t landing well on one, I move it to the other without thinking much about it.

Staying current. Both platforms ship updates all the time, it feels like. Running both means I notice changes as they happen rather than reading about them secondhand. Not a primary reason to do this, but a nice side effect.

Disclaimer on Cursor

I dropped Cursor a while back because the cost-to-value ratio wasn’t there for how I work. The terminal agents were just giving me more per dollar. That might have changed. If you’ve tried it recently, I’m curious how it compares now.

The actual takeaway

The agent-swap stuff is downstream of one choice: don’t let your workflow care which vendor is running it. Symlink the instruction files. Let the agents port their own configs across. Stop maintaining two sets of anything.

Once that’s in place, you stop thinking about which tool to use and start thinking about the work.


The bet I’m making with this setup: vendor lock-in on AI coding tools is going to age badly. Not because any one tool is bad, but because the space is moving too fast to commit. Disagree? I want to hear it - email me.

And if you’re on one platform and hitting rate limits regularly, try the symlink trick this week and email me if it changed anything for you.