Moli: AI 에이전트를 위한 프로덕션 레디 헤드리스 브라우저
요약
Moli는 AI 에이전트를 위해 설계된 프로덕션 레디 헤드리스 브라우저입니다. 온디맨드 렌더링과 가벼운 리소스 사용을 결합하여, 에이전트가 웹 페이지를 가져오고(fetch), 데이터를 추출하며 자동화하는 데 도움을 줍니다. CLI 및 다양한 표준 인터페이스로 접근 가능합니다.
핵심 포인트
- AI 에이전트를 위한 전용 헤드리스 브라우저입니다.
- 온디맨드 레이아웃/렌더링으로 가볍고 효율적입니다.
- CLI, CDP, WebDriver 등 여러 방식으로 사용 가능합니다.
- Markdown 또는 시맨틱 트리 형태로 데이터 추출이 용이합니다.

English |
简体中文 |
日本語 |
Deutsch |
Français |
Español
Moli는 AI 에이전트를 위한 프로덕션 레디(production-ready) 헤드리스 브라우저입니다. 온디맨드 레이아웃 및 렌더링 디자인을 통해 완전한 브라우저 런타임과 가벼운 리소스 사용량을 결합했습니다.
Moli는 AI 에이전트가 웹 페이지를 가져오고(fetch), 추출하며, 웹 검색을 수행하고, 브라우저 작업을 자동화하는 데 도움을 줍니다.
CLI, CDP, WebDriver Classic 또는 WebDriver BiDi를 통해 사용할 수 있습니다.
Moli는 Linux, macOS 및 Windows를 지원합니다.
AI 에이전트에게 다음 프롬프트를 제공하세요:
Install the skills under https://github.com/lexmount/moli/tree/main/skills,
follow their instructions to download and install the latest prebuilt Moli
binary, then use moli-webfetch to fetch https://example.com and show me the
...
Linux 또는 macOS의 경우:
curl --proto '=https' --tlsv1.2 -fsSL \
https://github.com/lexmount/moli/releases/latest/download/moli-installer.sh | sh
Windows에서는 PowerShell에서 실행하세요:
powershell -ExecutionPolicy ByPass -c "irm https://github.com/lexmount/moli/releases/latest/download/moli-installer.ps1 | iex"
Moli가 렌더링한 HTML5 게임을 Chrome DevTools를 통해 실시간으로 검사할 수 있습니다.
rust-lang.org는 Moli에 의해 렌더링되며, 그 라이브 DOM(Document Object Model), CSS 및 기하학적 정보가 Chrome DevTools에서 사용 가능합니다.
Moli의 기본 완성 전략을 사용하여 페이지를 Markdown으로 렌더링하려면:
moli fetch \
--dump markdown \
--wait-until done \
...
또는 간결하고 모델 친화적인 시맨틱 트리(semantic tree)를 직접 반환받으려면:
moli fetch \
--dump semantic_tree_text \
--wait-selector body \
...
시각적 출력을 위해 온디맨드 레이아웃을 활성화하고 뷰포트 PNG, 전체 문서 PNG 또는 페이지별 PDF를 작성할 수 있습니다:
moli fetch --layout --dump screenshot https://example.com > page.png
moli fetch --layout --dump screenshot_full https://example.com > full-page.png
moli fetch --layout --dump pdf https://example.com > page.pdf
전체 옵션 목록(출력 형식, 페이지 로드/응답 대기, 프로필, 프록시 설정, 리소스 정책 및 트레이싱 옵션 포함)을 확인하려면 fetch --help를 실행하세요.
DOM 우선 워크로드를 위한 기본 자동화 서버
moli serve
실제 기하학(geometry), 좌표 입력 및 스크린샷/스크리녹트 표면 활성화
...
동일한 엔드포인트가 세 가지 프로토콜, 즉 CDP, WebDriver Classic, 그리고 WebDriver BiDi를 모두 제공합니다. Playwright는 CDP를 통해 직접 연결할 수 있습니다:
import { chromium } from "playwright";
const browser = await chromium.connectOverCDP("http://127.0.0.1:9222");
const context = browser.contexts()[0];
...
WebMCP 플레이그라운드는 사이트의 네이티브 WebMCP 도구를 나열하고 호출하는 CLI를 포함하며, 예약(booking), 레스토랑(restaurant), 피자(pizza) 데모도 제공합니다.
에이전트 워크로드에서 가장 중요한 세 가지 특성이 있으며, Moli는 이들을 하나로 통합했습니다:
풀 기능 (Full-featured)— 실제 JavaScript, DOM, CSS, 네트워킹, 스토리지, 레이아웃, 스크린샷 및 표준 자동화 프로토콜이 모두 하나의 헤드리스 브라우저에 통합되었습니다.빠름 (Fast)— 대부분의 자동화 요청은 시각적 렌더링을 필요로 하지 않으므로, 구조 기반 작업(structure-first operations)은 레이아웃과 페인팅을 완전히 건너뜁니다.자원 효율성 (Resource-efficient)— 레이아웃과 픽셀은 필요한 경우에만 생성되므로, Moli는 완전히 렌더링된 시각적 상태를 지속적으로 유지하고 업데이트할 필요가 없습니다.
대부분의 브라우저 자동화 작업이 실제로 필요로 하는 것은 페이지 구조이지, 지속적으로 렌더링되는 시각적 세계가 아닙니다. Moli는 네이티브 DOM과 스타일 상태를 단일 진실 공급원(single source of truth)으로 취급하며, 레이아웃이나 소프트웨어 페인팅은 정말로 필요한 작업에 대해서만 트리거합니다.
| 에이전트 요청 | Moli의 동작 |
|---|---|
| HTML/Markdown 추출, DOM 쿼리, JS 실행, 네트워크/스토리지 검사 | 브라우저 런타임 상태를 직접 읽습니다 — 레이아웃이나 페인팅을 트리거하지 않습니다 |
| ... |
Moli는 여전히 완전한 기능 세트를 포함합니다: V8, CSS, 레이아웃, 텍스트 셰이핑(text shaping), 히트 테스트(hit-testing), 소프트웨어 페인트(software paint) 등. 유일한 차이점은 시각적 작업이 언제 실행되고 그 결과가 얼마나 오래 유지되는지입니다. 이 비용 모델은 크롤링, 브라우저 사용 에이전트, 검색 파이프라인, 평가 환경, 그리고 강화학습 (RL) 워크로드에 특히 적합합니다.
완전한 웹 런타임(Complete web runtime) — HTML 파싱 스트리밍, 네이티브 DOM, V8 JavaScript, 모듈/타이머/마이크로태스크/이벤트, iframe 및 worker, CSS 캐스케이드, Fetch/XHR/WebSocket, 쿠키, WebCrypto, 그리고 프로필 범위 저장소(localStorage, IndexedDB, OPFS)를 지원합니다.추출에 최적화된 출력물(Extraction-optimized outputs) — CLI는 HTML, Markdown, JSON, 시맨틱 텍스트 트리, 프레임 인식 직렬화를 직접 생성하며, 셀렉터/스크립트/응답 대기 및 네트워크 추적이 가능합니다.통합 자동화 바이너리(Unified automation binary) — CDP, WebDriver Classic, 그리고 WebDriver BiDi가 동일한 커널과 스케줄러를 공유합니다. 별도의 ChromeDriver, geckodriver, 또는 브라우저 설치가 필요하지 않습니다.필요시 실제 시각적 기능(Real visual capabilities on demand) — --layout을 추가하여 완전한 박스 구성(complete box construction), Taffy 레이아웃, Parley 텍스트 레이아웃, 레이아웃 기반 히트 테스트/입력, 뷰포트 스크린샷, 그리고 저주파수 CPU 렌더링 DevTools 스크리캐스트 프레임을 활성화할 수 있습니다.제어 가능한 운영 옵션(Controllable operational options) — 프로필, 쿠키, HTTP 캐시, 프록시, 리소스 패밀리, 연결 제한, 타임아웃, private-network 정책, user-agent 오버라이드, 진단 로깅 및 네트워크 진단이 모두 제공됩니다.
Moli는 Lexmount의 오픈 소스 헤드리스 브라우저이며, Lexmount Browser는 이를 기반으로 구축된 관리형 클라우드 런타임 및 제어 평면입니다.
오픈 소스 헤드리스 브라우저는 Lexmount Browser 없이도 완전히 사용 가능합니다.
Moli에서 비용이 많이 드는 브라우저 작업은 명시적인 옵트인(opt-in)을 필요로 하며 기본적으로 활성화되지 않습니다:
| 모드 또는 옵션 | 동작 방식 |
|---|---|
| Default | LayoutPolicy::Mock — 실제 레이아웃이나 페인트가 없는, 호환 가능한 형식의 결정론적 지오메트리 |
--layout | |
LayoutPolicy::OnDemand — 실제 레이아웃, 지오메트리, 히트 테스트, 좌표 입력, 스크린샷, 스크리캐스트 | |
--resource | 모든 선택적 시각/미디어 리소스 패밀리를 가져옴 |
--image , --font , --audio , --video , --media , --text-track | 특정 선택적 리소스 패밀리 하나를 활성화함 |
--profile-dir , --http-cache-dir , --cookie-file | 워크로드에 필요한 영속성을 선택적으로 활성화함 |
레이아웃은 지속적으로 유지되는 상태가 아니라 온디맨드 스냅샷입니다. 첫 번째 지오메트리 요청(콜드 스타트)은 현재 DOM/스타일로부터 작업 레이아웃 트리(working layout tree)를 구축하고, 그 정식 지오메트리를 불변의, DOM 독립적인 FrozenLayoutTree로 동결하며, 오직 이 최신 트리만을 유지합니다. 일반적인 지오메트리 읽기는 페이지가 변경되었더라도 이를 재사용할 수 있습니다. 스크린샷은 항상 동결된 트리를 다시 구축하고 교체합니다. 각 스크린캐스트 구독은 불투명한 시각적 상태 토큰(opaque visual-state token)만을 기억합니다. 변하지 않은 토큰은 폴링을 억제하고, 변경된 토큰은 새로운 프레임을 트리거합니다. 페인트 결과는 절대 재사용되지 않습니다.
Moli는 Chromium 래퍼가 아닌 독립적인 브라우저 커널입니다. Rust로 구축되었으며 자체 소유권 및 생명주기 규칙을 가지고 있고 다음 요소들에 의존합니다:
libcurl
— 네트워크 전송 및 다중 요청 런타임
html5ever
— HTML 파싱
rusty_v8/V8 — JavaScript 실행
Servo/Stylo — 셀렉터, 캐스케이드, 계산된 스타일
- Taffy + Parley — 박스와 텍스트 레이아웃
- AnyRender/Vello CPU,
usvg,
그리고 Rust 이미지 에코시스템 — 소프트웨어 렌더링
문서와 스타일은 단일 진실 공급원(single source of truth)을 가집니다: 네이티브 DOM과 그 Stylo 통합입니다. 모든 실제 새로고침은 해당 소스로부터 임시 작업 트리를 구축하고, 선택적으로 새로운 페인트 스냅샷을 생성 및 소비하며, 정식 박스/프래그먼트 지오메트리를 압축된 FrozenLayoutTree로 동결한 다음, 작업 트리, 스타일 바오어(style borrows), 레이아웃 캐시, 진단 정보, 페인트 상태를 폐기합니다. 스크린캐스트 토큰은 생성 메타데이터만을 포함하며, 절대 레이아웃이나 페인트 데이터를 포함하지 않습니다. 소스 조회 및 히트 테스트 후보는 요청 시 동결된 트리로부터 파생됩니다. 이 시스템에는 점진적으로 유지되는 레이아웃 트리, 손상 그래프(damage graph), 보존 디스플레이 리스트(retained display list), GPU 합성기(GPU compositor) 또는 영구적인 창이 없습니다.
다음 측정값들은 Moli의 현재 역량 범위(capability envelope)를 보여줍니다. 여기에는 실제 웹사이트, 자동화 클라이언트, Chromium/WPT 동작 검사, 그리고 대규모 nextest 회귀 테스트 스위트가 포함됩니다.
테스트는 주요 중국 및 국제 사이트의 192개 공개 URL을 다룹니다. 페이지가 성공으로 간주되려면 JavaScript 실행 후 의미 있는 콘텐츠를 생성해야 합니다. HTTP 200 상태 코드, 도전 페이지(challenge page), 로그인 벽(login wall), 빈 응답 또는 셸 전용 애플리케이션은 카운트되지 않습니다.
| 브라우저 | 유용한 페이지 | 성공률 | 중앙값 시간 | 중앙값 RSS |
|---|---|---|---|---|
| Moli | 103 | 53.6% | 1.43 s | 73 MiB |
| Chrome Headless | 101 | 52.6% | 1.43 s | 773 MiB |
| Lightpanda | 85 | 44.3% | 0.97 s | 40 MiB |
| Obscura | 57 | 29.7% | 1.30 s | 39 MiB |
| 지표 (Metric) | Moli | Chromium |
|---|---|---|
| CDP ready | 34.85 ms | 169.37 ms |
| ... | ||
| 현재 Moli의 에이전트 브라우저 범위를 검증하는 데 사용된 WPT 전체 실행에서 1,612만 개의 테스트가 통과했습니다. |
전체 Lexbench-Headless-Browser 코퍼스는 원시 CDP(raw CDP), Playwright, Puppeteer 및 Selenium을 포함한 핀 고정 자동화 도구 13가지, 웹 플랫폼 의미론을 다루는 1,928개의 태스크를 포함합니다. 원격 엔드포인트로만 사용 가능한 Kitesurf를 포함하기 위해 아래 차트는 비교 가능한 1,308개 태스크를 사용합니다. 모든 브라우저는 동일한 태스크 선택 규칙을 사용합니다.

