에이전트 자기개선 하네스 (2/12) — Manager/Runner 역전과 Self-Improve 4 트리거
workspace-runner를 executor와 decider로 쪼갠 이유
핵심 요약
- Manager / Runner 위계 구조는 운영 데이터에서 뒤집힌다. Runner가 루프 내부에서 다음 행동을 결정하는 비율이 더 높기 때문에, Runner를 executor(순수 실행) + decider(분기 결정) 로 쪼개는 편이 토큰·지연 비용을 모두 낮춘다.
- Self-Improve는 상시 구동이 아니라 4개의 명확한 트리거(daily / failure-pattern / user-feedback / external-update)에서만 발화해야 한다. 각 트리거는 발화 주체가 달라야 단일 장애점을 피할 수 있다.
- Sub-agent delegation의 최대 비용은 컨텍스트 역류다. 7개 룰로 권한·컨텍스트·결과 전달을 잠가야 두 번째 호출에서 토큰이 터지지 않는다.
기법 1 — Manager / Runner 역전
초기 설계는 전형적인 상하 구조다.
- Manager (mir): 무엇을 할지 결정.
- Runner (workspace-runner): 결정된 일을 실행.
이 구조의 전제는 "결정은 상위, 실행은 하위"이지만, 실측 로그에서는 Runner가 실행 도중 다음 행동을 정해야 하는 경우가 전체의 70% 이상이었다. 대표 분기는 다음과 같다.
- 파일이 없으면 생성 분기로 전환
- 결과가 비면 대체 옵션으로 재시도
- 출력이 스키마와 어긋나면 검증 단계를 추가
Manager가 이 모든 분기에 개입하면 호출 횟수와 컨텍스트 동봉 크기가 선형 이상으로 증가해 토큰 비용이 폭주한다.
작동 원리 — executor + decider 분할
Runner를 두 역할로 쪼갠다.
- executor: 입력 → 부작용 → 출력. 결정 권한 없음. 재실행에 안전하도록 멱등성 유지.
- decider: executor의 출력과 상태를 받아 다음 스텝을 선택. 대부분 작은 모델로도 충분.
Manager는 전체 파이프라인의 흐름만 소유하고, 루프 내부의 결정은 decider가 소유한다. 이 분할의 핵심은 "누가 결정권을 갖느냐"를 데이터 흐름에 맞춰 재배치한 것이며, 단순히 레이어를 하나 더 추가한 것이 아니다.
측정된 효과와 한계
- Manager 호출 약 70% 감소
- 응답 속도 체감 단축 (루프 한 바퀴마다 Manager 왕복이 사라짐)
- decider가 잘못된 분기를 고르면 루프 내부에서 조용히 탈선할 수 있어, 3회 실패 회로 차단기와 관측 로그가 필수
한계: decider에 주어지는 컨텍스트가 executor 출력만으로 부족한 경우(예: 상위 태스크의 의도), 요약 컨텍스트를 별도로 주입해야 한다. 이 요약이 커지면 분할 이점이 줄어든다.
기법 2 — Self-Improve 4 트리거
자기 개선 루프는 상시 구동하면 잡음이 커지고, 끄면 회귀가 쌓인다. 네 개의 명시 트리거에서만 발화시키는 것이 실무적이다.
- daily — 매일 22:05 self-review-scan
- failure-pattern — 동일 에러 3회 반복 시
- user-feedback — 사용자가 교정 의사("그렇게 하지 마")를 표시한 시점
- external-update — 의존 라이브러리 / 모델 업데이트 감지
분리된 발화 주체
각 트리거는 의도적으로 다른 주체가 발화한다.
| 트리거 | 발화 주체 |
|---|---|
| daily | cron |
| failure-pattern | 에러 핸들러 |
| user-feedback | 대화 분석 |
| external-update | daily-audit Phase A |
한 경로가 고장 나도 나머지 세 경로가 살아 있다. 자기 개선 같은 메타 루프는 그 자체가 장애의 증폭기이므로, 단일 진입점을 두지 않는 것이 운영 안전성에 유리하다.
기법 3 — Sub-agent Delegation 7 룰
Sub-agent 위임에서 가장 큰 비용은 토큰이 아니라 컨텍스트 격리의 실패다. 아래 7개 룰은 그 실패를 구조적으로 차단한다.
- NEVER pass session history. 필요한 context만 추출해 전달.
- 1 sub-agent = 1 task — 단일 책임.
- Read-only 가능 시 read-only로 시작 — 권한 최소화.
- Write 권한 부여 시 Tier 게이트 통과 필수 (7편 참조).
- 결과만 수신하고 내부 과정은 폐기.
- Sub-agent 결과는 원본이 아닌 요약으로 Manager에 전달.
- 3회 실패 시 즉시 사용자 에스컬레이션.
이 룰이 없으면 sub-agent의 내부 컨텍스트가 Manager로 역류해, 다음 호출에서 동봉 크기가 배수로 부풀고 토큰 비용이 폭주한다. 특히 룰 6은 실수하기 쉬운 지점이다 — 원본 결과를 통째로 상위에 넘기면, 체인이 길어질수록 누적 컨텍스트가 기하급수적으로 증가한다.
Hermes에서의 매핑
동일 설계를 Hermes 쪽에 옮길 때의 대응 관계는 다음과 같다.
- executor / decider 분리 → Hermes profile 두 개 (
worker-exec,worker-decide) - Self-Improve 4 트리거 → daily=cron, failure=hook, user-feedback=메모리 기록, external-update=daily-audit cron
- Sub-agent delegation 7 룰 → profile 정의의 권한 매트릭스로 직렬화
이 매핑의 요지는 "개념을 runtime에서 강제 가능한 형태(프로필·훅·권한 매트릭스)로 낮추는 것"이다. 문서상의 규칙만으로는 장기 운영에서 침식된다.
적용 가능 범위와 열린 질문
이 세 기법은 다음과 같은 환경에 바로 이식 가능하다.
- 루프 기반 에이전트 오케스트레이터 (Manager/Worker, Planner/Executor 등 이름 불문)
- 자기 개선 또는 주기적 회고 루프가 있는 시스템
- Sub-agent 또는 도구 호출 체인이 2단계 이상 들어가는 구조
열린 질문은 다음과 같다.
- decider에 필요한 "상위 의도 요약"을 얼마나 작게 압축할 수 있는가. 이 압축 비용이 executor/decider 분할 이득을 잠식하는 손익분기점은 어디인가.
- Self-Improve 4 트리거 외에 메모리 포화나 룰 충돌을 독립 트리거로 추가해야 할지.
- Sub-agent 결과 요약(룰 6)을 결정론적 포맷으로 강제하면, 요약 품질 저하와 컨텍스트 누적 억제 사이의 균형은 어디서 맞춰지는가.
정리하자면, 분업의 출발점은 역할의 위계가 아니라 데이터 흐름의 방향이다. 위계가 흐름과 어긋나면 토큰·지연·디버깅 비용이 같이 오르고, 흐름에 맞춰 구조를 재배치하면 세 비용이 같이 내려간다.
시리즈 전체 안내: 시리즈 목차
댓글
댓글 쓰기