Skip to content
Skip to content
Product / CritiqueCode16 min read

CritiqueCode 0.1.0 Shipped a Contract. This Is Everything After.

0.1.0 was the author that cannot grade its own homework. 0.1.3 adds login, critique/auto, voice, imported skills, workers, and a loopback browser. The ship gate did not move.

Repath Khan

After 0.1.0

Surfaces multiplied. The gate did not.

critique.sh

Direct answer

CritiqueCode 0.1.3 (@critiquedotsh/harness, binary critique-code) is the same author agent as 0.1.0: it implements, then the controller forces independent review and verified repair. What is new: website login with no pasted key, default critique/auto on Critique Inference, voice mode, built-in plus imported SKILL.md folders, critique_task workers (up to three, no nesting), and `critique-code web` on 127.0.0.1. Worker output, critique_run output, and author chat are still not Evidence. none_promoted is still not a correctness proof.

Changelogs lie by accumulation. A list of commands looks like a new product. It is not. CritiqueCode 0.1.0 shipped one decision: the model may write, and it may not promote its own work. Everything after that date is a surface, a route, or a way to fan out implementation without moving the ship gate.

This essay is the comparison people actually search for. What did 0.1.0 include. What 0.1.3 adds. Why each piece exists. What we refused to add so the contract would still mean something a week later.

0.1.3
Current published @critiquedotsh/harness
3
Max concurrent critique_task workers
$0.000003/s
Voice transcription on Inference
127.0.0.1
Web UI bind. LAN hosts are rejected

CritiqueCode is Critique’s author agent. You run it in the git repository you mean to edit. It uses the current working directory. The live kernel is the open-source Pi coding agent library. CritiqueCode imports that library. It does not spawn the pi CLI, and it is not a rename of the Critique CLI sidecar (@critiquedotsh/cli, binary critique).

0.1.0 already had the loop that still defines the product. The author writes through a content-addressed apply path. critique_run is the only workspace exec path, and you approve or deny each request. After a claimed unit of work, or a write-budget trip, the Author Coordinator captures a Change Capsule and runs local review with the author transcript withheld. /repair is verified repair of promoted findings, not auto-applied chatter. Slash lines never go to the model.

The TTY was already a TTY on purpose. Thinking and tools collapse to one live line, then a one-line summary. It does not stream thinking paragraphs. Interactive sessions keep stdout quiet unless you pass --json. OpenRouter Activity, when that route is used, attributes generations to critique.sh, not to the underlying kernel.

Read this table as a product argument, not a feature bingo card. If a row moved, it moved because 0.1.0 made a daily-use tax we were not willing to keep. If a row did not move, it is the contract.

0.1.0 versus current CritiqueCode
Published package is still @critiquedotsh/harness. Binary is still critique-code. Job is still author, then survive review.
Current means published npm 0.1.3 plus the loopback web UI in this tree. Ship notes: critique.sh/version.
Surface0.1.0Current (0.1.3 + web)
JobInteractive author, then forced local review and verified repairUnchanged. Workers and the browser cannot skip /review
Default routeConnect a provider key; Inference availablecritique-code login, then Critique Inference critique/auto. BYOK stays optional
AuthPaste a key into /keys or the environmentBrowser device approval on critique.sh/device. Keys still live in ~/.critique/code/
Author surfaceTTY onlyTTY, --voice, and critique-code web on 127.0.0.1
SkillsAGENTS.md / CLAUDE.md as author instructionsBuilt-in code-review, critique-review, TDD, plus SKILL.md from Claude Code, Codex, Cursor, OpenCode, and Agents folders
Parallel workOne author sessioncritique_task explore / general / implement. Max three. No nesting. Not a reviewer
EvidenceAuthor chat and critique_run output are not EvidenceUnchanged. Worker output is also not Evidence
BillingProvider key, or Inference if connectedInference bills raw $/1M tokens, not the PR review credit pool. Voice is $0.000003 per second of audio
15 AUG 2026
0.1.0: the contract ships

@critiquedotsh/harness publishes. Binary critique-code. Pi author session, user-gated critique_run, compact TTY, forced local review, verified repair. Not the sidecar.

16 AUG 2026
Login, voice, skills, 0.1.2

critique-code login opens the website. Default route becomes Critique Inference. /voice transcribes with Qwen3 ASR 0.6B. Sessions load SKILL.md from the harnesses people already use. npm 0.1.2 matches that tree.

