I had this default belief for a while:
Claude/Opus for UI.
Codex/GPT for code.
And honestly, I think a lot of devs had some version of that in their head too.
Claude Code usually felt more tasteful.
Codex frontend output had that same repeated smell:
cards everywhere,
generic dashboard polish,
same-ish layouts,
same-ish “AI app” vibe.
So the easy conclusion was:
GPT just sucks at UI.
But after watching Theo’s video and checking OpenAI’s own Codex model manifest, I don’t think that explanation is clean enough anymore.
GPT-5.5 inside Codex had a huge frontend guidance block sitting in the harness.
Not just “make the UI good”.
Actual rules around:
- card radius
- icon choices
- hero layouts
- color constraints
- button behavior
- visual assets
- what kind of UI patterns to avoid
That stuff should not be global hidden law.
“Use icons” depends on the product.
“Don’t make this kind of hero” depends on the page.
“Cards should be this radius” is not something every repo should inherit because a model manifest said so.
So when people say “GPT has bad UI taste”, the fairer question is:
what exactly did Codex tell it to do before my prompt even started?
The part people keep mixing up
When we compare Claude Code vs Codex, we are usually not comparing just model intelligence.
We are comparing the full harness around the model:
- system prompt
- tools
- memory
- project instructions
- repo context
- compaction
- permissions
- product defaults
Same model in a different harness can feel like a different product.
That is why Theo’s experiment was interesting to me.
He ran GPT-5.6 Sol through a Claude Code-like setup using CLIProxyAPI, and the output looked much better than the usual Codex UI reputation would make you expect.
Not a perfect benchmark.
Still useful.
Because it separates two things people usually collapse into one:
- model capability
- harness behavior
Also, GPT is clearly not helpless at React.
ReactBench currently has GPT models scoring extremely well on realistic React tasks.
So the model being bad at React is not the clean explanation.
One caveat before this becomes too dramatic
I checked the current public Codex manifest again before updating this post.
The old GPT-5.5 entry still has that frontend block.
The current GPT-5.6 Sol entry does not seem to have that exact same block in the public manifest.
So I am not claiming the latest ChatGPT/Codex app still behaves exactly like old GPT-5.5 Codex.
That would need separate product-level proof.
What I am saying is simpler:
this was real public Codex config, and it is a very good example of how much the wrapper around a model can change the model’s perceived taste.
Also, check your own prompt files
And since this whole thing is basically about prompts steering models, this is a good time to look at your own setup too.
Open your AGENTS.md, CLAUDE.md, custom instructions, and skills.
Not as some productivity ritual.
For the same reason this Codex thing matters:
hidden instructions steer outputs.
A rule you added six months ago because GPT-4 kept doing something annoying might be actively hurting a newer model now.
A giant CLAUDE.md that keeps repeating old architecture notes, dead commands, stale style opinions, and random preferences is not harmless.
It is context.
It is steering.
Claude’s own docs say CLAUDE.md gets loaded into context, and that memory works better when instructions are specific, concise, and periodically reviewed.
So yeah, go look at yours.
I would bet a lot of people have rotten agent files they have not read in months.
And then we blame the model.

답글 남기기