WebFovea: 모델은 맞았는데 클릭이 틀렸다 — 비전 웹 에이전트의 하네스 신뢰성
WebFovea: When the Model Is Right but the Click Is Wrong -- Reliable Round Trips for Vision-Based Web Agents on Live Websites
TL;DR Highlight
모델 대신 하네스(파싱·실행·피드백·관찰)를 고쳤더니 챌린지 점수 31.0→57.0
Who Should Read
스크린샷 기반 브라우저 에이전트가 이유 없이 엉뚱한 곳을 클릭하거나 같은 행동을 반복해 고민인 에이전트 개발자
Core Mechanics
- 모델이 아니라 하네스가 문제였다
- 에이전트 한 스텝은 파싱, 실행, 피드백, 관찰 네 단계를 거치는 왕복이다.
- 실제 사이트 실패 상당수가 모델 추론이 아니라 이 네 단계 중 하나에서 났다.
- 같은 모델(claude-opus-4-6)로 4번 제출해 31.0에서 57.0으로 올랐다.
- 클릭이 전부 3/4 지점에 찍혔다
- API가 스크린샷을 약 1440×810으로 줄여 보여줬는데 코드는 1920×1080 좌표로 취급했다.
- 이미지를 직접 1440×810 이하로 줄이고 실제 뷰포트와의 비율로 좌표를 변환했다.
- 122~189px 빗나가던 클릭이 1~5px 안으로 들어왔다.
- 모델이 자기 대화 토큰을 검색창에 쳤다
- 모델이 <|eot_id|> 같은 chat-template 토큰(대화 구분용 특수 문자열)을 뱉어 검색창에 입력됐다.
- 히스토리에 다시 들어가 이후 스텝마다 반복됐다.
- 첫 Thought/Action만 남기고 이런 토큰을 제거해 해결했다.
- 프롬프트가 약속한 동작을 실행기가 안 했다
- 프롬프트는 type 끝에 \n을 붙이면 제출된다고 했지만 실행기가 Enter를 누르지 않았다.
- 프롬프트, 파서, 실행기, 피드백에서 액션 정의를 일치시키고 자동 테스트로 검사했다.
Evidence
- 좌표 정렬로 성공률 8/24→20/24
- 개발 태스크 24개 짝지은 비교, 12개 해결 0개 악화.
- 스텝 한도 도달 비율이 67%에서 4%로 감소했다.
- 공식 점수 4회 제출 추이
- 31.0(8/29), 41.0(8/31), 46.0(9/1), 57.0(9/2)로 상승, WebRetriever Challenge 2026 2위.
- 첫 제출은 79/100개만 끝냈고, +10 중 약 7점은 더 많이 끝낸 효과, 약 3점은 정확도다.
- 토큰 오염 에피소드는 성공률이 낮았다
- 로컬 305개 에피소드 중 15개(4.9%)가 오염됐다.
- 성공률은 오염 7.7% 대비 정상 41.7%였고 관찰 비교다.
- 7,705스텝 재생에서 오염 551스텝만 수정되고 정상 7,154스텝은 그대로였다.
- goto 지름길이 점수를 부풀렸다
- 초기 버전 dev70 감사에서 goto 692회, 정답의 58%가 지름길로 나왔다.
- 이에 URL 이동 액션을 액션 집합에서 제거했다.
How to Apply
- 실패 로그를 네 단계로 분류하기
- 오늘 에이전트의 실패 트래젝토리 10개를 파싱, 실행, 피드백, 관찰 중 어디서 깨졌는지 표로 나눠라.
- 모델 교체 전에 가장 많은 단계부터 고쳐라.
- 스크린샷 좌표 보정 실측하기
- 알려진 위치에 마커 여섯 개쯤 있는 이미지를 모델에 보내 좌표를 비교하라.
- 어긋나면 스크린샷을 직접 리사이즈하고 보낸 이미지 대비 뷰포트 비율로 변환하라.
- 프롬프트-파서-실행기 일관성 테스트 만들기
- 프롬프트에 적은 모든 액션과 약속이 파서와 실행기에 구현됐는지 자동 테스트하라.
- 응답에서 특수 토큰을 제거하고 첫 액션만 남겨라.
- 예산과 검증 트리거를 실행기로 옮기기
- 액션별 호출 한도를 실행기에서 강제하고 초과 시 사유를 돌려줘라.
- 'finished 전에 read_text 호출' 같은 규칙을 프롬프트에 명시하라.
Try It
# Claude Code나 ChatGPT에 붙여넣기 (논문 방법의 간이 버전: 하네스 4단계 점검)
나는 스크린샷 기반 웹 에이전트를 만들고 있다. 아래 실패 로그를 보고 각 실패가 어느 단계에서 깨졌는지 분류해줘.
단계: 1) 파싱(모델 응답이 의도한 액션으로 해석됐나) 2) 실행(액션이 페이지에 실제 적용됐나) 3) 피드백(결과가 모델에 정확히 전달됐나) 4) 관찰(모델이 필요한 정보를 봤나)
{{실패 로그}}
각 실패마다 (a) 단계 (b) 모델 추론 오류가 아닌 근거 (c) 하네스에서 고칠 한 가지를 표로 정리해줘.
이어서 해 볼 것: 우리 프롬프트에 적힌 액션 목록과 실행기 코드를 붙여 넣고, 약속만 하고 구현되지 않은 동작이 있는지 찾아달라고 해보라.Terminology
관련 논문
같은 시뮬레이션, 다른 근거: 도구 출력을 파일로 넘기면 LLM 에이전트 정확도가 어디서 깎이나
긴 툴 출력을 파일로 넘기자 GPT-5.1은 정확도 11.3%p 하락, 정식 출력 지정하니 회복
가짜 뉴스가 진짜 폭락을: LLM 트레이딩 에이전트 대상 정보 주입 공격
가짜 헤드라인 한 줄로 LLM 트레이딩 에이전트 62%를 조종했다(프롬프트 주입은 14%)
Harness Engineering 101: LLM은 뇌, harness는 몸
에이전트는 JSON 배열을 관리하는 루프이고, 16개 챕터로 직접 만들어 본다
Harness²: 에이전트 harness를 스스로 고쳐 쓰는 재귀 최적화 프레임워크
모델은 고정하고 harness를 재귀로 고쳤더니 벤치마크 점수가 최대 11.8%p 올랐다
해고된 Savannah 경찰관, ICE 요원 남편에게 Flock 계정 공유
경찰관이 Flock 계정을 남편(ICE 요원)에게 공유했고, 감사에서 983건 검색이 드러나 해고됐다
tmux와 Claude Code: 세션, send-keys, 그리고 한계선
tmux로 Claude Code 여러 개를 돌리면 편하지만 에이전트 4개쯤에서 한계가 온다
Hybrid Reasoning Agents: 잠재 공간에서 생각하고 텍스트로 행동하는 LLM 에이전트
잠재 공간 추론과 텍스트 도구 호출을 섞었더니 성능 10.4%↑, 토큰 최대 54.7%↓
Related Resources
Original Abstract (Expand)
We present WebFovea, a vision-based web agent that placed 2nd in the WebRetriever Challenge 2026 with a final score of 57.0 out of 100. The challenge evaluates agents end to end on Protocol III of the WebRetriever benchmark (arXiv:2607.06118): starting from an entry URL on a live website, the agent must operate the site's own interface and return a verifiable answer. A capable multimodal large language model (LLM) is necessary for this, but not sufficient. The model's decisions reach the browser through the harness, the code between the model and the page. At every step, four things must go right: the model's reply must be parsed into the intended action, the action must take effect on the page, the result must be reported back accurately, and the model must be shown the information it needs. On real websites, many of the failures we observed occurred at one of these four stages rather than in the model's reasoning. A coordinate-space mismatch placed every click at 3/4 of its intended coordinates; actions on native dropdowns, inside iframes, and in text boxes failed silently; and self-generated chat-template tokens contaminated 4.9% of task episodes. WebFovea hardens each stage and surrounds the loop with guardrails that keep the agent within the rules and its budget. The four-stage view does not depend on the model, although some individual fixes do. Because we used the same model in all four submissions, the rise of our official hidden-set score from 31.0 to 57.0 reflects changes to the harness, up to run-to-run variance on live sites. We describe the design, the evidence for each component (including negative results), a failure analysis, the limitations, and a roadmap that includes routing different steps to different models. Code is available at https://github.com/jianganghan/WebFovea.