Verification & synthesis · 2026-08-15 (KST)

Claude가 앱의 일상 유지보수를 맡는 실험

Boris Cherny의 게시물, 첨부된 Slack 이미지, 그리고 사전 조사 문서를 공개 문서와 대조해 검증하고 다시 정리한 문서입니다.

원문: @bcherny on X 검증 방법: 공개 제품 문서 · 보도 대조 확인일 2026-08-15
원문 게시물 · 전문 번역

Boris Cherny (@bcherny)

원문 보기 → x.com/bcherny/status/2088014489438621990
Boris Cherny · Creator & Head of Claude Code, Anthropic · 2026년 8월

지난 몇 주 동안 조금 이상한 실험을 해보고 있습니다. Claude에게 우리 앱들의 일상적인 유지보수를 맡겨 보는 것입니다. 이것이 정말 가능할지도 모른다는 초기 징후가 보이고 있습니다.

구성은 간단합니다. proj-claude-maintains-apps라는 Slack 채널이 있습니다. 이곳에서 Claude Tag가 iOS, Android, Desktop, Web, CLI, Agent SDK 전반에 걸쳐 여러 일일 루틴을 실행합니다.

  • Crash fuzzer — 시뮬레이터에서 앱을 열고 여기저기 조작하면서 앱을 충돌시키는 방법을 찾습니다. 그런 다음 근본 원인을 분석하고 충돌을 수정합니다.
  • Dup unifier — 코드베이스에서 서로 비슷하지만 조금씩 다르게 발전한 추상화들을 찾아 하나로 통합하는 PR을 올립니다.
  • Dead-code remover — 정적 분석상 도달 불가능한 코드를 제거합니다. 죽은 코드로 의심되는 부분에는 먼저 로깅을 추가해 실제로 사용되지 않는지 확인하고, 그렇다면 다음 날 제거합니다.
  • Abstraction police — 추상화 경계가 새는 문제를 수정합니다.
  • 그 밖에도 여러 가지가 있습니다.

결과는 놀랄 만큼 긍정적이었습니다. 지난 몇 주 동안 이 루틴들이 여러 저장소에 총 388개의 PR을 열었고, 그중 180개를 Claude Code Review와 사람의 리뷰를 거친 뒤 병합했습니다. 이제는 이런 기계적인 변경을 더 쉽게 병합할 수 있도록 절차를 간소화하는 방법을 고민하고 있습니다.

Claude는 대체로 첫 시도에 PR을 제대로 만듭니다. 그렇지 않을 때는 다음 날 더 잘하도록 Claude에게 해당 루틴을 조정하라고 합니다. 때로는 제대로 조정하는 데 며칠이 걸립니다.

비슷한 워크플로를 시도하려면 Claude Code나 Tag에 요청하거나, claude.ai/code/routines에서 직접 루틴을 만들 수 있습니다. 아래에는 제가 실제로 사용한 프롬프트 몇 가지를 첨부했습니다.

비슷한 워크플로를 실험해 본 사람이 있나요?

게시물에 이름이 나온 네 루틴

FOUR NAMED ROUTINES Crash fuzzer 실제 앱을 조작해 충돌시키고, 근본 원인을 고친다 탭 · 충돌 스택 추적에서 근본 원인 특정 수정 PR Dup unifier 비슷하지만 조금씩 갈라진 구현을 하나로 합친다 한 줄만 다르게 자란 두 구현 통합된 하나 Dead-code remover 의심되면 바로 지우지 않고, 하루 관측한 뒤 지운다 DAY 1 로깅 추가 도달 불가로 보이지만 확신은 없음 다음 날 DAY 2 로그가 비어 있으면 삭제 PR Abstraction police 계층을 건너뛴 의존성을 경계 안으로 되돌린다 UI 도메인 저장소 UI 도메인 저장소 계층을 건너뛴 호출 경계를 지키는 호출

네 루틴 모두 “찾는다”에서 끝나지 않고 수정 PR까지 갑니다. 특히 Dead-code remover는 하루를 기다립니다 — 정적 분석의 판단을 런타임 관측으로 한 번 더 검증하는 구조입니다.

번역상 주의점


PRs opened → merged

180 / 388 · 46.4%
병합 180 병합 확인 안 됨 208 사각형 1개 = PR 1건

회색 208개는 “실패한 PR”이 아닙니다. 리뷰 대기, 방금 열린 PR, 중복, 보류가 모두 여기 섞여 있습니다. 이유는 수치 해석에서 다룹니다.


