Chat 기반 AI 코딩 에이전트: 그룹 채팅에서 요구사항 논의 및 자동 코드 변경/풀 리퀘스트 생성
요약
본 AI 코딩 에이전트는 그룹 채팅 환경에서 요구사항 논의를 진행하고, 이를 기반으로 자동 코드 변경 및 풀 리퀘스트(PR) 생성을 지원합니다. Anthropic, OpenAI 등 다양한 API와 Slack/Feishu 같은 IM 플랫폼을 연동하여 사용하며, 위험도 평가에 따라 즉시 실행 또는 이슈 생성 후 승인 대기 방식으로 작업을 라우팅하는 것이 특징입니다.
핵심 포인트
- 그룹 채팅 기반의 요구사항 논의 및 코드 변경 자동화
- 위험 수준 평가를 통한 작업의 3단계 계층적 라우팅 구현
- 승인 대기 시, Issue AI가 메타 논의를 걸러내고 실행 가능한 작업 설명 합성
- 2단계 크로스 레포지토리 분류를 통해 복잡한 이슈 처리 및 프로젝트 할당
그룹 채팅에서 요구사항을 논의하고, 자동화된 코드 변경과 풀 리퀘스트(pull requests)를 받을 수 있는 AI 코딩 에이전트입니다.
Anthropic, OpenAI 및 모든 OpenAI 호환 API와 같은 여러 AI 제공업체와 Feishu/Lark, Slack과 같은 여러 IM 플랫폼을 지원합니다.
flowchart LR
subgraph im [IM Platform]
Msg["User Message\n(text + images + links)"]
...
flowchart TB
subgraph input [Task Input]
TaskDesc["Task Description\n(title + description)"]
...
Dispatcher AI가 위험 수준을 평가하고 작업을 세 가지 계층으로 라우팅합니다:
flowchart TD
msg["User Message"] --> ai["Dispatcher AI\n(risk assessment)"]
ai -->|"Low risk"| tier1["Tier 1: execute_task\nImmediate execution"]
...
즉시 실행 (Execute immediately). 사람의 승인 없이 즉시 실행됩니다. 다음 경우에 가장 적합합니다:
- 복사/텍스트 업데이트, 설정 조정(config tweaks)
- 명확한 범위의 간단한 버그 수정
- 스타일 조정, 오타 수정
추적을 위해 이슈(Issue)가 자동으로 생성되며, 결과 PR은 해당 이슈와 연결됩니다.
이슈 생성 및 승인 대기 (Create an Issue and waits for approval). 실행 전에 이슈를 생성하고 승인을 기다립니다. 백그라운드 폴러(poller)는 30분마다(APPROVAL_POLL_INTERVAL_MS로 설정 가능) 승인 반응(+1, heart, 또는 hooray)을 확인합니다. 승인이 이루어지면, 독립적인 Issue AI (Dispatcher 모델 사용)가 전체 이슈 논의를 읽고 명확하고 실행 가능한 작업 설명을 합성합니다. 이 과정에서 메타 논의는 걸러내고 최신 합의에 초점을 맞춥니다. 이렇게 합성된 작업은 Task AI에 의해 실행됩니다. 다음 경우에 사용됩니다:
- 새로운 기능(New features)
- 여러 파일에 걸친 리팩토링(Refactoring across multiple files)
- 종속성 추가(Adding dependencies)
- 다중 모듈 변경(Multi-module changes)
폴러는 또한 등록된 모든 프로젝트에서 devops-bot으로 레이블이 지정된 열린 이슈를 스캔합니다(ISSUE_SCAN_LABELS로 설정 가능). 승인 반응이 있는 모든 이슈는 Issue AI에 의해 동일하게 처리됩니다. 이는 사용자가 GitHub/GitLab에서 직접 이슈를 생성하고, 레이블을 지정하며, 승인할 수 있음을 의미합니다. 채팅 상호작용이 필요하지 않습니다. 이 봇은 실행이 시작되거나 이슈가 자동 실행에 부적합하다고 판단될 때 해당 이슈에 댓글을 게시합니다.
작업 공간(workspace) 컨텍스트가 사용 가능할 경우, Issue AI는 기본 단일 단계 합성(single-phase synthesis) 대신 2단계 크로스 레포지토리 분류(two-phase cross-repo triage) 흐름을 사용합니다:
1단계 — 분류(Triage): 품질 게이트 + 크로스 레포지토리 라우팅
- 자동 실행에 적합한 이슈인지 평가합니다 (판정:
actionable/needs_info/reject) - 허위 또는 환각 분석이 포함된 이슈(봇 생성 이슈에서 흔함)는 거부됩니다. - 작업 공간 내 어떤 프로젝트가 이 이슈를 처리해야 하는지 결정합니다.
- 작업 공간 컨텍스트(프로젝트 목록 + 작업 공간의
CLAUDE.md)를 사용합니다.
2단계 — 합성(Synthesis): 프로젝트별 태스크 내용 생성
- 식별된 각 프로젝트에 대한 목표 태스크 설명을 생성합니다.
- 대상 레포지토리가 등록한 레포지토리와 다를 경우, 원본 이슈에 백링크가 포함된 하위 이슈를 대상 레포지토리에 생성합니다.
이 흐름에는 세 가지 이슈 발견 경로가 연결됩니다:
| 경로 | 출처 | 설명 |
|---|---|---|
| A | 봇 생성 이슈 | pending_approvals 테이블 — propose_task를 통해 생성된 이슈 |
| B | 외부 이슈 | 프로젝트 레포지토리를 ISSUE_SCAN_LABELS 레이블로 스캔 |
| C | 작업 공간 이슈 | 작업 공간 레포지토리를 스캔하고 분류(triage)를 통해 하위 프로젝트에 분배 |
주요 동작 방식:
- 작업 공간 컨텍스트가 없으면, 기존의 단일 단계 Issue AI 동작은 변경되지 않습니다.
- 분류 과정에서 생성된 하위 이슈는 자동 승인됩니다 (원본 이슈의 승인이 모든 대상을 포괄합니다).
- 작업 공간 레포지토리 자체는 태스크 대상이 절대 아닙니다 — 여기에 등록된 이슈는 항상 하위 프로젝트에 분배됩니다.
토론 전용으로 이슈 생성 — 자동 실행 없음. 다음 용도로 사용됩니다:
- 아키텍처 변경
- 모호하거나 개방형 요청
- 데이터 마이그레이션
- API 변경 (Breaking API changes)
AI가 평가하는 항목:
구체성(Specificity): 무엇을 정확히 변경해야 하는지 명확한가?
범위(Scope): 몇 개의 파일/모듈에 영향을 미치는가?
가역성(Reversibility): 쉽게 되돌릴 수 있는가?
파괴 가능성(Breaking potential): 기존 기능에 문제가 생길 수 있는가?
설계 결정(Design decisions): 여러 가지 유효한 접근 방식이 존재하는가?
AI 기반 코드 리뷰 기능은 풀 리퀘스트(PR)에 대한 높은 수준의 요약과 라인별 주석을 모두 제공합니다. 리뷰 분석에는 TASK_MODEL을 사용합니다.
| 트리거 | 작동 방식 | IM 알림 |
|---|---|---|
| 자체 검토 (Self-review) | 작업 완료 후 봇이 생성한 PR을 자동으로 검토합니다 (ENABLE_SELF_REVIEW=true). 심각하거나 경고 수준의 문제가 발견되면, 자동 수정 루프(최대 2회)를 트리거하여 수정을 동일 PR 브랜치에 푸시하고 재검토합니다. | 예 (발생 채팅) |
| IM 명령어 | 사용자가 채팅에서 "review PR #123"을 전송 → review_pr 의도 (intent) | |
| 예 (발생 채팅) | ||
| 폴링 (Polling) | 백그라운드 폴러가 등록된 프로젝트의 열린 PR을 스캔합니다 (REVIEW_TRIGGER_MODE=polling, 기본값). | 아니요 (GitHub PR 댓글만) |
| 웹훅 (Webhook) | PR 생성/업데이트 시 GitHub 웹훅이 작동합니다 (REVIEW_TRIGGER_MODE=webhook). | 아니요 (GitHub PR 댓글만) |
리뷰 메모리는 작업 컨텍스트를 오염시키는 것을 방지하기 위해 별도의 review 네임스페이스에 저장됩니다. 두 가지 리뷰 전용 메모리 유형이 사용됩니다:
— PR별 리뷰 결과: review_feedback
— 여러 리뷰에 걸쳐 추출된 반복 패턴: review_pattern
ENABLE_REVIEW_CROSS_INJECT=true일 때, review_pattern 메모리는 작업 디스패처 컨텍스트로 선택적으로 주입되어, 일반적인 리뷰 발견 사항이 미래의 코드 생성 품질을 향상시키는 피드백 루프를 만듭니다.
자체 검토가 심각하거나 경고 수준의 문제를 감지하면, 자동으로 수정 작업을 시도합니다:
리뷰 (Review) — ReviewEngine이 PR을 분석하고 GitHub 리뷰 댓글을 게시합니다.
수정 (Fix) — 기존 PR 브랜치에 샌드박스를 생성하고, AI가 심각하거나 경고 수준의 문제를 수정하여 동일 브랜치에 푸시합니다.
재검토 (Re-review) — 수정된 PR을 다시 검토합니다. 문제가 남아 있으면 2단계를 반복합니다.
최대 2회 라운드 (Max 2 rounds) — 무한 루프를 방지하는 하드 제한입니다. 2회의 수정 라운드가 지나면, 남은 문제 여부와 관계없이 중단됩니다.
안전 조치(Safety measures):
- 수정 시도 전에 PR이 여전히 열려 있는지 확인합니다 (병합/닫힘 상태면 건너뜀)
- 전체 PR 논의 컨텍스트(이슈 댓글 + 리뷰 요약)를 추가적인 수정 컨텍스트로 가져옵니다.
- 셀프 리뷰(봇 생성 PR만 해당); 외부 리뷰는 댓글만 게시합니다.
ENABLE_SELF_REVIEW=true로 제어됩니다.
— 추가 설정은 필요하지 않습니다.
개별 프로젝트를 하나씩 등록하는 대신, 조직의 모든 프로젝트를 설명하는 단일 **워크스페이스 메타-레포(workspace meta-repo)**를 등록할 수 있습니다. 디스패처 AI는 매니페스트를 읽고 작업별로 올바른 하위 프로젝트를 선택하며 필요할 때 클론합니다.
- 워크스페이스 레포 루트에
workspace.json을 생성합니다:
{
"defaultBranch": "dev",
"projects": [
...
- 개발 가이드라인, 컨벤션 및 프로젝트 관계를 담은
CLAUDE.md를 선택적으로 추가하여 디스패처 AI에 컨텍스트로 주입할 수 있습니다. - 채팅에서 다음과 같이 입력합니다:
add workspace https://github.com/org/my-workspace
- 디스패처 AI는 매니페스트와 워크스페이스 가이드라인의 모든 하위 프로젝트를 확인합니다.
- 작업이 특정 하위 프로젝트를 대상으로 할 때, 시스템은 필요할 때(lazy) 클론합니다.
- 하위 프로젝트들은 동일한
projects테이블에 등록되며, 기존의 모든 작업/리뷰/승인 인프라를 재사용합니다. - 워크스페이스의branch필드는 자동 감지된 기본 브랜치(예:main대신dev)를 덮어씁니다. - 이미 클론된 하위 프로젝트는 다시 클론되지 않고 동기화됩니다.
| 모드 | 등록 방법 | 사용 시점 |
|---|---|---|
| 단일 프로젝트 | TARGET_PROJECT_PATH 환경 변수 | 레포 하나, 간단한 설정 |
| 다중 프로젝트 | 리포당 add project <URL> | 레포 몇 개, 수동 제어 |
| 워크스페이스 | 한 번에 add workspace <URL> | 레포가 많을 때, 조직 전체 AI 에이전트 |
멀티 프로바이더 AI: Anthropic (Claude), OpenAI 또는 모든 OpenAI 호환 API (DeepSeek, Groq, Together 등)멀티 플랫폼 IM: Feishu/Lark (WebSocket) 또는 Slack (Socket Mode) — 공용 IP 불필요2계층 AI: Fast 모델이 의도를 라우팅하고, 강력한 모델이 작업을 실행 — 비용 최적화프로젝트 메모리: AI가 결정, 컨텍스트 및 과거 작업 기억 — 시맨틱 중복 제거(LLM 기반), 변경 감사 추적, 주기적 가지치기, 프로젝트별 맞춤 추출 기능 제공샌드박스 실행: 작업은 격리된 Git 워크트리 샌드박스에서 실행되며, 변경 사항은 초안 PR로 제출됨병렬 실행: 프로젝트별 직렬 처리, 크로스-프로젝트 병렬 작업 실행 (동시성 설정 가능)멀티-프로젝트: 단일 채팅 그룹에서 여러 git 저장소 관리워크스페이스 모드: 모든 조직 하위 프로젝트를 하나의 진입점에서 관리할 수 있도록 워크스페이스 메타-레포(workspace.json) 등록 및 요청 시 클로닝 기능 제공GitHub App 인증: GitHub App을 통한 보안 인증 (PAT 대체)3단계 작업: AI 기반 위험 평가가 작업을 실행/제안/이슈 단계로 라우팅PR 검토: 자체 검토(+ 자동 수정 루프), IM 명령어, 폴링, 웹훅 트리거를 포함한 AI 코드 리뷰Jira 통합: Jira 링크 감지 시 이슈 세부 정보 자동 가져오기Figma 통합: Figma 링크에서 디자인 컨텍스트 가져오기파일 첨부: IM 메시지의 스크린샷 및 파일이 작업 AI로 전달됨
| 의존성 | 필수 여부 | 목적 |
|---|---|---|
| Node.js ≥ 18 또는 Bun | 예 | 런타임 환경 |
| git | 예 | 저장소 관리, 브랜치/커밋/푸시 작업 |
| curl 또는 wget | 예 | 설치 중 릴리스 아티팩트 다운로드 |
| Python 3 | 권장 | 네이티브 모듈(better-sqlite3, node-pty) 컴파일에 node-gyp가 필요함 |
| make + gcc/g++ | 권장 | 네이티브 모듈용 C/C++ 빌드 도구 체인 |
플랫폼별 설치 명령어
Debian / Ubuntu
sudo apt update && sudo apt install -y git curl python3 make g++
Node.js (NodeSource를 통해)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
...
RHEL / Amazon Linux
sudo yum install -y git curl python3 make gcc-c++
# Node.js (NodeSource를 통해)
curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash -
...
macOS
# Xcode command line tools (git, make, clang 포함)
xcode-select --install
# Node.js (Homebrew를 통해)
...
모든 플랫폼 (nvm을 통해)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
nvm install 22
참고: 네이티브 모듈용 사전 빌드 바이너리는 릴리스 아티팩트에 포함되어 있습니다. Python과 빌드 도구는 플랫폼에 맞는 사전 빌드 바이너리가 없는 경우에만 필요합니다.
# 대화형 모드 (최초 설정 시 권장)
bash <(curl -fsSL https://raw.githubusercontent.com/xxxxxccc/devops-bot/main/install.sh)
# 또는 비대화형 모드 (기본값으로 설치하고 .env.local을 수동으로 구성)
...
참고: 대화형 모드 (bash <(...))는 AI 제공업체, 프로젝트 경로, IM 플랫폼 설정을 안내하므로 최초 설치 시 권장됩니다. 파이프 모드 (curl ... | bash)는 기본값으로 설치하고 설정 마법사를 건너뜁니다.
설치 프로그램은 다음을 수행합니다:
- GitHub에서 최신 사전 빌드 릴리스를 다운로드합니다.
- 실행 환경(Node.js ≥ 18 또는 Bun)을 감지합니다.
- AI 제공업체, 프로젝트 경로, IM 플랫폼 설정을 안내합니다 (대화형 모드).
- 선택적으로 Jira, Figma 및 로컬 벡터 검색을 구성합니다.
devops-bot명령어를 전역으로 설정합니다.
그런 다음 시작합니다:
devops-bot start
언제든지 업그레이드합니다:
devops-bot upgrade
git clone https://github.com/xxxxxccc/devops-bot.git
cd devops-bot
pnpm install
...
.env.local 수정
:
# 단일 프로젝트 모드 (하위 호환):
# TARGET_PROJECT_PATH=/path/to/your/project
# 다중 프로젝트 모드: 채팅을 통해 추가 (
-
**AI API Key**— 다음 중 하나를 선택하세요:
- Anthropic Console을 사용하여 Claude 모델 이용
- GPT 모델용 OpenAI Platform
- `AI_BASE_URL`을 통한 모든 OpenAI 호환 엔드포인트 (DeepSeek, Groq, Together 등)
-
**IM 플랫폼**— 다음 중 하나를 선택하세요:
: **Feishu/Lark**: https://open.feishu.cn/app에서 앱 생성 → Long Connection 활성화 → `im.message.receive_v1` 추가
defops-bot start # 서버 시작 (IM 봇 자동 연결)
devops-bot start -p 8080 # 사용자 지정 포트
devops-bot --project /path # 프로젝트 경로 지정
...
IM 그룹 채팅에서 메시지 전송 (예:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기