CodeRabbit 리뷰 대응을 자동화하는 TAKT의 신규 기능 'takt caccia'
요약
TAKT의 신규 기능 'takt caccia'는 CodeRabbit과의 PR 리뷰 대응 과정을 자동화하는 도구입니다. 이 기능을 사용하면 AI 에이전트가 지적 사항을 분석하고, 필요한 수정을 자동으로 커밋 및 Push하여 재리뷰를 기다리는 왕복 작업을 워크플로우로 처리할 수 있습니다.
핵심 포인트
- CodeRabbit과의 PR 리뷰 대응 과정을 자동화합니다.
- AI 에이전트가 지적 사항 판단 및 수정 코드를 자동으로 생성/Push 합니다.
- 지적 사항의 타당성을 확인하고, 필요한 경우에만 수정을 진행합니다.
- 임시 클론을 사용하여 로컬 작업 환경 설정 없이 반복 처리가 가능합니다.
PR을 생성하면 CodeRabbit이 리뷰를 진행합니다.
지적 사항을 읽고 AI에게 수정을 요청합니다.
수정 내용을 Push(푸시)하면 재리뷰가 오기 때문에, 다시 지적 사항을 읽고 수정을 요청하게 됩니다.
코드 작성 작업을 AI에 맡긴다 하더라도, 이 왕복 과정을 사람이 직접 진행한다면 매번 작업이 중단되는 일이 발생합니다.
TAKT는 AI 에이전트에 의한 구현 및 리뷰를 워크플로우로 실행하는 도구이며, 개발 시에는 OSS 버전의 CodeRabbit을 사용하고 있습니다(Code Rabbit의 Open Source Program으로부터 지원도 받고 있습니다).
따라서 이러한 운영 방식은 빈번하게 발생했습니다.
takt caccia
은 그러한 운영 방식을 자동화하기 위한 기능으로, 즉 CodeRabbit과의 왕복 과정을 자동으로 진행하는 기능입니다.
PR 번호를 전달하면 리뷰를 기다리고, 지적 사항의 타당성을 판단하며, 필요한 수정을 Push하여 재리뷰를 기다립니다.
참고로 CodeRabbit의 리뷰 대응에 워크플로우를 사용하여 처리하는 것이 caccia의 기능이므로, 평소 개발 시 TAKT를 사용하지 않더라도 CodeRabbit 대응만을 위해 사용할 수 있습니다.
caccia는 '카챠'라고 읽습니다.
명령어의 유래는 caccia가 음악 형식의 단어이자 동시에 사냥(狩り)이라는 의미를 가지고 있기 때문입니다.
그리고 이것이 필요하게 된 이유는 CodeRabbit 덕분입니다.
나머지는 아시겠죠?
PR 번호를 전달하여 실행하기
대상 리포지토리의 디렉터리에서 다음 명령어를 실행합니다.
takt caccia 123
123은 대응하고 싶은 GitHub PR의 번호입니다.
TAKT로 생성한 PR에 한정되지 않고, 기존 PR에 대해서도 실행할 수 있습니다.
이용을 위해서는 TAKT에서 사용하는 AI Provider 설정과 인증된 GitHub CLI(gh)가 필요합니다.
대상 리포지토리에서는 CodeRabbit이 리뷰하도록 설정해 둡니다.
수정을 PR의 브랜치로 Push하기 위한 권한도 필요합니다.
실행하면 다음 흐름으로 진행됩니다.
- PR의 현재 커밋에 대한 CodeRabbit의 리뷰를 기다립니다.
- CodeRabbit이 시작한 미해결(未解決) 리뷰 스레드를 가져옵니다.
- AI가 코드를 확인하고 타당하다고 판단한 지적 사항을 수정합니다.
- 판단 이유를 저장하고, 변경 사항이 있으면 커밋하여 Push 합니다.
- 해당 회차에서 처리된 스레드를 Resolve하고, 수정된 커밋에 대한 재리뷰를 기다립니다.
재리뷰에서 지적 사항이 늘어났다면, 설정한 반복 횟수 범위 내에서 다시 대응합니다.
대상인 미해결 스레드가 없어지면 종료됩니다.
CodeRabbit의 과거 리뷰만으로는 완료되지 않습니다.
Push한 커밋에 대한 리뷰를 확인한 후에 남아있는 스레드를 조사합니다.
지적 사항의 타당성을 확인한 후 수정하기
AI의 리뷰에는 오독(誤読)도 있습니다.
CodeRabbit이 지적했다고 해서 이유만으로 변경하면, 불필요한 처리를 추가하거나 이미 정상적으로 작동하는 부분을 망가뜨릴 수 있습니다.
표준 Caccia 워크플로우에서는 지적된 코드 외에 호출원(呼び出し元), 관련 테스트, 프로젝트의 요구사항을 확인하게 합니다.
실제 결함이나 요구사항 위반임을 확인할 수 있는 지적 사항을 수정하는 방침입니다.
예를 들어
모든 대상 스레드에 대해 판단을 기록하지 못한 경우에도, 스레드를 Resolve하는 처리로는 진행되지 않습니다.
수정은 임시 클론(temporary clone)에서 수행합니다
Caccia는 반복(iteration)마다 임시 클론을 생성하고, 대상 PR의 커밋을 가져와서 수정합니다. 따라서 로컬 작업 디렉터리에서 PR 브랜치로 전환할 필요가 없습니다.
판단 보고서는 실행한 곳에 남기고, 임시 클론은 반복 처리가 끝난 후에 삭제됩니다.
수정 판단과 코드 변경은 AI가 담당하지만, 커밋(commit), Push, 스레드 Resolve는 TAKT의 처리가 담당합니다. 수정이 있을 경우, Push 성공과 PR 반영을 확인한 후에 스레드를 닫습니다. 이는 Push에 실패했는데도 지적 사항만 해결된 것으로 처리되는 것을 방지하기 위함입니다.
대상은 CodeRabbit이 시작한 스레드입니다. 사람이 시작한 리뷰 스레드는 유지하며, Caccia 자체는 PR에 댓글이나 답글을 게시하지 않습니다.
PR 생성 후 자동 실행
매번 takt caccia를 실행하는 대신, TAKT가 PR을 생성하거나 업데이트한 후에 자동으로 계속 실행되도록 할 수도 있습니다. 프로젝트의 .takt/config.yaml에 다음 설정을 추가합니다.
caccia:
enabled: true
이 경우, TAKT가 작업 후처리(post-processing)로 PR을 생성하거나 업데이트한 후에 Caccia가 작동하게 됩니다. 구현부터 PR 생성까지를 TAKT에게 맡겼다면, 그 이후의 CodeRabbit 대응까지 연결할 수 있습니다.
이 자동 실행은 기본적으로 비활성화되어 있습니다. 단독으로 takt caccia 123을 실행하는 경우에도 enabled가 비활성화되어 있어도 사용할 수 있습니다. 먼저 하나의 PR로 테스트해보고, 운영에 적합하다고 판단되면 자동 실행을 활성화하는 방식도 가능합니다.
대기 시간과 반복 횟수 지정
리뷰를 기다리고 수정하는 것을 무한정 계속하지는 않습니다. CodeRabbit을 기다리는 시간과, 수정 및 재검토를 반복하는 횟수에는 상한선을 설정할 수 있습니다. 예를 들어 각 리뷰의 대기 상한을 30분, 반복 횟수를 최대 3회로 설정하는 것입니다.
caccia:
enabled: true
wait_timeout_ms: 1800000
...
wait_timeout_ms는 밀리초(millisecond) 단위로 지정합니다. 이는 첫 번째 리뷰 대기와, Push 후 각 커밋에 대한 재검토 대기에 각각 적용됩니다. 전체 과정을 30분 이내로 끝내야 한다는 설정은 아닙니다.
max_iterations는 수정과 재검토를 반복하는 상한선입니다. 상한에 도달했더라도 지적 사항이 남아 있다면, 남은 스레드 수를 표시하고 종료합니다.
단독 명령어는 대상 스레드가 없어지면 종료 코드 0으로, 대기나 반복의 상한에 도달하면 실행 실패로 비제로(non-zero) 값으로 종료됩니다. workflow는 지적 사항의 판단과 수정에 사용되는 TAKT 워크플로우입니다. 기본 caccia를 사용하는 것 외에도 프로젝트에 맞는 워크플로우로 교체할 수 있습니다.
설정 항목의 자세한 내용은 설정 가이드에 정리되어 있습니다.
리뷰 대응의 왕복을 맡기다
Caccia가 완료되었다는 결과는, 대상 CodeRabbit의 미해결 스레드가 없어졌다는 것을 의미합니다. 이는 PR 전체의 CI(Continuous Integration)나, 사람의 리뷰까지 통과했다는 것을 의미하지 않습니다.
마지막에 차이점(diff), 판단 보고서, CI 결과를 확인하고 병합할지 여부를 결정해야 합니다.
리뷰가 올 때마다 지적 사항을 AI에게 전달하고, 수정한 내용을 Push하여 다음 리뷰를 기다리는 이 왕복 과정을 맡기고 싶을 때 takt caccia를 사용할 수 있습니다. 사용 방법은 CLI 리퍼런스를 참조하십시오.
Discussion
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기