Skip to content
Critique/docs
Platform

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:

ProductPackageBinary
CritiqueCode (author)@critiquedotsh/harnesscritique-code
Critique CLI (sidecar reviewer)@critiquedotsh/clicritique

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-code

From this Critique checkout, without installing globally:

cd /path/to/your-project
node /path/to/critique/packages/critique-code/bin/critique-code.mjs

pnpm 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/auto after critique-code login (approve on the website, no pasted key) or a crt_ / CRITIQUE_API_KEY
  • OpenRouter, OpenAI, Anthropic, and other BYOK keys remain available in /keys and /settings. They do not take over the default when Critique Inference is connected.
  • OpenRouter deepseek/deepseek-v4-flash-0731 only 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 login

The 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-skills

Interactive 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.

CommandEffect
/voiceRecord one prompt. Press Enter to stop.
/voice onKeep listening after each reply.
/voice offReturn to the keyboard.
critique-code --voiceStart 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