비밀번호
anchor alias
anchor alias
비밀번호
Hermes Agent는 여러 백엔드 옵션을 갖춘 전체 브라우저 자동화 도구가 포함되어 있습니다.
- Browserbase 클라우드 모드 를 통해 Browserbase 관리 클라우드 브라우저 및 안티 봇 툴링
- **버저 Browser Use를 통해 클라우드 모드를 사용하세요.
- Firecrawl 클라우드 모드 를 통해 Firecrawl 내장 스크랩으로 클라우드 브라우저에 대한
- Camofox Local mode via Camofox for local anti-detection browsing (Firefox 기반 지문 스푸핑)
- **CDP를 통한 Local Chrome ** -
/browser connect를 사용하여 Chrome 인스턴스에 브라우저 도구를 연결 - Local 브라우저 모드 를 통해
agent-browserCLI 및 로컬 크롬 설치
모든 모드에서 에이전트는 웹 사이트를 탐색 할 수 있으며 페이지 요소와 상호 작용하고 양식을 작성하고 정보를 추출 할 수 있습니다.
설명
페이지는 accessibility tree (텍스트 기반 스냅샷)로 표현되며 LLM Agent에 이상적입니다. 상호 작용하는 성분은 ref IDs (같은 @e1, @e2)를 얻습니다 에이전트은 누르고 typing를 위해 사용됩니다.
주요 기능:
- **Multi-provider 클라우드 실행 ** - Browserbase, Browser Use, 또는 Firecrawl - 필요한 로컬 브라우저 없음
- **Local Chrome 통합 ** - 핸즈온 브라우징을 위한 CDP를 통해 Chrome을 실행할 수 있습니다
- Built-in stealth - 임의의 지문, CAPTCHA 해결, 주거 프록시 (Browserbase)
- Session isolation - 각 작업은 자체 브라우저 세션을 가져옵니다
- 자동 정리 - 비활성 세션은 타임 아웃 후 닫힙니다
- **Vision Analysis ** - 스크린 샷 + 시각 이해를위한 AI 분석
설치하기
유료 Nous Portal 구독이 있는 경우, **Tool Gateway**를 통해 브라우저 자동화를 사용할 수 있습니다. hermes model 또는 hermes tools를 실행하여 활성화합니다.
Browserbase 클라우드 모드
Browserbase-managed 클라우드 브라우저를 사용하려면 다음을 추가하세요
# Add to ~/.hermes/.env
BROWSERBASE_API_KEY=***
BROWSERBASE_PROJECT_ID=your-project-id-here
browserbase.com에서 자격 증명을 받으십시오.
임계값 클라우드 모드 사용
브라우저를 사용 클라우드 브라우저 제공자로 사용, 추가:
# Add to ~/.hermes/.env
BROWSER_USE_API_KEY=***
browser-use.com에서 API 키를 가져옵니다. 임계값 REST API를 통해 클라우드 브라우저를 제공합니다. Browserbase 및 Browser Use credentials가 설정되면 Browserbase가 우선 순위를 부여합니다.
Firecrawl 클라우드 모드
사용자의 클라우드 브라우저 제공자로 Firecrawl를 사용하려면 다음을 추가하세요
# Add to ~/.hermes/.env
FIRECRAWL_API_KEY=fc-***
firecrawl.dev에서 API 키를 가져옵니다. 그런 다음 브라우저 제공자로 Firecrawl를 선택하세요
hermes setup tools
# → Browser Automation → Firecrawl
옵션 설정:
# Self-hosted Firecrawl instance (default: https://api.firecrawl.dev)
FIRECRAWL_API_URL=http://localhost:3002
# Session TTL in seconds (default: 300)
FIRECRAWL_BROWSER_TTL=600
Hybrid routing: LAN/localhost를 위한 공공 URL을 위한 클라우드
클라우드 제공자가 구성되면 Hermes auto-spawns a *local Chromium sidecar * 이름
private/loopback/LAN 주소로 해결되는 URL에 대한 (localhost, 127.0.0.1,
192.168.x.x, 10.x.x.x, 172.16-31.x.x, *.local, *.lan, *.internal,
IPv6 루프백 ::1, 링크현지 169.254.x.x). 공개 URL은 계속 사용
같은 대화의 클라우드 제공자.
이것은 일반적으로 "I'm development locally but using Browserbase" 워크플로우를 해결합니다
에이전트는 http://localhost:3000 및 스크랩에서 대시보드를 스크린 샷 할 수 있습니다
https://github.com 제공업체를 전환하지 않고 SSRF 가드를 비활성화합니다.
클라우드 제공자는 개인 URL을 볼 수 없습니다.
이 기능은 기본적으로 **입니다. 그것을 비활성화하려면 (모든 URL은 구성에 이동 클라우드 제공자, 하기 전에):
# ~/.hermes/config.yaml
browser:
cloud_provider: browserbase
auto_local_for_private_urls: false
자동 라우팅 사용으로, 개인 URL이 거부됩니다
"Blocked: URL targets a private or internal address" 설정하지 않는 한
browser.allow_private_urls: true (클라우드 제공업체가 시도한 경우 —
일반적으로 Browserbase 등에서 작동하지 않습니다. LAN에 도달 할 수 없습니다.
요구 사항: 로컬 사이드카는 동일한 agent-browser CLI를 순수 로컬로 사용합니다
모드, 그래서 설치해야합니다 (hermes setup tools → Browser Automation
자동 설치). Post-navigation는 개인에 공개 URL에서 리디렉션
주소는 여전히 차단됩니다 (당신은 도달하는 리디렉트로 내부 트릭을 사용할 수 없습니다
공공 경로로 LAN).
Camofox 로컬 모드
Camofox는 Camoufox를 감싸는 자체 호스팅 Node.js 서버입니다 (C++ 지문 스포핑을 가진 Firefox 포크). 그것은 클라우드 의존성없이 로컬 검출 검색을 제공합니다.
# Clone the Camofox browser server first
git clone https://github.com/jo-inc/camofox-browser
cd camofox-browser
# Build and start with Docker using the default container settings
# (auto-detects arch: aarch64 on M1/M2, x86_64 on Intel)
make up
# Stop and remove the default container
make down
# Force a clean rebuild (for example, after upgrading VERSION/RELEASE)
make reset
# Just download binaries without building
make fetch
# Override arch or version explicitly
make up ARCH=x86_64
make up VERSION=135.0.1 RELEASE=beta.24
``make up`는 기본 컨테이너를 즉시 시작합니다. 더 큰 Node heap, VNC, 또는 persistent 프로파일 디렉토리와 같은 사용자 정의 실행 설정을 원하면 이미지를 먼저 만들고 스스로 실행하십시오
```bash
# Build the image without starting the default container
make build
# Start with persistence, VNC live view, and a larger Node heap
mkdir -p ~/.camofox-docker
docker run -d \
--name camofox-browser \
--restart unless-stopped \
-p 9377:9377 \
-p 6080:6080 \
-p 5901:5900 \
-e CAMOFOX_PORT=9377 \
-e ENABLE_VNC=1 \
-e VNC_BIND=0.0.0.0 \
-e VNC_RESOLUTION=1920x1080 \
-e MAX_OLD_SPACE_SIZE=2048 \
-v ~/.camofox-docker:/root/.camofox \
camofox-browser:135.0.1-aarch64
VNC가 활성화된 상태에서 브라우저는 머리 모드로 실행되며, 브라우저에서 http://localhost:6080(noVNC)로 볼 수 있습니다. 기본 VNC 클라이언트를 localhost:5901에 연결할 수 있습니다.
만약 당신이 이미 ran make up, 중지 및 사용자 지정을 시작하기 전에 기본 컨테이너를 제거:
make down
# then run the custom docker run command above
그런 다음 ~/.hermes/.env에 설정:
CAMOFOX_URL=http://localhost:9377
또는 hermes tools → 브라우저 자동화 → Camofox를 통해 구성합니다.
CAMOFOX_URL이 설정되면, Browserbase 또는 Agent-browser 대신 Camofox를 통해 모든 브라우저 도구가 자동으로 경로를 설정합니다.
Persistent 브라우저 세션
기본적으로 각 Camofox 세션은 임의의의 정체성을 얻습니다. 쿠키 및 로그인은 에이전트 재시작에서 살아남지 않습니다. 지속적인 브라우저 세션을 활성화하려면 다음을 추가하십시오. ~/.hermes/config.yaml:
browser:
camofox:
managed_persistence: true
그럼 완전히 재시작 Hermes 그래서 새로운 설정은 픽업.
헤르메스는 browser.camofox.managed_persistence을 읽습니다. ********** 최고 수준의 managed_persistence. 일반적인 실수는 쓰기:
# ❌ Wrong — Hermes ignores this
managed_persistence: true
플래그가 잘못된 경로에 배치되면 Hermes는 임의의의 ephemeral userId로 돌아갑니다. 로그인 상태는 각 세션에서 손실됩니다.
헤르메스
- deterministic profile-scoped
userId를 Camofox로 보내서 서버는 세션 전체에 동일한 Firefox 프로파일을 재사용할 수 있습니다. - 서버 측 컨텍스트 파괴를 정리하여, 쿠키 및 로그인은 에이전트 작업 사이에 살아 있습니다.
userId를 활성 헤르메스 프로파일에 포함하므로 다른 헤르메스 프로파일은 다른 브라우저 프로파일을 얻습니다 (프로필 고립).
어떤 헤르메스가하지 않습니다
- Camofox 서버에서 persistence를 강제하지 않습니다. Hermes는 안정적인
userId만 전송합니다. 서버는userId를 persistent Firefox 프로파일 디렉토리에 맵핑하여 영광해야 합니다. - Camofox 서버 빌드가 ephemeral (e.g. 항상 저장 된 프로파일을로드하지 않고
browser.newContext()를 호출하면 Hermes는 해당 세션을 만들 수 없습니다. userId-based profile persistence를 구현하는 Camofox 빌드를 실행했는지 확인하십시오.
작업 증명
- Hermes 및 Camofox 서버를 시작합니다.
- 브라우저 작업에서 Google (또는 로그인 사이트)를 열고 수동으로 로그인하십시오.
- 일반적으로 브라우저 작업을 종료합니다.
- 새로운 브라우저 작업을 시작합니다.
- 같은 사이트를 다시 엽니 다 — 당신은 여전히 로그인해야합니다.
단계 5 로그 아웃하면, Camofox 서버는 안정적인 userId을 존중하지 않습니다. config 경로를 더블 체크하면 완전히 재시작 config.yaml를 편집한 후 Hermes, Camofox 서버 버전은 persistent per-user 프로파일을 지원합니다.
국가 생활
Hermes derives the stable userId from profile-scoped directory ~/.hermes/browser_auth/camofox/ (또는 비기본 프로파일의 $HERMES_HOME 아래 해당). 실제 브라우저 프로필 데이터는 Camofox 서버 측에 살고, 그 userId에 의해 키. 영구 프로필을 완전히 재설정하려면 Camofox 서버에서 삭제하고 해당 Hermes 프로필의 state 디렉토리를 제거하십시오.
외부 관리 Camofox 세션
또 다른 앱이 눈에 띄는 Camofox 브라우저를 구동 할 때 ( 데스크탑 조수, 사용자 정의 통합, 또 다른 에이전트)는 자체 격리 된 프로파일을 스파킹 대신 동일한 정체성을 작동하기 위해 Hermes를 구성합니다.
3개의 손잡이는 행동을 통제합니다:
| 설정하기 | 카테고리 | 제품 정보 |
|---|---|---|
browser.camofox.user_id | CAMOFOX_USER_ID | 카모fox userId Hermes는 탭을 만들 때 사용합니다. 이 세션을 "외부 관리"모드로 설정합니다. |
browser.camofox.session_key | CAMOFOX_SESSION_KEY | sessionKey (a.k.a. listItemId)가 탭 생성에 전송되었습니다. 채택 중 기존 탭과 일치하도록 사용. unset가 없는 경우 per-task 값으로 기본값. |
browser.camofox.adopt_existing_tab | CAMOFOX_ADOPT_EXISTING_TAB | 사실, Hermes 호출 GET /tabs?userId=<user_id> 처음 사용 하 고 새로운 것을 만들기 전에 기존 탭을 재사용. |
Env vars는 config.yaml에 대해 전진합니다. 어떤 형태 일:
browser:
camofox:
user_id: shared-camofox
session_key: visible-tab
adopt_existing_tab: true
````bash
CAMOFOX_USER_ID=shared-camofox
CAMOFOX_SESSION_KEY=visible-tab
CAMOFOX_ADOPT_EXISTING_TAB=true
**user_id가 설정될 때 어떤 변경 사항이 있습니까? **
- Hermes는 작업 끝에 파괴적인 정리를 건너 (
managed_persistence: true와 동일). 다른 앱의 탭/cookies/profile 생존. - Hermes doesnot call
DELETE /sessions/<user_id>— 그 엔드포인트는 모든 사용자 데이터를 닦아서 외부 앱의 세션을 불화하면 됩니다.
** 탭 채택 작품 (adopt_existing_tab: true):**
- 프로세스 시작 후 첫 번째 브라우저 도구 호출에서 Hermes 문제
GET /tabs?userId=<user_id>(5-second timeout). - 응답의 어떤 탭이
listItemId == session_key이면, Hermes는 그 그룹에서 가장 최근에 만들어진 것을 채택한다. - 그렇지 않으면, Hermes는 사용자가 가장 최근 만든 탭을 채택합니다 (
listItemId). - 탭이 존재하지 않거나 요청이 실패하면 Hermes는 다음 작업에서 새로운 탭을 만들기 위해 돌아갑니다.
tab_id가 세션을 위해 만 불을 붙입니다. 외부 앱이 채택 된 탭 중단을 닫으면 다음 브라우저 도구 호출은 Camofox 오류를 표면화합니다. - Hermes는 모든 통화에 신선한 탭에 대한 재포가되지 않습니다.
Picking session_key: specific 기존 탭에 올리는 Hermes를 원한다면, session_key를 listItemId로 설정하면 외부 앱을 만들 수 있습니다. session_key unset만 설정하면 user_id만 설정하면, Hermes는 per-task session_key (task_<id>)를 생성합니다. - 헤르메스는 외부 앱과 쿠키 및 프로필을 공유하지만 재사용 대신 자신의 탭을 열 것입니다.
통화 참고: 외부 앱과 헤르메스는 동시에 동일한 Camofox userId를 구동 할 수 있지만, Camofox는 클라이언트간에 per-tab 초점을 맞추지 않습니다. 애플리케이션 레이어의 좌표 소유권 (예: Hermes가 실행되는 동안 외부 앱 일시 정지).
VNC 라이브 뷰
Camofox가 머리 모드로 실행될 때 (가시 브라우저 창에), 그것은 그것의 건강 체크 응답에 있는 VNC 항구를 노출합니다. Hermes는 이 발견을 자동으로 발견하고 내비게이션 응답에서 VNC URL을 포함하므로 에이전트는 브라우저 라이브를 볼 수 있습니다.
로컬 크롬을 통해 CDP (/browser connect)
클라우드 제공자 대신, Chrome DevTools Protocol (CDP)를 통해 Chrome 인스턴스를 실행하는 Hermes 브라우저 도구를 연결할 수 있습니다. 이것은 당신이해야 할 때 유용합니다 에이전트가 실시간으로 수행하고, 자신의 쿠키 / 세션을 필요로하는 페이지와 상호 작용, 또는 클라우드 브라우저 비용을 방지.
/browser connect는 interactive-CLI 슬래시 명령입니다. WebUI, Telegram, Discord 또는 다른 게이트웨이 채팅 내부에서 실행하려고 하는 경우, 메시지는 일반 텍스트로 에이전트로 전송되며 명령은 실행되지 않습니다. 터미널 (hermes 또는 hermes chat)에서 헤르메스를 시작하고 /browser connect를 발행합니다.
CLI에서, 사용:
/browser connect # Connect to Chrome at ws://localhost:9222
/browser connect ws://host:port # Connect to a specific CDP endpoint
/browser status # Check current connection
/browser disconnect # Detach and return to cloud/local mode
Chrome이 원격 디버깅으로 실행되지 않는 경우 Hermes는 --remote-debugging-port=9222로 자동 출시를 시도합니다.
CDP를 활성화하여 Chrome을 수동으로 시작하려면 전용 user-data-dir을 사용하므로 debug 포트는 Chrome이 이미 정상적인 프로파일을 실행하는 경우에도 실제로 옵니다
# Linux
google-chrome \
--remote-debugging-port=9222 \
--user-data-dir=$HOME/.hermes/chrome-debug \
--no-first-run \
--no-default-browser-check &
# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=9222 \
--user-data-dir="$HOME/.hermes/chrome-debug" \
--no-first-run \
--no-default-browser-check &
그 후 Hermes CLI를 실행하고 /browser connect을 실행합니다.
왜 --user-data-dir? Chrome을 실행하지 않고 일반 Chrome 인스턴스가 이미 실행중인 동안 기존 프로세스에서 새로운 창을 열고 기존 프로세스가 --remote-debugging-port로 시작되지 않았으므로 9222을 열지 않습니다. 전용 user-data-dir는 벌레 포트가 실제로 듣는 신선한 크롬 프로세스를 강제합니다. --no-first-run --no-default-browser-check 신선한 프로필에 대한 첫 번째 발사 마법사를 건너.
CDP를 통해 연결되면 모든 브라우저 도구 (browser_navigate, browser_click 등)는 클라우드 세션을 회전 대신 라이브 크롬 인스턴스에서 작동.
WSL2 + Windows 크롬: /browser connect에 MCP를 선호하세요
는 종종 최고의 경로가 아닙니다.
왜:
/browser connect기대 Hermes 자체는 쓸모있는 CDP 엔드 포인트에 도달- 현대 크롬 라이브 디버깅 세션은 종종 WSL에서 직접 도달 할 수없는 호스트 로컬 엔드 포인트를 노출합니다. 고전적인
9222포트는 - Windows Chrome이 debuggable 일 때, 가장 청결한 통합은 수시로 Chrome에 Windows 측 브라우저 MCP 서버 부착을 시키고 그 MCP 서버에게 Hermes 대화를 시켰습니다
그 설정은 Hermes MCP 지원을 통해 chrome-devtools-mcp를 선호합니다.
실제 설정에 대한 MCP 가이드를 참조하세요:
지역 브라우저 모드
** 어떤 클라우드 자격 증명을 설정하고 /browser connect를 사용하지 않는 경우, Hermes는 여전히 agent-browser에 의해 구동되는 로컬 크롬 설치를 통해 브라우저 도구를 사용할 수 있습니다.
옵션 환경 변수
# Residential proxies for better CAPTCHA solving (default: "true")
BROWSERBASE_PROXIES=true
# Advanced stealth with custom Chromium — requires Scale Plan (default: "false")
BROWSERBASE_ADVANCED_STEALTH=false
# Session reconnection after disconnects — requires paid plan (default: "true")
BROWSERBASE_KEEP_ALIVE=true
# Custom session timeout in milliseconds (default: project default)
# Examples: 600000 (10min), 1800000 (30min)
BROWSERBASE_SESSION_TIMEOUT=600000
# Inactivity timeout before auto-cleanup in seconds (default: 120)
BROWSER_INACTIVITY_TIMEOUT=120
# Extra Chromium launch flags (comma- or newline-separated). Hermes auto-injects
# `--no-sandbox,--disable-dev-shm-usage` when it detects root or AppArmor-restricted
# unprivileged user namespaces (Ubuntu 23.10+, DGX Spark, many container images),
# so most users don't need to set this. Set it manually only if you need a flag
# Hermes doesn't add automatically; setting it disables the auto-injection.
AGENT_BROWSER_ARGS=--no-sandbox
Agent-browser CLI 설치
npm install -g agent-browser
# Or install locally in the repo:
npm install
browser 도구는 구성의 toolsets 목록에 포함되어 있어야 합니다. hermes config set toolsets '["hermes-cli", "browser"]'입니다.
사용 설명서
browser_navigate
URL로 이동합니다. 다른 브라우저 도구 전에 호출해야합니다. Browserbase 세션을 초기화합니다.
Navigate to https://github.com/NousResearch
간단한 정보 검색을 위해 web_search 또는 web_extract를 선호합니다. 그들은 빠르고 저렴합니다. 브라우저 도구를 사용하여 interact 페이지 (클릭 버튼, 양식, 동적 콘텐츠를 처리).
browser_snapshot
현재 페이지의 접근성 트리의 텍스트 기반 스냅 샷을 가져옵니다. @e1, @e2와 browser_click 및 browser_type와 같은 ref ID와 대화 형 요소를 반환합니다.
full=false(기본값): Compact view만의 인터랙티브 엘리먼트full=true: 전체 페이지 내용
8000자 이상의 스냅샷은 LLM에 의해 자동으로 요약됩니다.
browser_click
스냅샷에서 ref ID로 식별된 요소를 클릭합니다.
Click @e5 to press the "Sign In" button
browser_type
입력 필드에 텍스트를 입력합니다. 필드를 먼저 정리하고 새로운 텍스트를 입력합니다.
Type "hermes agent" into the search field @e3
browser_scroll
페이지를 스크롤하거나 더 많은 콘텐츠를 공개합니다.
Scroll down to see more results
browser_press
키보드 키를 누릅니다. 양식이나 내비게이션을 제출하는 것이 좋습니다.
Press Enter to submit the form
지원된 키: Enter, Tab, Escape, ArrowDown, ArrowUp 등.
browser_back
브라우저 역사의 이전 페이지로 돌아가기.
browser_get_images
현재 페이지의 모든 이미지를 URL과 alt 텍스트로 나열합니다. 분석하는 이미지 찾기에 유용합니다.
browser_vision
스크린 샷을 가져 와서 Vision AI로 분석하세요. 텍스트 스냅 샷이 중요한 시각 정보를 캡처하지 않을 때이 사용 - 특히 CAPTCHA, 복잡한 레이아웃 또는 시각적 검증 문제에 유용합니다.
스크린 샷은 영구적으로 저장되며 파일 경로는 AI 분석과 함께 반환됩니다. 메시징 플랫폼 (Telegram, Discord, Slack, WhatsApp)에서 스크린 샷을 공유하기 위해 에이전트를 요청할 수 있습니다. MEDIA: 메커니즘을 통해 기본 사진 첨부 파일로 전송됩니다.
What does the chart on this page show?
스크린 샷은 ~/.hermes/cache/screenshots/에 저장되며 24 시간 후에 자동으로 청소됩니다.
browser_console
브라우저 콘솔 출력 (log/warn/error 메시지) 및 현재 페이지의 uncaught JavaScript 예외를 가져옵니다. 접근성 트리에 나타나지 않는 조용한 JS 오류를 감지하는 데 필수적입니다.
Check the browser console for any JavaScript errors
읽기 후 콘솔을 삭제하기 위해 clear=True를 사용하므로 이후 호출은 새로운 메시지를 보여줍니다.
browser_console도 평가 expression 인수로 호출할 때 JavaScript는 DevTools 콘솔과 동일한 모양으로, 결과가 뒤로 나옵니다 (JSON-serialized object가 dicts; primitive 값은 primitive).
browser_console(expression="document.querySelector('h1').textContent")
browser_console(expression="JSON.stringify(performance.timing)")
CDP 관리자가 현재 세션에 활성화되면 (CDP-capable 백엔드에 대한 browser_navigate를 실행하는 세션에 대한 그래픽), 평가는 슈퍼바이저의 지속성 웹소켓을 통해 실행됩니다 - 하위 프로세스 시작 비용. 표준 Agent-browser CLI 경로로 이동하세요. Behaviour는 동일한 방법입니다; 만 지연 변화.
browser_cdp
Raw Chrome DevTools Protocol passthrough - 다른 도구로 덮지 않는 브라우저 작업을위한 탈출 해치. 네이티브 대화 상자 처리, iframe-scoped 평가, 쿠키/네트워크 제어, 또는 에이전트가 필요한 CDP 동사에 사용됩니다.
**CDP 엔드포인트가 세션 시작에 도달 할 때만 사용할 수 있습니다 ** - 의미 /browser connect 실행 크롬에 첨부, 또는 browser.cdp_url은 config.yaml에 설정됩니다. 기본 로컬 에이전트-browser 모드, Camofox, 및 클라우드 제공 업체 (Browserbase, 브라우저 사용, Firecrawl) 현재이 도구에 CDP를 노출하지 않습니다 - 클라우드 제공 업체는 세션 CDP URL을 가지고 있지만 실시간 보관은 후속입니다.
CDP 메서드 참조: https://chromedevtools.github.io/devtools-protocol/ - 에이전트는 web_extract 매개 변수와 반환 모양을 볼 수있는 특정 방법의 페이지가 될 수 있습니다.
일반적인 본:
# List tabs (browser-level, no target_id)
browser_cdp(method="Target.getTargets")
# Handle a native JS dialog on a tab
browser_cdp(method="Page.handleJavaScriptDialog",
params={"accept": true, "promptText": ""},
target_id="<tabId>")
# Evaluate JS in a specific tab
browser_cdp(method="Runtime.evaluate",
params={"expression": "document.title", "returnByValue": true},
target_id="<tabId>")
# Get all cookies
browser_cdp(method="Network.getAllCookies")
브라우저 수준 방법 (Target.*, Browser.*, Storage.*) omit target_id. 페이지 수준 방법 (Page.*, Runtime.*, DOM.*, Emulation.*)는 target_id를 Target.getTargets에서 요구합니다. 각 stateless 호출은 독립적 인 - 세션은 호출 사이에 지속되지 않습니다.
Cross-origin iframes: 패스 frame_id (browser_snapshot.frame_tree.children에서 is_oopif=true)를 통해 CDP 통화를 iframe의 라이브 세션을 통해 전달합니다. 이것이 어떻게 Runtime.evaluate 내부의 크로스 라이진 iframe은 Browserbase에서 작동하며, stateless CDP 연결이 서명-URL 만료 될 것입니다. 예:
browser_cdp(
method="Runtime.evaluate",
params={"expression": "document.title", "returnByValue": True},
frame_id="<frame_id from browser_snapshot>",
)
동일 라이진 iframes는 frame_id이 필요하지 않습니다. 대신 최고 수준의 document.querySelector('iframe').contentDocument를 사용합니다.
browser_dialog
기본 JS 대화 상자 (alert / confirm / prompt / beforeunload)에 응답합니다. 이 도구가 존재하기 전에, 대화 상자는 페이지의 자바 스크립트 스레드와 후속 browser_* 통화가 걸거나 던질 것입니다. 이제 에이전트는 browser_snapshot 출력의 대화 상자를 보며 명시적으로 응답합니다.
** 워크 플로우:**
- 전화
browser_snapshot. 페이지를 차단하면pending_dialogs: [{"id": "d-1", "type": "alert", "message": "..."}]로 표시됩니다. browser_dialog(action="accept")또는browser_dialog(action="dismiss").prompt()대화 상자를 위해prompt_text="..."를 전달하여 응답을 공급합니다.- Re-snapshot -
pending_dialogs는 비어 있습니다. 페이지의 JS 스레드가 재개되었습니다.
**Detection은 자동으로 ** persistent CDP supervisor를 통해 - Page/Runtime/Target 이벤트에 가입하는 작업 당 하나의 WebSocket. supervisor는 또한 스냅 샷의 frame_tree 필드를 대체하므로 에이전트는 크로스 라이진 (OOPIF) iframes을 포함한 현재 페이지의 iframe 구조를 볼 수 있습니다.
** 내구성 매트릭스:**
| 기타 | 검색을 통해 pending_dialogs | 응답 (browser_dialog 도구) |
|---|---|---|
로컬 크롬 via /browser connect 또는 browser.cdp_url | ✓ | ✓ 전체 워크플로우 |
| 브라우저 | ✓ | ✓ 전체 워크플로우 (XHR 브리지를 주입) |
| Camofox / 기본 로컬 에이전트-browser | ✗ | ✅ (CDP 엔드포인트 없음) |
** Browserbase에서 작동하는 방법.** Browserbase의 CDP 프록시는 ~10ms 내의 실제 네이티브 대화 상자 서버를 허용하므로 Page.handleJavaScriptDialog를 사용할 수 없습니다. supervisor는 Page.addScriptToEvaluateOnNewDocument를 통해 작은 스크립트를 주사합니다. window.alert/confirm/prompt 는 동기 XHR 입니다. 우리는 Fetch.enable를 통해 XHRs를 가로지르며, 페이지의 JS 스레드는 XHR에 차단되어 있기 때문에 에이전트의 응답으로 Fetch.fulfillRequest. prompt()는 페이지 JS로 돌아갑니다.
Dialog 정책는 config.yaml 아래 browser.dialog_policy에서 구성됩니다
| - 연혁 | 채용 정보 |
|---|---|
must_respond (기본값) | 캡처, 스냅 샷의 표면, 왼쪽에 대기 browser_dialog() 통화. browser.dialog_timeout_s (기본 300s) 이후의 안전 자동 해체는 영원히 해칠 수 없습니다. |
auto_dismiss | 캡처, 즉시 해치. 에이전트는 여전히 browser_state 역사의 대화 상자를 볼 수 있지만 행동 할 필요가 없습니다. |
auto_accept | 캡처, 즉시 받아들입니다. 공격적인 beforeunload 프롬프트로 페이지를 항해 할 때 유용합니다. |
**프레임 트리 ** 내부 browser_snapshot.frame_tree는 30 프레임과 OOPIF 깊이 2로 캡핑되어 애드 - 헤비 페이지에 바인딩된 페이로드를 유지합니다. truncated: true 플래그 표면 제한이 히트되었을 때; 전체 트리가 필요한 에이전트는 browser_cdp를 Page.getFrameTree로 사용할 수 있습니다.
Practical 예제
웹 양식을 작성
User: Sign up for an account on example.com with my email john@example.com
Agent workflow:
1. browser_navigate("https://example.com/signup")
2. browser_snapshot() → sees form fields with refs
3. browser_type(ref="@e3", text="john@example.com")
4. browser_type(ref="@e5", text="SecurePass123")
5. browser_click(ref="@e8") → clicks "Create Account"
6. browser_snapshot() → confirms success
연구동향
User: What are the top trending repos on GitHub right now?
Agent workflow:
1. browser_navigate("https://github.com/trending")
2. browser_snapshot(full=true) → reads trending repo list
3. Returns formatted results
세션 기록
WebM 비디오 파일로 자동 기록 브라우저 세션:
browser:
record_sessions: true # default: false
활성화 할 때, 녹화는 첫 번째 browser_navigate에서 자동으로 시작되며 세션이 닫을 때 ~/.hermes/browser_recordings/로 저장합니다. 로컬 및 클라우드 모두에서 작동 (Browserbase) 모드. 72시간 이상 기록은 자동으로 정리됩니다.
Stealth 기능
Browserbase는 자동적인 훔치는 기능을 제공합니다:
| 제품 정보 | 기본 정보 | 지원하다 |
|---|---|---|
| 기본 스텔스 | 항상에 | 무작위 지문, viewport 무작위화, CAPTCHA 해결 |
| 주거 Proxies | On | 더 나은 액세스를위한 주거 IP를 통해 경로 |
| 고급 Stealth | 설명 | 사용자 정의 크롬 빌드, 스케일 계획 필요 |
| 계속 Alive | On | 네트워크 hiccups 후 세션 재연결 |
유료 기능이 플랜에서 사용할 수없는 경우, Hermes는 자동으로 뒤떨어졌다 — first disabling keepAlive, 그 후 프록시 — 그래서 여전히 무료 계획에 작동합니다.
세션 관리
- 각 작업은 Browserbase를 통해 격리 된 브라우저 세션을 가져옵니다
- 세션은 자동적으로 inactivity 후에 청소됩니다 (과태: 2 분)
- 스탈 세션을 위한 30 초마다 배경 스레드 체크
- 비상 정리는 공정 종료에 실행하여 나판 세션을 방지합니다
- 세션은 Browserbase API (
REQUEST_RELEASE상태)를 통해 발표됩니다
계정 관리
- **Text 기반 상호 작용 ** - 접근가능성 트리에 의존, 픽셀 좌표가 아닌
- Snapshot size - 대형 페이지는 8000 문자로 truncated 또는 LLM-summarized 될 수 있습니다
- **Session timeout ** - 클라우드 세션은 제공자의 플랜 설정에 따라 만료됩니다
- Cost - 클라우드 세션은 제공자 크레딧을 소비합니다. 세션은 대화가 종료되거나 비활성화되면 자동으로 정리됩니다. 사용
/browser connect무료 로컬 브라우징. - 파일 다운로드 없음 — 브라우저에서 파일을 다운로드 할 수 없습니다