AI 에이전트를 공부한다고 유튜브를 계속 보는데, 어느 순간부터 하네스니 루프니 그래프니 하는 말이 반복해서 나왔다.
찾아보니 셋 다 결국 같은 걸 묻고 있었다. AI한테 일을 맡길 때 그 주위에 뭘 세워둘 것인가, 그리고 그 답이 세 가지라는 얘기였다.
마침 나한테 대볼 게 있었다. 오픈소스에 매일 PR을 하나씩 올리는 자동화를 몇 달째 돌리고 있어서, 셋을 거기다 하나씩 맞춰봤다.
셋이 뭐냐면
하네스는 규칙을 문서에 박아두는 방식이다. 뭘 건드리면 안 되고 무엇을 통과해야 결과물을 내보내는지를 적어두면, 에이전트가 매번 그걸 읽고 일한다.
루프는 정해진 시각에 반복해서 돌리는 방식이다. 사람이 시킬 때만 도는 게 아니라 알아서 깨어난다.
그래프는 일의 단계를 상자로 그리고 그 사이를 화살표로 잇는 방식이다. 어디서 갈라지고 어디로 되돌아가는지가 그림에 남는다.
내 자동화를 열어보니 앞의 둘은 이미 있었다. 그렇게 부르는 물건인 줄 몰랐을 뿐이다.
하네스는 문서 하나였다. 작업 폴더에 CLAUDE.md가 있고 절이 28개다. 저장소 정책 확인, 후보 점수표, 중복 작업 검사, 재현 규칙, 회귀 테스트 규칙. 흉터라고 쓴 그 규칙들이 실제로는 이 파일이다.
루프는 예약 실행 세 개였다. 아침 9시에 열린 PR을 훑고, 10시·14시·18시에 새 후보를 찾고, 밤 9시에 리뷰에 대응한다. 내가 켜두지 않아도 맥이 시간에 맞춰 알아서 깨운다.
그래프는 없었다. 그래서 그것만 만들어봤다. LangGraph라는 도구로 같은 파이프라인을 상자와 화살표로 옮겨 적었다. 새 규칙은 하나도 안 만들고 이미 있는 걸 옮기기만 했다.
화살표는 원래 있었다
옮기면서 제일 먼저 안 건, 그래프로 그린다는 게 없던 걸 만드는 일이 아니라는 거였다.
CLAUDE.md에 "재현이 안 되면 손대지 않는다"는 문장이 있다. 버그가 내 컴퓨터에서 실제로 재현되지 않으면 그 이슈는 건드리지 말라는 뜻이다. 그래프에서 이건 재현 상자에서 후보 고르기 상자로 되돌아가는 화살표가 된다. 문장일 때는 규칙이었는데, 그림에서는 길이다.
돌려보면 이렇게 나온다.
오늘 몫 남았나 → 남음
후보 고르기 → rubocop 선택 (10점 만점에 9점)
재현 → 실패, 후보 고르기로 되돌아감
후보 고르기 → hugo 선택 (9점)
재현 → 됨
첫 후보가 재현이 안 되니 알아서 다음 후보로 갔다. 예약 실행으로 돌릴 때도 결과는 같았을 텐데, 거기서는 이 되돌아감이 문서를 읽은 모델의 판단이었고 여기서는 그려둔 선이다.
하루 한 개 제한도 마찬가지다. 지금은 실행 스크립트가 시작할 때 기록을 읽어서 판단한다. 그래프에서는 그냥 첫 상자의 갈림길이다.
화살표는 처음부터 다 있었다. 스크립트에, 예약 시각에, 그리고 문서 안의 문장에 흩어져 있었을 뿐이다. 그래프는 그걸 한 장에 모아놓는다.

