Browser Automation

Default Active Automation

CDP Chrome 자동화 — 스냅샷, 클릭, 내비게이션, 스크린샷, 탭. cli-jaw browser 명령어를 통해 ref 기반 요소 타겟팅으로 Chrome을 제어합니다.

이 스킬은 기본적으로 활성화되어 있으며 모든 세션에 자동 주입됩니다. cli-jaw serve가 실행 중이어야 하며, Google Chrome이 설치되어 있어야 합니다.

빠른 참조

스킬 이름browser
카테고리Automation
상태Active (기본 로드)
필수 요건cli-jaw 바이너리, Google Chrome
선택 사항cliclick (Homebrew, 좌표 기반 클릭용)
스크린샷 저장 경로~/.cli-jaw/screenshots/
관련 스킬desktop-control, web-ai, vision-click
스킬 파일~/.cli-jaw/skills/browser/SKILL.md

사전 요구 사항

핵심 워크플로우

모든 브라우저 자동화는 동일한 루프를 따릅니다: 스냅샷을 찍어 인터랙티브 요소를 확인하고, ref ID로 해당 요소에 액션을 수행한 뒤, 다시 스냅샷을 찍어 결과를 검증합니다.

snapshot --interactive act by ref or key snapshot verify

내비게이션, 새로고침, 탭 전환 또는 페이지를 크게 변경하는 액션 이후에는 반드시 새로운 스냅샷을 찍으세요. ref ID는 가장 최근의 유효한 스냅샷에 속하며, 이후에는 무효화될 수 있습니다.

빠른 시작

# 자동화 세션 시작 (헤드리스, 창 표시 안 함)
cli-jaw browser start --agent

# 인터랙티브 브라우저 시작 (수동, 창 표시)
cli-jaw browser start

# URL로 이동
cli-jaw browser navigate "https://example.com"

# 인터랙티브 스냅샷 (ref ID 표시)
cli-jaw browser snapshot --interactive

# ref로 클릭
cli-jaw browser click e3

# 텍스트 입력 후 제출
cli-jaw browser type e5 "hello" --submit

# 스크린샷 촬영
cli-jaw browser screenshot

스냅샷 출력

snapshot --interactive 명령어는 페이지의 인터랙티브 요소 목록을 간결하게 반환하며, 각 요소에는 이후 명령어에서 사용할 짧은 ref ID가 부여됩니다.

e1   link        "Gmail"
e2   link        "Images"
e3   textbox     "Search"             ← 여기에 입력: type e3 "query"
e4   button      "Google Search"      ← 클릭: click e4
e5   button      "I'm Feeling Lucky"

e3과 같은 ref ID는 수명이 짧으며 최신 스냅샷에만 유효합니다. 페이지 변경 후에는 항상 스냅샷을 다시 찍으세요.

명령어 레퍼런스

브라우저 관리

명령어설명
cli-jaw browser start [--port <auto>] [--headless] [--agent]Chrome 실행. --agent = 헤드리스 자동화; 기본 = 인터랙티브 (창 표시).
cli-jaw browser stop브라우저 세션 종료.
cli-jaw browser status현재 CDP 연결 상태 및 포트 보고.
cli-jaw browser doctor [--json]CDP/런타임 소유권 불일치 진단 및 고아 프로세스 정리 범위 확인.
cli-jaw browser cleanup-runtimes [--json] [--close --force]기본은 드라이런. jaw 소유 고아 런타임만 --close --force로 종료.
cli-jaw browser reset [--force]브라우저 프로필 및 스크린샷 초기화. 명시적 요청 시에만 사용.

관찰

명령어설명
cli-jaw browser snapshot전체 페이지 스냅샷 (모든 노드).
cli-jaw browser snapshot --interactive인터랙티브 요소만 ref ID와 함께 표시. 토큰 절약에 권장.
cli-jaw browser snapshot --interactive --max-nodes 30 --json노드 수 제한 및 JSON 출력.
cli-jaw browser screenshot현재 뷰포트 캡처. ~/.cli-jaw/screenshots/에 저장.
cli-jaw browser screenshot --full-page전체 페이지 스크린샷 (스크롤 포함).
cli-jaw browser screenshot --ref e5ref ID로 특정 요소의 스크린샷 촬영.
cli-jaw browser screenshot --clip 0 0 320 180 --json영역 지정 스크린샷 및 JSON 출력 경로.
cli-jaw browser text페이지의 모든 보이는 텍스트 추출.
cli-jaw browser text --format html페이지 콘텐츠를 HTML로 추출.
cli-jaw browser get-dom --selector ".card" --max-chars 2000 --jsonCSS 선택자와 일치하는 DOM 하위 트리 가져오기.
cli-jaw browser console --json --limit 20콘솔 로그 항목 조회.
cli-jaw browser network --json --limit 20네트워크 요청 로그 조회.