16 AUG 2026
0.1.3: workers

critique_task fans out explore (read-only), general, or implement slices. Up to three at once. They cannot nest. They cannot replace /review or /ship.

16 AUG 2026
Local web UI

critique-code web serves the same kernel in a browser on 127.0.0.1. Approve/deny critique_run in a modal. Not OpenCode’s web app, not Critique Cloud.

0.1.0 could run if you already lived in API keys. That is a fine onboarding story for people who already have OpenRouter, Anthropic, or OpenAI in the environment. It is a terrible first run for everyone else. The failure mode is familiar: the binary prints kernel_required, the user pastes a key into a chat, and you have taught them that credentials belong in the prompt.

critique-code login is the fix. The terminal prints a URL and a short code, opens the browser when it can, and waits. You approve on critique.sh/device. CritiqueCode stores a machine key under ~/.critique/code/ (mode 0600) and sets the default route to Critique Inference. Same flow from an open session: /login. Nothing secret is written into the repository.

BYOK did not go away. /keys and environment variables still accept OpenRouter, OpenAI, Anthropic, Gemini, xAI, Groq, DeepSeek, LLM Gateway, Vercel AI Gateway, and a custom OpenAI-compatible endpoint. If Inference is connected, it stays the default until you change the route in /settings. That order is the product: get to a working author without a paste, then let specialists bring their own providers.

Pinning one frontier model for every turn is how a coding agent looks serious and wastes money. Dumping the session onto a popularity router is how you get a consumer chatbot that happens to see your repo. Neither is a coding policy.

After login, the default model is `critique/auto` on the Inference API. It is a session coding selector over Critique-resold models only: an efficient specialist first, sticky while the loop is healthy, one escalate onto a frontier rung if tools keep failing. It does not search the full OpenRouter catalogue. Credits bill the routed id, not the word auto. The argument is in Stop putting Kimi on a rename.

Inference traffic bills raw USD from token rates. That spend does not consume the PR review credit pool. Voice is a different meter: $0.000003 per second of audio through qwen/qwen3-asr-0.6b. OpenRouter remains selectable. When that route is on, the default model is deepseek/deepseek-v4-flash-0731.

A long intent is easier to say than to type. A review command is easier to bark than to slash. 0.1.0 had no microphone path, so people either typed a paragraph or abandoned the TTY. Voice mode is the missing input, not a second agent.

/voice records one clip (Enter to stop). /voice on keeps listening after each reply. critique-code --voice starts already listening. Transcription uses Qwen3 ASR 0.6B. Spoken review, repair, ship, and exit still run as commands. An empty clip after /voice on returns you to the keyboard. The recorder is bundled ffmpeg-static. You do not need a system sox install.

Replies stay on screen. The agent does not read them aloud. Voice still needs an interactive TTY, which is why the local web UI does not pretend to own the microphone yet. Product notes: Talk to code.

People do not start from a blank SKILL.md. They already have folders under .claude/skills, .codex/skills, .cursor/skills, .agents/skills, .opencode/skills. 0.1.0 already loaded AGENTS.md, CRITIQUE.md, and CLAUDE.md as author instructions. That was not enough. A coding agent that ignores the skills you already wrote is asking you to migrate for sport.

Current CritiqueCode ships built-in author skills for code review, when to run `/review`, and TDD. Every session also loads SKILL.md from those project and home directories. Built-in names win on collision, so a Claude Code skill named code-review cannot replace /review. Imported skills are untrusted text, same as CLAUDE.md. They cannot grant a shell or treat checks as Evidence.

critique-code skills lists the catalog. 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. Independent evidence still happens on /review / /ship, not as a Claude Code-style reviewer subagent.

0.1.0 was one author. That is slow when the next step is “find every call site” or “implement this slice while I keep talking.” Claude Code solved the latency with subagents. The failure mode is obvious if you have watched an agent review its own patch: the worker that wrote the code is happy to LGTM it.

0.1.3 adds `critique_task`. The author can fan out explore (read-only search), general, or implement slices in the same working tree. Up to three run at once. Writes still go through the CAS path. critique_run still needs your approval. Workers cannot nest critique_task. Explore workers cannot write or request a run.

