CritiqueCode
Author agent that implements, then is forced through review and verified repair. Published as @critiquedotsh/harness — not the Critique CLI sidecar.
CritiqueCode is the author agent. It implements in an interactive session, then the controller forces the existing review and verified-repair loop. It is a Claude Code-style coding agent, not a rename of the sidecar reviewer.
The package lives in the same npm org as the sidecar:
| Product | Package | Binary |
|---|---|---|
| CritiqueCode (author) | @critiquedotsh/harness | critique-code |
| Critique CLI (sidecar reviewer) | @critiquedotsh/cli | critique |
Do not install CritiqueCode by changing @critiquedotsh/cli. Do not call critique finish as a substitute for this harness.
Install
Run CritiqueCode in the repository you want to edit. The process uses the current working directory.
Published name (same org as the CLI):
npm install --global @critiquedotsh/harness
cd /path/to/your-project
critique-codeFrom this Critique checkout, without installing globally:
cd /path/to/your-project
node /path/to/critique/packages/critique-code/bin/critique-code.mjspnpm critique-code from the Critique checkout uses this repository as cwd unless you pass --cwd. That is the wrong default when you are trying the agent on another project.
Defaults
- Critique Inference
critique/autoaftercritique-code login(approve on the website, no pasted key) or acrt_/CRITIQUE_API_KEY - OpenRouter, OpenAI, Anthropic, and other BYOK keys remain available in
/keysand/settings. They do not take over the default when Critique Inference is connected. - OpenRouter
deepseek/deepseek-v4-flash-0731only when that is the selected route
Stored keys live in ~/.critique/code/auth.json, not the repository. Override the home directory with CRITIQUE_CODE_HOME.
Point CritiqueCode at the Inference API. Inference bills raw $/1M input and output tokens, not review credits. critique/auto is the coding selector on that API.
Connect without a key
critique-code loginThe terminal prints a URL and code, opens the browser when it can, and waits. Approve on critique.sh/device. CritiqueCode stores a machine key under ~/.critique/code/ and uses Critique Inference.
Same flow from an interactive session: /login.
Commands
critique-code
critique-code login
critique-code web [--port <n>]
critique-code chat [--intent <text>] [--models provider/model,...] [--cwd <dir>] [--json]
critique-code --voice
critique-code settings | keys | models
critique-code review [--depth quick|standard|paranoid] [--focus general,security]
critique-code repair <review-run-id>
critique-code capabilities
critique-code skills
critique-code import-skillsInteractive session: type / or /help for the command picker. Slash lines are never sent to the model. /login, /voice, /voice on, /review, /review all, /repair, /ship, /skills, /settings, /models, /keys, /done, /exit.
critique-code web opens the same author session in a local browser on 127.0.0.1. The kernel stays in this process. It is not the Critique CLI sidecar and not Critique Cloud.
Voice mode
Speak to the author and the reviewer. Transcription uses Qwen3 ASR 0.6B (qwen/qwen3-asr-0.6b) on the Inference API. The transcript is ordinary session text: prompts go to the author, and spoken review, repair, ship, and exit match the typed commands.
| Command | Effect |
|---|---|
/voice | Record one prompt. Press Enter to stop. |
/voice on | Keep listening after each reply. |
/voice off | Return to the keyboard. |
critique-code --voice | Start the session already listening. |
An empty clip after /voice on drops you back to typing. CritiqueCode ships a bundled ffmpeg recorder (ffmpeg-static). You do not need a system sox or ffmpeg install.
Needs a microphone, an interactive TTY, and Critique Inference (/login or a crt_ key) or an OpenRouter key. Billing is $0.000003 per second of audio, not token rates. Voice is dictation in. The agent does not read replies aloud.
Skills
CritiqueCode ships built-in author skills for code review, when to run /review, and TDD. Every session also loads SKILL.md folders from the harnesses people already use, without a migrate step:
- Project:
.claude/skills,.agents/skills,.codex/skills,.opencode/skills,.cursor/skills,.critique/skills - User:
~/.claude/skills,~/.codex/skills, and~/.critique/code/skills
Built-in skills win on name collision, so a Claude Code code-review skill cannot replace /review. Imported skills are untrusted text, same as CLAUDE.md / AGENTS.md (already loaded). They cannot grant a shell or treat checks as Evidence.
critique-code skills lists what this repo would load. critique-code import-skills copies discovered folders into ~/.critique/code/skills so they survive after you uninstall the old harness. /skills is the same list in the TUI.
The model cannot run a process, pick a working directory, or request network on its own. It can call critique_run; you approve or deny each request in the TUI. It can call critique_task to fan out explore (read-only) or general/implement workers in the same tree. Worker output is not Evidence. Promotion stays on /review and /ship.
The TTY shows a wordmark, a compact live status (thinking / write path / read path), then a one-line ▸ summary before the reply. It does not stream thinking paragraphs.
Interactive TTY sessions keep stdout quiet. Pass --json for the session envelope. review, repair, and capabilities still print JSON on stdout. Live chrome goes to stderr. none_promoted is not a correctness proof.
OpenRouter Activity attributes CritiqueCode generations to critique.sh (HTTP-Referer https://critique.sh, title critique.sh), not to the underlying agent kernel.
See also: Inference API · Critique CLI
CLI Reference
Commands, complete-repository review semantics, bundled methodologies, model roles, repair modes, and agent collaboration for the Critique CLI.
Change Control
How Critique governs the merge boundary with Change Passports, agent risk scoring, evidence contracts, merge policy as code, verified repair, and a learning loop.