브라우저 자동화
Triggerfish는 CDP(Chrome DevTools Protocol)를 사용하는 전용 관리형 Chromium 인스턴스를 통해 심층 브라우저 제어를 제공합니다. 에이전트는 웹을 탐색하고, 페이지와 상호 작용하고, 양식을 작성하고, 스크린샷을 캡처하고, 웹 워크플로우를 자동화할 수 있습니다 -- 모두 정책 시행 하에.
아키텍처
브라우저 자동화는 puppeteer-core 위에 구축되어 CDP를 통해 관리형 Chromium 인스턴스에 연결됩니다. 모든 브라우저 동작은 브라우저에 도달하기 전에 정책 계층을 통과합니다.
Triggerfish는 Google Chrome, Chromium, Brave를 포함한 Chromium 기반 브라우저를 자동 감지합니다. 감지는 Linux, macOS, Windows, Flatpak 환경의 표준 설치 경로를 포함합니다.
browser_navigate 도구는 http:// 또는 https:// URL을 필요로 합니다. 브라우저 내부 스킴(chrome://, brave://, about: 등)은 지원되지 않으며 웹 URL을 사용하라는 안내와 함께 오류를 반환합니다. :::
브라우저 프로필은 에이전트별로 격리됩니다. 관리형 Chromium 인스턴스는 개인 브라우저와 쿠키, 세션, 로컬 스토리지를 공유하지 않습니다. 자격 증명 자동 완성은 기본적으로 비활성화되어 있습니다.
사용 가능한 동작
| 동작 | 설명 | 사용 예시 |
|---|---|---|
navigate | URL로 이동 (도메인 정책 대상) | 조사를 위해 웹 페이지 열기 |
snapshot | 페이지 스크린샷 캡처 | UI 상태 문서화, 시각적 정보 추출 |
click | 페이지의 요소 클릭 | 양식 제출, 버튼 활성화 |
type | 입력 필드에 텍스트 입력 | 검색 상자 작성, 양식 완성 |
select | 드롭다운에서 옵션 선택 | 메뉴에서 선택 |
upload | 양식에 파일 업로드 | 문서 첨부 |
evaluate | 페이지 컨텍스트에서 JavaScript 실행 (샌드박싱) | 데이터 추출, DOM 조작 |
wait | 요소 또는 조건 대기 | 상호 작용 전 페이지 로드 확인 |
도메인 정책 시행
에이전트가 탐색하는 모든 URL은 브라우저가 동작하기 전에 도메인 허용 목록과 거부 목록에 대해 검사됩니다.
구성
yaml
browser:
domain_policy:
allow:
- "*.example.com"
- "github.com"
- "docs.google.com"
- "*.notion.so"
deny:
- "*.malware-site.com"
classification:
"*.internal.company.com": INTERNAL
"github.com": INTERNAL
"*.google.com": INTERNAL도메인 정책 작동 방식
- 에이전트가
browser.navigate("https://github.com/org/repo")를 호출합니다 - URL을 컨텍스트로 하여
PRE_TOOL_CALLhook이 실행됩니다 - 정책 엔진이 허용/거부 목록에 대해 도메인을 검사합니다
- 거부되었거나 허용 목록에 없으면 탐색이 차단됩니다
- 허용되면 도메인 분류가 조회됩니다
- 세션 taint가 도메인 분류에 맞게 상승합니다
- 탐색이 진행됩니다
보안 도메인이 허용 목록에 없으면 기본적으로 탐색이 차단됩니다. LLM은 도메인 정책을 재정의할 수 없습니다. 이는 에이전트가 민감한 데이터를 노출하거나 원치 않는 동작을 유발할 수 있는 임의의 웹사이트를 방문하는 것을 방지합니다. :::
스크린샷과 분류
browser.snapshot을 통해 캡처된 스크린샷은 세션의 현재 taint 수준을 상속합니다. 세션이 CONFIDENTIAL로 taint된 경우 해당 세션의 모든 스크린샷은 CONFIDENTIAL로 분류됩니다.
이는 출력 정책에 영향을 미칩니다. CONFIDENTIAL로 분류된 스크린샷은 PUBLIC 채널로 전송할 수 없습니다. PRE_OUTPUT hook이 경계에서 이를 시행합니다.
스크래핑된 콘텐츠와 계보
에이전트가 웹 페이지에서 콘텐츠를 추출할 때(evaluate, 텍스트 읽기, 요소 파싱을 통해) 추출된 데이터는:
- 도메인에 할당된 분류 수준에 따라 분류됩니다
- 소스 URL, 추출 시간, 분류를 추적하는 계보 레코드를 생성합니다
- 세션 taint에 기여합니다 (taint가 콘텐츠 분류에 맞게 상승합니다)
이 계보 추적은 데이터가 웹 페이지에서 스크래핑된 것이 몇 주 전이라도 항상 데이터의 출처를 추적할 수 있음을 의미합니다.
보안 제어
에이전트별 브라우저 격리
각 에이전트는 자체 브라우저 프로필을 받습니다. 이는 다음을 의미합니다:
- 에이전트 간 쿠키 공유 없음
- 로컬 스토리지 또는 세션 스토리지 공유 없음
- 호스트 브라우저 쿠키 또는 세션에 대한 접근 없음
- 자격 증명 자동 완성 기본적으로 비활성화
- 브라우저 확장 프로그램 로드 안 됨
정책 Hook 연동
모든 브라우저 동작은 표준 정책 hook을 통과합니다:
| Hook | 실행 시점 | 검사 내용 |
|---|---|---|
PRE_TOOL_CALL | 모든 브라우저 동작 전 | 도메인 허용 목록, URL 정책, 동작 권한 |
POST_TOOL_RESPONSE | 브라우저가 데이터를 반환한 후 | 응답 분류, 세션 taint 업데이트, 계보 생성 |
PRE_OUTPUT | 브라우저 콘텐츠가 시스템을 떠날 때 | 목적지에 대한 분류 검사 |
리소스 제한
- 탐색 타임아웃이 브라우저가 무한히 멈추는 것을 방지합니다
- 페이지 로드 크기 제한이 과도한 메모리 소비를 방지합니다
- 에이전트별 동시 탭 제한이 시행됩니다
엔터프라이즈 제어
엔터프라이즈 배포에는 추가 브라우저 자동화 제어가 있습니다:
| 제어 | 설명 |
|---|---|
| 도메인 수준 분류 | 인트라넷 도메인이 자동으로 INTERNAL로 분류 |
| 차단된 도메인 목록 | 관리자가 관리하는 금지 도메인 목록 |
| 스크린샷 보존 정책 | 캡처된 스크린샷의 저장 기간 |
| 브라우저 세션 감사 로깅 | 컴플라이언스를 위한 모든 브라우저 동작의 전체 로깅 |
| 브라우저 자동화 비활성화 | 관리자가 특정 에이전트 또는 역할에 대해 브라우저 도구를 완전히 비활성화 가능 |
예시: 웹 조사 워크플로우
브라우저 자동화를 사용하는 일반적인 에이전트 워크플로우:
1. 사용자: "example-competitor.com에서 경쟁사 가격을 조사해줘"
2. 에이전트: browser.navigate("https://example-competitor.com/pricing")
-> PRE_TOOL_CALL: 도메인 "example-competitor.com"이 허용 목록에 대해 검사됨
-> 허용됨, PUBLIC으로 분류
-> 탐색 진행
3. 에이전트: browser.snapshot()
-> 스크린샷 캡처됨, 세션 taint 수준(PUBLIC)으로 분류
4. 에이전트: browser.evaluate("document.querySelector('.pricing-table').innerText")
-> 텍스트 추출됨, PUBLIC으로 분류
-> 계보 레코드 생성: source=example-competitor.com/pricing
5. 에이전트: 가격 정보를 요약하고 사용자에게 반환
-> PRE_OUTPUT: PUBLIC 데이터를 사용자 채널로 -- 허용됨각 단계가 로깅되고, 분류되고, 감사 가능합니다.