먼저 보는 결론

사람 없는 자동 운영이 아니라, 매일 도는 반자동 유지보수 파이프라인이다

이 실험의 핵심은 “AI가 코드를 많이 쓴다”가 아닙니다. 그동안 경제성이 낮아 방치되던 유지보수 작업을, 매일 자동으로 찾아내 리뷰 가능한 작은 PR로 포장하는 비용이 급격히 낮아졌다는 점입니다. 최종 병합 권한은 여전히 사람에게 있습니다.

DAILY LOOP PR에 첨부: 재현 절차 · /verify · 진리표 루틴 저장된 프롬프트 탐지 · 재현 실제 앱, mock 금지 수정 PR 격리 브랜치 Code Review 승인·차단 없음 사람 병합 결정 PR 하나만 고치는 길 — 택하지 않음 결과가 나쁘면 루틴 자체를 고친다 한 번의 수정이 이후 모든 실행에 적용된다 · 며칠 걸리기도 한다

하루 한 바퀴. 오른쪽 끝에서 되돌아오는 굵은 선이 이 실험의 핵심입니다 — 되돌아가는 지점이 PR이 아니라 루틴입니다.

  1. 탐지 — 저장된 루틴이 매일 실제 앱과 코드베이스, CI를 검사한다
  2. 재현 — 충돌·중복·죽은 코드·불안정 테스트의 근본 원인을 찾는다
  3. 제안claude/ 브랜치에 작은 수정과 PR을 만든다
  4. 증빙 — 재현 절차, /verify 결과, 진리표를 PR에 첨부한다
  5. 검토 — Claude Code Review가 코멘트를 남기고, 사람이 병합을 결정한다
  6. 개선 — 결과가 나쁘면 PR이 아니라 루틴 자체를 고친다

↳ 6단계가 다시 1단계로 이어지는 것이 이 시스템의 진짜 제품입니다.

검증 결과

사전 분석 문서를 공개 자료와 대조한 결과

원 분석의 큰 틀은 정확합니다. 다만 제품 상태와 요금, 이미지 판독에서 보정할 항목 6가지가 나왔습니다.

항목판정확인 내용
게시물 실재 여부와 수치확인2026년 8월 X 게시물로 확인. 388 PR / 180 병합, Slack 채널명, 루틴 이름 모두 원문과 일치. 2차 보도도 동일한 수치를 전합니다.
Routines의 상태보정research preview가 맞습니다. 다만 공식 문서는 Pro·Max·Team·Enterprise에서 이미 사용 가능하다고 명시합니다. 2026년 4월 14일 공개되었습니다.
Claude Tag의 제공 범위확인Team·Enterprise 대상 베타. 다만 “조직 공용 정체성”은 더 정확히는 채널 단위 정체성입니다. 공개 채널은 워크스페이스 공용, 비공개 채널은 채널 전용 정체성을 갖습니다(agent identity).
Code Review는 승인·차단을 하지 않는다확인문서가 명시합니다. 심각도만 표시하고 기존 리뷰 절차를 바꾸지 않습니다. Team·Enterprise 한정, ZDR 조직 제외.
“비용 데이터가 전혀 없다”보정리뷰 비용은 공개되어 있습니다. Code Review는 리뷰 1건당 평균 $15–25로 과금됩니다(출처). 이것만으로 하한 추정이 가능합니다. 아래 참조.
루틴 목록은 11종보정이미지의 표는 아래가 잘려 있습니다. Abstraction police 밑에 행이 하나 더 시작됩니다. 게시물의 “a bunch more”와 합치면 최소 11종, 실제로는 더 많음이 정확한 표현입니다.
Shipped-feature inliner 설명보정이미지 원문은 “완전히 출시된 기능의 플래그를 제거한다”까지만 말합니다. “해당 경로를 기본 코드에 편입한다”는 이름(inliner)에서 추론한 내용이므로 추론으로 표시해야 합니다.
Slack 스크린샷의 연도해소화면에 연도는 없지만 2026년 7월 19일로 특정됩니다. Routines는 2026년 4월, Claude Tag는 2026년 6월에야 존재했기 때문입니다.
“작업 명의는 연결된 사용자 계정”보정개인 계정 루틴은 그렇습니다(문서 명시). 그러나 Claude Tag 경로에서는 Claude 자신의 정체성(Slack 앱, Claude GitHub App, 관리자가 만든 서비스 계정)으로 동작합니다. 어느 경로냐에 따라 감사 로그의 주체가 달라집니다.
Claude Tag가 루틴을 “실행한다”는 구조미확인공개 문서상 루틴은 개인 claude.ai 계정에 귀속되며 팀과 공유되지 않습니다. Tag 정체성이 루틴을 보유하는 형태는 공개 문서로 확인되지 않습니다. 사내 버전일 가능성이 있습니다.
번역 확인