액션

명령어설명
cli-jaw browser click e3ref ID로 요소 클릭.
cli-jaw browser click e3 --double요소 더블 클릭.
cli-jaw browser click e3 --right우클릭 (컨텍스트 메뉴).
cli-jaw browser type e3 "hello"입력 필드에 텍스트 입력.
cli-jaw browser type e3 "hello" --submit텍스트 입력 후 Enter 키 전송.
cli-jaw browser press Enter키 입력 (Enter, Escape, Tab 등).
cli-jaw browser hover e5요소 위에 마우스 올리기.
cli-jaw browser select e7 "option1"드롭다운에서 옵션 선택.
cli-jaw browser drag e3 e5한 요소에서 다른 요소로 드래그.
cli-jaw browser mouse-click 400 300절대 좌표에서 클릭.
cli-jaw browser mouse-click 400 300 --double좌표에서 더블 클릭.
cli-jaw browser move-mouse 400 300좌표로 마우스 이동 (클릭 없음).
cli-jaw browser mouse-down마우스 버튼 누르기.
cli-jaw browser mouse-up --right마우스 버튼 놓기 (선택적으로 우클릭).

내비게이션 및 검사

명령어설명
cli-jaw browser navigate "https://example.com"URL로 이동.
cli-jaw browser open "https://example.com"navigate의 별칭.
cli-jaw browser tabs열린 탭 목록 표시.
cli-jaw browser tabs --json탭 목록을 JSON으로 표시.
cli-jaw browser active-tab --json활성 탭 정보를 JSON으로 가져오기.
cli-jaw browser tab-switch 2인덱스로 탭 전환.
cli-jaw browser reload현재 페이지 새로고침.
cli-jaw browser resize 1440 900뷰포트 크기 변경.
cli-jaw browser scroll --x 0 --y 1000절대 위치로 스크롤.
cli-jaw browser wait-for-selector ".toast-success" --timeout 30000CSS 선택자가 나타날 때까지 대기.
cli-jaw browser wait-for-text "Dashboard" --timeout 30000특정 텍스트가 페이지에 나타날 때까지 대기.
cli-jaw browser evaluate "document.title"페이지 컨텍스트에서 JavaScript 실행.
evaluate는 진단용 명령어입니다. web-ai와 같은 상위 레벨 벤더 워크플로우에서 임의의 사용자 제공 JavaScript를 전달하지 마세요.

지원 라벨

영역라벨비고
로컬 cli-jaw browser 기본 명령어ready서버 기반 로컬 Chrome/CDP 전용
doctorcleanup-runtimesready기본은 드라이런; 종료하려면 --force 필요
대시보드 표시/헤드리스 시작 분리ready표시 수동 모드와 헤드리스 에이전트 모드가 분리됨
web-ai 프로바이더 워크플로우betaweb-ai 스킬 및 프로바이더별 게이트 사용
외부 호스팅/클라우드 CDPdeferred원격 브라우저 호스팅 지원을 제공하지 않음

규칙 및 제약 사항

일반 워크플로우

웹 검색

cli-jaw browser start --agent
cli-jaw browser navigate "https://www.google.com"
cli-jaw browser snapshot --interactive
cli-jaw browser type e3 "search query" --submit
cli-jaw browser snapshot --interactive
cli-jaw browser click e7

폼 입력

cli-jaw browser snapshot --interactive
cli-jaw browser type e1 "John Doe"
cli-jaw browser type e2 "john@example.com"
cli-jaw browser click e3           # Submit button
cli-jaw browser snapshot           # 제출 확인

페이지 콘텐츠 읽기

cli-jaw browser navigate "https://news.ycombinator.com"
cli-jaw browser text               # 일반 텍스트 추출
cli-jaw browser text --format html # HTML 콘텐츠
cli-jaw browser snapshot --interactive

