Cada pocas semanas aparece otro revisor de código con IA en GitHub trending, y casi todos son lo mismo: un prompt envuelto sobre un agente de propósito general. Open Code Review (OCR), de Alibaba, es una apuesta distinta. Un pipeline determinista decide qué se revisa y bajo qué reglas, y el agente LLM se ocupa solo de la parte que requiere criterio. Tiene 47.167 estrellas en GitHub (consultadas el 2026-10-14) y licencia Apache-2.0.
En esta guía te cuento cómo funciona, qué demuestra y qué no su propio benchmark, cómo configurarlo y meterlo en CI, qué sale de tu máquina y cuándo conviene evitarlo. Para este post leí el README, la documentación y las notas de versión; no lo corrí sobre un repo de producción, y etiqueto cada número que viene del propio proyecto.
1. Qué Es Open Code Review
Open Code Review es un CLI en Go (ocr) que lee un diff de Git, envía los archivos modificados a un LLM configurable mediante un agente con uso de herramientas, y devuelve comentarios de revisión estructurados y anclados a números de línea. Según su README nació como el asistente interno de code review con IA de Alibaba Group y se liberó tras unos dos años de uso interno. Además de diffs, ocr scan revisa archivos completos en directorios que no tienen un diff significativo.
Datos del repo (verificados el 14 de oct. de 2026)
- Repositorio: github.com/alibaba/open-code-review
- Estrellas: 47.167 (API de GitHub, 2026-10-14) · repo creado el 2026-05-18
- Forks: 3.433
- Licencia: Apache-2.0
- Lenguaje: Go
- Última versión: v1.13.0 (2026-10-13), misma versión en npm
- Requiere: Git ≥ 2.41 (README) · Node.js ≥ 18 para instalar con npm (doc de quickstart)
- Origen: “dos años” y “decenas de miles de desarrolladores” son afirmaciones del propio proyecto, sin verificación independiente
Las estrellas son atención, no prueba. 47K en menos de cinco meses dice que la propuesta pegó; no dice que la calidad de revisión se sostenga en tu stack. Las secciones siguientes separan lo que muestra la documentación de lo que deberías probar vos.
El ritmo de releases es alto
Entre el 2026-09-28 y el 2026-10-13 el proyecto publicó v1.12.10, v1.12.11, v1.12.12, v1.12.13 y v1.13.0. Es mantenimiento sano, pero los flags y defaults se mueven con él. Fijá la versión en CI (detalles en la sección 7).
2. Pipeline de Reglas + LLM vs. Revisión Agéntica
La forma habitual de armar un revisor con IA es darle a un agente de código de propósito general un skill de review y dejar que decida todo: qué archivos abrir, qué chequear, dónde anclar cada comentario. El README nombra tres modos de falla que atribuye a ese enfoque:
Cobertura incompleta
En cambios grandes los agentes tienden a recortar camino: revisan algunos archivos y se saltean otros sin avisar.
Deriva de posición
Los problemas reportados muchas veces no coinciden con la ubicación real en el código; los números de línea y las referencias a archivos se corren.
Calidad inestable
Los skills en lenguaje natural son difíciles de depurar y la calidad de la revisión fluctúa con cambios mínimos del prompt.
La respuesta de OCR es sacar del prompt los pasos que no pueden fallar y llevarlos a código. La comparación siguiente es mi resumen de la sección de diseño del README:
Revisión con agente guiado por prompt
- • El modelo decide qué archivos se revisan
- • El modelo reporta números de línea y rutas de archivo
- • Las reglas viven como prosa dentro del prompt
- • Una sola conversación larga cubre todo el PR
OCR: pipeline + agente
- • El código selecciona y filtra archivos, así que nada se saltea en silencio
- • Módulos separados resuelven posiciones de línea y filtran comentarios débiles
- • Las reglas se asignan por archivo con globs y luego se inyectan en el prompt
- • Los archivos relacionados se agrupan; cada grupo corre como su propio sub-agente
El trade-off, sin vueltas
Un pipeline te da cobertura auditable y un costo predecible. No te da más recall: el propio README dice que el recall de OCR es menor que el de un agente de propósito general y lo presenta como un intercambio deliberado por menos falsas alarmas. Si querés el revisor que más explora, este no es.
3. La Arquitectura en 4 Pasos
La doc de arquitectura describe un pipeline lineal: bootstrap, proveedor de diff, filtro y reglas, agrupación, sub-agentes y salida. Cuatro ideas lo sostienen:
Paso 1 — Alcance determinista
Git produce el diff en uno de tres modos: workspace (staged, unstaged y untracked), un commit puntual o un rango con merge-base. Luego una cadena de compuertas descarta binarios, rutas secretas como .env y claves SSH, tus exclusiones, extensiones no soportadas y rutas por defecto como tests, vendor y código generado. Un archivo cuyo diff por sí solo supera el 80% del límite del prompt se omite como too_large.
Paso 2 — Reglas y grupos
Cada archivo que sobrevive recibe una regla de una cadena de cuatro capas: el flag --rule, el .opencodereview/rule.json del proyecto, tu ~/.opencodereview/rule.json global y, por último, las reglas embebidas en el binario. Una llamada LLM pequeña ve solo metadatos de archivos, nunca contenido del diff, y agrupa archivos relacionados en grupos de hasta 10.
Paso 3 — Sub-agentes con un set chico de herramientas
Cada grupo corre en su propio sub-agente, 8 a la vez por defecto. Los cambios grandes tienen una llamada de planificación opcional y luego un loop de herramientas con code_search, file_read_diff, file_find, file_read, code_comment y task_done. El preset effort define las rondas de revisión: low es 1, medium (por defecto) es 2, high es 3.
Paso 4 — Posicionamiento y reflexión
Los comentarios se vuelven a ubicar en el diff con un resolvedor de líneas por ventana deslizante, con un fallback de re-localización. Una pasada final de filtrado descarta comentarios que puede demostrar incorrectos. La salida es texto o un único objeto JSON, y cada corrida se guarda como una sesión JSONL local que podés reproducir con ocr viewer.
El aislamiento de fallas es intencional
Si un sub-agente falla, la corrida igual sale con código 0 mientras algo haya funcionado; solo una corrida totalmente fallida sale con código distinto de cero. En modo JSON, leé el array warnings antes de confiar en un resultado limpio.
4. Qué Dice el Benchmark (y Qué No)
El README publica un gráfico sobre AACR-Bench: 50 repositorios open source, 200 pull requests reales, 10 lenguajes y 1.505 issues anotados, validados cruzadamente por más de 80 ingenieros senior según el proyecto. El benchmark sale de la misma organización de Alibaba que construyó la herramienta, así que leelo como un resultado del proveedor. Estos son los dos pares con el mismo modelo que leí en la imagen del gráfico el 2026-10-14 (OCR v1.3.1 vs. Claude Code v2.1.169):
Resultados autoinformados (gráfico del README)
- Claude-4.6-Opus + OCR: F1 25,10% · precisión 33,90% (301/889) · recall 20,00% · 1m23s · 385K tokens
- Claude-4.6-Opus + Claude Code: F1 11,57% · precisión 7,23% (435/5.980) · recall 28,90% · 13m6s · 5.664K tokens
- Claude-4.8-Opus + OCR: F1 17,90% · precisión 37,80% (176/465) · recall 11,70% · 1m6s · 352K tokens
- Claude-4.8-Opus + Claude Code: F1 14,13% · precisión 15,93% (191/1.200) · recall 12,70% · 5m38s · 2.062K tokens
Lo que se sostiene: en esos dos pares la precisión es entre 2,4x y 4,7x mayor y el consumo de tokens entre 5,9x y 14,7x menor, y OCR reporta muchos menos comentarios (889 contra 5.980 en el primer par), que es lo que significa “menos ruido” en la práctica. Lo que no: el recall no es mejor, y en términos absolutos todas las filas del gráfico encuentran una minoría de los issues anotados (lo mejor de OCR es 20,00%). Además el gráfico usa OCR v1.3.1 mientras que la versión actual es v1.13.0, y el texto del README no informa varianza entre corridas.
Corré tu propio eval
Los benchmarks comparan herramientas en general; solo tus PRs te dicen si encuentra tus bugs. Tomá 20 PRs ya mergeados donde un defecto llegó a producción, reproducí cada uno con ocr review --commit <sha> y contá qué encuentra antes de enchufarlo en CI.
5. Quickstart: Tu Primera Revisión
Requisitos según la documentación: Git 2.41+ y Node.js 18+. Los comandos de abajo están copiados del README y de la doc de quickstart, verificados contra el README el 2026-10-14. Para este post no ejecuté el instalador ni ninguno de estos comandos.
Instalación (npm)
npm install -g @alibaba-group/open-code-review ocr version
Existen otras vías de instalación (Homebrew, un script con curl, binarios de release, compilar desde el código fuente) listadas en la doc de instalación. Un detalle importante: el wrapper de npm busca versiones nuevas en segundo plano y se actualiza solo por defecto; definir OCR_NO_UPDATE con cualquier valor no vacío lo desactiva.
Configurar un modelo y probarlo
ocr config provider # Select a built-in provider or add a custom one ocr config model # Pick a model for the active provider ocr llm test
La interfaz interactiva te guía por proveedor, API key y modelo, y prueba la conectividad por su cuenta. El modo delegación (sección 9) se saltea este paso por completo.
Modos de revisión
cd your-project # Workspace mode — review all staged, unstaged, and untracked changes ocr review # Branch range — reviews feature-branch's changes since it diverged from main (merge-base mode) ocr review --from main --to feature-branch # Single commit ocr review --commit abc123
Previsualizá qué se revisaría antes de gastar tokens, y escribí salida legible por máquinas para tus scripts:
Preview, salida JSON y escaneo de archivos completos
# What would be reviewed, and why files were kept or dropped (no LLM cost) ocr review --preview # Save results to a file ocr review --format json --output result.json # Full-file scan of a directory instead of a diff ocr scan --path internal/agent
Primero el preview
ocr review --preview es la herramienta de depuración más barata: lista cada archivo candidato y el motivo por el que se conservó o se descartó (por ejemplo user_exclude, unsupported_ext o default_path) con costo LLM cero.
6. Proveedores y Reglas
OCR habla los protocolos de Anthropic, compatible con OpenAI y OpenAI Responses, además de AWS Bedrock. La doc de configuración lista presets integrados, así que casi siempre elegís uno y pegás una key:
- APIs principales: anthropic, openai, openai-responses, openrouter, gemini, xai
- Nube: bedrock (cadena de credenciales de AWS, región y perfil)
- Inicio de sesión: chatgpt (Sign in with ChatGPT, marcado como preview en la doc)
- Proveedores regionales: dashscope, volcengine, deepseek, kimi, z-ai, minimax, baidu-qianfan y más
- Custom: cualquier otro nombre: vos aportás url y protocol (gateways LiteLLM, modelos locales)
Configuración no interactiva con la key leída desde un gestor de secretos
ocr config set provider anthropic ocr config set model claude-opus-4-6 ocr config set providers.anthropic.api_key_cmd "op read op://dev/anthropic/api-key"
Todo lo que no esté en la lista de presets es un proveedor custom, que es como apuntás OCR a un gateway interno o a un modelo local. Este es el ejemplo de Ollama de la doc:
Proveedor custom: Ollama local
ocr config set provider ollama ocr config set custom_providers.ollama.url http://127.0.0.1:11434/v1 ocr config set custom_providers.ollama.protocol openai ocr config set custom_providers.ollama.model qwen3:32b ocr config set custom_providers.ollama.api_key ollama
Los modelos locales necesitan tool calling nativo
OCR conduce toda la revisión mediante llamadas a herramientas. La FAQ dice que un modelo que solo narra las llamadas en texto (deepseek-r1 es su ejemplo) nunca va a funcionar, mientras que los modelos con soporte nativo como qwen3 sí. Usá el chequeo con curl de la FAQ antes de culpar a tu configuración.
Las reglas son donde codificás los estándares de tu equipo. Son JSON, en capas y se asignan por archivo con globs; gana la primera entrada que coincide. Por defecto una entrada que coincide reemplaza la regla de lenguaje integrada para ese archivo, así que usá merge_system_rule cuando quieras sumar en vez de reemplazar:
~/.opencodereview/rule.json o <repo>/.opencodereview/rule.json
{
"rules": [
{
"path": "**/*",
"rule": "Security review: flag hardcoded secrets, unvalidated redirects, and missing authz checks.",
"merge_system_rule": true
}
]
}Las reglas embebidas cubren Java, Go, TypeScript y JavaScript, Rust, Python, Solidity, Vyper, Terraform, workflows de GitHub y más. Cuando una regla nunca se dispara, este comando imprime la capa y el patrón que ganó:
Depurar qué regla gana
ocr rules check src/main/java/com/example/UserService.java
7. Dónde Encaja en CI
El repo trae ejemplos de CI para GitHub Actions, GitLab CI, Bitbucket Pipelines, GitFlic CI y Gerrit. El camino de GitHub es una action reutilizable: instala OCR, calcula el merge base, ejecuta ocr review --from <merge-base> --to <head> --format json y publica comentarios inline más un resumen en el PR. Los permisos son contents: read y pull-requests: write. El paso central del README del ejemplo:
Paso de GitHub Actions (README del ejemplo)
- uses: alibaba/open-code-review@main
with:
llm_url: ${{ secrets.OCR_LLM_URL }}
llm_auth_token: ${{ secrets.OCR_LLM_AUTH_TOKEN }}
llm_model: ${{ vars.OCR_LLM_MODEL }}
llm_use_anthropic: ${{ vars.OCR_LLM_USE_ANTHROPIC }}El ejemplo espera OCR_LLM_URL y OCR_LLM_AUTH_TOKEN como secrets, y OCR_LLM_MODEL y OCR_LLM_USE_ANTHROPIC como variables. Tres cosas que cambiaría antes de copiarlo:
1. Fijá las versiones
El ejemplo usa @main e instala el CLI en tiempo de ejecución (ocr_version es latest por defecto), así que fijar solo la action no congela el comportamiento. El README del ejemplo recomienda fijar el SHA completo del commit y ocr_version juntos.
2. Poné tope al costo
effort (low, medium o high) y max_tokens_budget son inputs de la action. El presupuesto se chequea antes de cada ronda LLM y los resultados parciales igual se publican. Los valores de abajo son míos; los nombres de los inputs vienen de la doc.
3. Mantenelo consultivo
Una revisión que falla parcialmente igual sale con código 0 y la salida del modelo varía entre corridas, así que usalo para comentar, no para bloquear merges. Bloqueá merges con tus tests y linters.
Action y versión del CLI fijadas
- uses: alibaba/open-code-review@<full-commit-sha> # vX.Y.Z
with:
ocr_version: 'X.Y.Z'
llm_url: ${{ secrets.OCR_LLM_URL }}
llm_auth_token: ${{ secrets.OCR_LLM_AUTH_TOKEN }}
llm_model: ${{ vars.OCR_LLM_MODEL }}
llm_use_anthropic: ${{ vars.OCR_LLM_USE_ANTHROPIC }}Guardarraíles de costo
- uses: alibaba/open-code-review@<full-commit-sha> # vX.Y.Z
with:
ocr_version: 'X.Y.Z'
effort: low
max_tokens_budget: '2000000'Leé el modelo de amenazas de pull_request_target
El ejemplo se dispara con pull_request_target para que los secrets estén disponibles en PRs de forks, y argumenta que es seguro porque la action solo lee el diff. Las re-revisiones bajo demanda se limitan a comentarios de MEMBER, OWNER y COLLABORATOR para que extraños no gasten tu cuota LLM. Revisá ese modelo vos mismo antes de activarlo en un repo público.
8. Privacidad: Qué Sale Realmente de Tu Máquina
Mandar código a un modelo de terceros es la verdadera pregunta de adopción. Esto es lo que dicen la FAQ y la documentación:
- Se envía a tu endpoint LLM: diffs más los fragmentos que el agente lee con sus herramientas. El agente puede leer archivos completos, así que asumí que puede salir más que el diff crudo.
- Queda local: los JSONL de sesión en ~/.opencodereview/sessions, los archivos de reglas y la config. Las sesiones contienen prompts y respuestas, o sea tu código; borrá la carpeta para limpiarlas.
- Excluido por defecto: los archivos .env (no las plantillas .env.example), claves SSH, .npmrc, .pypirc, .netrc y rutas secretas similares nunca se revisan.
- No incluido: redacción de secretos. La FAQ la lista como roadmap; hasta entonces mantené los secretos fuera de los diffs y excluí los archivos sensibles.
- Telemetría: desactivada por defecto; al activarla, la doc dice que el contenido de prompts y respuestas nunca se exporta.
- API keys: preferí api_key_cmd con un gestor de secretos o el llavero del sistema antes que una key estática en config.json.
Para código regulado la doc de configuración te da palancas: Bedrock con la cadena de credenciales de AWS, un gateway LiteLLM dentro de tu VPC vía providers.<name>.url, o un modelo local con Ollama. Algunos presets apuntan a hosts en cn-beijing (volcengine, dashscope-tokenplan), así que revisá la residencia de datos antes de elegir uno.
9. Dónde Brilla: Casos de Uso
OCR se gana su lugar donde querés comentarios de revisión consistentes y con poco ruido en cada cambio:
Bot de PRs en GitHub o GitLab
Comentarios inline automáticos en cada PR, más re-revisión bajo demanda comentando /open-code-review, restringida a colaboradores.
Autorrevisión antes del push
Corré ocr review en modo workspace antes de abrir el PR; cubre archivos staged, unstaged y untracked.
Auditar un código heredado
ocr scan --path <dir> revisa archivos completos cuando no hay un diff significativo, por ejemplo un repo que acabás de heredar.
Estándares del equipo como reglas versionadas
Mantené .opencodereview/rule.json en el repo con tus convenciones (manejo de transacciones, binding de SQL, chequeos de authz) para que cada revisión las aplique.
Contratos e infraestructura
Las reglas integradas incluyen Solidity, Vyper, Rust, Go y Terraform. Los archivos de test y lib/**/*.sol se excluyen por defecto, así que agregá patrones include donde quieras que se revisen.
Reusar la suscripción de tu agente de código
Modo delegación: ocr delegate preview y ocr delegate rule le pasan la selección de archivos y las reglas a tu agente (Claude Code, Codex, Cursor), que revisa con su propio modelo. No hace falta API key de OCR.
El hilo común: el pipeline vuelve repetibles las partes aburridas (qué revisar, con qué reglas, dónde comentar) y el modelo se gasta solo en criterio.
10. Cuándo NO Usarlo
Me gusta la ingeniería, pero esta es una herramienta de precisión, no una red de seguridad. Evitala cuando:
❌ Evitalo cuando
- • Necesitás recall máximo en cambios críticos de seguridad. El proyecto admite menor recall que los agentes generales, y la mejor fila de su propio gráfico encuentra el 20% de los issues anotados.
- • El código no puede llegar a ningún endpoint externo y no tenés un modelo self-hosted con tool calling nativo.
- • Querés una compuerta de merge. Las fallas parciales salen con código 0 y la salida del LLM varía entre corridas.
- • Tu repo no está en Git. La FAQ dice que otros VCS no están soportados.
- • Tu riesgo vive en tests o código generado. Tests, snapshots, vendor y archivos generados se excluyen salvo que los incluyas.
- • Necesitás comportamiento congelado. El CLI de npm se autoactualiza por defecto, la action del ejemplo sigue @main y los releases llegan cada pocos días.
✅ Usalo cuando
- • Querés menos comentarios y de mayor precisión que los de un agente general.
- • Necesitás un costo de tokens predecible por PR (presets de effort más un presupuesto de tokens).
- • Querés las reglas del equipo como config versionada en vez de prompts.
- • Podés pilotearlo con PRs pasados y medir antes de bloquear algo.
- • Te sirve Apache-2.0 y un CLI que se mueve rápido, fijado a una versión.
Regla de oro
Usá OCR como la primera pasada precisa y dejá a una persona, o a un agente de mayor recall, para los cambios que más importan. Las herramientas de precisión bajan el ruido; no reemplazan la revisión.
Conclusión
Open Code Review es una respuesta creíble a un problema real: agentes revisores que se saltean archivos, se corren de línea y cuestan una fortuna en tokens. Llevar a código la selección de archivos, la asignación de reglas y el posicionamiento de comentarios es el instinto correcto, y la documentación es inusualmente franca sobre el costo: menor recall, sin redacción de secretos integrada, fallas que salen con código 0.
Mi consejo es simple. Instalalo, corré ocr review --preview sobre una rama real, reproducí unos cuantos PRs mergeados y decidí con tus propios números. Si encuentra los bugs que te importan, fijá la versión y ponelo en CI como revisor consultivo.
Fuentes
- Repositorio, README y gráfico del benchmark — github.com/alibaba/open-code-review
- Notas de versión v1.13.0 (2026-10-13) — GitHub Releases
- Doc de configuración: proveedores, api_key_cmd, timeouts — docs del proyecto
- Doc de arquitectura: pipeline, agrupación, rondas — docs del proyecto
- FAQ: privacidad, códigos de salida, modelos locales — docs del proyecto
- Doc de reglas: rule.json, filtros, reglas integradas — docs del proyecto
- Ejemplo de GitHub Actions — examples/github_actions
- Paper de AACR-Bench — arxiv.org/abs/2601.19494
- Dataset de AACR-Bench — huggingface.co