사전 문서의 번역은 정확합니다. 특히 fuzz를 “무작위 바이트 주입”이 아니라 실제 앱을 조작하며 충돌 경로를 찾는 탐색적 E2E 퍼징으로 옮긴 판단, truth table을 논리학 표가 아니라 조건 조합 × 기대 동작 표로 해석한 판단은 맥락에 맞습니다.

구성

네 개의 층이 겹쳐야 이 파이프라인이 성립한다

게시물은 간단해 보이지만, 실제로는 서로 다른 네 개의 제품이 한 줄로 엮여 있습니다. 하나라도 빠지면 같은 워크플로가 재현되지 않습니다.

역할공개된 조건
Claude TagSlack 채널이 작업 지시와 보고의 창구가 된다Team·Enterprise 베타. Primary Owner/Owner만 설정 가능. Enterprise는 역할 기반 접근 제어 추가
Routines프롬프트 + 저장소 + 환경 + 커넥터를 저장해 무인 실행일정·API·GitHub 이벤트 트리거. 노트북이 꺼져 있어도 클라우드에서 실행. research preview
Code Review여러 에이전트가 전체 코드베이스 맥락에서 PR을 검사승인·차단 없음. Team·Enterprise, ZDR 조직 제외. 사용량 크레딧으로 별도 과금
사람제품 의도와 위험을 판단하고 병합을 결정대체되지 않는 층

루틴들은 어떻게 하나의 루프가 되는가

루틴 하나하나는 서로를 모릅니다. 그런데도 전체가 한 시스템처럼 움직이는 이유는 세 가지를 공유하기 때문입니다. 같은 완료 규격(재현 절차·/verify·진리표), 같은 리뷰 큐, 같은 피드백 채널(Slack 스레드 → 루틴 조정). 오케스트레이션은 소프트웨어가 아니라 이 세 가지 약속입니다.

ONE LOOP, MANY WORKERS 중앙 오케스트레이터는 없습니다. 루틴들이 공유하는 것은 완료 규격 · 리뷰 큐 · 피드백 채널 세 가지입니다. 실행 중 결함 Crash fuzzer · Logic bugfixer Flaky-test fixer 복잡성 축소 Logic simplifier · Dup unifier 청소 Dead-code removal Useless-test pruner 수명주기 정리 Ant-only shipper Shipped-feature inliner 아키텍처 Abstraction improver Abstraction police 플랫폼마다 별도 루틴 · 매일 독립 실행 공용 완료 규격 repro · /verify · truth table ↑ 실행 후 검사가 아니라, 각 루틴 프롬프트에 미리 박혀 있는 조건 PR에 첨부되어 리뷰어가 읽는 증빙이 된다 Code Review 승인·차단 없음 사람 리뷰 단 하나의 큐 · 병목 병합 180 그 외 208 실패한 PR이 아니라, 그 PR을 만든 루틴을 고친다 루틴은 서로를 호출하지 않습니다. 하나를 고쳐도 다른 루틴은 그대로이므로, 조정은 언제나 개별 루틴 단위로 일어납니다.

진리표는 두 번 등장합니다. 실행 전에는 루틴 프롬프트 안의 완료 조건으로, 실행 후에는 PR에 첨부되어 리뷰어가 읽는 증빙으로. 이 이중 역할이 없으면 왼쪽의 독립된 루틴들과 오른쪽의 단일 리뷰 큐가 연결되지 않습니다.

문서에서 확인되는 실행 조건

루틴 실행은 실행 중 승인 프롬프트가 없는 완전 자율 세션입니다. 저장소는 매 실행마다 기본 브랜치에서 새로 복제되고, 변경은 claude/ 접두사 브랜치로만 자유롭게 푸시됩니다. 보호된 브랜치, 타인의 PR이 열린 브랜치, 타인이 작성한 커밋이 있는 브랜치로의 푸시는 거부됩니다. 이 두 가지가 “실패가 PR에서 멈춘다”를 보증하는 실제 장치입니다.

