Find a file
kite 63d6108db0 fix(agent): Update file counting logic for accurate review metrics
This change refines how file counts are tracked during the agent's review process. It now correctly excludes deleted files when calculating the number of files being reviewed, ensuring telemetry and error reporting reflect actual processing rather than total diffs. This improves accuracy in monitoring and debugging scenarios.
2026-05-22 22:28:52 +08:00
.claude/commands fix: fix some bug 2026-05-22 21:27:39 +08:00
.github/workflows fix: fix some bug 2026-05-22 21:27:39 +08:00
bin fix: fix some bug 2026-05-22 21:27:39 +08:00
cmd feat: add llm.extra_body config support to disable thinking mode 2026-05-22 21:28:32 +08:00
imgs docs(README): Add Open Benchmark image link 2026-05-22 10:16:18 +08:00
internal fix(agent): Update file counting logic for accurate review metrics 2026-05-22 22:28:52 +08:00
pages feat: add llm.extra_body config support to disable thinking mode 2026-05-22 21:28:32 +08:00
scripts chore(scripts): Update version check 2026-05-22 22:06:07 +08:00
.gitignore fix: fix some bug 2026-05-22 21:27:39 +08:00
.npmignore feat: add environment-driven publish scripts for single-branch workflow 2026-05-21 17:33:46 +08:00
go.mod feat: init 2026-05-20 22:03:52 +08:00
go.sum feat: init 2026-05-20 22:03:52 +08:00
LICENSE feat: init 2026-05-20 22:03:52 +08:00
Makefile chore(release): bump version to v1.0.0 and fix asset naming consistency 2026-05-21 10:57:13 +08:00
NPM-README.md chore(release): rename npm package to @alibaba-group/open-code-review 2026-05-21 14:53:39 +08:00
package.json fix: fix some bug 2026-05-22 21:27:39 +08:00
README.md docs(README): Add Open Benchmark image link 2026-05-22 10:16:18 +08:00

OpenCodeReview

AI-powered code review CLI that reads Git diffs, sends changed files to a configurable LLM via an agent with tool-use capabilities, and generates structured review comments with line-level precision.

The agent can read full file contents, search the codebase, inspect other changed files for context, and produce deep reviews — not just surface-level diff feedback.

Open Benchmark

Install

npm install -g @alibaba-group/open-code-review

After installation, the ocr command is available globally.

From Source

git clone https://github.com/alibaba/open-code-review.git
cd open-code-review
make build
sudo cp dist/ocr-*/ocr /usr/local/bin/ocr

Quick Start

1. Configure LLM

You must configure an LLM before reviewing code.

# Option A: Interactive config
ocr config set llm.url https://api.anthropic.com/v1/messages
ocr config set llm.auth_token your-api-key-here
ocr config set llm.model claude-opus-4-6
ocr config set llm.use_anthropic true

# Option B: Environment variables (highest priority)
export OCR_LLM_URL=https://api.anthropic.com/v1/messages
export OCR_LLM_TOKEN=your-api-key-here
export OCR_LLM_MODEL=claude-opus-4-6
export OCR_USE_ANTHROPIC=true

Config is stored in ~/.open-code-review/config.json.

The tool also falls back to Claude Code environment variables (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_MODEL) and parses ~/.zshrc / ~/.bashrc for those exports.

2. Test Connectivity

ocr llm test

3. Review

cd your-project

# Workspace mode — review all staged, unstaged, and untracked changes
ocr review

# Branch range — compare two refs
ocr review --from main --to feature-branch

# Single commit
ocr review --commit abc123

Commands

Command Alias Description
ocr review ocr r Start a code review
ocr config set <key> <value> Set configuration values
ocr llm test Test LLM connectivity
ocr viewer ocr v Launch WebUI session viewer on localhost:5483
ocr version Show version info

ocr review Flags

Flag Shorthand Default Description
--repo current dir Git repository root
--from Source ref (e.g., main)
--to Target ref (e.g., feature-branch)
--commit -c Single commit to review
--format -f text Output format: text or json
--concurrency 8 Max concurrent file reviews
--timeout 10 Concurrent task timeout in minutes
--audience human human (show progress) or agent (summary only)
--rule Path to custom JSON review rules
--tools Path to custom JSON tools config

Examples

# Review workspace changes with default settings
ocr review

# Review branch diff with higher concurrency
ocr review --from main --to my-feature --concurrency 4

