본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 18. 09:24

AI 에이전트를 위한 오픈 소스 브라우저 프로토콜 ABP 공개

요약

Agent Browser Protocol(ABP)은 웹 브라우징 과정을 에이전트 친화적인 이산적(discrete) 멀티모달 채팅 형식으로 재구성한 오픈 소스 프로토콜입니다. 이는 Chromium 포크에 MCP + REST가 직접 내장되어 있으며, 하나의 요청마다 확정된 상태(스크린샷 및 이벤트 로그 포함)를 제공합니다. ABP는 기존 방식 대비 토큰 사용량과 자동화 실행 속도를 개선하고, 특히 LLM이 브라우저보다 앞서 나가는 경합 상태(race condition) 문제를 해결하여 안정적인 에이전트 웹 탐색을 가능하게 합니다.

핵심 포인트

  • 웹 브라우징 과정을 이산적이고 멀티모달한 채팅 형식으로 재구성하여 AI 에이전트의 활용도를 높였습니다.
  • ABP는 MCP + REST가 내장된 Chromium 포크로, 오직 HTTP만을 사용하여 안정성을 확보했습니다.
  • 각 액션은 확정된 상태(스크린샷 및 이벤트 로그)를 반환하므로, LLM과 브라우저 간의 경합 상태(race condition) 발생을 원천적으로 방지합니다.
  • 기존 방식 대비 토큰 사용량 2배 감소, 자동화 실행 속도 2배 향상 등의 성능 개선 효과를 입증했습니다.
<h1 align="center">Agent Browser Protocol</h1>

웹 브라우징은 연속적이고 비동기적(async)입니다. 에이전트는 도구(tools)와 단계(steps) 단위로 사고합니다. ABP는 웹 탐색을 에이전트가 잘 알고 선호하는 이산적(discrete)이고 멀티모달(multimodal)한 채팅 형식으로 재구성합니다.

<p align="center"><strong>Online Mind2Web에서 90.53% 달성</strong> — <a href="https://github.com/theredsix/abp-online-mind2web-results">재현 가능한 결과</a></p>
  • 토큰 사용량 2배 감소
  • 자동화 실행 속도 2배 향상
  • 도구 호출(tool calls) 2배 감소

_Playwright MCP와 비교 시


ABP는 브라우저 엔진에 MCP + REST가 직접 내장된 Chromium 포크(fork)입니다.

  • 하나의 요청 = 하나의 완료된 단계: 확정된 상태(settled state) + 스크린샷(screenshot) + 이벤트 로그(event log)
  • WebSocket 없음. CDP 세션 관리 없음. 오직 HTTP만 사용합니다.
  • 액션당 약 100ms의 오버헤드 (스크린샷 포함). 병목 현상은 브라우저가 아니라 LLM(대규모 언어 모델)에서 발생합니다.

60초 만에 체험하기 (Claude Code)

# 1) Claude Code에 ABP를 MCP 서버로 추가
claude mcp add browser -- npx -y agent-browser-protocol --mcp
...

브라우저가 실행될 때까지 기다린 후 Claude에게 요청하세요:

  • “Doordash에서 415 Mission St, San Francisco 근처의 쿵파오 치킨(kung pao chicken)을 찾아줘.”

주의 깊게 볼 점: 모든 도구 호출(tool call)은 확정된 페이지 상태(스크린샷 + 이벤트)를 반환하며, 단계 사이에 페이지가 고정되므로 Claude가 브라우저보다 앞서 나가는 경합 상태(race condition)가 발생하지 않습니다.


액션당 제공되는 항목

AI Agent                                 ABP Chromium
    │                                         │
    │  POST /click (x=450, y=320)             │
...

빠른 시작 (Quick Start)

참고: Playwright MCP 서버가 설정되어 있다면, 도구 이름 충돌을 방지하기 위해 ABP를 사용하기 전에 이를 비활성화하십시오.

Claude Code

claude mcp add browser -- npx -y agent-browser-protocol --mcp

그 다음 Claude에게 요청하세요: "news.ycombinator.com으로 가서 AI에 관한 최상위 게시물을 찾아줘."

