How I use Codex and Claude Code CLI as adversarial partners to climb out of the research rabbit hole and actually move.
I have a confession that most operators will recognise but few admit: I can spend an entire day “researching” a decision I could have made in twenty minutes, and feel productive the whole time.
That’s the trap. Research is procrastination with a clean conscience. It looks like diligence. You open another tab, read another teardown, compare another option, tell yourself you’re reducing risk, and at the end of the day nothing has shipped, nothing has been sent, no decision has actually been made. The rabbit hole doesn’t feel like avoidance. It feels like rigour. That’s exactly why it’s so dangerous.
For a long time, AI made this worse for me, not better. A single helpful assistant is the perfect enabler. Ask it for more depth and it gives you more depth, forever. It will happily generate the seventeenth angle on a question you should have closed at the third. It never says “you have enough, go.” Why would it? Its job is to be helpful, and helpfulness, unchecked, is just a faster way down the hole.
The thing that finally got me out wasn’t a better model. It was a second one with the opposite job.
Stop using AI as a yes man. Use 2 as adversaries.
The shift was to stop running one assistant that agrees with me and start running two that argue with each other. Codex and Claude Code CLI, deliberately pointed in opposite directions.
Claude Code CLI is my researcher and orchestrator. It runs the deep dives, fans out parallel agents, cross checks sources, and synthesises. Left alone, it’s brilliant, and it would happily keep digging until the heat death of the universe. So I don’t leave it alone.
Codex is my skeptic and executor. Its job in this pairing isn’t to add depth. It’s to attack the research and demand the decision: What are you actually trying to decide? What’s the smallest evidence that would let you act? You already have it, here’s the call, now ship. It’s the partner that’s allowed to be unimpressed.
Run that way, the two models stop being a chorus and start being a courtroom. One side builds the case; the other cross examines it. I’m no longer the lonely judge trying to decide when “enough” is enough. I’m watching two competent adversaries fight it out, and the fight itself produces the answer faster than my own deliberation ever did.
How the adversarial loop actually runs
It’s simpler than it sounds, and you can do it today with two terminals open.
First, I give the research a stop loss before it starts, a budget. Depth, time, or scope, stated up front. “Three sources, fifteen minutes of digging, then a recommendation.” A rabbit hole has no natural floor; you have to install one.
Then I let Claude Code CLI do the dig and produce a recommendation with its reasoning. Not a data dump, a position.
Then I hand that position to Codex with one instruction: try to kill it. Find the hole, name the assumption, argue that I already have enough to act and that more research is now just fear wearing a lab coat. If Codex can’t kill it, I act. If it can, the gap it found is the only thing left to research, and it’s almost always small and specific, not another open ended sweep.
The magic isn’t either model. It’s the friction between them. A single agent optimises for your comfort. Two adversaries optimise for convergence, because neither of them is on the hook for your feelings. The disagreement is the product.
Why adversarial beats agreeable
There’s a deeper principle here, and it’s the Systems Detective in me that can’t let it go: you don’t fix a behaviour problem with willpower. You fix it with a system.
My research compulsion isn’t a discipline failure I can affirmation my way out of. It’s a structural one. The loop has no forcing function, so it runs forever. Adding a second AI whose explicit incentive is “stop researching, decide” is me building the forcing function into the system instead of relying on my own exhausted judgment at 6pm. The adversary is the floor the rabbit hole never had.
This is also why “which model is best” is the wrong question. In an adversarial setup, you want two different temperaments. Codex and Claude Code CLI don’t reason identically, and that’s the point. The friction between two genuinely different agents catches what a mirror never would. I’m not looking for agreement. I’m looking for the strongest possible attack on my own conclusion, delivered before I commit, while it’s still cheap to be wrong.
The part that actually changed
What changed wasn’t how much I know. It’s where my time goes. I research less and decide more, because the decision now has a referee instead of an enabler. The question I ask at the start of a task is no longer “what else should I read?” It’s “what would have to be true for me to act right now, and can I get a second opinion that’s allowed to tell me I’m stalling?”
If you’re the kind of operator who confuses motion with progress, and most of the good ones are, that reframe is worth more than any single tool. Put your AIs in opposition. Give the research a floor. Let one of them be unimpressed with you.
That’s the conversation I’m having with people right now: not how to research faster, but how to design a system that won’t let you hide in research at all.
Stop feeding the rabbit hole. Give it an adversary.