에이전트를 처음 돌려본 밤을 떠올려 보자. 목표 한 줄을 던지고, "오, 알아서 도네" 하며 흐뭇하게 지켜본다. 한 바퀴, 두 바퀴, 세 바퀴… 그런데 다섯 바퀴째에도 안 멈춘다. 여섯 바퀴, 일곱 바퀴. 카운터는 계속 오르는데 답은 안 나온다. 그제야 등줄기가 서늘해진다 — "이거 언제 멈추지? 지금 돈 새고 있는 거 아냐?"

직접 겪어봤든, 겪을까 봐 겁이 나든, 그 식은땀의 정체가 오늘의 주제다. 그리고 좋은 소식이 있다. 그 폭주는, 슬라이더 몇 개면 당신이 원하는 지점에서 딱 멈춰 세울 수 있다.

🌱 이 글은 ★★☆ 손에 익히기본문 7분 + 직접 돌려보기 2~3분(★☆☆ 경로는 20초). 아무것도 안 만지고 ▶ 한 번이면 첫 성공입니다.

도는 힘을 줬으면, 멈추는 힘도 줘야 한다

여기까지 온 독자라면 기억할 것이다. 1편에서 우리는 목표 한 줄에 에이전트가 혼자 여러 바퀴 도는 걸 구경했고, 2편에서 그 루프를 해부했고, 3편에서 "한 바퀴 더 돌까?"라는 판단 한 칸을 채워 미니 에이전트를 조립했다. 스스로 도는 AI를 손에 넣는 여정이었다.

그런데 세 편 내내, 나는 같은 약속을 미뤄 왔다. 1편 데모 위쪽에 그어 둔 빨간 선 "🛡 안전 상한 6바퀴"를 기억하는가. 그때 이렇게 적었다 — "스스로 도는 힘을 준다는 건, 곧 스스로 멈추는 장치도 함께 채워야 한다는 뜻이다. 도는 힘과 멈추는 힘은 한 세트다." 그 세트의 나머지 반쪽, 멈추는 힘을 손으로 다루는 게 오늘이다. 3편 마지막에 "다음 편에서는 브레이크를 단다"고 했던 그 브레이크 말이다.

왜 이게 선택이 아니라 필수일까. 에이전트 실전 사고의 대부분은 대단한 버그가 아니라 폭주다 — 끝날 줄 모르고 같은 행동을 반복하고, 같은 도구를 계속 부르고, 예산을 훌쩍 넘긴다. 스스로 도는 힘이 강할수록, 멈추는 장치가 없으면 그 힘은 그대로 청구서가 된다.

폭주가 어떤 얼굴인지, 말로 듣지 말고 직접 보자

폭주는 설명으로는 안 무섭다. "무한루프에 토큰 다 태웠대" 같은 말은 남의 일이다. 그러니 이번에도 설득하지 않겠다. 직접 목격하고 오시라.

옆에 「루프 길들이기」 위젯을 심어 뒀다. 기본값으로 무한 검색 루프가 골라져 있다. 이 에이전트에게 준 목표는 "이 주제로 완벽한 요약을 만들어와" 딱 한 줄이다. 그런데 문제가 하나 있다 — 이 에이전트는 종료 판단이 고장 나 있다. 매 바퀴 "아직 부족해"라며, 이미 아는 걸 알면서도 똑같은 검색을 무한히 반복한다.

낯익지 않은가. 3편에서 우리가 손으로 채운 그 shouldContinue(계속할까?) 판단이, 고장 나면 벌어지는 일이 바로 이것이다. 그리고 그 검색어는 하필 1·2편 내내 우리를 따라다닌 web_search("커피 맛있게 내리는 법")이다. 2편에서 온도·분쇄·비율 세 가지를 채우고 얌전히 멈췄던 그 커피 에이전트가, 여기서는 판단이 망가진 채 영원히 커피만 검색한다.

🔧 지금 해보기 ACT-4-tame-runaway ★☆☆ · 첫 성공 보장 · 20초

