GitHub Pull Request 검토를 위한 오픈 소스 AI 앱, baloo-bear
요약
Baloo는 오픈 소스 GitHub App으로, AI 기반의 풀 리퀘스트(PR) 검토를 자동화합니다. 이 앱은 diff와 프로젝트 컨텍스트를 분석하여 버그, 보안 취약점, 가이드라인 위반 등을 포착하고 실행 가능한 검토 댓글을 게시합니다. 특히 자체 호스팅이 가능하며, Claude나 Gemini 같은 다양한 모델 API 키를 직접 사용하여 데이터 통제권을 확보할 수 있습니다.
핵심 포인트
- AI가 코드의 논리 오류와 보안 안티패턴까지 검토
- 자체 호스팅(self-hosted)을 지원하여 데이터 프라이버시 보장
- Claude, Gemini 등 다중 AI 모델 API 연동 가능
- 저장소 가이드라인(`CONTRIBUTING.md`) 준수 강제 적용
Baloo는 AI 풀 리퀘스트(pull request) 검토를 위한 오픈 소스 GitHub App입니다. 이 앱은 사용자의 저장소에 설치되어 PR의 차이점(diffs)과 관련 프로젝트 컨텍스트를 읽고, 사람이 코드를 검토하기 전에 버그, 보안 문제, 누락된 오류 처리, 그리고 저장소 가이드라인 위반을 포착하는 실행 가능한 검토 댓글을 게시합니다.
Baloo는 호스팅되는 SaaS 리뷰어 대신 자체 호스팅(self-hosted) AI 코드 검토 에이전트를 원하는 팀을 위해 구축되었습니다. 사용자가 서비스를 직접 운영하고, GitHub App 설치 범위를 제어하며, Claude 또는 Gemini와 같은 모델의 API 키를 직접 제공할 수 있습니다.
웹사이트: BlueBear Security
린터(linter)가 잡아낼 수 없는 것 포착 — 논리 오류, 조용한 실패(silent failures), 보안 안티패턴, 누락된 오류 처리
사용자 컨벤션 존중 — 저장소의 AGENTS.md 및 CONTRIBUTING.md 파일을 읽고 이를 강제 적용합니다.
PR별 검토 지침 준수 — PR에 ## Review guidance for Baloo가 포함된 경우, Baloo는 이러한 반증 가능한(falsifiable), 컨텍스트 인식 체크를 검증하고 발견 사항에 인용합니다.
팀원처럼 게시 — 특정 라인에 대한 인라인 댓글, 심각도 레이블, 승인/변경 요청 결정을 내립니다.
모든 푸시(push) 시 실행 — 새로운 커밋이 자동으로 검토되며, 반복 과정 전반의 토론 스레드를 추적합니다.
자체 호스팅 및 비공개 — 코드가 사용자의 인프라를 벗어나지 않습니다. 자체 API 키를 가져오세요.
GitHub 풀 리퀘스트용 AI 코드 검토 — 열리거나, 다시 열리거나, 동기화되거나, 검토 준비가 된 PR을 검토합니다.
보안 검토 지원 — 주입 위험(injection risks), 안전하지 않은 인증 패턴(unsafe auth patterns), 비밀 처리 실수, 누락된 유효성 검사를 플래그 지정합니다.
저장소 가이드라인 강제 적용 — AGENTS.md 및 CONTRIBUTING.md에서 프로젝트별 규칙을 적용합니다.
종속성 업데이트 검토 — 종속성 PR에 대해 Dependabot 인식 프롬프트를 사용합니다.
계획 충실도 확인 — 승인 전에 구현 사항을 계획 문서와 비교합니다.
PR 생성 전 로컬 검토 — 동일한 검토 파이프라인을 로컬 git diff에 실행할 수 있습니다.
PR이 열리거나 업데이트될 때, Baloo가 검토를 게시합니다:
🐻 Baloo 검토 완료: 45초 소요.
발견된 이슈: 2개 (Critical 0, High 1, Medium 1, Low 0).
인라인 코멘트는 정확한 줄에 표시됩니다:
[HIGH] 보안—src/auth.py:55
SQL 쿼리가 매개변수 바인딩 대신 문자열 연결을 사용합니다. 이는 SQL 인젝션에 취약합니다.
권장 사항: 매개변수화된 쿼리 사용:cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
| 기능 | 설명 |
|---|---|
| Agentic review | 파일을 읽고, 패턴을 검색하며, diff뿐만 아니라 레포지토리를 탐색합니다 |
| Multi-provider | 구성된 Anthropic, Amazon Bedrock, Google, OpenAI 또는 Databricks AI Gateway 제공업체 모두를 통해 모든 에이전트를 실행합니다 |
| Severity routing | CRITICAL/HIGH → 변경 요청; MEDIUM → 주석 검사 + 접을 수 있는 PR 요약본; LOW → 필터링 |
| Guideline enforcement | 레포지토리 수준의 AGENTS.md / CONTRIBUTING.md를 읽고 위반 사항을 표시합니다 |
| Per-PR review briefs | PR 설명에 있는 ## Review guidance for Baloo를 읽고 검증 가능한, diff별 체크리스트를 확인합니다 |
| Discussion tracking | 기존 스레드를 따라가고, 중복을 건너뛰며, 처리된 피드백을 감지합니다 |
| Fidelity analysis | 선택적으로 PR과 디자인 계획 문서를 비교합니다 |
| Documentation drift | 구현 변경으로 인해 문서가 오래되었을 경우 작성자에게 매핑된 문서 업데이트를 요청할 수 있습니다 |
| FP reduction | 발견 사항을 검증하고 오탐(false positives)을 제거하기 위한 선택적 두 번째 LLM 패스입니다 |
| Dashboard | 비용 추적이 가능한 PostgreSQL 기반의 리뷰 기록 UI입니다 |
| Dependabot-aware | 의존성 업데이트 PR에 대한 전문적인 검토 로직입니다 |
| Local dry-run | scripts/local_review.py를 로컬 git diff에 대해 실행합니다 — GitHub 웹훅이나 포스팅된 코멘트는 없습니다 |
| 필요 기능 | Baloo의 적합성 |
|---|---|
| 호스팅 AI 리뷰어 대안 | Baloo를 자체 GitHub App으로 호스팅하고 모델 자격 증명을 선택할 수 있습니다 |
| ... | |
| GitHub 설정 → 개발자 설정 → GitHub 앱 → 새 GitHub 앱으로 이동합니다: |
Webhook URL: 공개 HTTPS 엔드포인트 (예: https://baloo.example.com/webhook)
)
권한(Permissions): Pull requests (읽기/쓰기), Contents (읽기), Checks (읽기/쓰기)
이벤트(Events): Pull request, Check run, Check suite (후자 두 개가 Re-run 버튼을 구동함) - 개인 키 다운로드
.pem
파일
git clone https://github.com/Blue-Bear-Security/baloo-bear.git
cd baloo-bear
cp .env.example .env
...
docker compose up --build
사용자 저장소에 GitHub App을 설치하세요. PR을 열면 Baloo가 자동으로 검토합니다.
📖 전체 설정 가이드: docs/getting-started.md
📖 더 정교한 리뷰 받기: docs/how-to-get-the-most.md — 컨벤션, PR별 리뷰 브리프, 그리고 Baloo를 문맥 인식(context-aware) 검토자로 변신시키는 워크플로우
┌──────────────┐ webhook ┌───────────────────┐
│ GitHub │ ───────────────→ │ FastAPI │
│ (PR 이벤트) │ │ webhook_handler │
...
baloo/
├── agent/ # PI runtime, 프롬프트, 구조화된 출력 파싱
├── config/ # 설정 (환경 변수 + DB 런타임 오버레이)
...
설정은 환경 변수를 통해 구성되며, DATABASE_ENABLED=true일 때 허용 목록에 포함된 에이전트 노브(agent knobs)도 런타임 시 재정의될 수 있습니다.
. 주요 변수:
| 변수 (Variable) | 기본값 (Default) | 설명 (Description) |
|---|---|---|
GITHUB_APP_ID | — | 숫자 GitHub App ID |
GITHUB_PRIVATE_KEY | — | .pem 파일 경로 또는 인라인 PEM |
GITHUB_WEBHOOK_SECRET | — | 웹훅 서명 비밀값 (Webhook signature secret) |
ANTHROPIC_API_KEY | — | Anthropic API 키 |
GEMINI_API_KEY | — | Google Gemini API 키 (Google 제공업체 사용 시) |
AGENT_PROVIDER | anthropic | 모든 에이전트의 LLM 제공업체: anthropic, google, openai, amazon-bedrock, databricks |
AGENT_MODEL | sonnet | 모델 약어 이름: flash, haiku, sonnet, gemini-pro, opus |
REVIEW_AUTO_APPROVE | false | 차단(blocking)되는 발견 사항이 없는 PR을 자동 승인 (선택적) |
REVIEW_MIN_SEVERITY | MEDIUM | 게시할 최소 심각도 |
FP_VERIFICATION_ENABLED | true | LLM 거짓 양성(false-positive) 검증 활성화 |
DATABASE_ENABLED | false | PostgreSQL 리뷰 기록 활성화 |
DASHBOARD_ENABLED | true | 리뷰 대시보드 UI 활성화 (필요: DATABASE_ENABLED + 자격 증명) |
REPO_CACHE_ENABLED | true | PR 레포지토리를 체크아웃하여 에이전트가 단순히 diff가 아닌 실제 코드를 읽도록 함 |
REPO_SANDBOX_MODE | bwrap | 검토 작업 트리에 에이전트 서브프로세스를 샌드박스화 (사용 불가 시 off로 폴백) |
FIDELITY_ENABLED | true | PR을 계획 문서와 비교 |
DOCUMENTATION_DRIFT_ENABLED | false | PR 시간 문서 드리프트 검사 활성화 |
전체 참고 자료: docs/configuration.md
📖 전체 문서 — 기능 가이드, 구성 참조 및 기타
기능 가이드:
– Baloo를 최대한 활용하는 방법 — 컨벤션, PR 검토 브리프, 고신호도 워크플로우
– 리뷰 에이전트 — 에이전틱(agentic) 리뷰 작동 방식
– 가이드라인 강제 적용 — 레포지토리 컨벤션 확인
– 충실도 분석 — 계획 대 구현 점수화
– 문서 드리프트 — PR 시점의 오래된 문서 감지
– 모델 — 지원되는 제공업체, 모델 및 티어
– 심각도 라우팅 — 발견 사항이 개발자에게 도달하는 방식
– 토론 추적 — 반복(iteration) 전반에 걸친 스레드 후속 조치
– FP 검증 — 거짓 양성(False-positive) 감소
– 대시보드 — 리뷰 기록 UI
uv sync && npm install # 의존성 설치
uv run python main.py # 로컬 실행
uv run pytest # 테스트
...
Python 종속성을 변경할 때는 커밋하기 전에 해시 고정(hash-pinned) 프로덕션 요구사항을 재생성하세요:
uv export --frozen --no-dev --no-emit-project --no-header --output-file requirements-prod.txt
CI는 이 파일을 uv export와 비교하고,
Docker 이미지는 여기서 프로덕션 종속성을 설치합니다.
PR을 열기 전에 작업 중인 트리(working tree)에 대해 동일한 리뷰 파이프라인을 실행할 수 있습니다. 스크립트는 git diff(base...head)로부터 합성 PR을 빌드하고, 존재할 경우 head ref에서 AGENTS.md 또는 CONTRIBUTING.md를 로드하며, 발견 사항을 stdout에 출력합니다 — GitHub에는 아무것도 게시되지 않습니다.
프로덕션과 동일한 LLM 자격 증명(예: 환경 변수에 있는 ANTHROPIC_API_KEY 또는 GEMINI_API_KEY)이 필요합니다.
uv run python scripts/local_review.py
uv run python scripts/local_review.py --base origin/main --head HEAD
uv run python scripts/local_review.py --json
...
전체 기여자 가이드는 docs/development.md를 참조하세요.
네. Baloo는 자체 서비스이자 GitHub App으로 실행됩니다. 배포, 레포지토리 설치 범위, 데이터베이스 지속성 및 모델 자격 증명은 사용자가 제어합니다.
아니요. Baloo는 Baloo가 호스팅하는 백엔드를 필요로 하지 않습니다. 실행되는 서비스는 사용자의 GitHub App 설치를 통해 레포지토리 콘텐츠를 읽고 구성한 LLM 제공업체에 리뷰 컨텍스트를 전송합니다.
Baloo는 Anthropic, Amazon Bedrock, Google, OpenAI, 그리고 Databricks AI Gateway 제공업체를 지원합니다. 선택된 제공업체는 모든 에이전트에 적용됩니다. 자세한 내용은 docs/features/models.md 및 docs/features/databricks.md를 참조하세요.
아니요. Baloo는 정적 분석을 보완하는 검토(review) 에이전트입니다. 알려진 패턴에 대해서는 결정론적 스캐너를 유지하고, 추론(reasoning)-중심의 발견 사항, 프로젝트 컨벤션, 그리고 PR 수준의 검토 맥락에는 Baloo를 사용하세요.
예. scripts/local_review.py를 사용하여 로컬 git diff에 대한 건식(dry) 검토를 실행할 수 있습니다.
이슈 및 버그 보고: GitHub Issues기능 요청: GitHub Issues질문: GitHub Discussion을 열거나 이슈를 제출하세요
기여는 환영합니다! 워크플로우와 컨벤션은 CONTRIBUTING.md를, AI 에이전트별 지침은 AGENTS.md를 참고하세요.
취약점을 보고하기 전에 SECURITY.md를 읽어보세요.
MIT — LICENSE 참조.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기