How do I have a second model review docs updates in a Node/TypeScript app before each commit?
Tares lets Claude Code write your docs updates while the OpenAI Codex CLI reviews the plan and every commit, in a challenger session. A blocking finding stops Claude and sends it back to amend the same commit. If you disagree with a finding, /tares:challenger-waive waives it. The review runs on your laptop and Tares records the exchange.
How it works
A challenger session pairs Claude Code (the author) with Codex (the critic). Nothing in it is specific to Node or TypeScript, and a commit that touches only Markdown goes through the same review as any other commit.
- Plan check. When you approve a plan and Claude leaves plan mode, the plugin passes the plan to Codex in a read-only sandbox. Codex tags each finding
[P1](the plan fails as written),[P2](will cause rework) or[P3](advice). The critique reaches Claude as context. A plan critique never blocks. Claude revises, or tells you why it disagrees. - Commit check. After each
git commit, the plugin runs a Codex review of that commit. No findings means Claude carries on. - Blocking findings. A
[P1]or[P2]finding blocks Claude. It must fix the problem and fold the fix into the same commit withgit commit --amend, or make a new commit if the reviewed one is already on a remote. The amended commit is reviewed again as round 2, and so on. The loop stops at 8 rounds per commit and 5 turn ends per session, and after that the findings come back as context. - Never blocking.
[P3]findings, a Codex timeout, an error or an inconclusive review. - Waivers.
/tares:challenger-waivelists the blocking findings and waives one or all. The waiver is remembered for that finding on later rounds and shipped to Tares as achallenge_waivedevent.
The checks run in Claude Code hooks on your laptop, against your OpenAI account. Tares never calls Codex and never holds up a review. If Tares is slow or down, the plugin retries shipping on the next hook.
Set it up
-
Start Tares and its MCP endpoint, or use a Tares Cloud instance, which serves the endpoint itself:
tares up tares mcp --transport streamable-http -
In Claude Code, add the Tares plugin from the
glassflow/taresmarketplace and installtares@tares. You need plugin version 0.2 or later. The install asks for the Tares URL and the MCP endpoint. On a secured instance it also asks for aread + ingestAPI key. -
Install the Codex CLI from npm and sign in to it. Codex is billed to your OpenAI account.
-
Give the summarizer an Anthropic API key under Settings > Model providers, or set
ANTHROPIC_API_KEY. Tares Cloud instances come with one. -
Open Claude Code in your Node/TypeScript repo and say “make this a challenger session”, or type
/tares:challenger. The first marked session creates the Challenger workflow project for you. -
Ask Claude to update the docs: a README section, an API page, a changelog entry. Review the plan, approve it, and let Claude commit. Each commit gets its Codex review before Claude moves on.
-
If a blocking finding is wrong, run
/tares:challenger-waive. To make commit reviews advisory for good, set the plugin optionchallenger_modetoadvise. The default isstrict. -
If Codex needs to run your project’s commands to check a docs change, set
codex_sandboxtoworkspace-write. It is read-only by default. -
Type
/exit. A Tares agent writes the session summary and proposes what the next session in this repo should remember. You accept or reject each proposal.
If you would rather have a whole crew build the work, tares factory crew up asks whether a second model checks every commit. Start with Get started. Run tares factory doctor there to see whether Claude Code has a TypeScript language server for your repo. It reads tsconfig.json and package.json to find your languages.
tares factory crew up
tares factory doctorWhat you get
- Every docs commit is critiqued before Claude moves on, and wrong claims or gaps are caught while the change is still one commit.
- A fix loop with limits: amend, re-review, repeat, capped at 8 rounds per commit.
- A way out. A waiver ends a dispute you have already decided, and Tares records it.
- One timeline per session on the Challenger workflow project. Each commit shows a
Findings (N)orPassbadge, and the Claude and Codex exchange reads as one thread. - A summary with five sections: what was asked and built, the plan and how Codex changed it, each commit and what Codex caught, cost, and memory proposals.
- Memory that carries over. The plugin hands the accepted proposals to Claude when the next session in that repo starts.
- Predictable cost. A session with a plan and three commits is typically five to eight Codex runs, billed by OpenAI. The summarizer is one metered Tares agent run.
The full walkthrough is in Challenge Claude Code with a second model.
When something else fits
- If you do not want a second model’s opinion on every commit, set
challenger_modetoadvise, or leave sessions unmarked. Unmarked sessions stream like any other and no review runs. - If you want a whole project built and merged without driving each prompt, use the software factory crew. Its settings let a second model check every commit.
Related
- Build a software factory with Claude Code
- How do I have a second model review internal refactors in a Python backend before each commit?
- How do I have a second model review bug fixes in a monorepo before each commit?
- How do I have a second model review bug fixes in a Python backend before each commit?
Still stuck? Get help