아무것도 만지지 마시라. 안전벨트 세 개(최대 반복 · 토큰 예산 · 반복 감지)가 전부 꺼진 그대로, 그냥 [▶ 루프 실행] 한 번만 눌러보자. 무슨 일이 벌어지는지 보고 오면 된다.

루프 길들이기 샌드박스 · 외부 의존 0 · 실제 폭주 실패모드를 재현한 결정적 시뮬레이션(내부 안전장치 200스텝). 토큰·비용(₩)은 예시 단가 어림값입니다.ACT-4-tame-runaway

방금 그 숫자, 다시 봐도 아찔하다

봤는가? 반복 카운터가 미친 듯이 오르고, 그 옆 토큰 미터가 무섭게 치솟았다. "🔥 폭주 중…" 배너가 붉게 떨리는 동안, 에이전트는 끝날 줄 모르고 같은 검색만 반복했다.

그러다 어느 순간 강제로 뚝 끊겼다. 위젯 안에 박아 둔 내부 안전장치(200스텝)가 최후에 끊어 준 것이다. 그때 미터에 찍힌 숫자를 보자 — 200스텝 / 약 804,000 토큰 ≈ ₩16,080. 목표 한 줄 준 죄로, 아무 쓸모 없는 커피 검색에 만 육천 원어치 토큰이 재가 됐다.

여기서 두 가지를 정직하게 짚고 가자. 첫째, 저 200스텝에서 멈춘 건 당신이 세운 게 아니다. 그건 브라우저가 진짜로 멈춰버리는 걸 막으려고 내가 위젯 안에 몰래 넣어 둔 최후의 그물일 뿐, 안전벨트가 아니다. 붉은 문구가 괜히 "실전이었다면 여기서 멈추지도 않았을 겁니다"라고 겁을 준 게 아니다. 진짜 에이전트였다면, 저 그물조차 없이 200스텝을 넘어 계속 돌았을 것이다. 둘째, ₩16,080은 예시 단가(1천 토큰당 ₩20)로 계산한 어림값이다. 진짜 얼마가 태워지는지는 이 호 마지막 7편의 비용 계산기에 맡긴다. 지금 중요한 건 정확한 액수가 아니라, 미터가 이렇게 치솟는다는 그 감각이다.

왜 토큰이 제곱으로 부는가 — 2편의 그 게이지가 폭발한 것

그런데 이상하지 않은가. 검색 한 번에 40토큰쯤이라면, 200번 해봐야 8천 토큰이어야 맞다. 그런데 왜 80만을 찍었을까? 100배다.

이 답은 이미 2편에서 봤다. 그때 위젯 오른쪽에서 슬금슬금 차오르던 누적 맥락 게이지를 기억하는가. 에이전트는 매 바퀴, 앞에서 생각하고·도구 쓰고·관찰한 걸 전부 안고 다음 바퀴로 넘어간다. 그리고 여기가 핵심이다 — 매 바퀴 그 불어난 기억 전체를 통째로 다시 모델에게 보내 처리시킨다. 그러니 청구서에 찍히는 양은 "이번에 새로 한 일"이 아니라 "지금까지 쌓인 대화 전부"다.

회의로 비유하면 이렇다. 발언할 때마다 "자, 처음부터 지금까지 나온 얘기를 다시 요약하면…" 하고 회의록 전체를 낭독한 뒤에야 새 말을 꺼내는 사람. 회의가 길어질수록 그 낭독은 길어지고, 100번째 발언에서는 낭독만으로 진이 빠진다. 스텝이 쌓일수록 매 스텝의 비용이 커지니, 전체 비용은 스텝 수에 비례하는 게 아니라 스텝 수의 제곱에 가깝게 불어난다. 2편에서 "이 불어나는 기억에는 대가가 있다"며 미뤄 둔 그 대가가, 오늘 폭주의 연료로 정체를 드러낸 셈이다.