AI 웹 워크플로우

ChatGPT 또는 기타 web-ai 워크플로우의 경우 web-ai 스킬을 사용하세요. 브라우저 스킬은 기본 페이지 제어를 담당하며, web-ai는 구조화된 질문 렌더링, 활성 탭 안전성, 응답 기준선 처리를 담당합니다.

~해줘 예시

브라우저 스킬을 트리거하는 자연어 요청 예시입니다. 한국어와 영어 모두 사용 가능합니다.

예시 1
"구글 검색해줘 — CLI-JAW 설치 방법"
헤드리스 브라우저를 시작하고, Google로 이동하여 검색어를 입력한 뒤 결과를 반환합니다. browser start --agent + navigate + type --submit + snapshot을 트리거합니다.
예시 2
"이 웹사이트 스크린샷 찍어줘" / "이 페이지 캡처해줘"
지정된 URL로 이동하고, 전체 페이지 스크린샷을 찍은 뒤 저장된 파일 경로를 반환합니다. navigate + screenshot --full-page를 사용합니다.
예시 3
"이 페이지에서 로그인 폼 채워줘 — ID: admin, PW: test1234"
스냅샷을 찍어 로그인 폼 필드를 찾고, 사용자명과 비밀번호 입력란에 자격 증명을 입력한 뒤 제출합니다. snapshot --interactive + type + click을 사용합니다.
예시 4
"탭 목록 보여줘" / "열려있는 탭 중에 구글 탭으로 전환해줘"
tabs로 열린 탭을 나열한 뒤, tab-switch로 일치하는 탭으로 전환합니다. 다중 탭 관리 워크플로우입니다.
예시 5
"브라우저 상태 확인해줘" / "Chrome 안 되면 진단해줘"
browser statusbrowser doctor --json을 실행하여 CDP 연결 상태, 포트 소유권, 고아 런타임 상태를 확인합니다. 진단 워크플로우입니다.

헤드리스 모드

Chrome을 헤드리스로 실행하는 세 가지 방법:

# 자동화에 권장
cli-jaw browser start --agent

# 수동 모드에서 명시적 헤드리스
cli-jaw browser start --headless

# 환경 변수 사용
CHROME_HEADLESS=1 cli-jaw browser start

모든 에이전트 자동화에는 --agent를 사용하세요. 브라우저 창이 표시되지 않으며, 자동화 세션에서 기본값으로 사용됩니다.

환경 변수

변수설명
CHROME_HEADLESS=1수동 시작 시 헤드리스 모드 활성화.
CHROME_NO_SANDBOX=1Chrome 샌드박스 비활성화. Docker/CI 전용 — 일반 머신에서는 사용하지 마세요.

기본 CDP 포트는 cli-jaw 서버 포트에서 파생됩니다. 명시적 오버라이드가 필요한 경우에만 cli-jaw browser start --port <port>를 사용하세요.

독립형 agbrowse 대안

단일 Chrome 인스턴스를 명시적으로 구동하려는 경우 (예: 로그인된 프로필을 유지하거나, cli-jaw serve와 두 번째 CDP 세션을 동시에 실행하지 않으려는 경우) 동일한 브라우저 명령어를 독립형 agbrowse CLI (npm install -g agbrowse)를 통해 사용할 수 있습니다. 플래그 체계는 동일하며, 바이너리 접두사만 다릅니다.

cli-jaw browser 형식
agbrowse 형식
cli-jaw browser start --agent
agbrowse start
cli-jaw browser status
agbrowse status
cli-jaw browser navigate "<url>"
agbrowse navigate "<url>"
cli-jaw browser snapshot --interactive
agbrowse snapshot --interactive
cli-jaw browser click e3
agbrowse click e3
cli-jaw browser type e5 "hello" --submit
agbrowse type e5 "hello" --submit
cli-jaw browser screenshot
agbrowse screenshot
cli-jaw browser stop
agbrowse stop
cli-jaw browseragbrowse를 동일한 --port에서 동시에 실행하지 마세요 — 두 번째 시작이 첫 번째 CDP를 재사용하게 되고, 영구 상태 파일이 충돌할 수 있습니다.

런타임 정리

# 런타임 상태 진단
cli-jaw browser doctor --json

