OpenQodex: Claude Code와 Codex를 위한 push 전 오픈소스 AI 코드 리뷰
OpenQodex는 Claude Code와 Codex를 위한, push 전에 실행되는 오픈소스 AI 코드 리뷰 도구다. 명령 하나로 push하지 않은 커밋과 커밋 전 변경을 확정하고, 맞는 스캐너를 돌려 변경된 줄의 발견만 남긴다. 별도 검토자가 확인하고 스크립트가 검증해 네 가지 형식의 보고서를 낸다. 추가 키나 서버는 필요 없다.
AI 코딩 에이전트는 코드를 쓰는 속도를 끌어올렸지만 검토하는 속도까지 올려 주지는 못했다. diff는 커지고 사람의 집중력은 닳아 가며, 정말 문제가 되는 몇 줄은 그럴듯해 보이는 변경의 더미 속에 묻히기 쉽다. OpenQodex는 이 문제에 소박하게 답한다. 검토를 push 앞으로 옮겨, 변경이 내 컴퓨터를 떠나기 전 마지막 관문으로 만드는 것이다. 대상은 Claude Code와 Codex이며, 터미널에서 직접 실행할 수도 있다. 핵심은 openqodex review라는 명령 하나다. 먼저 이번에 실제로 무엇을 바꿨는지 확정한다. 아직 push하지 않은 커밋과 커밋하지 않은 모든 변경이다. 그다음 변경된 파일에 맞는 스캐너를 돌리고, 내가 손댄 줄에 해당하는 발견만 남긴다. 오래된 코드에 쌓인 과거의 부채가 주의를 흩뜨리지 않는다.
스캐너의 출력은 원재료일 뿐이다. 이어서 OpenQodex는 자체 검토자를 띄운다. 동결된 변경 사본을 읽는 별도의 Claude Code 또는 Codex 프로세스다. 이 검토자는 스캐너의 발견을 하나하나 확인해야 하며, 변경된 모든 줄을 받는다. 그 답은 그대로 믿지 않는다. OpenQodex가 스크립트로 검사한 뒤 하나의 보고서로 묶는다. 이 설계의 요점은 역할 분담이다. 규칙 기반 스캐너는 패턴을 안정적이고 반복 가능하게 찾지만 오탐이 많고 맥락을 모른다. 언어 모델은 의도와 맥락을 이해하지만 놓치거나 지어낼 수 있다. 모델이 스캐너의 각 발견을 판정하고, 결정적인 스크립트가 모델의 결론을 다시 검사하면 세 층이 서로를 견제한다. 어느 한 층에만 기대는 것보다 믿을 만하다. 이 프로젝트에서 가장 눈여겨볼 대목은 검토자의 격리 수준이다. README에 따르면 Claude Code가 검토자일 때는 읽기, 검색, 목록 도구만 갖고 변경 사본 안에서 실행되며, 사용자의 설정, 훅, 플러그인, 메모리, 지침 파일은 하나도 불러오지 않는다. 이벤트 스트림에 모든 읽기가 나타나므로 보고서는 읽은 파일을 나열할 수 있다. Codex는 사정이 조금 다르다. 읽기 전용 샌드박스에서 시작하며 읽기는 변경 사본과 시스템 폴더로 제한되고, 명령에는 네트워크가 없으며, 사용자의 설정, 플러그인, 훅, 저장소의 지침 파일도 불러오지 않는다. 다만 문서는 두 가지 한계를 솔직하게 인정한다. 전역 파일인 ~/.codex/AGENTS.md는 여전히 불러오며, 이벤트 스트림이 모든 명령을 보여 주지 않기 때문에 보고서에는 읽기가 기록되지 않았다고 적힌다. 절대적 안전을 내세우기보다 이런 경계를 문서에 적는 편이 더 믿음직하고, 각자 자신의 위협 모델에 비추어 판단하게 해 준다.
여기서 완전함에는 분명한 정의가 있다. 검토는 세 가지가 모두 성립할 때만 완료로 본다. 모든 단계가 실행되었고, 스캐너의 모든 발견이 제기되었거나 이유와 함께 폐기되었으며, 변경된 모든 줄이 검토자 앞에 놓였다. 브리프 안이든, OpenQodex가 나중에 보낸 메시지든, Claude Code의 경우 읽은 파일 안이든 상관없다. 하나라도 빠지면 도구는 매끈한 결론 대신 Review incomplete를 출력한다. 커버리지가 구호에서 검증 가능한 조건으로 바뀌는 셈이다. 모호한 승인에 익숙한 팀이 참고할 만한 관행이다. 출력도 절제되어 있다. 실행이 끝나면 터미널에 짧은 영수증이 나온다. 결론, 검토자의 요약, 발견마다 한 줄(번호, 심각도, 범주, 제목, 파일과 줄), 그리고 report.html과 report.md의 절대 경로다. 전체 보고서는 HTML, Markdown, JSON, SARIF 네 형식으로 디스크에도 저장되며, SARIF는 기존 보안 도구와 연결하기 쉽다. report.html은 디스크의 단일 파일로, 변경된 각 파일을 diff로 보여 주고 각 발견을 해당 줄 아래에 붙이며 이어서 커버리지, 스캐너, 영향 범위를 보여 준다. README에 따르면 스크립트를 실행하지 않고, 외부에서 아무것도 불러오지 않으며, 모든 문자열을 이스케이프하고, 스캐너가 찾은 비밀 값은 가린다. 고칠지 말지의 결정은 사람에게 남는다. 함께 제공되는 스킬은 에이전트가 영수증을 보여 주고 전부 고칠지 어느 것을 고칠지 묻게 하며, 지목한 발견만 고치게 한다. openqodex findings 1,3은 지목한 발견을 전문으로 출력한다.
도입 비용은 낮다. npx openqodex init은 컴퓨터에서 Claude Code, Cursor, Codex CLI, Cline을 찾고, 쓸 파일을 모두 보여 준 뒤 한 번만 묻는다. 이어서 찾아낸 검토자 또는 고쳐야 할 점을 알려 준다. Node 22 이상과 git이 필요하고, macOS와 Linux에서 동작하며 Windows에서는 WSL을 쓴다. 로그인된 Claude Code나 Codex 외에는 다른 키도 계정도 서버도 필요 없다. 기본인 로컬 변경 외에 review --all은 저장소 전체를, review 뒤에 브랜치 이름이나 '#42' 같은 풀 리퀘스트 번호를 붙이면 현재 작업이 아닌 변경을 검토한다. OpenQodex가 이를 가져와 임시 폴더에 체크아웃하고 기준에서 갈라진 뒤 추가된 내용을 검토한다. 현재 버전은 0.12.0이며 라이선스는 Apache-2.0이다.
일상의 작업 흐름도 달라진다. 대부분의 코드 리뷰는 풀 리퀘스트가 열린 뒤, 이미 굳어진 커밋 이력 앞에서 이루어지고 작성자의 맥락은 이미 흩어져 있다. 검토를 push 전으로 옮기면 문제가 가장 싼 시점에 드러난다. 변경은 아직 로컬에 있고, 작성자는 이유를 기억하며, 수정이 동료를 방해하지 않는다. 스캐너 결과가 내가 바꾼 줄로 한정되므로 보고서의 각 발견은 지금 하는 일과 직결되고, 물려받은 문제를 뒤질 필요가 없다. 에이전트가 코드를 대량으로 만드는 팀에게는 커밋과 공유 사이에 싸고 믿을 만한 관문이 하나 생기는 셈이다. 사람 검토자는 기계가 아직 서툰 아키텍처 선택과 업무 판단에 집중력을 아낄 수 있다. 업계의 관점에서 OpenQodex는 형성 중인 패턴을 대표한다. 검토가 머지 이후의 절차가 아니라 에이전트 워크플로 안의 로컬하고 감사 가능한 한 단계가 된다는 것이다. 냉정함도 필요하다. 같은 계열의 모델이 비슷한 모델이 쓴 코드를 검토하면 사각지대를 공유할 수 있다. Codex 경로의 감사 가능성은 Claude Code 경로보다 분명히 낮다. 0.12.0이라는 버전은 아직 초기 단계임을 말해 준다. 이 분석은 공개된 README 발췌에 근거하며, 다루지 않은 부분에 대해서는 아무것도 단정하지 않는다. 그럼에도 증거, 커버리지, 그리고 사람이 결정한다는 세 생각을 제품의 뼈대에 넣은 점은 평가할 만하다. 에이전트를 일상 개발에 연결하는 모든 팀이 진지하게 받아들일 생각이다.
Sources
FAQ
openqodex review는 정확히 어떤 코드를 검토하나?
아직 push하지 않은 커밋과 커밋하지 않은 모든 변경을 검토하고, 변경된 줄에 걸린 스캐너 발견만 남긴다. --all은 저장소 전체를, 브랜치 이름이나 '#42' 같은 번호는 현재 작업이 아닌 변경을 임시 폴더에 가져와 검토한다.
검토자는 로컬 환경과 얼마나 격리되나?
README에 따르면 Claude Code 검토자는 읽기, 검색, 목록 도구만 갖고 변경 사본 안에서 실행되며 설정, 훅, 플러그인, 메모리, 지침 파일을 불러오지 않는다. 이벤트 스트림이 읽은 파일을 나열한다. Codex는 읽기 전용 샌드박스에서 명령에 네트워크가 없지만 전역 ~/.codex/AGENTS.md는 불러오고 모든 읽기가 기록되지는 않는다. 보고서가 이를 밝힌다.
검토는 언제 불완전으로 판정되나?
실행되지 않은 단계가 있거나, 스캐너 발견이 제기도 이유 있는 폐기도 되지 않았거나, 검토자 앞에 오지 않은 변경 줄이 있으면 도구는 매끈한 결론 대신 Review incomplete를 출력한다.