agent-browser 경로 재검증
이틀 전에 세운 멀티 에이전트 전환 계획을 안정화하는 날이었다.
브라우저 격리를 다시 검증하고 마스터 에이전트가 작업을 위임하는 루프를 만들고 Planner가 실행 초안을 미리 짜도록 했다.
자잘한 품질 개선도 같이 진행했다.
그저께 Playwright MCP를 버리고 agent-browser라는 CLI 래퍼로 브라우저 제어를 옮겼다.
오늘은 그 실행 경로를 두 번째로 다시 검증했다.
agent-browser 경로가 잘 동작하는지 확인하는 게 중요했다.
QA Agent 코드베이스에는 Playwright import가 하나도 없다.
전부 agent-browser CLI를 호출해서 브라우저를 제어한다.
그러니까 이 CLI 경로가 제대로 동작하지 않으면 QA가 전체가 멈춘다.
재검증 결과 executor가 agent-browser를 통해 브라우저를 정상적으로 제어하는 걸 확인했다.
열기, 클릭, 입력, 스크린샷, 스냅샷 같은 기본 동작이 다
의도대로 돌아갔다.
마스터 위임 루프
이날 가장 큰 구조 변화는 마스터 위임 루프를 도입한 거다.
그 전까지는 실행 그룹을 정적으로 할당했다.
Planner가 실행 계획을 세우면, 거기에 맞춰서 에이전트들이 정해진 역할을 수행했다.
근데 이 방식은 유연하지 않았다.
한 Executor가 빨리 끝나도 다음 작업을 자동으로 받아오지 못했다.
그래서 마스터 에이전트가 작업을 동적으로 위임하는 루프를 만들었다.
마스터가 실행 주기를 관리하고 Executor가 일을 끝내면 다음 실행 그룹을 할당한다.
최대 3개의 Executor를 동시에 돌리면서 빠르게 끝나는 Executor부터 다음 작업을 받아간다.
완료는 Checker가 판정한다
여기서 중요한 원칙이 하나 있다.
완료 판정은 마스터가 자기 선언으로 하는 게 아니라, Checker라는 독립적인 에이전트가 한다.
마스터가 “다
끝났다”고 해도 Checker가 통과시켜야 진짜 완료다.
Checker가 부족한 점을 찾으면, 그걸 바탕으로 다시 실행하는 루프가 돈다.
자기 검증에 취약한 에이전트 시스템에서 독립적인 검증 역할을 둔 게 핵심이었다.
에이전트는 자기가 한 일을 과대평가하는 경향이 있으니까.
Planner가 실행 초안을 짠다
실행 초안라는 필드를 새로 만들었다.
그 전까지는 Planner가 실행 계획을 세우고 Executor가 그 계획을 바탕으로 구체적인 단계를 스스로 짰다.
Executor 입장에서는 매번 처음부터 생각해야 하니까 부담이 컸다.
그래서 Planner가 실행 초안까지 미리 짜도록 했다.
어느 버튼을 누르고 어느 값을 입력하고 어떤 순서로 검증할지를 Planner가 초안으로 제시한다.
Executor는 그 초안을 출발점으로 삼고 거기서 조정하면서 실행한다.
이렇게 하니까 Executor가 처음부터 추론하는 부담이 줄었다.
초안이 있으니까 검증에만 집중할 수 있었다.
나중에 이 필드는 Zod 스키마로 검증까지 붙였다.
Fixture Knowledge 정규화
Fixture Knowledge도 정리했다.
일주일 전에 JSON에서 SQLite로 바꿨는데, 며칠 쓰다
보니 스키마가 정리가 필요해졌다.
Fixture Knowledge는 실행 지식을 URL 단위로 저장하는 시스템이다.
같은 페이지를 다시 테스트하면 이전에 알아낸 로그인 단계, 셀렉터, 함정 같은 걸 다시 학습하지 않아도 된다.
근데 스키마가 정규화되어 있지 않으니까 중복 데이터가 생기고 조회 흐름도 매끄럽지 않았다.
그래서 스키마를 정규화하고 Executor가 Fixture를 조회하는 흐름을 개선했다.
현재 URL이랑 역할, 컨텍스트를 기반으로 관련 Fixture를 찾아오는 도구도 다듬었다.
이 시스템의 핵심은 돌릴수록 똑똑해진다는 거다.
처음 특정 URL을 테스트할 때는 비싸다.
LLM이 페이지 구조를 새로 학습해야 하니까. 근데 한 번 학습한 걸 Fixture에 저장해두면, 다음 실행 때는 그걸 그대로 가져다
쓴다.
비용도 줄고 신뢰성도 올라간다.
thinking 이벤트 로깅
자잘한 개선도 두 가지 했다.
하나는 thinking 이벤트 로깅이다.
에이전트가 실행하면서 LLM의 사고 과정을 로그로 남기도록 했다.
에이전트가 왜 그런 결정을 내렸는지 디버깅할 때 필요했다.
결과만 보면 “왜 이 버튼을 눌렀지” 하는 의문이 생기는데, 사고 과정 로그가 있으면 이유를 추적할 수 있다.
그리고 에이전트 프롬프트 5개를 한국어로 번역했다.
영어로 되어 있던 프롬프트를 한국어로 바꾸니까 일관성이랑 가독성이 좋아졌다.
마무리
이날 작업은 전부 멀티 에이전트 구조를 안정화하는 일이었다.
마스터 위임 루프, 실행 초안, Fixture 정규화까지 전부 같은 방향이다.
에이전트들이 역할을 나눠서 협력하되, 그 협력이 부드럽게 돌아가도록 매끄럽게 만드는 작업이었다.
마스터 위임 루프는 특히 잘 먹혔다.
정적 할당에서 동적 위임으로 바꾸니까, Executor가 빨리 끝나면 바로 다음 작업을 받아서 전체 실행 시간이 줄었다.
그리고 Checker가 완료를 판정하는 구조는 에이전트의 자기 과대평가 문제를 잡아줬다.
이틀 뒤에 전체 멀티 에이전트 디렉토리 구조 전환이 들어갔는데, 오늘 만든 위임 루프랑 Checker 검증 모델이 그 전환의 뼈대가 됐다.