Jev Ultrafast: 인덱스 기반 동적 액션 공간을 쓰는 브라우저 에이전트
Jev Ultrafast: A browser agent with a dynamic, indexed action space
TL;DR Highlight
요소에 번호를 매겨 고르게 했더니 Google Flights 검색이 7.1초로 끝났다
Who Should Read
브라우저 에이전트가 느리고 비싸서 스크린샷 없이 구조화된 DOM 상태로 돌리는 방법을 찾는 개발자
Core Mechanics
- 화면 요소를 번호 표로 만든다
- 매 관찰마다 [1] button, [2] combobox 같은 요소 표를 새로 만든다.
- 동작은 CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, BLOCKED 여덟 개다.
- 지원하는 동작과 대상만 모델에 보여 준다.
- 한 번 요청으로 동작과 대상을 같이 고른다
- 동작 선택과 대상 선택(head)이 같은 상태를 보고 네트워크 왕복 한 번에 끝난다.
- 동작이 CLICK이면 click_target만 실행되는 식으로 대상 질문은 미리 던져 둔다.
- 글자는 TYPE_TEXT일 때만 작은 LLM이 쓴다.
- 스크린샷 없이 구조화된 상태만 쓴다
- 기본 루프에는 스크린샷이 없다.
- 화면에 보이는 텍스트만 보내서 화면 밖 본문이나 푸터가 컨텍스트를 채우지 않는다.
- 스냅샷은 브라우저 호출 한 번으로 컨트롤 이름·값·텍스트를 한꺼번에 읽는다.
- 모델 출력이 코드로 실행되지 않는다
- 실행 대상은 항상 관찰된 DOM 노드에서 찾는다.
- 모델 출력은 셀렉터, 좌표, 셸 명령, JavaScript가 되지 않는다.
- 클릭 전에 페이지 최신 여부와 가려진 컨트롤을 다시 확인한다.
Community Reactions
- 클라우드 모델이라 아쉽다는 의견
- 소비자 하드웨어에서 빠르게 도는 로컬 모델이면 훨씬 좋겠다는 반응이 있었다.
- 사용할 때마다 게이트키퍼에게 AI 세금을 내는 게 싫다는 의견이다.
- telemetry 우려를 제기한 경험
- browser-use를 들여다봤더니 기본 활성화된 PostHog 텔레메트리가 과하다는 의견이 있었다.
- 특히 browser-harness가 자격 증명을 유출할 수 있다고 주장했다.
- 타이밍 측정 범위에 의문을 제기한 의견
- 시간 측정이 초기 페이지 관찰 이후부터인데 그 부분이 가장 오래 걸리지 않느냐는 질문이 있었다.
- 실행이 안 된다는 보고
- 데모 실행 버튼에서 오류가 났고 빌드 때는 오류가 없었다는 경험이 있었다.
- 안 된다는 짧은 댓글도 있었다.
- Google Flights는 URL로 만들 수 있다는 의견
- 링크를 protobuf로 구성할 수 있어서 이렇게까지 할 필요가 없다는 지적이다.
How to Apply
- 요소 번호표 방식을 프롬프트로 시험하기
- 지금 쓰는 에이전트의 DOM 덤프를 [번호] 역할 이름 · 값 형태로 바꿔 모델에 넣어 보자.
- 모델 답은 동작과 번호만 JSON으로 받도록 제한하자.
- 아래 codeExample 프롬프트로 30분 안에 확인할 수 있다.
- 스크린샷을 기본 루프에서 빼기
- 먼저 보이는 컨트롤의 텍스트·값만 보내는 구조화 스냅샷으로 바꿔 보자.
- 스크린샷은 디버깅용으로만 켜자.
- 모델 출력을 노드 번호로만 제한하기
- 셀렉터나 좌표 대신 관찰된 요소 번호만 받아 실행 직전에 노드를 다시 찾자.
- 실행 전에 페이지 변경과 가려진 요소를 검사하자.
- DONE 뒤에 독립 검증 붙이기
- 에이전트가 끝났다고 해도 경로·날짜·결과 같은 최종 상태를 코드로 다시 확인하자.
Try It
# Claude나 ChatGPT에 붙여넣기 (Jev 방식의 간이 버전: 요소 번호표로 동작 고르기)
당신은 브라우저 에이전트의 정책 모델이다. 아래 요소 표에서 다음 동작 하나만 고른다.
가능한 동작: CLICK, TYPE_TEXT, SELECT, SCROLL_UP, SCROLL_DOWN, WAIT, DONE, BLOCKED
답은 JSON 한 줄로만: {"operation":"...","target":번호 또는 null}
표에 없는 번호나 셀렉터, 좌표는 쓰지 마라.
목표: {{목표}}
요소 표:
{{요소표 예: [1] button Change ticket type · Round trip
[2] combobox Where from? · San Francisco
[3] combobox Where to? · empty
[4] textbox Departure · empty}}
이어서 해 볼 것: TYPE_TEXT가 나오면 입력할 글자만 다른 요청에서 작은 모델로 생성해 보고, 응답 속도를 비교해 보자.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%↓