# 드라이런: 정리 대상 확인
cli-jaw browser cleanup-runtimes

# jaw 소유 고아 런타임 실제 종료
cli-jaw browser cleanup-runtimes --close --force

cleanup-runtimes는 의도적으로 보수적입니다. jaw 소유 Chrome 실행에 의해 기록된 내구성 browser-runtime-owner.json 레코드에 대해서만 동작합니다. 프로세스 명령줄은 여전히 기록된 PID, CDP 포트 및 프로필과 일치해야 합니다. --type=을 포함하는 Chrome 헬퍼 프로세스는 거부됩니다. 일반 ps 출력을 Chrome 프로세스가 종료해도 안전하다는 근거로 사용하지 마세요.

복구 전략

문제가 발생하면, 다음 액션을 취하기 전에 멈추고 상태를 점검하세요.

1
스냅샷 실패screenshot을 찍어 페이지에 실제로 무엇이 표시되고 있는지 시각적으로 확인합니다.
2
ref를 찾을 수 없음snapshot --interactive를 다시 실행합니다. 페이지 변경 후 ref는 무효화됩니다.
3
비동기 UI가 준비되지 않음 — 적절한 타임아웃과 함께 wait-for-selector 또는 wait-for-text를 사용합니다.
4
CDP 연결 실패 — 정확한 오류를 보고한 뒤, status를 사용합니다. 복구 경로로 선택된 경우에만 stop/start합니다.
5
Chrome/프로필이 멈춤 — 사용자가 이미 파괴적 리셋을 요청하지 않은 경우 reset 전에 확인합니다.
6
DOM ref 사용 불가 — 사용 가능한 ref가 없음을 확인한 후에만 명시적 대체로 vision-click 스킬을 사용합니다.

문제 해결

증상원인해결 방법
CDP 연결 거부됨Chrome이 시작되지 않았거나 잘못된 포트cli-jaw browser status로 확인 후 올바른 포트로 시작
running:false이면서 owner:jaw-owned잔존 런타임 메타데이터 또는 비활성 CDPcli-jaw browser doctor 실행 후 browser start 재시도
이전 헤드리스 jaw Chrome이 남아 있음내구성 jaw 소유 고아 후보cli-jaw browser cleanup-runtimes 드라이런 후 --close --force
창이 테스트 브라우저만 열림Chrome 싱글톤이 실행을 흡수함모든 Chrome 창을 닫은 후 start --agent 사용
헤드리스 CDP가 열리지 않음GUI 없는 환경에서 헤드리스가 요청되지 않음--headless 또는 --agent 추가
포트 충돌다른 프로세스가 CDP 포트를 사용 중다른 --port 선택
스냅샷이 너무 큼페이지에 노드가 많음--interactive 또는 --max-nodes로 출력 제한

계획된 런타임 델타

다음 명령어들은 30_browser 레퍼런스 설계의 패리티 대상으로 계획되어 있습니다. 이후 PRD에서 명시적으로 업그레이드되지 않는 한 현재 런타임에서는 사용할 수 없습니다.

계획된 관찰 및 진단

cli-jaw browser console --clear --reload --duration 3000
cli-jaw browser network --reload --duration 1000
cli-jaw browser wait 2000

계획된 액션

cli-jaw browser resize 0 0 --fullscreen
cli-jaw browser scroll down
cli-jaw browser scroll up --amount 1000
wait-for <ref>는 레퍼런스 설계에서 더 이상 사용되지 않습니다. ref는 스냅샷 범위에 한정되기 때문입니다. 선택자 기반 또는 텍스트 기반 대기를 사용하세요.

관련 스킬

스킬관계
desktop-control통합 데스크톱 + 브라우저 자동화. DOM 대상은 CDP (브라우저 스킬)로, 데스크톱 앱은 Computer Use로 라우팅합니다.
web-aiAI 기반 웹 워크플로우 (예: ChatGPT). 브라우저 기본 명령어를 사용하되, 구조화된 질문 렌더링과 응답 처리를 추가합니다.
vision-click비전 기반 클릭 타겟팅. 비 DOM 요소 (Canvas, WebGL, 크로스 오리진 iframe)에 대한 대체 수단.
screen-capture화면 캡처 및 녹화. 시스템 레벨 캡처로 브라우저 스크린샷을 보완합니다.

참고 사항