Open Code Review – AI 기반 코드 리뷰 CLI 도구
Source: Hacker News
오픈 소스 AI 코드 리뷰 에이전트.
영어 | 简体中文
Open Code Review란?
Open Code Review는 AI 기반 코드 리뷰 CLI 도구입니다. 원래는 알리바바 그룹의 내부 공식 AI 코드 리뷰 어시스턴트로 시작했으며, 지난 2년 동안 수만 명의 개발자를 지원하고 수백만 건의 코드 결함을 식별했습니다. 대규모 검증을 거친 뒤, 커뮤니티를 위해 오픈 소스 프로젝트로 인큐베이팅했습니다. 모델 엔드포인트만 설정하면 바로 사용할 수 있습니다.
Git diff를 읽고, 변경된 파일을 도구 사용 기능이 있는 에이전트를 통해 구성 가능한 LLM에 전송한 뒤, 라인‑레벨 정밀도의 구조화된 리뷰 코멘트를 생성합니다. 에이전트는 전체 파일 내용을 읽고, 코드베이스를 검색하며, 다른 변경 파일을 컨텍스트로 검사하고, 표면적인 diff 피드백을 넘어선 깊이 있는 리뷰를 제공합니다.
범용 에이전트의 문제점
Claude Code with Skills와 같은 범용 에이전트를 코드 리뷰에 사용해 본 적이 있다면, 다음과 같은 어려움을 겪었을 가능성이 높습니다:
- 불완전한 커버리지 — 큰 변경 세트에서는 에이전트가 “꼭짓점을 생략”하고 일부 파일만 선택적으로 리뷰해 다른 파일을 놓칩니다.
- 위치 드리프트 — 보고된 이슈가 실제 코드 위치와 일치하지 않아, 라인 번호나 파일 참조가 목표에서 벗어납니다.
- 불안정한 품질 — 자연어 기반 Skills는 디버깅이 어렵고, 프롬프트가 조금만 바뀌어도 리뷰 품질이 크게 변동합니다.
근본 원인: 순수 언어 기반 아키텍처는 리뷰 프로세스에 대한 강력한 제약이 부족합니다.
핵심 설계: 결정론적 엔지니어링 × 에이전트 하이브리드
Open Code Review의 핵심 철학은 결정론적 엔지니어링과 에이전트를 결합해 각각이 가장 잘하는 일을 수행하도록 하는 것입니다.
결정론적 엔지니어링 — 하드 제약
잘못될 수 없는 리뷰 단계에서는 엔지니어링 로직—언어 모델이 아니라—이 정확성을 보장합니다:
- 정밀 파일 선택 — 리뷰가 필요한 파일을 정확히 판단하고 필터링해야 할 파일을 구분해 중요한 변경을 놓치지 않게 합니다.
- 스마트 파일 번들링 — 관련 파일을 하나의 리뷰 단위로 묶습니다(예:
message_en.properties와message_zh.properties). 각 번들은 격리된 컨텍스트를 가진 서브‑에이전트로 실행돼, 대규모 변경 세트에서도 안정적으로 동작하고 자연스럽게 병렬 리뷰를 지원합니다. - 세분화된 규칙 매칭 — 파일 특성에 맞춰 리뷰 규칙을 매칭해 모델의 주의를 정확히 집중시키고, 소스 단계에서 정보 잡음을 제거합니다. 순수 언어 기반 규칙 안내에 비해 템플릿 엔진 기반 매칭은 더 안정적이고 예측 가능합니다.
- 외부 포지셔닝 및 리플렉션 모듈 — 독립적인 코멘트 위치 지정과 코멘트 반영 모듈이 AI 피드백의 위치 정확도와 내용 정확도를 체계적으로 향상시킵니다.
에이전트 — 동적 의사결정
에이전트는 가장 중요한 영역, 즉 동적 의사결정과 동적 컨텍스트 검색에 강점을 집중합니다:
- 시나리오‑튜닝 프롬프트 — 코드 리뷰에 깊이 최적화된 프롬프트 템플릿으로 효율성을 높이고 토큰 소비를 줄입니다.
- 시나리오‑튜닝 툴셋 — 대규모 프로덕션 데이터의 툴 호출 트레이스를 심층 분석해 도출한 툴셋(호출 빈도 분포, 툴별 반복 비율, 새로운 툴이 전체 호출 체인에 미치는 영향 등)으로, 일반적인 에이전트 툴킷보다 코드 리뷰에 더 안정적이고 예측 가능한 전용 툴셋을 제공합니다.
How to Use
CLI
Install
Via NPM (Recommended)
npm install -g @alibaba-group/open-code-review
설치 후, ocr 명령을 전역에서 사용할 수 있습니다.
From GitHub Release
GitHub Releases에서 최신 바이너리를 다운로드합니다:
-
macOS (Apple Silicon)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-arm64 chmod +x ocr && sudo mv ocr /usr/local/bin/ocr -
macOS (Intel)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-darwin-amd64 chmod +x ocr && sudo mv ocr /usr/local/bin/ocr -
Linux (x86_64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-amd64 chmod +x ocr && sudo mv ocr /usr/local/bin/ocr -
Linux (ARM64)
curl -Lo ocr https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-linux-arm64 chmod +x ocr && sudo mv ocr /usr/local/bin/ocr -
Windows (x86_64) —
ocr.exe를PATH에 포함된 디렉터리로 이동curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-amd64.exe -
Windows (ARM64) —
ocr.exe를PATH에 포함된 디렉터리로 이동curl -Lo ocr.exe https://github.com/alibaba/open-code-review/releases/latest/download/opencodereview-windows-arm64.exe
From Source
git clone https://github.com/alibaba/open-code-review.git
cd open-code-review
make build
sudo cp dist/opencodereview /usr/local/bin/ocr
Quick Start
1. Configure LLM
코드 리뷰를 수행하기 전에 반드시 LLM을 설정해야 합니다.
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
설정은 ~/.opencodereview/config.json에 저장됩니다. 또한 Claude Code 환경 변수(ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_MODEL)와 호환되며, /.zshrc/.bashrc`에서 해당 export를 파싱합니다./
2. Test Connectivity
ocr llm test
3. Review
cd your-project
# Workspace mode — 모든 staged, unstaged, untracked 변경 사항 리뷰
ocr review
# Branch range — 두 ref 비교
ocr review --from main --to feature-branch
# Single commit
ocr review --commit abc123
Integrate with Coding Agents
OCR은 AI 코딩 에이전트에 슬래시 명령으로 원활히 통합될 수 있어, 에이전트 워크플로우 내에서 직접 코드 리뷰를 수행할 수 있습니다.
Option 1: Install as a Skill
npx skills add alibaba/open-code-review --skill open-code-review
이 명령은 skills registry에서 open-code-review 스킬을 설치하며, 코딩 에이전트가 ocr을 호출해 코드 리뷰를 수행하고, 이슈를 우선순위별로 분류하며, 필요 시 수정까지 적용하도록 학습시킵니다.
Option 2: Install as a Claude Code Plugin
Claude Code에서 다음 명령을 실행합니다:
/plugin marketplace add alibaba/open-code-review
/plugin install open-code-review@open-code-review
이 명령은 /open-code-review:review 슬래시 명령을 등록하여 OCR을 실행하고 자동으로 이슈를 필터링 및 수정합니다.
Option 3: Copy the Command File Directly
패키지 매니저 없이 빠르게 설정하려면 명령 파일을 복사해 Claude Code에서 /open-code-review 슬래시 명령을 사용할 수 있습니다.
-
Project‑level (git을 통해 팀과 공유):
mkdir -p .claude/commands
curl -o .claude/commands/open-code-review.md \
https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md
- 사용자 수준 (모든 프로젝트에 걸친 개인 전역 사용):
mkdir -p ~/.claude/commands
curl -o ~/.claude/commands/open-code-review.md \
https://raw.githubusercontent.com/alibaba/open-code-review/main/plugins/open-code-review/commands/review.md
전제 조건: 모든 통합 방법은 ocr CLI가 설치되고 LLM이 구성되어 있어야 합니다. 위의 Install 및 Configure LLM 섹션을 참조하세요.
CI/CD 통합
OCR은 CI/CD 파이프라인에 통합되어 Merge Request / Pull Request에 대한 코드 리뷰를 자동화할 수 있습니다.
ocr review \
--from "origin/main" \
--to "origin/feature-branch" \
--format json
--format json 플래그는 CI 스크립트에서 파싱하기에 적합한 기계 판독 가능한 결과를 출력합니다.
예제는 examples/ 디렉터리에서 확인할 수 있습니다:
github_actions/— GitHub Actions 통합 예시gitlab_ci/— GitLab CI 통합 예시
Commands
| Command | Alias | Description |
|---|---|---|
ocr review | ocr r | 코드 리뷰 시작 |
ocr rules check | — | 파일 경로에 적용되는 리뷰 규칙 미리 보기 |
ocr config set | — | 구성 값을 설정 |
ocr llm test | — | LLM 연결 테스트 |
ocr viewer | ocr v | localhost:5483에서 WebUI 세션 뷰어 실행 |
ocr version | — | 버전 정보 표시 |
ocr review Flags
| Flag | Shorthand | Default | Description |
|---|---|---|---|
--repo | — | current dir | Git 저장소 루트 |
--from | — | — | 소스 ref (예: main) |
--to | — | — | 대상 ref (예: feature-branch) |
--commit | -c | — | 리뷰할 단일 커밋 |
--preview | -p | false | LLM을 실행하지 않고 리뷰될 파일 미리 보기 |
--format | -f | text | 출력 형식: text 또는 json |
--concurrency | — | 8 | 최대 동시 파일 리뷰 수 |
--timeout | — | 10 (minutes) | 동시 작업 타임아웃 |
--audience | — | human | human (진행 상황 표시) 또는 agent (요약만) |
--rule | — | — | 사용자 정의 JSON 리뷰 규칙 경로 |
--max-tools | — | built-in | 파일당 최대 도구 호출 라운드; 템플릿 기본값보다 클 때만 적용 |
--tools | — | — | 사용자 정의 JSON 도구 구성 경로 |
예시
# LLM 호출 없이 검토될 파일 미리 보기
ocr review --preview
ocr review -c abc123 -p
# 기본 설정으로 작업 공간 변경 사항 검토
ocr review
# 높은 동시성을 사용해 브랜치 차이점 검토
ocr review --from main --to my-feature --concurrency 4
# 상세 JSON 출력과 함께 특정 커밋 검토
ocr review --commit abc123 --format json --audience agent
# 사용자 정의 검토 규칙 사용
ocr review --rule /path/to/my-rules.json
# 파일에 적용되는 규칙 미리 보기
ocr rules check src/main/java/com/example/Foo.java
ocr rules check --rule custom.json src/main/resources/mapper/UserMapper.xml
# 브라우저에서 검토 세션 기록 보기
ocr viewer
ocr viewer --addr :3000
뷰어 보안
뷰어는 세션 JSONL 내용(LLM 요청 메시지와 응답)을 HTTP를 통해 제공합니다. 모든 요청에 대해 Host‑header 허용 목록을 적용합니다: 루프백 이름(localhost, 127.0.0.0/8, ::1)과 실제 바인드 호스트는 항상 허용됩니다. 와일드카드 바인드(--addr :3000, --addr 0.0.0.0:3000)와 기타 비루프백 호스트명은 OCR_VIEWER_ALLOWED_HOSTS 환경 변수(쉼표‑구분)로 추가해야 합니다:
OCR_VIEWER_ALLOWED_HOSTS=review.internal,ocr.lan ocr viewer --addr :3000
이는 로컬 뷰어에 대한 DNS‑리바인딩 공격을 차단합니다.
Review Rules
OCR은 네 단계 우선순위 체인을 사용하여 검토 규칙을 해결합니다. 각 단계는 first‑match‑wins 방식을 사용합니다: 파일 경로가 패턴과 일치하면 해당 규칙이 적용되고, 그렇지 않으면 다음 단계로 넘어갑니다.
| Priority | Source | Path | Description |
|---|---|---|---|
| 1 (highest) | --rule flag | User‑specified path | CLI 명시적 오버라이드 |
| 2 | Project config | /.opencodereview/rule.json | 프로젝트별 규칙, git에 커밋 가능 |
| 3 | Global config | ~/.opencodereview/rule.json | 사용자 전체 개인 설정 |
| 4 (lowest) | System default | Embedded system_rules.json | 일반적인 언어와 파일 유형을 다루는 내장 규칙 |
Rule File Format
{
"rules": [
{
"path": "force-api/**/*.java",
"rule": "All new methods must validate required parameters for null values"
},
{
"path": "**/*mapper*.xml",
"rule": "Check SQL for injection risks, parameter errors, and missing closing tags"
}
]
}
path는**재귀 매칭과{java,kt}중괄호 확장을 지원합니다.- 각 레이어 내에서 규칙은 선언 순서대로 평가됩니다.
