Theo's 60% stat is an outage chart: 43 hours of Codex incidents
Originally published at tensorust.com. TL;DR: @theo posted that over 60% of T3 Code users who used Codex also used Claude Code, and sold it as proof that the harness is the product. I pulled both companies' own status p
Originally published at tensorust.com.
TL;DR: @theo posted that over 60% of T3 Code users who used Codex also used Claude Code, and sold it as proof that the harness is the product. I pulled both companies' own status pages for the same two weeks. Codex sat under an open incident for 42.7 hours of those 14 days (12.7% of the time). Claude Code: 34 minutes. Over 80 days, Claude Code had 42.2 hours of incidents and Codex had 56.0, but both were broken at the same moment for only 101 minutes. People are not using both because of taste. They use both because each one breaks, and switching deletes 96% of the downtime. Meanwhile my own "smart" LLM router picked the same model for 244 out of 244 real prompts. Model switching is a backup generator. Theo is selling it as a lifestyle.
If you came here from Google asking "Claude Code vs Codex, which one?", the short answer from the data: neither, alone. Each had 40 to 56 hours of status-page incidents in 80 days. Together they were down at the same time for under two hours. Two $20 plans buy you roughly 99.9% coverage instead of about 97 to 98%. The rest of this article is how I measured that, what it says about the stat everyone quoted this weekend, and what my own router got embarrassingly wrong.

Claude Code and Codex incidents from both companies' status page APIs, Aug 1 to Oct 19 2026 10 AM ET, any severity. Static frame: timeline.png.
The stat that went around this weekend
At 12:17 AM Eastern on October 19, Theo Browne, the creator behind t3.gg, T3 Chat and T3 Code, posted: "For the last 2 weeks, over 60% of T3 Code users who used Codex also used Claude Code as well. The majority of Codex users are Claude Code users." It did 69.1K views by the time I captured it.

@theo on X, Oct 19 2026, captured 10:12 AM ET Oct 19 2026, real and unedited.
The replies read it the way it was framed: the models are interchangeable, the harness that holds both of them is where the value lives, and T3 Code is that harness. A few hours earlier the same account asked "If you haven't moved to T3 Code yet, why?" That is the context. This is a product stat, posted by the product's owner, about why you need the product.
Here is my take, stated plainly: the 60% is not a preference number. It is an outage number with a marketing caption. A product that sits on top of both labs makes money every time one of them falls over, and Theo knows exactly which way that stat cuts. He will never call T3 Code outage insurance, because "insurance" does not trend. "The majority of Codex users are Claude Code users" does.
What I measured, and how
Both labs publish machine-readable incident history. Anthropic runs a Statuspage at status.claude.com with a public /api/v2/incidents.json, where every incident lists the components it hit ("Claude Code" is one of them). OpenAI's page at status.openai.com exposes per-component impacts with start and end times, including "Codex API", "Codex Web", "CLI", "VS Code extension" and "Codex in ChatGPT Desktop".
I pulled both on October 19 at about 10:10 AM Eastern: 50 Anthropic incidents (newest first, back to July 27) and 105 OpenAI incidents (back to July 21). Then a 60-line Python script did three things:
- Kept every incident that touched Claude Code, and every OpenAI component impact on a Codex component.
- Merged overlapping intervals per product, so two incidents at once count once.
- Intersected the two timelines: the minutes when both products had an open incident at the same time.
The window is August 1 to October 19, 10 AM Eastern: 79.6 days. A second run used exactly Theo's window, the 14 days before his post.
Two honest limits, and then I will stop hedging. A status-page incident is not a total outage: "degraded performance" can mean 5% of requests fail, or a slow model. And labs tag components their own way: OpenAI's longest Codex entry, 25 hours on October 5 and 6, is titled "Elevated Work Mode errors" and is tagged on a Codex component. That is how OpenAI filed it, so that is how I counted it. If anything, status pages under-report: they are written by the company, about the company.
80 days of receipts: each one broke for 40+ hours
From August 1 to October 19:
- Claude Code: 28 incidents, 2,533 minutes (42.2 hours) under an open incident. That is 97.79% clean time. 15 of those incidents were rated major or critical.
- Codex: 12 incidents, 3,358 minutes (56.0 hours). 97.07% clean time.
- Both at the same time: 101 minutes, in 2 episodes. 85 minutes on September 3 and 16 minutes on October 5. Counting only major incidents and full or partial outages, the overlap is zero.
So a person who switches the moment one breaks goes from about 97 to 98% to 99.91%. Switching removes 96.0% of a Claude Code user's incident time and 97.0% of a Codex user's.