Slack 지시문 · 이미지 1

지시문에 숨어 있는 것은 작업 내용이 아니라 완료 조건이다

boris · 7월 19일 (2026년으로 특정) · Slack 오후 12:30

iOS, Android, Desktop 앱의 E2E 충돌 퍼징을 위한 새로운 일일 루틴을 시작하자. 플랫폼별로 각각 루틴을 만들어라. 워크플로를 사용해 실제 앱을 실행해야 하며, mock은 사용하지 않는다. 앱을 퍼징해 충돌을 유발한 다음, 그 충돌의 수정 PR을 올려라. 각 PR은 반드시 /verify를 실행하고, PR에 재현 절차와 진리표를 게시해야 한다. 이 채널에는 새로운 최상위 Fuzzer 스레드를 만들고 그곳에 진행 상황을 업데이트하라.

또한 business-logic-bugfixer-daily, business-logic-simplifier-daily, dup-unifier도 만들어라. 방식은 같다. 앱마다 별도의 루틴을 만들고, 업데이트를 올릴 최상위 스레드를 두며, 항상 진리표를 사용해 E2E로 검증한다. 이 모든 작업에서는 논리를 형식적으로 모델링하는 것도 잊지 마라. 그래야 논리의 빈틈과 중복을 발견하고 모든 경계 사례가 충분히 테스트되었는지 확인할 수 있다.

불안정한(flaky) 테스트의 근본 원인을 찾아 수정하고, 쓸모없는 테스트를 삭제하는 작업에도 같은 방식을 적용하라.

오후 12:43

죽은 코드 제거용 루틴도 하나 만들어라.

2026년 7월 19일 오후 12:30과 12:43, 두 개의 메시지로 iOS·Android·Desktop의 E2E 충돌 퍼징, 비즈니스 로직 버그 수정과 단순화, 중복 통합, 불안정 테스트 근본 원인 수정, 무용 테스트 삭제, 죽은 코드 제거 루틴이 한꺼번에 만들어집니다. 여기서 중요한 것은 무엇을 시켰는지가 아니라, 무엇을 해야 끝난 것으로 인정하는지를 못 박았다는 점입니다.

지시된 장치의미막으려는 실패
실제 앱 실행, mock 금지테스트 대역이 아닌 실제 실행 환경에서 재현mock에서는 통과하지만 제품에서 실패하는 수정
앱마다 독립 루틴플랫폼별 빌드·런타임·UI 차이를 분리한 플랫폼의 가정을 다른 플랫폼에 잘못 적용
/verify 필수팀 내부 표준 검증 절차를 모든 PR에 강제에이전트가 임의로 검증 범위를 축소
재현 절차 첨부변경 전 실패를 다시 만들어 낼 수 있게 함실제 버그인지 확인할 수 없는 PR
진리표 첨부입력 조건 조합과 기대 결과를 명시조건 분기와 경계 사례 누락
논리의 형식적 모델링자연어 추측이 아닌 상태·규칙·불변조건으로 분석복잡한 비즈니스 규칙의 오독
최상위 Slack 스레드 보고루틴별 실행 기록과 피드백을 한곳에 축적자동화가 보이지 않는 곳에서 조용히 실패

여기서 말하는 진리표는 이런 형태입니다

로그인네트워크캐시기대 결과
정상있음서버 응답 표시, 캐시 갱신
끊김있음캐시 표시, 오프라인 안내
끊김없음복구 가능한 오류 화면
아니요무관무관로그인 화면으로 이동

이 표가 하는 일은 단 하나입니다. 정상 경로 하나가 통과했다는 이유로 에이전트가 작업을 끝났다고 선언하지 못하게 만드는 것. 자율 실행 세션에는 중간 승인이 없으므로, 완료 조건은 프롬프트 안에 미리 들어가 있어야 합니다.

문서가 경고하는 지점

루틴 실행 목록의 초록색 상태는 세션이 오류 없이 끝났다는 뜻일 뿐, 작업이 성공했다는 뜻이 아닙니다. 차단된 네트워크 요청, 없는 커넥터 도구, 과제 실패는 모두 상태 표시가 아니라 실행 기록 안에만 나타납니다. 진리표와 스레드 보고를 요구한 이유가 여기에 있습니다.

루틴 목록 · 이미지 2

11종은 다섯 가지 목적으로 묶인다