Codex CLI

codex mcp add browser -- npx -y agent-browser-protocol --mcp

Opencode

비전(vision) 기능이 있는 모델을 구성하고 MCP 서버를 추가하십시오.

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
...

모든 MCP 클라이언트 (HTTP)

ABP 실행:

npx -y agent-browser-protocol

그 다음 MCP 클라이언트가 http://localhost:8222/mcp (스트리밍 가능한 HTTP)를 가리키도록 설정하십시오.

예를 들어, Claude Desktop (claude_desktop_config.json)의 경우:

{
  "mcpServers": {
    "browser": {
...

REST (MCP 미사용)

ABP 실행:

npx -y agent-browser-protocol

그 다음 curl로 제어하십시오:

# 탭 목록 조회
curl -s http://localhost:8222/api/v1/tabs

...

curl 예시와 전체 API 레퍼런스는 docs/REST-API.md를 참조하십시오.

npm 패키지 상세 정보? TypeScript SDK, 플러그인 설정 및 디버그 서버는 theredsix/abp-npm을 참조하십시오.

수동 바이너리 다운로드? 직접 다운로드 및 실행 지침은 MANUAL_INSTALL.md를 참조하십시오.

소스 코드 빌드? macOS, Linux 및 Windows 빌드 방법은 COMPILE.md를 참조하십시오.

삭제 방법? Uninstall 섹션을 참조하십시오.


ABP 작동 예시

짧은 데모: Google Maps를 사용하여 시애틀에서 LA까지 기차로 가는 경로를 찾습니다.

LLM이 생각하는 동안 스피너(spinner)가 멈추는 것에 주목하십시오. ABP는 동작 사이의 JavaScript와 가상 시간(virtual time)을 일시 중지하여 페이지가 에이전트를 기다리도록 합니다.


ABP를 사용하는 이유 (그리고 왜 Chromium 빌드인가)

핵심 문제는 불일치(mismatch)에 있습니다:

  • 웹 브라우징은 연속적이고 비동기적(asynchronous)입니다.
  • LLM 에이전트는 단계별(step-by-step)로 추론합니다.

대부분의 자동화 스택은 에이전트가 라이브 브라우저와 속도 경쟁을 하도록 강제하며, 대기(wait)와 재시도(retry)를 통해 이 불일치를 임시로 해결합니다.

ABP는 브라우징을 단계 머신(step machine)으로 만듭니다. 각 요청은 네이티브 입력을 주입하고, 엔진이 정의한 "안정된(settled)" 경계까지 기다린 후, (커서를 포함한) 컴포지터(compositor) 출력을 캡처하고, 이벤트 로그를 반환한 다음, 다음 단계 전까지 JavaScript와 가상 시간을 동결합니다.

ABP는 브라우징을 단계 머신으로 재구성합니다: 에이전트가 오직 안정적이고 동결된 세계 상태(world state)에서만 동작하도록 보장하는 요청/응답 계약(contract)입니다.

에이전트에게 필요한 것기존 도구가 제공하는 것
결정론적 단계 경계 ("settled")수동 대기, 휴리스틱 (heuristics)
...

각 API 호출은 하나의 원자적 단계 (atomic step)입니다. ABP는 Chromium의 입력 시스템을 통해 실제 입력을 주입하고, 엔진이 정의한 "settled" 경계를 기다린 후, (커서를 포함한) 컴포지터 (compositor) 출력을 캡처하여 발생한 이벤트들을 반환합니다. 단계 사이에는 JavaScript와 가상 시간 (virtual time)이 동결됩니다. 에이전트는 브라우저와 경합하지 않습니다. 에이전트는 자신을 기다려주는 세계를 관찰하고, 결정하고, 행동하며, 이를 반복합니다.


Docs


Security notes

  • ABP는 사용자의 로컬 머신에서 실행되도록 설계되었습니다.
  • API는 기본적으로 localhost에서 제공됩니다 (--abp-port=8222).
  • ABP는 기본적으로 실제 시스템 입력을 차단합니다. 이를 무시하려면 --allow-system-inputs를 사용하십시오.

ABP가 차별화되는 점

1. 엔진 레벨 제어 (Engine-Level Control)

ABP는 브라우저 프로세스 내에 HTTP 서버를 직접 내장합니다. 요청은 IO 스레드에서 라우팅되며, Browser, TabStripModel, 그리고 DevTools 에이전트에 대한 직접적인 접근 권한을 가진 UI 스레드에서 디스패치(dispatch)됩니다.

+---------------------------------------------------------+
|                  AI Agent (curl / Python / Go)          |
+----------------------------+----------------------------+
...

2. 스마트 액션 응답 (Smart Action Response)

모든 액션은 에이전트가 다음 결정을 내리는 데 필요한 정보를 반환합니다:

{
  "result": {"status": "clicked"},
  "screenshot_before": {
...

모든 액션 후에

에이전트의 액션(action) 사이에 JavaScript 실행을 일시 중지합니다. 페이지가 멈추고, 타이머(Timer)가 멈추며, Date.now()가 고정됩니다. 스크린샷을 찍을 때 결정론적인 상태(deterministic state)를 캡처할 수 있습니다.

# 실행 제어 활성화
curl -X POST http://localhost:8222/api/v1/tabs/{id}/execution \
  -d '{"paused": true}'

기본적으로 활성화되어 있습니다. --abp-disable-pause 옵션으로 비활성화할 수 있습니다.

4. 요소 마크업 (Element Markup)

모든 액션의 응답 스크린샷에서 상호작용 가능한 요소 주변에 경계 상자(bounding box)를 그리도록 요청할 수 있습니다:

# 클릭 액션에 마크업 적용
curl -X POST http://localhost:8222/api/v1/tabs/{id}/click \
  -d '{"x": 450, "y": 320, "screenshot": {"markup": ["clickable", "typeable"]}}'
...

마크업 옵션: clickable, typeable, scrollable, grid, selected.

5. 가상 커서 (Virtual Cursor)

입력 액션과 함께 움직이며 스크린샷에 나타나는 컴포지터 레이어(compositor-layer) 커서입니다. 에이전트는 인간이 보는 것과 동일한 것을 보게 됩니다.

6. 네이티브 이벤트 처리 (Native Event Handling)

파일 선택기(File choosers), 대화 상자(dialogs), 다운로드가 이벤트 스트림(event stream)에 보고됩니다:

{
  "events": [
    {"type": "dialog", "data": {"tab_id": "...", "dialog_type": "confirm", "message": "Delete this item?"}}
...

전용 엔드포인트(endpoint)를 통해 이를 처리할 수 있습니다:

curl -X POST http://localhost:8222/api/v1/tabs/{id}/dialog/accept

7. 에이전트 학습을 위한 세션 기록 (Session Recording for Agent Training)

모든 액션은 실행 전/후 스크린샷, 파라미터(parameters), 결과, 타이밍, 성공/실패 상태와 함께 SQLite 데이터베이스에 기록됩니다. 성공적인 에이전트 세션은 시각-언어 모델(vision-language models)을 위한 미세 조정(fine-tuning) 데이터셋이 됩니다.

Action #1: navigate("https://example.com")
  ├── screenshot_before.webp
  ├── params: {"url": "https://example.com"}
...

--abp-session-dir로 세션 저장소를 제어할 수 있습니다:

./abp --abp-session-dir=./datasets/session-001

SQLite 스키마(schema), abp-debug UI, 그리고 학습 파이프라인(training pipeline) 예시는 TRAINING.md를 참조하세요.


비교 (Comparison)

비교 (Comparison)

기능 (Feature)ABPCDP/PuppeteerPlaywrightSeleniumagent-browser
REST APIYesNo (WebSocket)No (RPC)YesNo (CLI)
...

커맨드 라인 플래그 (Command Line Flags)

플래그 (Flag)설명 (Description)
--abp-port=8222API 포트 (기본값: 8222)
...

프로젝트 구조 (Project Structure)

chrome/browser/abp/                 # 핵심 ABP 구현부 (Core ABP implementation)
  abp_http_server.cc/h              # HTTP 서버 (IO 스레드)
  abp_controller.cc/h               # 요청 처리 (UI 스레드)
...

상태 (Status)

ABP는 활발히 개발 중입니다. 현재 구현된 기능은 다음과 같습니다:

작동 중 (Working):

  • 탭 관리 (목록, 생성, 닫기, 활성화, 중지)
  • 탐색 (URL, 뒤로 가기, 앞으로 가기, 새로고침)
  • 요소 마크업(element markup) 및 가상 커서(virtual cursor)를 포함한 스크린샷
  • 마우스 입력 (클릭, 이동, 드래그, 네이티브 휠 이벤트를 통한 스크롤)
  • 키보드 입력 (타이핑, 누르기, 수정 키를 포함한 key down/up)
  • JavaScript 실행
  • 텍스트 추출 (전체 페이지 또는 CSS 선택자)
  • 입력 도우미 (슬라이더, 텍스트 지우기)
  • 지속 시간 및 네트워크 대기
  • 다이얼로그 처리 (alert, confirm, prompt, beforeunload)
  • 파일 선택기 지원 (로컬 파일 및 base64 콘텐츠)
  • 네이티브 select 팝업 처리
  • 다운로드 관리 (목록, 상태, 취소, 콘텐츠 검색)
  • 권한 프롬프트 처리 + 지리 위치 스푸핑 (geolocation spoofing)
  • 실행 제어 (JS 일시 중지/재개, 가상 시간)
  • SQLite를 이용한 히스토리 추적 (세션, 작업, 이벤트)
  • 가상 커서 렌더링 (컴포지터 레이어)
  • 브라우저 관리 (상태, 종료)
  • /mcp 경로에 18개의 도구를 갖춘 임베디드 MCP 서버
  • 콘솔 MCP 액션

미구현 (Not yet implemented):

  • 작업 성공/실패 추적
  • 에이전트 미세 조정 (fine-tuning)을 위한 학습 데이터로서의 인간 브라우징 세션 기록
  • 완전한 헤드리스 (headless) 지원

테스트 (Testing)

테스트 (Testing)

ABP는 탐색 (navigation), 입력 (input), 스크린샷 (screenshots), JavaScript 실행 (JavaScript execution), 실행 제어 (execution control) 및 MCP 프로토콜 준수 (MCP protocol compliance)를 포함한 핵심 기능을 검증하는 통합 테스트 (integration tests)를 포함합니다.

전체 테스트 매트릭스 (test matrix), 테스트 페이지 문서 및 새로운 테스트를 추가하기 위한 가이드는 TESTING.md를 참조하세요.

REST API

ABP는 직접적인 HTTP 통합을 위해 전체 REST API를 제공합니다. 빠른 시작 및 전체 엔드포인트 (endpoint) 참조는 docs/REST-API.md를 참조하세요.

유지 관리자 (Maintainers)

제거 (Uninstall)

클라이언트에서 MCP 서버를 제거하세요:

# Claude Code
claude mcp remove browser

...

다른 클라이언트의 경우, MCP 설정 파일에서 browser 항목을 삭제하세요.

기여하기 (Contributing)

ABP는 Chromium의 상당한 포크 (fork) 버전입니다. 기여를 환영하며, 기여와 관련하여 유지 관리자에게 문의해 주세요.

라이선스 (License)

Copyright 2026 Han Wang. All rights reserved.

Chromium은 BSD 3-Clause License에 따라 라이선스가 부여됩니다. ABP 수정 사항은 Copyright 2026 Han Wang이며 동일한 라이선스를 따릅니다.

감사의 글 (Acknowledgments)

ABP는 Chromium 팀의 놀라운 성과를 바탕으로 구축되었습니다. 오픈 소스에 대한 그들의 헌신에 감사드립니다. 이 포크 (fork)는 Claude Code의 도움을 받아 생성되었습니다. 또한 관대한 후원을 해주신 후원자분들께 깊은 감사를 표합니다.

후원자 (Sponsors)

AI 자동 생성 콘텐츠

본 콘텐츠는 HN AI Research의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0