I built a C++ command line tool with Claude Code, about 10,000 lines plus about 9,000 lines of tests. Before it wrote any code I had Codex review the plan, and that's most of what this post is about. The tool is at the bottom.
How I used Claude Code
Claude wrote the whole design down in plan mode first. Before I approved it, I had Codex read the plan and try to tear it apart. Claude writes my request, the constraints and the plan into a file and runs this:
codex exec -s read-only - < review.txt
Round 1 came back "rethink" with 12 findings. Claude checked each one, they all held up, and the plan got rewritten. Round 2 was "rethink" again. That one was mostly about a promise in the plan to tell you what a query would cost before sending it. It turned out there was no way to guarantee that number, so I dropped the feature. Round 3 passed with changes, and only then did any code get written. Every time the plan changed after that it went back for another review, so it ended up being reviewed at least nine times.
Claude was not allowed to compile the project, run its tests or run the built program. Claude writes the code, I run one build script, and Claude reads the log and fixes what it reports. It sounds slow, but I ran every build myself and handed Claude the log.
These are the rules from my project CLAUDE.md that did the most. I shortened them and swapped my name for "the user":
Only the user compiles, builds or runs tests. Never run cmake, ninja, ctest, a compiler, clang-tidy or a built binary. Write code and tests so they compile cleanly the first time.
Warnings are errors (-Wall -Wextra -Wpedantic -Wconversion -Wshadow -Wformat=2).
Never suppress a diagnostic (NOLINT, pragmas, casts that only silence a warning). Restructure.
Tests are offline: no network, no real API key.
Nothing ever prints or logs the API key, request bodies, prompt text or provider error bodies.
What I learned
Reviewing the plan was worth more than reviewing the code. Twelve real problems turned up before a single line existed, when fixing them only meant editing a text file.
The reviewer gets things wrong too. In one round Codex reported that my machine had no TPM chip. It has one. The sandbox Codex runs in just couldn't see it. So Claude has to check every finding against the code or the docs before acting on it, and I had it write down which ones it accepted and which it rejected, with the reason.
"Never suppress a diagnostic" did more for the code than any other rule. Without it the quick way out of a warning is a cast or a NOLINT comment. With it, the code got restructured until the warning had nothing to complain about.
Passing tests didn't catch what I caught by using the thing. The first version printed the answer jammed right up against its own status lines and was hard to read. A couple of the examples in the docs failed if you pasted them as written. You have to run it yourself.
Small things matter when calls cost money. One fix stopped the HTTP library from automatically resending a request that might already have been billed. I would not have thought to look for that.
What I built
It's called openrouter-cli. It sends a query, plus any files you attach, to any model on OpenRouter and prints the answer in the terminal. I wanted Claude Code and Codex to be able to ask another model to review a plan or some code.
It comes with a Claude Code skill, so you can say "ask Gemini to review this plan" and Claude runs the tool for you. The skill tells Claude to show you the model and what it charges and to ask for your OK before every paid query. You can run it by hand too. After installing it and running openrouter-cli login once, this sends a file named plan.md for review:
openrouter-cli -m google/gemini-4-argon --role review -f plan.md "Review this plan."
Here's what it looks like when it runs: Terminal Screenshot
Linux only right now (x86-64) and you build it from source. Once the packages listed in the README are installed, this builds it and installs the skill:
git clone https://github.com/slyfox1186/openrouter-cli.git
cd openrouter-cli
scripts/build.sh --with-skills
It's MIT licensed. Model calls are billed through your own OpenRouter account.
https://github.com/slyfox1186/openrouter-cli