GitHub - microsoft/Webwright: A simple SWE style browser agent framework that achieves SOTA results on long horizon web tasks.
Service

GitHub - microsoft/Webwright: A simple SWE style browser agent framework that achieves SOTA results on long horizon web tasks.

microsoft
2026.05.28
·GitHub·by Homin.Lee
#Browser Agent#LLM#Playwright#Python#Web Automation

핵심 포인트

  • 1Webwright는 LLM(Large Language Model)이 터미널에서 Playwright 스크립트를 작성하고 실행하여 웹 작업을 수행하도록 돕는 프레임워크로, 브라우저 세션 자체 대신 코드와 로그를 영구적인 작업 아티팩트로 활용하는 "code-as-action" 패러다임을 따릅니다.
  • 2이 프레임워크는 가볍고 디버그하기 쉬운 설계를 특징으로 하며, 에이전트가 브라우저를 일회성 환경으로 사용하여 복잡하고 장기적인 웹 태스크를 효율적으로 구성하고 재사용 가능한 스크립트를 생성할 수 있도록 지원합니다.
  • 3Webwright는 Online-Mind2Web 및 Odysseys 벤치마크에서 State-of-the-Art 성능을 달성하여 기존 방식들을 능가했으며, Claude Code, OpenAI Codex, OpenClaw, Hermes Agent 등 다양한 에이전트의 플러그인/스킬로 통합되어 웹 에이전트의 기능을 강화합니다.

Webwright는 대규모 언어 모델(LLM)이 웹 태스크를 수행할 수 있도록 터미널 환경을 제공하는 새로운 접근 방식의 웹 에이전트 프레임워크입니다. 이 프레임워크는 LLM이 여러 브라우저 세션을 실행하고, 필요할 때에만 페이지 스크린샷과 상태를 검사하며, 웹 태스크를 재실행 가능한(re-runnable) Python 스크립트 형태로 완벽하게 완료하도록 설계되었습니다. 이는 단일 코드 파일로 에이전트의 브라우징 이력을 나타내며, 기존의 다중 에이전트 시스템, 그래프 엔진, 플러그인 계층 또는 숨겨진 오케스트레이션 없이 터미널, 브라우저, 모델만으로 작동합니다.

핵심 방법론 및 차별점:

Webwright의 핵심 방법론은 기존의 웹 에이전트 프레임워크와는 근본적으로 다릅니다. 대부분의 웹 에이전트는 브라우저 세션을 작업 공간으로 간주하고, 모델은 각 단계에서 현재 페이지 상태를 받아 하나의 다음 작업을 예측하는 observe → predict next action → execute 형태의 상호작용 루프에 고정됩니다. 반면 Webwright는 에이전트와 브라우저를 분리하여 브라우저를 에이전트가 실행, 검사, 폐기할 수 있는 환경으로 취급합니다. 여기서 중요한 것은 "지속적인 아티팩트(persistent artifact)"가 브라우저 세션이 아니라 로컬 작업 공간의 코드와 로그라는 점입니다.

  1. 코드 기반 액션 (Code-as-action):
    • Webwright 에이전트는 Playwright 스크립트를 직접 작성하는 "코딩 에이전트(coding agent)"입니다. 이는 LLM이 open, click, snapshot 등과 같은 이산적인(discrete) 서브커맨드를 예측하거나, 시각적 정보에 기반한 좌표를 예측하는 방식과 대조됩니다.
    • 에이전트는 단순히 다음 단일 액션을 지시하는 것이 아니라, 복잡한 웹 태스크를 완료하기 위한 전체 Python 프로그램을 생성합니다. 이 프로그램은 Playwright를 사용하여 웹 요소를 쿼리하고, 조건이 충족되기를 기다리며, 레이지 로딩(lazy loading)이나 재렌더링(re-rendering)과 같은 동적 동작을 처리할 수 있습니다.
    • 이러한 스크립트는 재실행 가능하고, 다양한 태스크에 적용 및 재사용될 수 있으며, 루프(loops), 함수(functions), 추상화(abstractions)를 통해 복잡한 워크플로우를 효율적으로 구성하고 일반화할 수 있습니다.
  1. 작업 공간 중심 상태 관리 (Workspace-as-state):
    • Webwright에서 "상태(state)"는 브라우저 세션 자체가 아니라 LLM의 로컬 작업 공간(local workspace)에 저장된 코드, 스크린샷, 로그를 의미합니다. 브라우저는 필요에 따라 생성되고 폐기될 수 있는 일회성(disposable) 환경으로 간주됩니다.
    • 이러한 접근 방식은 에이전트가 탐색적인 스크립트를 작성하고, 새로운 브라우저 세션을 시작하며, 실패 시 스크린샷을 캡처하고 검사할 시기를 스스로 결정할 수 있게 합니다. 이는 인간 엔지니어가 RPA(Robotic Process Automation) 스크립트를 반복적으로 개선하는 방식과 유사합니다.
  1. 반복적인 코드 생성 및 수정 루프 (Iterative Code Generation and Repair Loop):
    • Webwright의 핵심 동작 루프는 코드 작성(write code) → 실행(execute) → 스크린샷 검사(inspect screenshots) → 코드 수정(repair)의 평탄한(flat) 반복입니다.
    • LLM은 먼저 태스크를 수행하기 위한 Python (Playwright) 스크립트를 작성합니다.
    • 이 스크립트가 실행되고, 실행 결과(스크린샷, 로그, 예외 등)가 outputs/ 디렉토리에 아티팩트(artifact)로 저장됩니다.
    • 에이전트는 저장된 스크린샷과 로그를 분석하여 스크립트의 성공 여부를 평가하고, 필요한 경우 코드를 수정하여 다시 실행합니다. 이 과정은 태스크가 완료되거나 미리 정의된 시도 횟수를 초과할 때까지 반복됩니다.
    • 이는 각 단계마다 다음 액션을 예측하는 것이 아니라, 전체 프로그램의 점진적인 개선을 통해 장기적인 태스크를 효과적으로 처리할 수 있게 합니다.

성능 및 특징:

Webwright는 이러한 독특한 방법론을 통해 Online-Mind2WebOdysseys와 같은 실제 웹 환경 벤치마크에서 기존 최고 성능(SOTA)을 뛰어넘는 결과를 달성했습니다. 특히, 시각 기반(vision-based) 또는 좌표 예측(coordinate prediction) 방식과 비교하여 코드 기반 액션이 훨씬 우수함을 입증했습니다.

이 프레임워크는 경량 설계(Lightweight by design)를 지향하며, 핵심 에이전트 루프, Playwright 환경, CLI가 각각 적은 양의 코드 라인으로 구성되어 있습니다. httpx, pydantic, playwright, typer 등 필수적인 라이브러리만을 사용하며 제로 숨겨진 프레임워크(Zero hidden frameworks)를 강조하여 높은 가독성과 디버깅 용이성을 제공합니다. 또한 OpenAI, Anthropic, OpenRouter 등 다양한 모델 백엔드를 플러그인 형태로 지원합니다. Claude Code, OpenAI Codex, OpenClaw, Hermes Agent와 같은 호스트 에이전트와 통합하여 사용할 수 있는 플러그인/스킬 형태로 제공됩니다.