검증 환경:
- 2026년 10월 기준
- 봇의 기반: Grok Bot (역할별로 여러 개의 봇을 구성)
- 구현 및 리뷰: Devin (개인용 유료 플랜)
- PR 리뷰: Codex (자동 리뷰 +
@codex review)
배경:
개인 개발 리포지토리가 늘어났다. 확장 기능, 라이브러리, 포털 사이트, Zenn 원고 등이 있다. 모든 것을 하나의 채팅에서 처리하면 문맥이 섞이고, 누가 무엇에 책임을 지는지 모호해진다.
결론:
책임을 분담하기 위해 봇을 역할별로 나누었다. 전체적인 지휘는 마스터 봇(master bot)이 담당하고, 각 리포지토리는 전담 봇이 맡는다. 코드는 Devin이 작성하고, 리뷰는 별도의 세션과 Codex가 수행한다. 사람은 의도와 위험한 변경 사항만 확인한다.
여정:
봇을 역할로 분리하기
책임을 나누기 위해 하나의 봇에게 하나의 책임만 부여했다.
| 봇 | 담당 |
|---|
| Grok Bot | 총괄. 공통 규칙 관리 및 배포 |
| ... | |
| 규칙이 변경되면 마스터가 각 봇에게 배포한다. 각 봇은 자신의 담당 리포지토리만 건드린다. | |
구현은 Devin에 맡기기
처음에는 Cursor의 cloud agent로 구현했다. 하지만 Cursor와 Grok Bot이 같은 사용 한도를 공유하고 있어서, cloud agent를 돌리면 Grok Bot의 사용량이 부족해졌다. 그래서 구현을 Devin으로 옮겼다.
- 각 봇이 Devin의 API로 세션을 생성한다.
- 모드는 작업의 난이도에 따라 선택한다. 평소에는 normal, 무거운 작업만 fusion, ultra는 승인제이다.
- 리뷰는 구현과는 별도의 새로운 세션에서 진행하게 한다.
curl -X POST "https://api.devin.ai/v3/organizations/$ORG_ID/sessions" \
-H "Authorization: Bearer $DEVIN_API_KEY" \
-H "Content-Type: application/json" \
...
완료는 Webhook으로 받기
Devin의 세션은 방치하지 않는다. 프롬프트 마지막에 '작업이 끝나거나 멈추면 Webhook으로 POST 하라'는 문구를 추가한다. 마스터가 이 POST를 받고, 리포지토리 담당 봇에게 전달한다. 누락에 대비하여 1시간 간격의 감시(monitoring)도 배치해 두었다.
{ "repo": "...", "session_url": "...", "pr_url": "...", "status": "...", "summary": "..." }
병합은 light / fatal로 나누기
light한 PR은 CI pass로 커버할 수 있다고 생각했기에, CI가 통과하면 담당 봇이 병합한다.
fatal한 PR은 사람이 승인한다. fatal이란 secret, 리포지토리 설정, CI, 릴리스, 파괴적인 변경, 비공개 정보가 노출될 위험이 있거나 되돌릴 수 없는 작업을 말한다. Zenn 기사 공개도 승인제로 운영하고 있다.
AI 리뷰의 지적사항은 병합 조건으로 삼지 않는다. 읽어보고 필요한 것만 수정한다.
비고
- 봇을 사용할 수 있게 된 후, 개발 환경이 다시 바뀌었다. 로컬 IDE가 아닌 클라우드가 중심이 되었다.
- 요금은 플랜별로 다르기 때문에 이 글에서는 다루지 않는다.
참고
Discussion