루틴하는 일범주
Crash fuzzer실제 앱에서 충돌을 찾아 근본 원인 수정 PR을 연다실행 중 결함
Logic bugfixer까다로운 논리를 모델링해 버그를 찾아 수정한다실행 중 결함
Flaky-test fixer간헐적으로 실패하는 CI 테스트의 근본 원인을 찾는다실행 중 결함
Logic simplifier복잡하게 얽힌 비즈니스 로직을 단순화한다복잡성 축소
Dup unifier중복된 구현들을 하나로 합친다복잡성 축소
Dead-code removal도달할 수 없음이 입증된 코드를 삭제한다청소
Useless-test pruner실패할 수 없는 테스트를 삭제한다청소
Ant-only shipper사용량에 따라 잊힌 내부 전용 기능을 출시하거나 삭제한다수명주기 정리
Shipped-feature inliner완전히 출시된 기능의 플래그를 제거한다수명주기 정리
Abstraction improver과도하게 설계된 추상화를 평탄화한다아키텍처
Abstraction police계층 구조 위반을 수정한다아키텍처

Improver와 Police는 반대 방향의 교정입니다. 전자는 추상화가 너무 많은 문제를, 후자는 있는 추상화가 지켜지지 않는 문제를 다룹니다. 하나는 계층을 줄이고, 하나는 건너뛴 계층을 되돌립니다. 이름이 비슷해서 하나로 합치면 두 방향이 서로를 되돌리는 PR을 만들게 됩니다.

Ant-only는 Anthropic 내부 전용 기능을 가리키는 사내 표현으로 보입니다. 이미지가 “forgotten internal-only features”라고 명시하므로 그 범위 안에서만 해석했습니다.

수치 해석

46.4%는 정확도가 아니다

지표성격
생성된 PR388자기보고, 확정
병합된 PR180자기보고, 확정
관측 시점 병합 비율46.4%계산값
병합 확인 안 된 PR208상태 불명
일평균 생성(3주 가정)≈18.5추정
Code Review 비용(전량 리뷰 가정)$5.8k–9.7k추정

이 비율을 정확도로 읽으면 안 되는 이유

비용은 부분적으로 계산할 수 있습니다

사전 분석은 “비용 정보가 없다”고 했지만, 리뷰 쪽은 공개 단가가 있습니다. Code Review는 PR 크기와 복잡도에 따라 건당 평균 $15–25입니다. 388건 모두 리뷰가 돌았다고 가정하면 리뷰 비용만 대략 $5,800–9,700입니다. 여기에 388건의 루틴 실행 토큰, 시뮬레이터·CI 시간, 그리고 가장 비싼 항목인 사람의 리뷰 시간이 더해집니다. 자동화의 ROI는 PR 개수가 아니라 절약된 순공수 − (검토 + 운영 + 실패) 비용입니다.

실행 규모는 공개 한도를 넘어선다

RUNS PER DAY 플랫폼 6종 × 루틴 11종 = 하루 66회 실행 iOS Android Desktop Web CLI Agent SDK Crash fuzzer Logic bugfixer Flaky-test fixer Logic simplifier Dup unifier Dead-code removal Useless-test pruner Ant-only shipper Shipped-feature inliner Abstraction improver Abstraction police ↑ 공개 한도 안 25회 ↓ 한도 밖 41회 하루 루틴 실행 한도는 공개 시점 기준 Pro 5회 · Max 15회 · Team·Enterprise 25회. 초과 실행은 사용량 크레딧이 있어야 합니다. 루틴 수는 공개 이미지에서 확인된 11종 기준이며, 게시물의 “a bunch more”를 감안하면 실제 실행 횟수는 더 많을 수 있습니다.

지시문이 “앱마다 별도의 루틴”을 요구하므로 실행 횟수는 플랫폼 수와 루틴 수의 곱으로 늘어납니다.

따라올 수 없는 조건 하나

공개된 한도로 계산하면 이 실험은 개인 계정 한 개로는 재현되지 않습니다. 플랫폼 6종 × 루틴 11종이면 하루 최대 66회 실행이 필요한데, 공개 시점 기준 하루 루틴 실행 한도는 Pro 5회, Max 15회, Team·Enterprise 25회였습니다. 사용량 크레딧을 통한 초과 실행, 여러 계정, 또는 사내 버전을 전제해야 성립합니다. 같은 워크플로를 복제하려면 이 비용 구조를 먼저 확인해야 합니다.

