Browser Harness 소개
브라우저 자동화는 AI 에이전트가 웹 기반 작업을 수행하는 데 필수적인 능력입니다. 그러나 기존 접근법들은 대부분 미리 정의된 도구 집합에 의존합니다. 에이전트가 예상치 못한 UI 요소를 만나거나, 특수한 인터랙션이 필요한 상황이 발생하면 작업을 완료하지 못하고 멈춥니다. Browser Harness는 이 문제를 근본적으로 다르게 접근합니다. LLM이 Chrome DevTools Protocol(CDP)에 직접 웹소켓으로 연결하여 브라우저를 제어하고, 필요한 기능이 없을 때는 helpers.py 파일을 직접 수정하여 스스로 구현합니다. 이것이 Browser Harness를 "자기 치유(Self-Healing)" 프레임워크로 부르는 이유입니다.
Browser Harness의 핵심 설계 원칙은 최소주의(Minimalism)입니다. 전체 코드가 약 592줄의 Python으로 구성되어 있습니다. run.py(36줄), helpers.py(195줄), admin.py와 daemon.py(361줄)가 전부입니다. Selenium, Playwright 같은 무거운 프레임워크 없이, Chrome의 CDP WebSocket에 직접 연결하여 가장 낮은 수준에서 브라우저를 제어합니다.
● agent: wants to upload a file
│
● helpers.py → upload_file() missing
│
● agent edits the harness and writes it helpers.py 192 → 199 lines
│ + upload_file()
✓ file uploaded
이 단순함은 LLM이 코드 전체를 쉽게 이해하고, 필요에 따라 helpers.py를 수정하여 새로운 기능을 추가할 수 있게 합니다. 에이전트는 단순히 도구를 사용하는 것을 넘어, 도구 자체를 개선하는 수준의 자율성을 갖습니다. Browser Harness는 browser-use 팀이 개발한 오픈소스 프로젝트로, MIT 라이선스로 공개되어 있습니다. cloud.browser-use.com 을 통해 카드 등록 없이 3개의 동시 원격 브라우저를 무료로 제공합니다. 클라우드 브라우저를 활용하면 로컬 Chrome 설정 없이도 즉시 브라우저 자동화를 시작할 수 있습니다.
Browser Harness의 자기 치유 아키텍처
Browser Harness의 자기 치유(Self-Healing) 메커니즘은 다음과 같이 동작합니다. 에이전트가 작업을 수행하다가 현재 helpers.py에 없는 기능이 필요해지면, 에이전트는 이를 인식하고 helpers.py에 해당 함수를 직접 작성합니다. 다음 번에 같은 기능이 필요할 때는 이미 구현된 함수를 재사용합니다. 이 과정이 반복되면서 helpers.py는 점점 더 풍부한 도메인별 기능 라이브러리로 성장합니다.
┌──────────────────────────────────────────────────────┐
│ Browser Harness 아키텍처 │
│ │
│ LLM Agent │
│ ↓ │
│ run.py (helpers 미리 로드된 상태로 Python 실행) │
│ ↓ │
│ helpers.py (도구 함수들 ← LLM이 직접 수정 가능) │
│ ↓ │
│ admin.py + daemon.py (CDP WebSocket 관리) │
│ ↓ │
│ Chrome DevTools Protocol (WebSocket) │
│ ↓ │
│ Chrome Browser (실제 브라우저) │
└──────────────────────────────────────────────────────┘
도메인별 스킬 학습
에이전트가 GitHub, LinkedIn, Amazon 등 특정 사이트에서 반복 작업을 수행하면, 해당 사이트 전용 헬퍼 함수들이 helpers.py에 축적됩니다. 저장소의 skills/ 디렉토리에는 커뮤니티가 기여한 사이트별 스킬 예시들이 포함되어 있어, 시작 시점부터 풍부한 기능을 사용할 수 있습니다.
CDP 직접 연결의 장점
Chrome DevTools Protocol에 직접 연결하면 브라우저의 모든 기능에 접근할 수 있습니다. 일반적인 자동화 프레임워크에서는 추상화 레이어로 인해 제한되는 기능들(네트워크 요청 인터셉트, 자바스크립트 실행 컨텍스트 제어, 브라우저 내부 상태 접근 등)을 직접 활용할 수 있습니다.
Browser Harness 설치 및 사용법
로컬 브라우저 설정
install.md파일의 설치 안내를 읽습니다- Chrome에서 원격 디버깅을 활성화합니다 (체크박스 방식으로 확인)
- Browser Harness 데몬을 실행하여 CDP WebSocket 연결을 준비합니다
클라우드 브라우저 사용 (추천)
cloud.browser-use.com에서 API 키를 발급받아 즉시 사용할 수 있습니다. 카드 등록 없이 3개의 동시 브라우저 세션이 무료로 제공됩니다.
Claude Code 통합
저장소에는 Claude Code에서 Browser Harness를 활용하기 위한 설정 프롬프트가 포함되어 있습니다. Claude Code를 통해 Browser Harness를 제어하면, Claude가 직접 helpers.py를 분석하고 필요한 기능을 추가하는 전체 사이클을 경험할 수 있습니다.
helpers.py 예시 구조
# 에이전트가 스스로 추가한 도메인별 함수 예시
async def github_get_pr_diff(pr_url: str) -> str:
"""GitHub PR의 diff를 가져옵니다."""
await navigate(pr_url + ".diff")
return await get_page_text()
async def linkedin_send_connection_request(profile_url: str, message: str):
"""LinkedIn 프로필에 연결 요청을 보냅니다."""
await navigate(profile_url)
button = await find_element("button[aria-label='Connect']")
await click(button)
# ... 에이전트가 동적으로 구현한 로직
async def amazon_add_to_cart(product_url: str):
"""Amazon 상품을 장바구니에 추가합니다."""
await navigate(product_url)
add_button = await find_element("#add-to-cart-button")
await click(add_button)
라이선스
Browser Harness는 MIT 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용, 수정, 배포할 수 있습니다.
Browser Harness 클라우드 서비스
Browser Harness 프로젝트 GitHub 저장소
더 읽어보기
-
BrowserOS: ChatGPT Atlas, Perplexity Comet의 대안으로 나온 오픈소스 AI 에이전트 브라우저
-
Goose: Rust로 구축된 MCP 기반 오픈소스 범용 AI 에이전트 (feat. Block, Linux Foundation)
-
Meta-Harness: Stanford IRIS Lab이 공개한, LLM 주변 실행 코드를 자동으로 최적화하는 에이전트 하네스 탐색 프레임워크에 대한 연구
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()