Moli 0.1.1은 1,071개의 태스크를 통과하여 성공률이 81.88%였으며, Kitesurf의 62.08%, Lightpanda의 53.29%, Obscura의 44.88%보다 앞섰습니다. 기준 엔진인 Chrome은 99.85%에 도달했습니다. Kitesurf는 k=1에서 실행되었으며, 발견된 태스크는 통과로 간주되지 않습니다. 또한 원격 서비스의 재현 조건은 로컬 바이너리와 다릅니다. 전체 결과는 벤치마크의 다섯 가지 엔진 보고서(five-engine report)를 참조하십시오.

Kitesurf는 원격 서비스이므로 CPU, 메모리 및 프로세스 개수를 측정할 수 없습니다. 따라서 리소스 비교는 네 개의 로컬 엔진만을 다룹니다. 별도의 557개 작업 실행은 네 가지 모두가 완료한 작업만 포함합니다. Moli의 태스크당 중앙값 CPU 시간은 100.6 ms였고, 중앙값 최대 메모리는 92 MiB였습니다. 반면 Chrome은 각각 687 ms와 697 MiB를 기록했습니다. Moli는 Chrome의 CPU 시간 중 약 15%와 최대 메모리 중 13%만을 사용했습니다. 방법론 및 전체 데이터는 벤치마크의 리소스 카드를 참조하십시오.
문서에 정의된 에이전트-브라우저 시나리오 내에서 Moli는 프로덕션 사용 준비가 되었으며 활발하게 개발되고 있습니다.
현재 의도적인 경계에는 다음 사항들이 포함됩니다:
- GUI 브라우저, 영구 창(persistent window), GPU 합성기(compositor), 또는 유지되는 다중 프레임 페인트 아키텍처는 없습니다.
- Chrome과의 픽셀 단위 일치성(pixel-for-pixel parity)을 추구하지 않으며 고정밀 Canvas/WebGL/미디어 재생 기능을 제공하지 않습니다.
--layout
소프트웨어 스크린샷 및 레이스터 기반 CDP PDF 생성을 지원하지만, 모든 Chrome 스크린샷이나 인쇄 모드가 구현된 것은 아닙니다.
지원되지 않는 프로토콜 경로는 명시적인 오류를 반환합니다. Moli는 브라우저 동작, 이벤트, 네트워크 관찰 또는 시각적 결과가 발생했다고 절대 가장하지 않습니다.
stargazer 타임라인에 의해 매시간 생성되며 lexmount/moli-metrics에서 제공됩니다.
파일이나 디렉토리가 다르게 명시하지 않는 한, 사용자는 선택에 따라 Apache License 2.0 또는 MIT License 하에서 Moli를 사용할 수 있습니다. 별도로 라이선스가 부여된 타사 구성 요소 및 테스트 환경(fixtures)은 자체 라이선스 및 공지 사항의 적용을 받습니다. license-metadata.json
기계가 읽을 수 있는 기본값은 여기에 기록되며, 추가 배포 가능한 공지 사항은 licenses/에 모여 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Rust (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기