폭주가 무서운 진짜 이유가 여기 있다. 루프가 안 멈추면 스텝만 늘어나는 게 아니라, 한 스텝의 값이 갈수록 비싸진다. 그래서 브레이크는 빠를수록 좋다.

이제 브레이크를 걸자 — 안전벨트 3종, 하나씩

목격은 끝났다. 이제 통제 차례다. 위젯의 STEP 2로 올라가면 안전벨트 세 종류가 있다. 하나씩 켜고 같은 루프를 다시 돌리며, 어떤 벨트가 어디서 잡는지를 눈으로 비교하는 게 이 편의 백미다.

🔧 지금 해보기 ACT-4-tame-runaway ★★☆

벨트를 하나만 켜고 [▶ 루프 실행], 끄고 다른 걸 켜서 또 실행 — 이렇게 세 번 돌려보자. 같은 폭주가 벨트마다 전혀 다른 지점에서 멈춘다.

① 최대 반복 — 가장 무식하고, 가장 확실하다. "N스텝 넘으면 무조건 멈춰"라고 못을 박는다. 슬라이더를 20에 두면, 왜 도는지 따지지도 않고 정확히 20스텝에서 끊는다. 이유는 몰라도 절대 20번을 넘기지 않는다는 안심. 1편의 그 "안전 상한 6바퀴"가 바로 이 벨트였다.

② 토큰 예산 — 스텝 수가 아니라 지갑을 지킨다. "누적 토큰이 5,000을 넘으면 멈춰." 방금 본 대로 비용은 제곱으로 뛰기 때문에, 이 벨트는 최대 반복보다 먼저 걸리는 경우가 많다. 무한 검색 루프에 예산 5,000을 걸면 16스텝, 5,440토큰에서 멈춘다 — 20스텝에 닿기도 전에. 스텝이 몇 번인지는 몰라도 돈이 새는 건 막는, 실전에서 가장 든든한 벨트다.

③ 반복 감지 — 셋 중 가장 똑똑하다. "같은 행동(같은 도구 + 같은 인자)을 K번 반복하면, 헛도는 거니까 멈춰." 커피만 반복 검색하는 이 루프에 K=3을 걸면, 세 번째 같은 검색을 알아채고 딱 3스텝, 240토큰에서 끊는다. 최대 반복이 20에서, 예산이 16에서 잡을 때, 감지는 3에서 잡는다. 헛도는 걸 알아채고 가장 일찍 끊는 벨트다.

세 벨트가 같은 폭주를 3스텝 · 16스텝 · 20스텝에서 각각 세우는 이 대비 — 여기서 오는 지적 쾌감이 이 활동의 심장이다. 그리고 초록색 "✅ 멈췄습니다" 배너에 "어느 벨트가 몇 스텝·몇 토큰에서 세웠는지"가 뜨는 순간, 아까의 식은땀이 손맛으로 바뀐다. 내가 슬라이더를 걸자, 폭주하던 루프가 내가 지정한 지점에서 멈췄다.

💡 더 깊이 — 가드레일 개념

'반복 감지'는 실전 에이전트가 두르는 여러 가드레일(guardrail) 중 하나일 뿐이다. 이 밖에도 위험한 도구는 애초에 못 부르게 막는 허용 도구 목록(화이트리스트), 결과가 엉뚱한 형식이면 중단시키는 출력 검증, 시계 기준으로 상한을 두는 타임아웃이 있다. 오늘 위젯은 그중 가장 직관적인 '반복 감지' 하나를 손으로 만지는 것이다. 그리고 '위험한 순간에 아예 사람에게 물어보게 하는' 또 다른 종류의 멈춤 — HITL(사람 개입) 승인 게이트는 6편에서 직접 끼워 넣는다.

가장 똑똑한 벨트도, 만능은 아니다

여기서 반전이 하나 있다. "그럼 제일 똑똑한 반복 감지만 켜면 되는 거 아냐?" — 아니다. 그리고 이걸 손으로 확인하는 순간이, 이 편이 진짜 남기고 싶은 한 수다.

