Skip to content

Repository Config

dino edited this page Aug 13, 2026 · 6 revisions

설정

리포지토리 루트에 설정 파일을 두면 리뷰 방식을 팀에 맞게 바꿀 수 있다. 파일이 없어도 봇은 기본값으로 돈다 — 필요할 때만 만들면 된다.

상황별로 무엇을 만지면 되는지는 리뷰 강도 조정에 정리해뒀다. 이 페이지는 항목 전체를 다루는 레퍼런스다.

파일 위치

아래 네 곳을 순서대로 찾아 먼저 발견된 하나만 쓴다. 여러 개를 두면 뒤의 것은 무시된다.

  1. .reviewbot/config.yml
  2. .reviewbot/config.yaml
  3. .reviewbot.yml
  4. .reviewbot.yaml

언제 반영되나

다음 리뷰부터 바로. 봇은 리뷰할 때마다 그 PR의 최신 커밋에서 설정을 읽는다. 기본 브랜치를 보지 않으므로, 설정을 고친 PR은 그 PR부터 새 설정으로 리뷰된다.

설정을 바꾸고 확인하는 가장 빠른 방법:

  1. 브랜치에서 .reviewbot/config.yml 을 고쳐 PR을 연다
  2. 그 PR에 /review 를 단다
  3. 결과를 보고 값을 조정한다 → 커밋을 밀면 자동으로 다시 리뷰가 돈다

전체 예시

model: darwin-35b-q4_k_m.gguf
language: ko
temperature: 0.2
maxOutputTokens: 16384

maxFiles: 40
maxFileChars: 24000
maxPromptChars: 140000

exclude:
  - '**/*.generated.ts'
  - 'docs/**'

autoReview: true
minSeverity: minor
minConfidence: 0.5
maxInlineComments: 25
triggerPrefix: '/review'

customInstructions: |
  - 이 리포지토리는 TypeScript strict 모드다. any 사용을 지적하라.
  - 외부 API 호출에는 반드시 타임아웃과 재시도가 있어야 한다.

전부 적을 필요는 없다. 적은 항목만 바뀌고 나머지는 기본값이다.

기본값 한눈에 보기

항목 타입 기본값 자주 만지나
minSeverity 열거형 minor
minConfidence 숫자 0.5
maxInlineComments 숫자 25
exclude 문자열 배열 아래 참고
include 문자열 배열 [] (제한 없음)
customInstructions 문자열 ''
autoReview 불리언 true
triggerPrefix 문자열 /review
language 문자열 ko
maxFiles 숫자 40
maxFileChars 숫자 24000
maxPromptChars 숫자 140000
maxOutputTokens 숫자 16384
temperature 숫자 0.2
model 문자열 darwin-35b-q4_k_m.gguf
baseUrl 문자열 관리자 설정

리뷰 강도

minSeverity

이 심각도 미만은 코멘트하지 않는다. 기본 minor.

높은 순서로 criticalmajorminornit 이다.

통과하는 지적
critical critical만
major critical, major
minor critical, major, minor (기본값 — nit 만 버린다)
nit 전부

minConfidence

모델이 함께 보고한 확신도(0~1)가 이 값 미만이면 버린다. 기본 0.5.

모델에게도 "0.5 미만이면 보고하지 말라"고 지시돼 있어서 기본값에서는 사실상 모델의 판단을 그대로 받는다. 오탐이 많다고 느끼면 0.7 쯤으로 올린다.

확신도 0.7 미만인 지적에는 코멘트 아래에 확신도 N% — 오탐일 수 있다. 가 붙는다. 이 문구는 설정으로 끌 수 없다.

maxInlineComments

인라인으로 다는 코멘트의 최대 개수. 기본 25.

심각도 순, 같은 심각도면 확신도 높은 순으로 정렬한 뒤 앞에서 이만큼만 인라인으로 달고, 넘친 지적은 버리지 않고 요약 코멘트의 접기 블록에 목록으로 실린다.

customInstructions

프롬프트 끝에 ## 리포지토리 추가 지침 으로 덧붙는 자유 서술이다. 팀 규약을 알려줄 때 쓴다.

customInstructions: |
  - 이 리포지토리는 TypeScript strict 모드다. any 사용을 지적하라.
  - 외부 API 호출에는 반드시 타임아웃과 재시도가 있어야 한다.
  - 사용자 입력을 그대로 로그에 남기는 코드는 보안 이슈로 취급하라.
  • 명령형으로 짧게 쓰는 편이 잘 먹는다
  • 길게 쓰면 그만큼 diff에 쓸 예산이 줄어든다
  • .gemini/styleguide.md 를 쓰고 있었다면 그 내용을 여기로 옮기면 된다

잘 쓰는 법은 리뷰 강도 조정에 있다.

리뷰 범위

exclude · include

둘 다 glob 패턴 배열이다. 경로는 리포지토리 루트 기준이고, . 로 시작하는 숨김 파일에도 매칭된다.

둘의 동작이 다르다.

동작
exclude 적은 패턴이 기본 목록에 추가된다
include 적으면 기본값([])을 대체한다

include 를 적으면 거기에 매칭되는 파일만 리뷰한다. 비워두면 제한이 없다. 둘 다 있으면 include 를 통과한 뒤 exclude 에 걸리는 파일이 빠진다 — exclude 가 이긴다.

include:
  - 'src/**' # src 아래만 리뷰한다
exclude:
  - 'src/generated/**' # 단, 이건 빼고

기본 exclude 목록은 아래와 같다. 여기 있는 항목은 다시 적을 필요가 없고, 없앨 수도 없다.