# Review a specific commit with verbose JSON output
ocr review --commit abc123 --format json --audience agent

# Use custom review rules
ocr review --rule /path/to/my-rules.json

# View review session history in browser
ocr viewer
ocr viewer --addr :3000

Architecture

The review agent follows a three-phase workflow:

  1. Plan Phase — For changes exceeding 50 lines, the agent performs risk analysis before reviewing. Smaller diffs skip directly to the main phase.
  2. Main Task Loop — Each changed file gets its own goroutine. The LLM interacts with built-in tools (read files, search code, read diffs, submit comments) in a conversation loop until it calls task_done.
  3. Memory Compression — When prompt context exceeds token thresholds (60% async, 80% sync), the agent uses three-zone partitioning (frozen / compress / active) to manage context window size.

Key Design Decisions

  • Concurrent per-file processing — Files are reviewed in parallel (default 8 workers). Timeout prevents any single file from blocking others.
  • Dual protocol support — Both Anthropic Messages API and OpenAI Chat Completions API are supported, with automatic URL normalization.
  • Tool-use agent — The LLM has access to domain-specific tools (code_search, file_read, code_comment, file_find, file_read_diff), enabling cross-referential context-aware reviews rather than isolated diff scanning.

Configuration Reference

Config file: ~/.open-code-review/config.json

Key Type Example
llm.url string https://api.openai.com/v1/chat/completions
llm.auth_token string sk-xxxxxxx
llm.model string claude-opus-4-6
llm.use_anthropic boolean true | false
language string English | Chinese (default: Chinese)
telemetry.enabled boolean true | false
telemetry.exporter string console | otlp
telemetry.otlp_endpoint string OTLP collector address
telemetry.content_logging boolean Include prompts in telemetry

Environment variables take precedence over the config file.

Environment Variables

Variable Purpose
OCR_LLM_URL LLM API endpoint URL
OCR_LLM_TOKEN API key / auth token
OCR_LLM_MODEL Model name
OCR_USE_ANTHROPIC true = Anthropic, false = OpenAI

Template Parameters

Internal defaults defined in internal/config/template/task_template.json:

Parameter Default Description
MAX_TOKENS 58888 Max tokens per LLM request
MAX_TOOL_REQUEST_TIMES 20 Max tool-use iterations per file
PLAN_MODE_LINE_THRESHOLD 50 Skip plan phase below this line count
TOOL_REQUEST_WAIT_TIME_MS 10000 Per-tool-request timeout

Built-in Tools

Tools the LLM agent can invoke during review:

Tool Phases Purpose
task_done main_task Terminate the review (DONE/FAILED)
code_comment main_task Submit a line-level review comment
file_read main_task Read file content at a line range
code_search plan + main Search text/regex across files
file_read_diff plan + main View diff content for other changed files
file_find plan + main Find files by filename keyword

System Review Rules

Built-in glob-pattern-matched review checklists per file type, defined in internal/config/rules/system_rules.json:

Pattern Focus Areas
*.java NPE risks, dead loops, switch fallthrough, N+1 queries, thread safety
*.{ts,js,tsx,jsx} Quality, React best practices, async norms, XSS/security
*.kt Null safety, coroutine usage, idiomatic patterns
*{go,py,ets,lua,dart,swift,groovy} Logic bugs, typos
*{cpp,cc,hpp} Smart pointers, RAII, STL, const correctness
*.c malloc/free pairing, buffer overflow
pom.xml / build.gradle SNAPSHOT version prevention
package.json Latest/wildcard versions, dependency conflicts
*mapper*.xml / *dao*.xml SQL injection, performance, logic errors
*.properties Typo detection, duplicate keys, security issues

Override with --rule path/to/rules.json.

Telemetry

OpenTelemetry integration for observability (spans, metrics). Disabled by default.

ocr config set telemetry.enabled true
ocr config set telemetry.exporter otlp
ocr config set telemetry.otlp_endpoint localhost:4317

Set telemetry.content_logging to include LLM prompts and responses in exported data.

Development

make build      # Build for current platform
make test       # Run tests with race detection
make clean      # Remove dist/
make build-all  # Cross-compile (linux/amd64, linux/arm64, darwin/amd64, darwin/arm64)
make dist       # Full release pipeline

License

Apache-2.0 — Copyright 2026 Alibaba