critique requires Bun. It does not run under Node.js.
# Run directly without installing
bunx critique
# Or install globally
bun install -g critiqueOpen the current working tree diff in the terminal:
critiqueUpload the same diff and get a shareable URL:
critique --web "Current working tree"Review staged changes:
critique --staged
critique --staged --web "Staged changes"critique follows the same mental model as git diff.
# View unstaged changes, including untracked files
critique
# View staged changes
critique --staged
# View changes since a ref
critique HEAD~1
critique main
# View one commit only
critique --commit HEAD~1
critique --commit abc1234
# Compare two refs, PR style
critique main HEAD
critique main feature-branch
# Watch the working tree and refresh on changes
critique --watch
# Filter files by glob pattern
critique --filter "src/**/*.ts"
critique --filter "src/**/*.ts" --filter "lib/**/*.js"| Key | Action |
|---|---|
← / → |
Navigate between files |
↑ / ↓ |
Scroll up and down |
Ctrl+P |
Open file selector dropdown |
Option held |
Fast scroll at 10x speed |
Esc |
Close dropdown |
--web renders the diff with the same terminal renderer, uploads it to critique.work, and prints a shareable URL.
# Working tree changes
critique --web "Fix auth retry"
# Staged changes
critique --staged --web "Release notes"
# Changes since a ref
critique main --web "Branch changes"
# One commit
critique --commit HEAD --web "Latest commit"
# PR-style branch diff
critique main HEAD --web "Current branch"
# JSON output for scripts
critique --web "Deploy changes" --jsonGenerated URLs look like critique.work/v/<id>.
| Flag | Description | Default |
|---|---|---|
--web [title] |
Generate and upload a web preview | Critique Diff |
--staged |
Show staged changes | none |
--commit <ref> |
Show changes from a specific commit | none |
--cols <n> |
Desktop render width | 240 |
--mobile-cols <n> |
Mobile render width | 100 |
--filter <pattern> |
Filter files by glob, can be repeated | none |
--theme <name> |
Use a fixed theme instead of auto light and dark mode | none |
--open |
Open the URL in your browser | none |
--json |
Print { url, id, files } for scripts |
none |
┌─────────────────────────────────────┐
│ git diff │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ opentui test renderer │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ HTML variants and raw patch │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ critique.work upload │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ shareable URL, optional .patch │
└─────────────────────────────────────┘
The CLI does not generate a local HTML file. It uploads to critique.work. Local HTML export is tracked separately in issue #42.
Uploaded diffs expire after 7 days unless you use a license key. Identical diffs reuse the same content hash URL.
Every --web upload also stores the raw unified diff. Append .patch to any critique URL to fetch it.
CRITIQUE_URL='https://critique.work/v/<id>'
# View the patch in your terminal
curl "$CRITIQUE_URL.patch"
# Apply the patch directly to your repo
curl -s "$CRITIQUE_URL.patch" | git apply
# Reverse the patch
curl -s "$CRITIQUE_URL.patch" | git apply --reversecritique review asks an agent to explain a diff in a readable order. It can use OpenCode or Claude Code.
# Review unstaged changes with OpenCode
critique review
# Use Claude Code instead
critique review --agent claude
# Review staged changes
critique review --staged
# Review changes since a ref
critique review HEAD~1
critique review main
# Review one commit
critique review --commit HEAD~1
# Include coding session context
critique review --agent opencode --session <session-id>
critique review --agent claude --session <session-id>
# Upload the review as a web preview
critique review --web
critique review --web --open| Flag | Description |
|---|---|
--agent <name> |
AI agent to use: opencode or claude |
--staged |
Review staged changes |
--commit <ref> |
Review one commit |
--session <id> |
Include session context, can be repeated |
--web |
Upload the review as a web preview |
--pdf [filename] |
Generate a PDF. See the e-reader guide |
--open |
Open the generated URL or PDF |
--filter <pattern> |
Filter files by glob |
Configure critique as your git difftool:
git config --global diff.tool critique
git config --global difftool.critique.cmd 'critique difftool "$LOCAL" "$REMOTE"'Then run:
git difftool HEAD~1Use critique as a custom pager in lazygit:
# ~/.config/lazygit/config.yml
git:
pagers:
- pager: critique --stdinFor details, see lazygit's Custom Pagers documentation.
critique pick lets you apply selected files from another branch to the current checkout.
critique pick feature-branchSelected files are applied as patches. Deselected files are restored.
critique hunks gives scripts and agents a stable alternative to git add -p.
# List unstaged hunks with stable IDs
critique hunks list
# List staged hunks
critique hunks list --staged
# Filter by file pattern
critique hunks list --filter "src/**/*.ts"
# Stage one hunk by ID
critique hunks add 'src/main.ts:@-10,6+10,7'
# Stage multiple hunks
critique hunks add 'src/main.ts:@-10,6+10,7' 'src/utils.ts:@-5,3+5,4'Hunk IDs use this format:
file:@-oldStart,oldLines+newStart,newLines
The ID comes from the unified diff @@ header, so it stays stable across runs.
Generate PDFs from diffs and AI reviews to read on Kindle or Boox e-readers.
critique --pdf
critique review --pdf
critique review main --pdf --openThe PDF preserves syntax highlighting and diff formatting. Email it to your Kindle, drop it in BooxDrop, or save it to a synced Google Drive folder. See docs/e-reader-guide.md for setup details.
This package ships a skill file that teaches AI coding agents how to use critique for diff URLs, PDFs, images, and selective hunk staging.
npx -y skills add remorses/critique- Syntax highlighting: powered by Tree-sitter via opentui
- Split view: side-by-side comparison for wide terminals, unified view on narrow terminals
- Word-level diff: highlights exact word changes inside modified lines
- File navigation: quick file switcher with fuzzy search
- Click to open: click line numbers to open in your editor with
REACT_EDITOR - Watch mode: refreshes as you edit files
- Web previews: hosted shareable URLs on critique.work
- Raw patches: every web preview has a
.patchendpoint - PDF output: optimized for code review away from the terminal
TypeScript, JavaScript, TSX, JSX, JSON, Markdown, HTML, CSS, Python, Rust, Go, Java, C, C++, C#, Ruby, PHP, Scala, Haskell, Julia, OCaml, Clojure, Swift, Nix, YAML, and Bash.
| Environment Variable | Description | Default |
|---|---|---|
REACT_EDITOR |
Editor command for click-to-open | zed |
CRITIQUE_WORKER_URL |
Custom worker URL for web previews | https://critique.work |
Lock files are automatically hidden from diffs:
pnpm-lock.yamlpackage-lock.jsonyarn.lockbun.lockbbun.lockCargo.lockpoetry.lockGemfile.lockcomposer.lock
Files with more than 6000 lines of diff are also hidden for performance.
- opentui: React-based terminal UI framework
- Tree-sitter: syntax highlighting
- diff: diff algorithm
- Hono: web framework for the preview worker
Sponsored by CodeRabbit.
MIT