0.1.0
One author sessionYou approve critique_runCoordinator captures a Change Capsule/review withholds the transcriptVerified repair if the controller allows it
0.1.3
Author plus up to three critique_task workersExplore is read-only; implement writes through CASWorker output is not Evidence/review and /ship still own promotionVerified repair still needs a stored review run

The ship gate did not move. Independent evidence still happens on /review / /ship. Worker output and critique_run output are not Evidence. That is the whole point of adding workers inside this harness instead of telling people to spawn a second coding agent and hope it is honest.

The TUI is a tax. You cannot select a tool card with a mouse. You cannot keep a review panel beside the chat without splitting tmux. OpenCode already shipped opencode web. Codex published the same split as an app-server. Copying their product would have been the cheap way to look current. It would also have mixed two Critique packages and thrown away the tool policy.

critique-code web is a second client of the same author loop. It binds 127.0.0.1 only. 0.0.0.0 is rejected. The kernel stays in this process: Pi createAgentSession, CAS writes, user-gated critique_run in a modal, /review / /repair / /ship with the author transcript withheld. APIs sit behind a per-process token. A foreign Origin on POST returns 403. The tab can close. The process keeps going.

It is not OpenCode’s SolidJS app. It is not Pi’s browser Agent with IndexedDB keys. It is not Critique Cloud. Voice still lives on the TTY path. Settings pickers still have a terminal UI. We did not wrap Electron, add an LSP, or ship an unrestricted terminal. Those are how a “web coding agent” quietly becomes a different product. The write-up is CritiqueCode leaves the terminal.

This is the section that should survive a rewrite of the rest of the binary. If a later version moves these rows, it is a different product and should say so.

Still true
  • Author implements. Controller forces review. Promotion stays on /review and /ship
  • Slash lines are never sent to the model. Unknown /foo is rejected
  • The model cannot pick a working directory, open a network path, or run a process on its own
  • critique_run output, named checks, worker output, and author chat are not Evidence
  • none_promoted is not a correctness proof
  • Secrets stay in ~/.critique/code/, not the repo. Override with CRITIQUE_CODE_HOME
  • This is not @critiquedotsh/cli. Do not call critique finish as a substitute
Still not a claim
  • Human merge judgment is not replaced
  • A quiet review is not a proof the tree is correct
  • A browser UI is not a cloud agent
  • A worker is not a reviewer
  • Voice is not a spoken assistant that reads replies aloud

Depth flags on review are still quick, standard, and paranoid. Focus can still include general and security. Pi may receive the route. It cannot increase its own depth, add lanes, or bypass required prechecks. Secret scanning is still the only blocking preflight check. If it is missing, unusable, or material, source does not reach Pi.

There is no migrate step and no new binary name. Install the current package, cd into the repository you intend to change, and connect Inference if you have not already. Node.js 20.19 or newer is still required. pnpm critique-code from a Critique checkout uses that checkout as cwd unless you pass --cwd. That is still the wrong default when you are trying the agent on another project.

Upgrade, login, pick a surface
Same npm org as the sidecar. Different package. Different binary.

Upgrade the published install

npm install --global @critiquedotsh/harness@latest
critique-code help

Then stay in the target repo. The process uses cwd.

Connect Inference without a paste

cd /path/to/your-project
critique-code login
critique-code

Approve on critique.sh/device. /login works inside a session.

TTY, voice, or local browser

critique-code
critique-code --voice
critique-code web

web binds 127.0.0.1. Voice still needs a TTY microphone.

Which current surface to open
  1. 1
    Do you already use Claude Code, Codex, Cursor, or OpenCode and like that author?
    Keep it. Install @critiquedotsh/cli and call Critique as the independent finish pass. CritiqueCode is the wrong binary for that job.
  2. 2
    Do you want Critique to author, and you live in a terminal?
    critique-code, or critique-code --voice if you would rather speak the prompt.
  3. 3
    Do you want the same contract without a TUI?
    critique-code web in the repo cwd. Review is still /review. The process is still local.
  4. 4
    Did someone tell you 0.1.3 finally lets the author grade itself if the UI is nicer?
    No. Worker output is not Evidence. The browser is not Evidence. none_promoted is still not a proof.

Install current CritiqueCode in the repo you mean to change
npm install --global @critiquedotsh/harness@latest, run critique-code login, then critique-code, --voice, or web. Review is still /review. none_promoted is still not a proof.