내가 그린 게 아니라 코드에서 뽑은 그림이다. 점선은 조건에 따라 갈라지는 길이고, 노란 상자 둘이 사람이 서는 자리다.
안 그린 것은 일어나지 않는다
처음 돌렸을 때 파이프라인이 수정 단계에서 멈췄는데, 에러 메시지 하나 없이 그냥 끝나 있었다.
화살표를 하나 빠뜨렸던 거다. 수정에서 검증으로 가는 선을 안 그렸는데, 나가는 화살표가 없는 상자는 오류가 아니라 그냥 끝이다. 그래프는 시키지 않은 걸 하지 않는다.
예약 실행으로 돌릴 때는 이런 일이 안 생긴다. 문서에 "고쳤으면 검증해라"라고 적혀 있고, 모델이 알아서 이어가고, 사실 안 적어놔도 대개는 그렇게 한다.
정해야 하는 것도 늘었다. 후보 점수표는 10점 만점인데 몇 점부터 통과인지가 문서에 없다. 검증이 실패하면 몇 번까지 다시 고쳐볼지도 없다. 예약 실행에서는 에이전트가 그때그때 정했다. 그래프에서는 비워둘 수가 없어서 7점과 2회로 내가 정했다.
흐름이 눈에 보이는 대신 안 정한 걸 계속 정해야 한다. 그래프의 값은 그 둘을 같이 치르는 것이었다.
그래프가 판단을 없애주지는 않는다
CLAUDE.md에는 "이런 이슈는 건드리지 마라"는 조건이 아홉 개 있다. 옮겨보니 그림이 된 건 둘뿐이었다. 저장소가 AI 기여를 금지했는가, 같은 저장소에 내 PR이 이미 열려 있는가. 둘 다 맞다 아니다로 갈리니 갈림길 하나면 된다.
나머지 일곱은 안 떨어진다. "가끔 실패한다는 모호한 리포트인가", "넓은 설계 변경이 필요한가", "내가 자신 있게 설명할 수 있는 이슈인가". 이건 상자 안으로 들어가고, 그 안에서는 여전히 모델이 판단한다.
그래프는 판단이 어디서 일어나는지를 보여주지, 판단을 대신하지 않는다. 유행하는 소개 글들을 읽으면서 이 부분이 잘 안 보였다.
사람이 멈추는 자리는 두 개였다
다 그리고 나서 보니 사람이 끼어드는 상자가 정확히 둘이었다. 메인테이너에게 답글을 보낼 때, 그리고 PR을 접을지 정할 때.
코드를 추가로 올리는 건 자동이다. 예전에는 여기도 내가 봤는데, 모델이 좋아지면서 문제가 생기는 경우가 드물어져서 승인을 뗐다.
여기서 걸리는 게 하나 있다. 나는 규칙 얘기를 쓰면서 "모델이 좋아지면 규칙이 필요 없어지는 것 아니냐"는 반론에 정반대라고 답했다. 그래놓고 정작 모델이 좋아지자 승인을 하나 뗐다.
그런데 전부 뗀 게 아니라 코드 올리는 것만 뗐다. 왜 답글은 남겼나 생각해보니, 기준이 모델 지능이 아니었다. 그걸 받는 쪽이 사람이냐 아니냐였다.
코드를 받는 쪽은 자동 검사 도구다. 잘못 올라가면 다시 올리면 된다. 답글을 받는 쪽은 사람이다. 나는 아직 사람과 AI 사이의 소통이 완전하게 되지는 않는다고 생각하고, 그래서 그 자리에 들어간다.
이건 겪어서 아는 거다. 차단당했을 때 AI로 쓴 해명이 "그 해명도 AI가 쓴 것 같은데요"로 돌아왔고, 레딧에서는 대시 하나 때문에 글 전체가 슬롭 취급을 받았다. 두 번 다 코드가 아니라 사람에게 말을 거는 자리에서 터졌다.
셋은 경쟁하지 않는다
옮겨보고 나니 셋이 서로 다른 질문에 답하고 있었다.
하네스는 무엇을 하면 안 되는지에 답한다. 루프는 언제 도는지에 답한다. 그래프는 어디서 갈라지고 어디서 멈추는지에 답한다. 그래서 어느 하나가 나머지를 대체하지 않는다. 지금도 매일 실제로 도는 건 예약 실행 쪽이고, 그래프는 흐름을 확인하려고 돌려본 것뿐이다.
셋을 다 대보고 제일 좋았던 건 새 도구가 생긴 게 아니었다. 여기저기 흩어놓은 것들을 한 장에 놓고 볼 수 있게 된 거였다. 놓고 보니 빠진 화살표가 보였고, 안 정해둔 숫자가 보였고, 사람이 서 있어야 할 자리가 두 개라는 것도 보였다.
'AI 개발' 카테고리의 다른 글
| 레딧에 글을 쓰며 배운 것들 - 네 번 올렸고, 네 번 다 다른 데서 틀렸다 (1) | 2026.08.05 |
|---|---|
| 내가 블로그 글을 쓰는 방법 - 써줘 대신 인터뷰해줘 (0) | 2026.07.25 |
| 내 규칙은 전부 흉터다 (0) | 2026.07.25 |
| AI를 이용해 오픈소스에 기여하는 방법 (0) | 2026.07.24 |