AI Tools

Claude Code vs Codex: What I Learned Building a Real App With Both

I use both Codex and Claude Code to build RYZA, a real iOS and Android app. Here is how they differ in autonomy, workflow, and cost, from actual use.

Codex and Claude Code app icons facing off, split diagonally, VS between them

If you search for Claude Code vs Codex, you will find plenty of comparisons. Which one writes better code? Which one is faster? Which one understands a large codebase better? Which one should you pay for? I had the same questions.

But after using both while building a real mobile app, I realized the biggest difference is not how well they write code. It is how they behave while working.

I am building RYZA, a voice-verified affirmation alarm app for iOS and Android. This is not a small demo project made to test AI coding. RYZA has real application state, alarms, voice recognition, subscriptions, Firebase integration, widgets, localization, platform-specific behavior, App Store requirements, Google Play requirements, and all the edge cases that show up once an app becomes a real product.

(This post’s draft, like most on this blog, was written with Claude Code — one of the two tools in this comparison. I have not softened either side to make it look better. What follows is what I actually think.)

I started with Codex first. It is still the AI coding tool I use the most. I only started using Claude Code seriously more recently. And after working with both, I have noticed something interesting: they are both very capable coders, but they feel like two very different developers.

Codex is still my main tool

I started using Codex before Claude Code, so naturally I am more familiar with it, and it is still the tool I reach for most on RYZA.

The easiest way I can describe Codex is this: it usually does the job I give it. That might sound obvious, but in a large codebase it is an important trait. If I ask it to fix something, it focuses on that. If I ask it to modify a feature, it generally stays inside the boundaries of the request. It feels task-focused, and I like that.

When you are maintaining a production app, you do not always want an AI deciding that five other parts of your code should be redesigned just because you asked it to fix one thing. Sometimes you just want it to fix the one thing, and then the next one.

But it doesn’t always do exactly what I expect

That doesn’t mean it is perfectly predictable. Sometimes Codex misunderstands what I meant. I write what I think is a clear instruction, and it interprets the task differently, and every so often it makes a change I did not ask for. That is one of the realities of using AI coding agents. You can write a detailed instruction and still end up somewhere slightly off from what you meant.

So I have learned not to assume a successful build means the task was done correctly. I check the changes, look at what files were touched, test the actual behavior, and if something feels strange, I ask why it made that decision.

Overall, though, my experience with Codex is that it stays close to the task I give it. That makes it easier for me to control.

Claude Code feels more proactive

Claude Code surprised me for almost the opposite reason. I have not used it as long as Codex, so I am still forming my opinion, but one difference showed up fast: it often does more than I explicitly ask.

When I give it a task, it tends to investigate around the problem. It may trace related logic, inspect a file I did not mention, or notice that something else could be causing the issue. Sometimes it decides another part of the implementation should change too. It feels more proactive, and maybe a little more opinionated.

Sometimes that’s exactly what I want

There are times that behavior is exactly right. Say I ask it to fix an alarm behavior. Codex will usually focus on the exact thing I described. Claude Code is more likely to look around and, in effect, tell me there is another piece of logic nearby that might be related.

That can be extremely useful, especially when the real problem is not where I thought it was. Bugs in a large project often are not isolated — a symptom shows up on one screen while the actual cause lives somewhere else entirely. An agent that investigates beyond the obvious task can save real time.

Sometimes I just want it to do what I asked

But the same strength can turn frustrating. Sometimes I do not want a broader engineering judgment. I already know exactly what I want changed. In those moments Claude Code can feel like a developer with a stronger opinion about how the job should be done: I give it one task, it looks at the project, and it comes back having also changed something because it thought that was better.

Sometimes that is brilliant. Sometimes my reaction is closer to I didn’t ask you to change that.

That is probably the clearest difference I have noticed so far. Codex feels more literal. Claude Code feels more willing to make its own judgment.

Codex feels like a developer waiting for a task

If I had to describe Codex as a person, it is a capable developer waiting for me to assign work. I explain the job, it works the job, I review the result, then I hand it the next one. That workflow suits me because I like control over what gets changed.

To be clear, Codex codes well. I have used it through the actual development of RYZA, not for isolated snippets. It investigates a codebase, implements features, fixes bugs, refactors, and works through complicated problems. The issue was never coding ability. The more interesting difference is how independently it chooses to act.

Claude Code feels like a developer who looks around the room

Claude Code is closer to giving someone a task and watching them scan the codebase before answering that they can do it, but they also noticed something else nearby.

That extra initiative can make it feel like an engineering partner, but it also means I need to be explicit when I do not want extra changes. With Claude Code I have started writing constraints into the instruction itself, something like: investigate the surrounding logic, but do not modify anything outside this feature unless you explain why first. The more autonomous an agent is, the more the boundaries matter.

Both of them can code

This matters because these comparisons tend to collapse into which model is smarter, and from actual use, that is not the useful question. Both Codex and Claude Code write very good code. Both make mistakes. Both misread instructions sometimes. Both can confidently pick an approach that turns out wrong. And both have solved problems that would have taken me a lot longer alone.

I would not call one the good coder and the other the bad coder. That has not been my experience. The difference, for me, is working style.

Claude Code vs Codex, my experience so far

Here is the simplest way I would lay it out today.

