Documentation
Almagest Reviewer
Almagest Reviewer는 Pull Request 코드 리뷰를 자동화하기 위해 설계된 GitHub App입니다. LangGraph를 사용해 리뷰 과정을 명시적인 상태 전이(State Transition), 루프(loop), 그리고 인간 개입 지점(human-in-the-loop)으로 구성합니다.
단순한 LLM 호출이나 규칙 기반 분석을 넘어, 코드 리뷰를 에이전트의 사고 흐름(process)으로 모델링하는 것을 목표로 합니다.
LangGraph
Agentic workflow
Multi-LLM
Anthropic · Gemini · Ollama
GitHub App
Webhook 기반 실시간 리뷰
Getting Started
Prerequisites
- Python 3.11 이상
- Docker & Docker Compose
- GitHub App 생성 권한
- Anthropic API Key 또는 Google API Key (Ollama 사용 시 불필요)
Installation
레포지토리를 클론하고 환경변수 파일을 생성합니다.
git clone https://github.com/okdoittttt/almagest-reviewer.git cd almagest-reviewer cp .env.example .env
.env 파일을 열어 아래 항목들을 채웁니다.
| 변수 | 설명 |
|---|---|
GITHUB_APP_ID | 생성한 GitHub App의 ID |
GITHUB_PRIVATE_KEY_PATH | 다운로드한 .pem 키 파일 경로 |
GITHUB_WEBHOOK_SECRET | GitHub App에 설정한 Webhook Secret |
LLM_PROVIDER | anthropic / google / ollama 중 하나 |
ANTHROPIC_API_KEY | Anthropic 사용 시 필요 |
GOOGLE_API_KEY | Google Gemini 사용 시 필요 |
OLLAMA_BASE_URL | Ollama 서버 주소 (기본값: http://localhost:11434) |
GITHUB_CLIENT_ID | GitHub App OAuth 클라이언트 ID |
GITHUB_CLIENT_SECRET | GitHub App OAuth 클라이언트 Secret |
ALLOWED_GITHUB_USERS | 대시보드 접근을 허용할 GitHub 로그인명 (콤마 구분) |
JWT_SECRET | 세션 토큰 서명에 사용할 임의의 랜덤 문자열 |
DATABASE_URL은 Docker Compose 환경에서 자동으로 설정됩니다. 로컬 실행 시에는 .env에서 직접 지정하세요.
Running the Server
deploy.sh를 사용하면 이미지 빌드, 마이그레이션, 컨테이너 기동을 한 번에 처리합니다.
chmod +x deploy.sh ./deploy.sh deploy # 빌드 → 마이그레이션 → 기동
| 명령어 | 설명 |
|---|---|
| ./deploy.sh deploy | 이미지 빌드 → 마이그레이션 → 전체 기동 |
| ./deploy.sh up | 컨테이너 기동 (빌드 없음) |
| ./deploy.sh down | 컨테이너 종료 |
| ./deploy.sh migrate | 마이그레이션만 실행 (alembic upgrade head) |
| ./deploy.sh status | 마이그레이션 버전 및 미적용 항목 확인 |
| ./deploy.sh logs | 앱 로그 확인 (예: ./deploy.sh logs db) |
기동 후 접근 가능한 주소:
http://localhost:8000— API 서버 + 웹 대시보드http://localhost:5173— 프론트엔드 개발 서버 (hot-reload)
GitHub App 설정의 Callback URL에 http://localhost:8000/api/auth/callback이 등록되어 있어야 웹 대시보드 로그인이 동작합니다.
Key Features
Agentic Code Review
코드 분석 → 이슈 분류 → 리뷰 생성 과정을 LangGraph 그래프로 모델링합니다. 단순 체인이 아닌 상태 기반 에이전트 플로우로 체계적인 리뷰를 제공합니다.
Multi-LLM Provider
Anthropic Claude, Google Gemini, Ollama(로컬)를 지원합니다. LLM_PROVIDER 환경변수 하나로 전환할 수 있습니다.
Intelligent Risk Assessment
PR의 의도와 변경 규모를 분석해 위험도(LOW / MEDIUM / HIGH)를 자동으로 분류합니다. LOW로 판단된 PR은 상세 파일 리뷰를 건너뛰어 빠르게 처리합니다.
GitHub App Integration
Pull Request 이벤트 기반으로 실시간 리뷰 코멘트를 작성합니다. 앱이 설치된 모든 레포지토리에서 자동으로 동작합니다.
Web Dashboard
GitHub OAuth 로그인 기반 관리 UI를 제공합니다. 연동된 저장소, PR 리뷰 결과, 스킬 설정을 브라우저에서 확인하고 관리할 수 있습니다.
Multi-repo Support
여러 레포지토리에 앱을 설치하고 레포별 설정을 독립적으로 관리합니다. 웹훅 payload에서 installation_id를 동적으로 추출하므로 서버 수정 없이 연동이 완료됩니다.
Architecture
리뷰 프로세스는 4단계 그래프 노드로 구성됩니다. 위험도에 따라 일부 단계는 건너뜁니다.
Intent Analysis
PR 제목과 설명을 분석해 기능 추가 · 버그 수정 · 리팩토링 등의 의도를 파악합니다.
Risk Classification
변경 규모와 중요도를 바탕으로 위험도(LOW / MEDIUM / HIGH)를 평가합니다. LOW이면 파일 리뷰를 건너뜁니다.
File Review (병렬)
MEDIUM / HIGH PR의 변경 파일을 병렬로 동시 리뷰합니다. 코드 품질, 보안, 성능, 가독성을 검토합니다.
Review Summary
모든 분석을 종합해 최종 의견(APPROVE / REQUEST_CHANGES / COMMENT)과 요약문을 작성합니다. 리뷰가 불충분하면 파일 리뷰를 최대 2회 재실행합니다.
Multi-repo Integration
웹훅 payload에서 installation_id를 동적으로 추출하므로, 서버 코드 수정 없이 GitHub App 설치만으로 모든 레포지토리 연동이 완료됩니다.
Step 1. GitHub App 추가 설치
GitHub → Settings → Applications → almagest-reviewer 옆 Configure 클릭 후 Repository access에서 연동할 레포지토리를 추가합니다.
Step 2. 자동 등록 확인
설치된 레포지토리에서 PR을 하나 열면 repositories 테이블에 자동 등록됩니다. 직접 확인하려면:
docker exec -it almagest-reviewer-db-1 psql -U almagest -d almagest_reviewer \ -c "SELECT id, owner, name, installation_id, is_active FROM repositories ORDER BY created_at DESC;"
리뷰 일시 중단
연동은 유지하되 리뷰를 멈추려면 is_active를 false로 변경합니다.
UPDATE repositories SET is_active = false WHERE owner = 'my-org' AND name = 'my-repo';
Self-hosted Deployment
레포지토리를 fork해 자신만의 서버를 운영하는 절차입니다.
레포지토리 Fork
GitHub에서 이 레포지토리를 fork합니다.
GitHub App 신규 등록
GitHub → Settings → Developer settings → GitHub Apps → New GitHub App에서 앱을 생성합니다.
| 항목 | 값 |
|---|---|
| Webhook URL | https://your-domain.com/webhook |
| Webhook secret | 임의의 비밀 문자열 |
| Repository permissions | Pull requests: Read & write |
| Subscribe to events | Pull request |
환경변수 설정 및 서버 배포
cp .env.example .env # .env 편집 후 docker compose up -d --build
GitHub App 설치
생성한 GitHub App 페이지 → Install App → 리뷰를 받을 레포지토리 선택.
Troubleshooting
401 Unauthorized (Webhook)
GITHUB_APP_ID 또는 Private Key 경로가 올바른지 확인하세요.
Invalid Webhook Signature
GITHUB_WEBHOOK_SECRET이 GitHub App 설정의 값과 일치하는지 확인하세요.
LLM API Errors
API Key가 유효한지, 할당량이 남아있는지 확인하세요.
로그인 후 403
ALLOWED_GITHUB_USERS에 본인의 GitHub 로그인명이 포함되어 있는지 확인하세요.
로그인 콜백 오류
GitHub App Settings의 Callback URL에 http://localhost:8000/api/auth/callback이 등록되어 있는지 확인하세요.