들어가며
이 포스트는 일반적인 가이드라기보다 우리 팀이 실제로 이렇게 쓰고 있다는 기록이다. 비슷한 환경을 구성하는 사람에게 참고가 될 수 있으면 좋겠다.
문제
OpenClaw로 여러 에이전트를 운영하다 보면 브라우저 자동화가 꼬이는 상황이 자주 생긴다. 여러 에이전트가 동시에 블로그 포스트를 발행하는 경우가 대표적이다. 각자의 블로그 계정으로 로그인해서 상태를 유지해야 한다. 문제는 CDP(Chrome DevTools Protocol) 세션 구조다. CDP는 한 번에 하나의 클라이언트만 붙을 수 있다. 에이전트 A(이하 Ruth)가 티스토리 포스트를 발행하고 있는데, 에이전트 B(이하 Eli)가 같은 포트에 붙으려 하면 'Target.attachToBrowserTarget: Not allowed' 에러가 난다. 즉, 두 에이전트가 동시에 같은 Chromium 인스턴스를 쓰면 충돌이 난다. 각자 분리된 Chromium이 있어야 한다.
해결: 포트와 프로필을 분리한다
현재 우리 팀의 운영 방식은 다음 표와 같다.
| 포트 | 프로필 경로 | 계정 | 담당 에이전트 | 용도 |
| 18800 | ~/.openclaw/browser/openclaw/user-data | ruth@garibong.dev | Ruth | - bongman.tistory.com(이 블로그)의 '매일경제 리뷰' 포스트 발행 - anthropic.tistory.com(Ruth의 전용 블로그)의 모든 포스트 발행 |
| 18801 | ~/.openclaw/browser/eli-tistory/user-data | eli@garibong.dev | Eli | - bongman.tistory.com(이 블로그)의 'OpenClaw 릴리즈 노트' 포스트 발행 |
각 포트는 독립된 Chromium 인스턴스를 가리킨다. 별도의 user-data 디렉터리가 있어서 카카오 로그인 쿠키도 따로 관리된다. 여기서 카카오 계정은 따로 생성한 에이전트별 전용 계정이다.
실제 사용
발행 스크립트에서 포트 지정
# Ruth — anthropic 블로그 발행
TISTORY_CDP_PORT=18800 bash publish.sh ...
# Eli — bongman 블로그 발행
TISTORY_CDP_PORT=18801 bash publish.sh ...
OpenClaw 크론에서도 동일
Eli 담당 OpenClaw 릴리즈 자동 발행 크론('cec6e74d')에는 '--cdp-port 18801'이 이미 반영돼 있다. Ruth 크론은 18800.
수동 발행 시 주의
기본적으로 블로그 포스트 발행은 크론에서 자동으로 돌아간다. 오늘은 수동(채널에서 에이전트에게 직접 지시)으로 발행할 일이 있었다. 이때 포트가 잘못 지정되면 엉뚱한 계정으로 로그인된 브라우저가 열린다. 오늘 Eli가 실수로(에이전트도 실수를 한다, 그것도 자주..) 18800(Ruth) 포트로 Eli 포스트를 발행하려다가 완전히 꼬였다. 에이전트에게 작업할 때 명시적으로 포트 번호를 확인하라고 지시하는 게 중요하다.
launchd로 상시 실행
두 Chromium 인스턴스 모두 macOS launchd로 KeepAlive 설정되어 있다. 맥이 재시작되거나 프로세스가 죽으면 자동으로 다시 뜬다. 로그인 쿠키는 user-data 디렉터리에 디스크로 저장되므로 맥 재시작 후에도 Chromium이 쿠키를 읽어 로그인 상태를 복원한다. 다만 서비스 측에서 세션을 만료 처리한 경우는 재로그인이 필요하다.
정리
- 에이전트마다 포트와 user-data 디렉토리를 분리한다
- CDP는 독점 세션이라 같은 포트 = 충돌
- 포트 번호를 명시적으로 관리하고, 크론/스크립트에 하드코딩해 둔다

참고: Chrome Relay vs OpenClaw Playwright
OpenClaw에서 브라우저를 제어하는 방식은 두 가지다. 우리 팀은 현재 둘 다 OpenClaw Playwright를 쓰지만, 차이를 알아두면 유용하다.
Chrome Relay (profile="chrome")
사용자가 직접 열어놓은 로컬 Chrome 브라우저에 CDP로 붙는 방식이다. 이미 로그인된 세션을 그대로 활용할 수 있어서 편리하다. 단, 하나의 Chrome에 하나의 CDP 연결만 허용된다. 여러 에이전트가 동시에 붙으려 하면 'Target.attachToBrowserTarget: Not allowed' 에러가 난다.
OpenClaw Playwright (profile="openclaw")
OpenClaw가 자체적으로 Chromium 인스턴스를 띄워서 관리하는 방식이다. 에이전트마다 독립된 인스턴스를 갖기 때문에 동시에 여러 에이전트가 브라우저를 써도 충돌이 없다. 로그인 쿠키는 '~/.openclaw/browser/openclaw/user-data' 같은 별도 user-data 디렉터리에 저장된다. 현재 우리 팀이 쓰는 방식이다.
| Chrome Relay | OpenClaw Playwright | |
| 기반 | 로컬 Chrome (사용자 실행) | OpenClaw 관리 Chromium |
| 동시 접근 | 불가 (독점 세션) | 가능 (인스턴스 분리) |
| 로그인 상태 | 사용자 Chrome 세션 공유 | user-data 디렉토리 별도 관리 |
| profile 값 | "chrome" | "openclaw" |
끝.
'AI-Agent > OpenClaw-Guide' 카테고리의 다른 글
| OpenClaw 2026.4.1의 크론 tools 플래그가 동작하지 않는 현상 - 원인 분석과 우회 방법 (0) | 2026.04.03 |
|---|---|
| OpenClaw 모델 목록이 갑자기 줄어드는 현상 대응 - agents.defaults.models의 숨은 동작 (0) | 2026.04.02 |
| OpenClaw 2026.3.31 업데이트 이후 에이전트가 작업 중 멈추는 현상 대응 - Discord 명령(exec) 승인 (0) | 2026.04.01 |
| Google AI Pro 구독 플랜으로 추가 과금 없이 OpenClaw에서 Gemini 모델 사용하기 (0) | 2026.03.28 |
| OpenClaw ACP로 Discord에서 Claude Code 실행하기 - 개념부터 iOS 앱 개발 사례까지 (14) | 2026.03.15 |