현재 증거가 지지하는 결론은 여기까지입니다. 테스트와 리뷰 기반이 잘 갖춰진 대규모 코드베이스에서, 에이전트가 반복적인 유지보수 후보를 지속적으로 발굴하고 그중 상당수를 사람이 병합할 수 있는 PR로 만드는 일이 실용 단계에 접근했다는 것. “앱 유지보수가 자율화되었다”거나 “사람 개발자가 불필요해졌다”는 결론은 이 자료로 뒷받침되지 않습니다.

작동 원리

왜 하필 유지보수가 먼저 뚫렸는가

1. 목표가 좁고 검증 가능하다

신규 기능은 “무엇을 만들 것인가”부터 모호합니다. 반면 죽은 코드 제거, 플래그 정리, 충돌 재현은 성공 조건을 테스트와 diff로 표현할 수 있습니다. 정답이 있는 문제부터 넘긴 것입니다.

2. 실패가 PR에서 멈춘다

운영 환경 배포가 아니라 격리된 브랜치의 제안입니다. 잘못된 결과의 처리 비용이 “닫기” 한 번입니다.

3. 단발성 프롬프트가 아니라 개선되는 공정이다

잘못된 PR이 나오면 그 PR을 손보는 대신 생성 루틴을 고칩니다. 한 번의 개선이 이후 모든 실행에 재사용됩니다. 실질적으로는 에이전트용 SOP와 완료 규격을 계속 개발하는 일입니다. 게시물도 “며칠씩 걸리기도 한다”고 인정합니다.

4. 사람이 미루기 쉬운 일을 매일 한다

중복 제거, 불안정 테스트 조사, 오래된 플래그 삭제는 중요하지만 긴급하지 않아 밀립니다. 에이전트의 가치는 인간을 넘는 창의성보다 빠짐없는 성실성에 가깝습니다.

5. 관측을 먼저 추가하는 보수적 전략을 쓴다

확실한 죽은 코드는 삭제하지만, 의심만 되는 코드에는 먼저 로깅을 넣고 다음 날 판단합니다. 정적 분석 → 런타임 관측 → 삭제로 이어지는 다단계 검증입니다. 이 실험에서 가장 이식할 가치가 큰 패턴입니다.

비교

기존 자동화와 무엇이 다른가

Renovate는 오래전부터 저장소를 검사해 의존성 업데이트 PR을 만들고, 필수 테스트가 통과하면 제한적으로 자동 병합까지 합니다. 다만 대상이 구조화된 영역에 한정됩니다. 무엇이 최신 버전인지는 기계가 판정할 수 있습니다.

GitHub Copilot cloud agent는 이슈를 배정받아 저장소를 조사하고 브랜치와 PR을 만들며, 일정이나 이벤트로 자동 실행하는 automation도 제공합니다. 업계 전체가 “사람이 과제를 지정하고, 에이전트가 격리된 변경 묶음으로 납품하며, 사람이 승인한다”는 형태로 수렴하고 있습니다.

이 실험이 다른 지점은 두 가지입니다. 첫째, 대상이 의미상 중복이나 충돌 원인처럼 판정 기준이 열린 문제라는 것. 둘째, 사람이 과제를 지정하지 않고 후보 발굴 자체를 상시 프로그램으로 만들었다는 것입니다.

위험

복제하기 전에 계산해야 할 것들

PR 홍수와 리뷰 병목

생성 비용은 떨어져도 사람의 검토 시간은 자동으로 줄지 않습니다. 388개는 성과인 동시에 새로운 운영 부하입니다. 낮은 가치의 PR이 쌓이면 중요한 변경이 묻히고, 리뷰어가 자동 생성물을 습관적으로 승인하는 자동화 편향이 생깁니다. 게시물이 “병합을 간소화할 방법을 고민 중”이라고 쓴 것은 병목이 이미 생성에서 승인으로 옮겨갔다는 신호입니다.

작성자와 리뷰어의 상관된 오류

같은 모델 계열이 코드를 쓰고 리뷰하면 같은 잘못된 가정을 공유할 수 있습니다. Code Review는 여러 에이전트를 병렬로 돌리고 검증 단계로 오탐을 걸러 이 문제를 부분적으로 완화하지만, 독립적인 정적 분석·보안 검사·사람의 도메인 판단을 대체하지는 않습니다.

거짓 dead code