**/node_modules/**  **/dist/**  **/build/**  **/out/**  **/.next/**
**/coverage/**  **/vendor/**  **/*.min.js  **/*.map  **/*.snap
**/*.lock  **/package-lock.json  **/pnpm-lock.yaml  **/yarn.lock
**/*.png  **/*.jpg  **/*.jpeg  **/*.gif  **/*.svg  **/*.ico
**/*.pdf  **/*.woff*

패턴과 무관하게 바이너리 파일과 삭제된 파일은 항상 제외된다. 삭제된 파일에는 코멘트를 달 수 없기 때문이다.

maxFiles

리뷰할 최대 파일 수. 기본 40.

제외 규칙을 통과한 파일을 변경량이 큰 순서로 정렬한 뒤 앞에서 이만큼만 가져간다. 예산이 모자랄 때 사소한 파일이 먼저 잘려나가게 하려는 것이다. 잘린 파일 수는 리뷰 요약 하단에 (N개 제외) 로 표시된다.

maxFileChars

파일 하나의 diff를 프롬프트에 넣을 때의 최대 문자 수. 기본 24000. 이걸 넘는 파일은 뒤가 잘린 채로 들어간다. 큰 파일의 뒷부분이 리뷰되지 않는다면 이 값을 올린다.

maxPromptChars

한 번의 모델 호출에 실어보낼 최대 문자 수. 기본 140000 (코드 기준 대략 4만 토큰).

이 값은 두 군데에 쓰인다.

  • 청크 분할 기준: diff가 이 값의 절반을 넘으면 파일 단위로 쪼개 여러 번 호출한다. 청크가 2개면 리뷰 시간도 토큰도 대략 2배다
  • 최종 절단: 한 호출의 diff 부분은 이 값의 85% 지점에서 잘린다

리뷰가 자주 실패한다면 이 값을 줄이는 쪽이 맞다.

트리거

autoReview

PR이 열리거나 커밋이 밀렸을 때 자동으로 리뷰할지. 기본 true.

false 로 두면 /review 로 부를 때만 리뷰한다. 자동 리뷰가 도는 정확한 조건은 쓰는 법에 있다.

triggerPrefix

리뷰를 부르는 코멘트 명령. 기본 /review.

triggerPrefix: '/리뷰'

/ 로 시작하는 값만 쓸 수 있다. 봇은 / 로 시작하지 않는 코멘트를 먼저 걸러내므로, !reviewreview 로 바꾸면 아무 반응도 없는 상태가 된다.

바꾸면 팀 전체가 새 명령을 써야 한다. 특별한 이유가 없으면 기본값을 두는 편이 낫다.

모델 · 출력

이 아래는 보통 건드리지 않는다.

language

리뷰 코멘트의 언어. 기본 ko.

모델에게 "이 언어로 써라"라고 지시하는 값이라, ko · en · ja · zh 는 각각 한국어 · English · 日本語 · 中文으로 풀어 전달하고, 그 외 값은 적은 문자열 그대로 들어간다 (Português 같이 적어도 통한다).

코드 · 식별자 · 에러 메시지는 언어 설정과 무관하게 원문 그대로 유지된다.

temperature

기본 0.2. 리뷰는 창의성보다 일관성이 중요해서 낮게 잡아뒀다. 올릴 이유는 거의 없다.

maxOutputTokens

모델이 한 번에 뱉을 수 있는 토큰 수. 기본 16384.

이 모델은 추론을 끌 수 없고, 그 추론 토큰도 이 예산을 함께 쓴다. 부족하면 응답이 JSON을 다 못 쓰고 잘려 리뷰가 실패한다. 줄이는 건 권하지 않는다.

model · baseUrl

호출할 모델과 엔드포인트다. 서버 관리자 영역이라 리포지토리에서 바꿀 일이 없다. 잘못 적으면 리뷰가 통째로 실패하므로 그냥 두는 편이 좋다.

잘못 적었을 때

설정 파일은 틀려도 리뷰를 멈추지 않는다. 잘못된 부분만 조용히 무시되므로, 바꾼 값이 안 먹는 것 같으면 이 표를 먼저 본다.

상황 결과
YAML 문법 오류 파일 전체를 버리고 기본값으로 리뷰한다
타입이 안 맞음 (maxFiles: '40') 그 항목만 무시하고 기본값을 쓴다
모르는 항목 (maxComments: 10) 조용히 무시한다
없는 값 (minSeverity: warning) 그 항목만 무시하고 기본값(minor)을 쓴다
배열이어야 하는데 문자열 (exclude: 'docs/**') 그 항목만 무시한다

숫자를 따옴표로 감싸는 실수가 가장 잦다. 문자열이 되어 무시된다.

maxFiles: '40' # ✗ 무시된다
maxFiles: 40 #

오타나 이름이 틀린 항목은 아무 경고도 없이 무시된다는 점을 기억해 둔다. 바꾼 값이 반영되지 않는 것 같으면 문제 해결을 본다.

서버 관리자가 강제한 값

서버 쪽에서 특정 항목을 고정해 둘 수 있고, 그 경우 리포지토리 설정보다 우선한다. 설정을 분명히 적었는데도 반영되지 않는다면 이 경우일 수 있다.

고정 대상이 될 수 있는 항목은 model · baseUrl · language · minSeverity · autoReview · maxFiles · triggerPrefix · customInstructions 이다. 나머지 항목(minConfidence · maxInlineComments · exclude · include 등)은 항상 리포지토리 설정이 적용된다.

무엇이 고정돼 있는지는 관리자에게 물어보면 된다.

GSML 기반 코드 리뷰 봇

Clone this wiki locally