status.claude.com (Claude Code) and status.openai.com (Codex API, Web, CLI, VS Code, Desktop) incident APIs, pulled 10:10 AM ET Oct 19 2026.
Now look at Theo's exact window, October 5 to October 19. Claude Code had 2 incidents, 34 minutes total. Codex had 4 incidents covering 2,562 minutes: 42.7 hours, 12.7% of the two weeks. One of them, on October 13, was titled "Degraded performance in GPT-6.1 Sol Codex and Work mode" and ran 8 hours 18 minutes.
Of course the majority of Codex users also used Claude Code that fortnight. For one hour in every eight, the Codex status page said something was wrong. The stat was posted as a vibe about the future of harnesses. My read: it is mostly a picture of OpenAI's worst two weeks of the quarter.
The API side tells the same story. Claude API: 27 incidents, 45.7 hours. OpenAI Chat Completions plus Responses: 7 incidents, 46.0 hours. Both at once: 19 minutes, one episode. If you run an app on one provider with no fallback, you are choosing to eat about 46 hours a quarter.
What two subscriptions actually buy
Theo also posted that his most common DM is some version of "which $20 plan is better, Claude or Codex?" (376.8K views). He has a product to sell, so he answers with tier lists and vibes. Here is the answer with a number on it.
Claude Pro is $20 a month billed monthly; ChatGPT's entry paid plan is the other $20 in Theo's own question. Average the 80 days out to a month and adding the second plan buys back:
- For a Claude Code user: about 15.5 hours a month of incident time. That is $1.29 per hour of not being blocked.
- For a Codex user: about 20.8 hours a month. $0.96 per hour.
If an hour of your work is worth more than a dollar, the second plan is not a luxury. It is a generator in the garage. That is the whole insight, and you do not need a new app to get it: you need two terminals and the habit of switching the moment one gets weird.
The pinned take: "a lot of us are gonna end up where they are"
Theo's pinned post, 66.6K views: "Anthropic was so bottleneck'd by GitHub that they rebuilt git itself. This might seem insane, but a lot of us are gonna end up where they are today."

@theo's pinned post on X, captured 10:12 AM ET Oct 19 2026, real and unedited.
Read the post he is quoting. Anthropic's engineering blog says they went from about 2,500 merged changes a day in May to over 30,000 a day in September, and then says, in plain words: "Scion is by no means a suitable replacement for git for general use." It only makes sense for "truly enormous monorepos, with either tens of thousands of engineers or swarms of agents."
Anthropic wrote the warning label and Theo pinned the opposite. Almost nobody reading that post merges 30,000 changes a day. Most of us merge 30. And the bottleneck most people actually hit this quarter was not git. GitHub's own status page lists 4 incidents touching Git Operations, 554 minutes (9.2 hours), across the 50 incidents its API returns (August 3 to October 15). Claude Code had 42.2 hours in a similar window. If you want to rebuild infrastructure because something keeps blocking you, the receipts say rebuild your fallback, not your version control.
My own LLM router did 244 for 244 the wrong way
Here is where I punch myself before anyone else does. The other half of the "use many models" pitch is routing: send easy prompts to a cheap model and hard ones to an expensive one, automatically. I wrote one of those. llm-router is a single-header C++ library from my llm-cpp toolkit, and its README says it routes "prompts to the right model" with five strategies. So I ran it.
First, the repo's own example, untouched, built months ago. Watch the last line: a red-black tree with deletion and step-by-step reasoning scores 13 out of 100 and goes to the cheapest model.

The repo's own example, unchanged, run 10:15 AM ET Oct 19 2026 (llm-router commit 11f7df6).
Then the real test. I took two public prompt sets: all 164 coding tasks from OpenAI's HumanEval and all 80 first-turn questions from MT-Bench (writing, roleplay, reasoning, math, coding, extraction, STEM, humanities). A 30-line C++ harness compiled against the unchanged header ran every prompt through all five strategies, using the model table from the repo's examples/route_prompts.cpp: gpt-4o-mini at $0.15, gpt-4o at $2.50 and gpt-3.5-turbo at $0.50 per million input tokens (the published list prices for those models).

164 HumanEval tasks + 80 MT-Bench first turns through llm_router.hpp, model table from examples/route_prompts.cpp, Oct 19 2026.
Every strategy picked one model for all 244 prompts. Cost, Latency, Balanced and Budget: gpt-4o-mini, 244 out of 244. Quality: gpt-4o, 244 out of 244. The complexity score had a median of 11 and a maximum of 43 out of 100, and since every model in the table is rated to handle at least 50, the score never changed a single decision. HumanEval, which is literally "write this function", had a median of 12.
The reason is two lines of real code from include/llm_router.hpp:
// Penalise if complexity exceeds what the model handles well
double complexity_fit = (complexity <= m.max_complexity) ? 1.0
: 1.0 - 0.5 * static_cast<double>(complexity - m.max_complexity) / 100.0;
...
case RoutingStrategy::Balanced:
return complexity_fit * (eq / std::max(0.001, m.cost_per_1k * m.latency_score));
The fit penalty bottoms out at 0.5, but the price gap between the two GPT-4o models is 16.7x. A penalty that can at most halve a score can never beat a 16.7x price ratio. So "Balanced" is a cheapest-model picker with extra steps, and "Quality" is a most-expensive-model picker with extra steps. The keyword scoring (does the prompt contain "explain" or "implement"?) is theater on top. As of today the repo is unchanged; this article is the bug report.
I am not the only one. My hot take: most "smart" model routers in the wild do the same thing, they just never get run on 244 prompts in public. A router that guesses difficulty from keywords and length is a coin that always lands on the same side. The only routing I have ever seen pay for itself is the dumb kind: if this provider errors, send it to the other one. That is the 96% from the status pages. That is what Theo's 60% is really measuring.
Theo's worst takes this week, ranked
Theo says he tends to make enemies, and he has a theory about why. On October 18 he posted "Because I pursue accuracy above all else, I tend to make enemies with those who benefit from people being misinformed," and two minutes later, "The only victims of truth are grifters." Fine. Accuracy above all else. Let's be accurate.