🔧 지금 해보기 ACT-4-tame-runaway ★★★

위젯 STEP 1에서 시나리오를 할 일 폭발 루프로 바꾸자. 그리고 반복 감지만 켜고 돌려보라.

이 루프는 "이 프로젝트를 완벽하게 끝내줘"라는 막연한 목표에, 매 스텝 하위 작업을 자꾸 더 쪼갠다 — todo=2items, todo=3items, todo=4items… 무슨 일이 벌어질까. 반복 감지가 못 잡는다. 감지는 "같은 행동"을 세는데, 이 루프는 매번 인자가 살짝 달라져 행동 서명이 늘 새롭기 때문이다. 결국 감지를 켰는데도 루프는 내부 안전장치(200스텝)까지 폭주한다 — 이번엔 무려 2,700만 토큰을 태우면서(할 일 목록이 불어나니 맥락도 더 빨리 폭발한다).

가장 똑똑한 벨트가 헛발질하는 이 장면이 던지는 교훈은 명확하다. 폭주를 잡으려면 올바른 신호를 골라야 한다. 이 루프는 "같은 짓 반복"이 아니라 "예산 초과"라는 신호로 잡아야 한다 — 실제로 이 할 일 폭발 루프에 토큰 예산 5,000을 걸면 10스텝에서, 최대 반복 20을 걸면 20스텝에서 얌전히 멈춘다.

그래서 결론은 하나다. 안전벨트는 하나만 걸지 않고, 겹쳐 건다. 최대 반복은 무식해도 무조건 끊고, 예산은 지갑을 지키고, 감지는 헛도는 걸 일찍 알아챈다 — 세 개를 함께 걸면, 어떤 폭주가 와도 가장 먼저 걸리는 벨트가 잡는다. 3편에서 "멈출 줄 아는 판단이 곧 설계"라고 했던 그 말이, 여기서 "멈춤 조건을 겹쳐 설계한다"로 한 뼘 자란다.

마치며 — 돌게 만드는 것만큼, 멈추게 만드는 것

이 호를 여기까지 따라온 당신은 이제 에이전트의 두 얼굴을 다 봤다. 목표 한 줄에 알아서 도는 밝은 얼굴(1~3편)과, 멈출 줄 몰라 통장을 태우는 어두운 얼굴(오늘). 그리고 중요한 건, 그 어두운 얼굴 앞에서 당신이 무력하지 않다는 것이다. 슬라이더 세 개면 된다.

루프 엔지니어링의 핵심 감각을 한 줄로 줄이면 이렇다 — 돌게 만드는 것만큼, 멈추게 만드는 것이 중요하다. 스스로 도는 힘에 반드시 멈추는 힘이 한 세트로 딸려와야 한다는, 1편에서 그어 둔 그 약속이 오늘 손끝에서 완성됐다.

당신의 루프는 어느 벨트로, 몇 스텝·몇 토큰에서 멈췄는가. 위젯의 [📋 공유 문구 복사]를 눌러 #루프길들이기 태그로 자랑해 보자. 누군가는 "무한 검색은 감지가 3에서 잡던데, 할 일 폭발은 예산이 10에서 잡더라"는 당신의 실험을 보고, 자기도 슬라이더 위에 손을 올릴 것이다.

그런데 오늘 미터에 찍힌 ₩16,080은 어디까지나 예시 단가였다. 진짜로 무한루프에 하룻밤 토큰을 다 태워본 사람들은 얼마를 잃었을까, 그리고 내 시나리오라면 실제로 얼마가 새는 걸까. 다음 편이자 이 호의 마지막, 7편 〈무한루프에 토큰 다 태워봤다〉에서는 루프에 데어 본 사람들의 사연을 함께 펼치고, "이 폭주, 얼마 태웠을까?" 계산기로 그 대가를 진짜 숫자로 마주한다. 오늘 브레이크를 손에 쥐었으니, 이제 그 브레이크가 왜 필수였는지를 사람들의 이야기로 확인할 차례다.