CodexClaude Code
How long I’ve used itLongerMore recent
Current usagePrimary toolIncreasing
General behaviorTask-focusedProactive, investigates beyond the task
Independent judgmentMore restrainedStronger — will change things I didn’t ask for
ControlFeels easier to constrainNeeds clearer boundaries
Best descriptionA skilled developer waiting for a taskAn engineer who may challenge or expand the task
Cost, for my usageLowerHigher so far

This is not a benchmark, and I am not claiming these hold for every developer, project, prompt, or future version. It is what I have experienced running both on the same real product.

Codex has also been cheaper for me

Cost matters, especially using these tools daily. For my usage pattern, Codex has been cheaper than Claude Code, which does not automatically make it better. Pricing, plans, limits, and individual habits can make the experience very different from person to person.

But looking at my own workflow, the combination of strong coding ability, a task-focused style, familiarity from using it longer, and lower cost is a big part of why Codex is still my primary tool. For someone building continuously rather than experimenting occasionally, cost adds up, so I do not think it should be left out of a comparison like this.

AI coding changes once the app becomes real

When I first started using AI for coding, the impressive part was simple: it can write code. That alone felt big.

Once RYZA grew, that stopped being the important part. The real questions became whether it understands what already exists, what must not change, why a bug is happening instead of only patching its symptom, the platform-specific constraints, whether it will change something I never asked about, and whether I can trust the implementation enough to ship it. That is a different problem than generating a new screen from a prompt.

Vibe coding is easy until you have something to protect

When you start a new project, almost everything is flexible. If the AI rewrites a component, no big deal. If it changes your architecture, maybe you accept it. If something breaks, you regenerate it. That is why vibe coding feels so powerful early on.

Once real users, subscriptions, production data, alarms, notifications, and store requirements are involved, the situation changes. Now there is something to protect: existing behavior, backward compatibility, small regressions. A feature that looks better but behaves differently can become a real bug.

At that point the workflow shifts from idea → prompt → code to requirement → investigation → plan → implementation → review → test → iterate. The AI still does most of the work. The human role becomes less about typing code and more about controlling decisions.

The better the AI gets, the more your instructions matter

That sounds backwards. You would think as agents get more capable, instructions should matter less. I have found the opposite.

When an AI can only make a small change, the damage it can cause is limited. When it can understand the whole codebase, edit many files, run commands, and make independent engineering decisions, a vague instruction becomes far more powerful, and therefore more dangerous.

That shows up most with a proactive tool like Claude Code. The real question becomes how much freedom I want to give it, and that depends on the task. Sometimes maximum autonomy, sometimes exactly this and nothing else. Knowing which mode I want is turning into an actual skill.

Why I still use both

Codex is still my main tool. I have used it longer, I know how it tends to behave, and I like that it stays close to the task I give it. It codes well, and for my usage it has been cheaper.

Claude Code is newer in my workflow, but what makes it interesting is exactly what makes it different. It searches beyond the task, forms its own opinion about the problem, and sometimes notices something I did not ask about. Sometimes that creates unnecessary work. Sometimes it finds the thing I completely missed. That is why I do not treat them as interchangeable.

If they were two developers

This is the simplest way I can put it. I give Codex a task and it feels like it agrees to work on exactly that. I give Claude Code the same task and it feels like it agrees, but wants to look at something else first too. Sometimes I want the first developer. Sometimes I want the second. That is why I currently use both.

Which one would I choose

If I had to pick one today, based on my current workflow, it would be Codex. Not because Claude Code codes worse — it does not — but because Codex fits better: I have used it longer, it is still my primary tool, I know how it responds, it stays focused on what I assign, and it has been cheaper for my usage.

My opinion of Claude Code is still forming. I have not used it seriously for as long, and the more I use it the more I see situations where the proactive behavior is genuinely valuable. I would not be surprised if how I split work between the two changes.

Would I pay for both

Probably not for everyone. If you are just starting with AI coding, you will learn more by getting good at one strong agent than by jumping between tools. Learn to:

  • describe the real problem instead of only naming a file
  • define what must not change
  • ask the AI to investigate before modifying
  • review the diff
  • test the actual product
  • challenge the AI’s assumptions
  • understand why a fix works

Those skills matter more than which logo is on the tool. But once you are on a larger product, having two agents with different working styles gets a lot more interesting. One follows your direction closely. The other challenges the direction itself. Both can be valuable.

My biggest lesson from using both

The lesson is not that Claude Code is better than Codex, or the other way around. It is that AI coding agents are starting to have different working styles, and that matters.

Choosing one may end up less like picking the model with the highest benchmark score and more like picking the kind of engineer you want working with you: one that stays close to your instructions, or one that investigates and challenges your assumptions. More control, or more autonomy. For me the answer changes with the task, which is why I am still using both.

What I’ll be watching next

Claude Code is still new in my daily workflow, so I do not consider this final. I want to see how the comparison holds after running both side by side for much longer: which one causes fewer regressions, which handles large changes better, which understands my existing architecture more consistently, how often the proactive behavior actually catches problems versus creating unnecessary ones, what each one costs me over time, and which one I reach for first six months from now.

That comparison will probably matter more than any one-day benchmark, because I am not testing these on coding exercises. I am using them to build and maintain a real product. Generating code is becoming easy. Knowing how much freedom to give the AI is becoming the hard part.