리플렉션, 동적 import, 플러그인, 드문 기능 플래그, 외부 진입점은 정적 분석에서 도달 불가능하게 보입니다. 런타임 로깅도 관측 기간에 실행되지 않았다는 사실만 보여 줄 뿐, 영원히 필요 없음을 증명하지 못합니다. 분기·연말 배치, 재해 복구 경로가 대표적인 함정입니다.

무의미한 테스트라는 판정

“실패할 수 없는 테스트”는 무가치할 수도 있지만, API 사용 예시나 타입 보장, 과거 회귀 방지, 문서 역할을 할 수도 있습니다. 삭제 전에 그 테스트가 왜 생겼는지를 확인해야 합니다.

주관적인 리팩터링

비슷한 구현이 의도적으로 분리돼 있을 수 있고, 새는 것처럼 보이는 추상화가 성능이나 호환성 때문에 필요할 수 있습니다. Dup unifier와 추상화 계열은 도메인 지식 없이 가장 쉽게 과잉 수정하는 영역입니다.

권한과 프롬프트 인젝션

루틴은 실행 중 대화형 승인 없이 셸 명령과 포함된 커넥터의 쓰기 도구까지 사용할 수 있습니다. 공식 문서는 저장소·환경 변수·네트워크 접근·커넥터를 필요한 최소 범위로 줄이라고 안내하며, 환경 변수는 그 환경을 쓰는 모든 사람에게 보인다고 경고합니다. 기본 환경은 허용 목록 외 도메인을 차단합니다. API 트리거로 들어온 텍스트는 신뢰할 수 없는 데이터로 표시되어 전달되지만, 실행 중 가져온 이슈·로그·문서의 내용은 여전히 인젝션 경로입니다.

도입안

신뢰 범위를 단계적으로 넓히는 5단계

  1. 탐지만 수행 — 후보를 찾되 수정하지 않는다. 근거·예상 영향·재현 절차만 보고하고, 사람이 유효 후보 비율을 측정한다.
  2. Draft PR만 생성 — 한 PR에 한 가지 기계적 목적만. diff 크기와 변경 파일 수에 상한을 둔다. 재현 절차, 진리표, 실행한 테스트, 롤백 방법을 PR 템플릿으로 강제한다.
  3. 독립 검증을 강화 — CI, 타입 검사, 린터, 정적 분석, 보안 검사, E2E를 필수 상태 검사로. AI 작성자와 별개인 규칙 기반 검사를 두고 코드 오너 승인을 유지한다.
  4. 위험도별 큐 운영 — 아래 표.
  5. 지표를 바꾼다 — PR 개수 대신 아래 목록을 본다.
위험도권장 처리
낮음완전히 출시된 플래그 제거, 생성 코드 갱신충분한 관찰 기간 후 제한적 자동 병합 검토
중간확실한 중복 제거, 테스트 정리AI 리뷰 + 담당자 승인
높음결제·권한·데이터 모델, 추상화 경계 변경설계 검토와 복수 승인

측정할 지표

종합

병목은 코드 작성량에서 완료 조건 설계로 옮겨간다

이 사례를 “Claude가 개발자를 대신해 앱을 관리한다”로 요약하면 과장입니다. 더 정확한 표현은 이렇습니다.

Claude가 유지보수 후보 발굴자, 1차 조사자, 수정 PR 작성자 역할을 상시 수행하고, 자동 검증과 사람의 판단이 이를 통제하는 새로운 유지보수 운영 모델을 시험하고 있다.

그리고 이것이 성립하려면 에이전트보다 주변 시스템이 먼저 준비되어야 합니다. 실제 앱을 자동 실행할 수 있어야 하고, 실패를 안정적으로 재현할 수 있어야 하며, 완료 조건을 /verify·진리표·불변조건으로 표현할 수 있어야 하고, 변경이 작은 PR과 격리 브랜치에 머물러야 하며, 잘못된 결과가 다음 루틴 개선으로 이어져야 합니다.

이 모델이 퍼지면 개발 조직의 병목은 좋은 완료 조건을 설계하는 능력, 검증 인프라, 리뷰 처리량, 권한 통제, 그리고 자동화의 경제성을 판단하는 능력으로 이동할 가능성이 큽니다. 388이라는 숫자보다, 그 숫자를 만든 루틴을 고치는 루프가 이 실험의 진짜 결과물입니다.

자료의 한계

이 문서가 확인하지 못한 것