
Playwright를 감싼 또 하나의 도구가 아니라, AI 친화적인 브라우저 자동화 인터페이스
최근 AI 코딩 에이전트가 브라우저를 다루는 방식은 빠르게 바뀌고 있다.
기존에는 Playwright, Selenium 같은 자동화 도구를 사람이 직접 스크립트로 짜는 흐름이 중심이었다면, 이제는 에이전트가 브라우저를 탐색하고, 요소를 찾고, 액션을 수행하는 과정 자체를 더 잘 다룰 수 있는 인터페이스가 중요해지고 있다.
그 흐름에서 눈에 띄는 프로젝트가 바로 Vercel Labs의 agent-browser다.
이 프로젝트는 단순한 브라우저 자동화 CLI가 아니다.
핵심은 “AI 에이전트가 브라우저를 더 안정적으로, 더 적은 컨텍스트 비용으로, 더 명시적으로 다룰 수 있게 해주는 실행 인터페이스”라는 점이다.
agent-browser는 무엇인가agent-browser는 AI 에이전트를 위한 헤드리스 브라우저 자동화 CLI다.
README 설명 그대로 요약하면 다음이다.
표면적으로는 Playwright 기반 브라우저 자동화 툴처럼 보인다.
하지만 이 도구가 겨냥하는 핵심 사용자는 사람이 아니라 AI coding assistant / agent다.
즉, 이 도구는 “테스트 자동화 도구”라기보다
에이전트가 웹을 조작하기 위한 운영 인터페이스에 가깝다.
AI가 브라우저를 다룰 때 가장 큰 문제는 세 가지다.
브라우저 자동화에서 AI가 페이지 상태를 이해하려면 보통 DOM, accessibility tree, 텍스트, 스크린샷 같은 정보가 필요하다.
문제는 이걸 매번 길게 전달하면 토큰 비용이 커지고, 컨텍스트가 금방 오염된다는 점이다.
전통적인 자동화는 #submit, .button, XPath 같은 셀렉터를 쓴다.
그런데 AI가 동적으로 페이지를 이해하며 작업할 때는, 이 방식이 불안정하다.
AI는 “현재 뭐가 보이고”, “무엇을 누를 수 있고”, “다음 액션이 무엇인지”를 명확한 단위로 받아야 잘 동작한다.
agent-browser는 이 지점을 snapshot + ref 패턴으로 풀고 있다.
snapshot과 refagent-browser에서 가장 중요한 명령은 사실 click이 아니라 snapshot이다.
예시 흐름은 이렇다.
agent-browser open example.com
agent-browser snapshot
그러면 페이지를 accessibility tree 기반으로 읽어 다음처럼 ref를 붙여준다.
- heading "Example Domain" [ref=e1] [level=1]
- button "Submit" [ref=e2]
- textbox "Email" [ref=e3]
- link "Learn more" [ref=e4]
그 다음 액션은 셀렉터가 아니라 ref로 수행한다.
agent-browser click @e2
agent-browser fill @e3 "test@example.com"
agent-browser get text @e1
이 패턴의 장점은 분명하다.
AI가 직전에 본 스냅샷의 요소를 그대로 참조하므로,
“이 버튼이 맞나?” 같은 ambiguity가 줄어든다.
DOM 전체를 계속 싣는 대신, 현재 인터랙션 가능한 요소 목록과 ref만 알면 된다.
브라우저 상태를 읽고 → 타겟 ref를 고르고 → 액션하고 → 다시 스냅샷하는 구조는
에이전트의 판단 루프와 잘 맞는다.
이건 단순한 UX 차이가 아니라,
AI 브라우저 자동화 인터페이스를 인간 중심 도구와 다르게 설계했다는 신호다.
README에는 클릭, 입력, hover, drag, upload, network interception, session 관리 등 명령어가 매우 많다.
하지만 실무적으로 더 중요한 건 명령 목록이 아니라 어떤 작업 모델을 제공하느냐다.
agent-browser의 작업 모델은 대략 아래처럼 요약할 수 있다.
agent-browser open <url>
agent-browser snapshot -i
AI가 snapshot 결과에서 적절한 @eN을 선택
agent-browser click @e2
agent-browser fill @e3 "hello"
agent-browser snapshot -i
agent-browser get url
agent-browser get text @e4
즉, 이 도구는 단순 커맨드 집합이 아니라
에이전트가 상태 기반으로 웹을 다루는 루프를 명시화한다.
겉으로 보면 agent-browser는 Playwright를 CLI 형태로 감싼 도구처럼 보일 수 있다.
실제로 기본 아키텍처도 Node.js daemon + Playwright 조합이다.
하지만 차이는 꽤 크다.
즉, Playwright가 스크립트 자동화라면
agent-browser는 에이전트 상호작용 실행기에 가깝다.
README 전체를 보면 기능이 많지만, AI/개발자 관점에서 특히 중요한 부분만 추리면 이렇다.
--json 출력에이전트가 기계적으로 처리하기 좋다.
agent-browser snapshot --json
agent-browser get text @e1 --json
이건 단순 편의 기능이 아니다.
AI 도구 체인에 붙일 때는 사람이 읽기 좋은 CLI보다 구조화된 결과가 훨씬 중요하다.
agent-browser screenshot --annotate
화면 위에 번호를 덧씌우고, 그 번호를 @e1, @e2 같은 ref와 연결해준다.
이 기능은 특히 다음 상황에서 강하다.
즉, 텍스트 기반 스냅샷만으로 부족할 때 멀티모달 에이전트와 결합하기 좋은 인터페이스다.
브라우저 자동화에서 로그인 상태 유지 문제는 늘 귀찮다.
agent-browser는 다음 두 가지 방식을 제공한다.
agent-browser --session agent1 open site-a.com
agent-browser --profile ~/.myapp-profile open myapp.com
이 차이는 중요하다.
session: 격리된 브라우저 인스턴스 중심profile: 쿠키/스토리지/로그인 상태를 파일 시스템에 지속즉, 테스트뿐 아니라 장기 실행되는 에이전트 워크플로우에도 맞출 수 있다.
README에서 의외로 인상적인 부분이 보안 섹션이다.
예를 들면:
--allowed-domains--content-boundaries--action-policy--confirm-actions--max-output이건 단순 부가 기능이 아니다.
AI 에이전트가 브라우저를 조작할 때 실제로 필요한 안전장치다.
특히 아래 문제를 줄이는 데 유용하다.
브라우저 자동화 툴이 아니라 에이전트 실행 인프라로 보고 설계했다는 흔적이 여기서 더 분명해진다.
agent-browser는 기본적으로 Node.js daemon + Playwright를 사용하지만,
실험적으로 --native 모드도 제공한다.
agent-browser --native open example.com
이 모드는 Rust 기반 daemon이 Chrome DevTools Protocol(CDP)을 직접 다루는 방향이다.
이게 왜 중요하냐면:
즉, 단순히 “Rust라서 빠르다” 수준이 아니라
에이전트 런타임에 최적화된 브라우저 제어 계층으로 진화하려는 방향성이 보인다.
내가 보기엔 agent-browser의 강점은 네 가지다.
기존 자동화 도구를 억지로 에이전트에 붙인 느낌이 아니다.
처음부터 AI가 읽고 행동하기 좋은 형식에 가깝다.
에이전트, 쉘, CI, 로컬 개발 환경 어디든 붙이기 쉽다.
특히 coding agent가 shell command를 실행할 수 있는 환경이면 바로 연결 가능하다.
단순 클릭 자동화를 넘어서 다음까지 포괄한다.
즉, “브라우저를 조작한다”를 넘어
브라우저 상태를 운영하고 디버깅하는 계층까지 갖췄다.
README에서 Claude Code, Cursor, Copilot, Gemini CLI, Goose, Windsurf 등과의 연계를 직접 언급한다.
이건 단순 홍보가 아니라, 이 프로젝트의 포지셔닝이 AI coding ecosystem의 브라우저 레이어라는 뜻이다.
좋은 점만 있는 건 아니다.
웹은 동적이고 비동기적이다.
ref 기반으로 안정성이 높아져도 페이지 로딩, hydration, custom UI, shadow DOM, iframe, race condition 문제는 계속 생긴다.
접근성 구조가 나쁘거나 커스텀 컴포넌트가 많은 앱에서는 snapshot 품질이 떨어질 수 있다.
이 경우 annotated screenshot이나 cursor-interactive 옵션이 필요해진다.
README에서도 명확히 experimental이라고 적고 있다.
즉, production에서 전면 채택하려면 아직 검증이 더 필요하다.
이 도구가 좋다고 해서 기존 Playwright 테스트를 대체하는 건 아니다.
회귀 테스트, assertion-heavy E2E 테스트, deterministic CI 테스트는 여전히 전통적인 테스트 코드가 더 적합하다.
agent-browser는 모든 팀에 필요한 도구는 아니다.
하지만 아래 경우에는 상당히 유효하다.
이 프로젝트를 보면서 가장 중요하다고 느낀 부분은 기능 개수보다도 설계 관점의 변화다.
예전에는 브라우저 자동화 도구를 만들 때 주로 이런 질문을 했다.
그런데 agent-browser는 질문이 다르다.
즉, 이 프로젝트는 브라우저 자동화를 “테스트 도구” 관점에서 한 단계 밀어내고,
AI 에이전트 실행 인터페이스라는 새로운 기본값으로 재구성하려고 한다.
이 점이 가장 흥미롭다.
agent-browser는 단순한 브라우저 CLI가 아니다.
이 도구가 보여주는 핵심은 다음이다.
앞으로의 브라우저 자동화는 사람이 스크립트를 짜는 문제가 아니라,
AI가 웹을 읽고 판단하고 행동하는 인터페이스를 어떻게 설계할 것인가의 문제다.
정리하면:
snapshot + ref 모델이 핵심이다브라우저를 다루는 AI 에이전트가 점점 흔해질수록,
이런 형태의 도구는 더 중요해질 가능성이 높다.
특히 프론트엔드 개발, QA, 에이전트 UX, 브라우저 기반 자동화에 관심 있는 사람이라면 한 번 읽어볼 만한 프로젝트다.