Is a second model worth the extra time on test coverage?
Tares lets you add a second model, the OpenAI Codex CLI, to a Claude Code session, and the cost is bounded: 30 to 90 seconds per plan, one review per commit, and a second bill on your OpenAI account. If you want the second opinion without waiting on fix loops, set the plugin option challenger_mode to advise and commit findings never block. The challenger workflow guide covers the full setup.
How it works
In a challenger session, Claude Code plans and builds as usual. Codex runs on your laptop, inside the Claude Code hooks, and Tares only receives the results. Tares never calls Codex, and a Tares that is down or slow never holds up a review.
The time cost comes from two places:
- Per plan. When you approve a plan and Claude leaves plan mode, Codex critiques it for gaps, wrong architecture, scope, unhandled risks and missing verification. That takes 30 to 90 seconds, so Claude’s first reply after the plan is slower. A plan critique never blocks. Only a
[P1]finding counts as blocking on a plan, and even then Claude is asked to revise or to tell you why it disagrees. - Per commit. After each
git commit, the plugin runs a Codex review of that commit. With no findings, Claude carries on. Each review is recorded with aduration_secondslabel, so you can read your own timings on Tares instead of guessing.
The money cost is separate. Codex is billed to your OpenAI account, and a session with a plan and three commits is typically five to eight Codex runs. The Tares summarizer is one agent run per session, metered like every other agent run.
In the default strict mode, [P1] or [P2] findings on a commit block Claude until it fixes them and amends the commit. The amended commit is reviewed again, up to 8 rounds per commit and 5 turn ends per session. After that the findings come back as context instead. [P3] findings, Codex timeouts, errors and inconclusive reviews never block.
Set it up
-
Install and start Tares, then make sure its MCP endpoint is running next to it (or use a Tares Cloud instance, which serves the endpoint itself). The Get started page covers the factory side of Tares.
tares up -
Install the Tares plugin for Claude Code, version 0.2 or later, from inside Claude Code. The install asks for the Tares URL, the MCP endpoint and, on a secured instance, a
read + ingestAPI key. -
Install the Codex CLI and log in. It runs on your laptop and is billed to your OpenAI account.
-
Add an Anthropic API key for the summarizer under Settings, Model providers, or as
ANTHROPIC_API_KEY. Tares Cloud instances come with one. -
In Claude Code, say “make this a challenger session” or type
/tares:challenger. The first marked session creates the Challenger workflow project by itself. -
To keep the second opinion but drop the blocking on commits, set the plugin option
challenger_modetoadvise. The default isstrict. -
If Codex needs to run your project’s commands, for example to run tests, set the plugin option
codex_sandboxtoworkspace-writeordanger-full-access. The default is read-only. -
To turn the challenger off for the rest of a session, type
/tares:challenger off.
What you get
- A predictable time cost. The plan critique adds 30 to 90 seconds once per session. Commit reviews add one Codex run per commit, plus extra rounds only in
strictmode when Codex finds a[P1]or[P2]. - A plan check for verification. The plan critique looks for missing verification, so a plan with thin testing gets flagged before any code is written.
- A bounded fix loop. Rounds are capped at 8 per commit and 5 turn ends per session, so a disagreement cannot run forever.
- Findings that never block in advise mode. With
challenger_modeset toadvise, commit findings are advisory. You still get them on the session timeline, with aFindings (N)orPassbadge per reviewed commit, and you decide what to act on. - A way out of a blocking finding.
/tares:challenger-waivelists the blocking findings and waives one or all. The waiver is remembered on later rounds and recorded in Tares as achallenge_waivedevent. - A session summary. When you type
/exit, thechallenger_summarizeragent writes a summary that includes what Codex caught per commit and the cost, and proposes up to five sentences worth remembering. Nothing reaches memory until you accept it.
When something else fits
- If you want every commit gated, stay in the default
strictmode and accept the extra rounds. That is the right trade when a missed bug costs more than a few minutes. - If a second OpenAI bill or the wait does not suit a small or throwaway change, skip marking the session. A session that is not marked is streamed like any other and nothing runs.
- If you only want a sanity check on the plan, use
advisemode: the plan critique never blocks, and commit findings stay informational.
Related
- Challenge Claude Code with a second model
- Is a second model worth the extra time on dependency upgrades?
- What does the crew do when the plan does not cover a decision while it works on test coverage?
- How can I get Claude Code to take on test coverage on its own, with every change reviewed before it merges?
Still stuck? Get help