Why GPT Models Sucked At UI A developer discovered that OpenAI's Codex model manifest for GPT-5.5 contained a large frontend guidance block with specific UI rules, suggesting that GPT's perceived poor UI taste may stem from hidden harness instructions rather than model capability. The developer argues that comparing Claude Code vs Codex often compares the full harness, not just model intelligence, and urges developers to review their own agent files like AGENTS.md and CLAUDE.md to avoid outdated steering. 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 https://www.youtube.com/watch?v=Noo0NWD0gHU and checking OpenAI's own Codex model manifest https://github.com/openai/codex/blob/main/codex-rs/models-manager/models.json , 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: 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? When we compare Claude Code vs Codex, we are usually not comparing just model intelligence. We are comparing the full harness around the model: 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 https://github.com/router-for-me/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: Also, GPT is clearly not helpless at React. ReactBench https://www.reactbench.com/ currently has GPT models scoring extremely well on realistic React tasks. So the model being bad at React is not the clean explanation. 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. 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.