@theo on X, Oct 18 2026, captured 10:12 AM ET Oct 19 2026, real and unedited.
- The 60% stat. Posted with no outage context, during the two weeks Codex spent 12.7% of its time under an incident, by the owner of the product that profits from you running both. Accuracy above all else would have included the denominator.
- "A lot of us are gonna end up where they are today." The company in question wrote "by no means a suitable replacement for git for general use." Pinning the opposite of the source is a choice.
- "npm fucked up our release... Time to fuck up npm" (427K views), followed by "I legitimately think I can build something 10x better in a few weeks." Git is a bottleneck, npm is a bottleneck, tsc gets a Rust port. When every tool you touch needs replacing, my read is the product being sold is the replacing.
- "I know T3 Code is good because the majority of the feature requests are things we already have." That is not a flex. When users keep asking for features you already shipped, they cannot find them. That is a discoverability bug report, read upside down.
- "I'll pay you $800 over MSRP" for a launch-day phone (334.6K views), from the account that, minutes earlier, complained about paying marked-up prices to a scalper. Posting a public $800 bounty is how the scalper market gets its price.

@theo on X, Oct 15 to 17 2026, captured 10:12 AM ET Oct 19 2026, real and unedited.
None of this makes him wrong about everything. He is right that Gemini's cache misses cost real money, and he is right that a harness that holds both models is useful. He is wrong about why it is useful, and the wrong reason happens to be the one that sells his product.
Do this in your own setup today
- Keep two coding agents logged in. One Claude plan, one OpenAI plan. At $20 each, the second one costs about $1 per hour of outage it saves you, by the numbers above.
-
Subscribe to both status feeds. Statuspage pages expose RSS and JSON (
/history.rss,/api/v2/incidents.json); point them at a Slack or Discord channel so you switch on the first "investigating", not after twenty minutes of retrying. - In apps, fail over, do not "route". Wrap each provider in a circuit breaker (the documented example in my tokio-prompt-orchestrator opens after 5 failures in a row and probes again after 60 seconds) and send traffic to the other provider while it is open. Keep prompts portable: no provider-only features in the hot path.
- If you must route by difficulty, test the router before you trust it. Run it over a public prompt set and count the decisions. If one model wins 100%, you do not have a router. Use a hard rule instead ("anything with a stack trace or over 2,000 tokens goes to the big model") and measure that.
- Retry smart before you switch. Most blips are rate limits, not outages. My exponential backoff with jitter test shows which retry defaults make a rate limit worse.
Related on this site: I benchmarked my own LLM proxy and found a 10x slowdown (the same "test your own tool" habit), and why chat sampling settings break JSON output.
Bold prediction
By the middle of 2027, "which model is best" stops being the fight, because the labs leapfrog each other every few weeks and nobody can keep a tier list alive (Theo himself said he wants to make a new tier list but knows the next model will drop the second he does). The harness war gets decided on failover: which tool notices the outage first and moves your session to the other model without losing context. The winner will market it as "multi-model". Theo will market it as taste. It will be outage insurance either way. And the next time OpenAI has a 12% fortnight, the Claude share in T3 Code's stats will jump, and it will get posted as a trend.
The data, and how to rerun it
Pulled October 19, 2026, 10:10 to 10:20 AM Eastern: status.claude.com/api/v2/incidents.json (50 incidents, July 27 to October 7, nothing newer was listed), status.openai.com/proxy/status.openai.com/incidents (105 incidents, July 21 to October 19, per-component start and end times), and githubstatus.com/api/v2/incidents.json (50 incidents). Claude Code intervals use each incident's start and resolve times; Codex intervals use the per-component impacts for Codex API, Codex Web, CLI, VS Code extension and Codex in ChatGPT Desktop. Intervals are merged per product and intersected. Router sweep: llm_router.hpp at commit 11f7df6, compiled with MSVC 2022 /O2, run over HumanEval (164) and MT-Bench first turns (80). Theo's posts were captured from X at about 10:12 AM Eastern on October 19, real and unedited.
So, @theo: accuracy above all else. Post the 60% next to the status pages and tell your audience which number explains it. Everyone else, pick a team in the comments. Team Theo: people run both because the harness is the product. Team Receipts: people run both because each one breaks for 40+ hours a quarter. Which one are you, and which agent was down the last time you switched?
If you ship apps built with these agents, I run a $49 Launch Check: I test your AI-built app for the failure cases nobody tested, the same way I tested my own router here.
Originally published by Dev.to AI. Aggregated on AIWithGhost for educational purposes — full credit and traffic to the original publisher.