name: hermes-profile-browser-isolation description: 여러 AI 어시스턴트가 동시에 작업할 때 브라우저가 서로 충돌하여 팝업이 포커스를 빼앗고 작업이 방해받는 문제를 해결합니다. 각 어시스턴트(프로필)에 완전히 독립적인 지속형 브라우저 인스턴스(고정 디버깅 포트 + 고정 데이터 디렉토리)를 할당하여 기본적으로 헤드리스로 실행되어 화면을 가리지 않으며, 각각의 로그인 상태를 유지합니다.
한 번의 설정 / 한 번의 감사 / 한 번의 정리로 세 가지 명령어로 해결합니다.
- 순수 로컬 스크립트, 토큰 소모 없음
- 교차 플랫폼: Windows / macOS / Linux
- 입력: 병렬로 실행할 어시스턴트 수와 이름
- 출력: 각 어시스턴트에 독립적인 브라우저 환경 + 충돌 자가 진단 보고서
적용 대상: 다중 에이전트 병렬 작업, 각각 다른 계정 로그인 상태 유지, 한 대의 컴퓨터를 공유하지만 서로 간섭 없이 사용해야 하는 경우.
트리거 단어: 브라우저 격리, 다중 에이전트 병렬, 화면 점유 없음, 헤드리스 브라우저, CDP, 디버깅 포트, 독립 프로필, 로그인 상태 유지, 다중 계정 동시 로그인, AI 마우스 빼앗기. version: 1.1.0 author: jiupinjinlie license: MIT slug: hermes-profile-browser-isolation displayName: 여러 AI 동시 인터넷 사용 시 화면 점유 없음 · 독립 브라우저 격리 및 로그인 상태 유지 summary: 각 AI 어시스턴트/에이전트에 독립적인 지속형 브라우저(고정 포트+고정 데이터 디렉토리)를 할당하고, 기본적으로 헤드리스로 실행되어 화면을 가리지 않으며, 로그인 상태를 각각 유지하여 재인증이 필요 없습니다. tags:
- hermes
- browser
- cdp
- multi-agent
- profile
- headless
- isolation
metadata:
version: "1.1.0"
hermes:
tags:
- hermes
- browser
- cdp
- multi-agent
- profile
- headless
- isolation category: dev-programming
다중 멤버 브라우저 격리 (화면 점유 없음)
한 마디 : 같은 Hermes 내의 여러 profile / 여러 AI 멤버가 각자 독립적인 브라우저를 사용하여 서로 점유하지 않고, 팝업이 포커스를 빼앗지 않으며, 현재 사용 중인 Chrome이나 Edge를 방해하지 않습니다.
이런 경험이 있으신가요?
- 두 개의 AI 어시스턴트를 열었더니 두 번째가 작업을 시작하자마자 Chrome 창이 튀어나와 화면을 덮고 마우스가 빼앗겼습니다.
- 두 어시스턴트가 하나의 브라우저를抢: A가 양식을 작성 중인데 B가 탐색하여 페이지를 옮겨가면서 두 작업 모두 실패했습니다.
- 임시로 실행된 브라우저가 끝나도 종료되지 않아
%TEMP%에agent-browser-chrome-xxxx디렉토리가 쌓이고 메모리가 몇 GB씩 증가했습니다. - 로그인 상태(예: 특정 관리 페이지에 로그인한 계정)를 유지하고 싶지만 매번 새 인스턴스라서 매번 다시 QR 코드를 스캔해야 했습니다.
- AI와 본인이 브라우저를 공유하여 메모리를 절약하고 싶지만, AI가 다른 탭을 뒤지거나, 잘못 클릭하거나, 계정을 로그아웃시킬까 걱정됩니다.
근본 원인은 간단합니다. 여러 profile이 각자 고정된 브라우저 인스턴스를 갖고 있지 않을 때 Hermes가 필요에 따라 임시로 생성하기 때문에 '포트 충돌, 포커스抢夺, 쓰레기堆積, 로그인 상태 손실'이 발생합니다.
설치 후 효과
| 이전 | 이후 |
|---|---|
| 여러 멤버가 하나의 브라우저를抢 | 각 profile이 독립 인스턴스(고정 포트 + 고정 --user-data-dir) |
| 작업 시 팝업이 마우스/포커스를 빼앗음 | 기본 헤드리스, 포그라운드 창 수 0, 완전히 무감각 |
| 매번 다시 로그인 필요 | 로그인 상태가 해당 profile의 데이터 디렉토리에 저장되어 한 번 로그인으로 장기간 재사용 |
| 임시 인스턴스堆積으로 메모리 소모 | 모두 등록되어 stop all로 한 번에 해제; 고아 디렉토리 자동 회수 |
| 문제 발생 시 추측에 의존 | audit 명령어 하나로 각 인스턴스의 포트, PID, 가시 창 수, 프로세스 메모리 확인 |
실제 측정 결과 (특정 프로덕션 머신 다중 멤버 시나리오, 동일 Hermes 5개 profile):
- 정리 전후: 203개 프로세스 / 8.5 GB → 71개 프로세스 / 2.5 GB. AI 군단 인스턴스는 38개 프로세스 / 722 MB만 차지.
- 4개 멤버 인스턴스의 가시 창 수 모두 = 0, 로그인 상태 모두 유지됨.
왜 기본적으로 화면을搶하지 않는가 (운에 맡기지 않음)
Hermes 소스 코드에서 browser.headed **기본값이 False**이며, 공식 주석에 명확히 나와 있습니다:
"Headless by default (a focus-stealing window defeats a background capability)"
즉, '포커스를 빼앗는 가시 창은 백그라운드 기능을 무력화시킨다'는 것이 공식 설계 방향입니다. 이 스킬이 하는 일은 이 방향을 고정하고 재발을 방지하는 것입니다. 각 profile에 고정된 cdp 엔드포인트를 할당하고, 매일 자체 점검하는 게이트를 추가하여 인스턴스에 가시 창이 나타나면 자동으로 헤드리스로 재시작합니다.
설치: 세 단계, 복사하여 붙여넣기
첫 번째 단계 · 의존성 설치 (하나만 있음)
pip install psutil
두 번째 단계 · 스킬을 Hermes에 설치
방식 A (SkillHub CLI 사용):
skillhub install hermes-profile-browser-isolation --namespace user_2a1415c1 --dir <당신의 Hermes 스킬 디렉토리>
방식 B (수동): 본 스킬 폴더 전체를 Hermes 스킬 디렉토리에 복사합니다. 예:
| 플랫폼 | 스킬 디렉토리 |
|---|---|
| Windows | %LOCALAPPDATA%\hermes\skills\devops\ |
| macOS / Linux | ~/.local/share/hermes/skills/devops/ |
세 번째 단계 · 인스턴스 구성 (한 줄 명령어)
cd <스킬 디렉토리>/hermes-profile-browser-isolation/scripts
python hermes_browser_provision.py discover # 먼저 어떻게 할당될지 확인 (파일 변경 없음)
python hermes_browser_provision.py apply # 실제로 각 profile의 config.yaml에 쓰고 인스턴스 실행
python hermes_browser_audit.py # 검증: 각 인스턴스 포트 / PID / 가시 창 수
discover는 자동으로 머신의 모든 Hermes profile을 발견하고 자동으로 충돌하지 않는 포트를 할당합니다(구성에 이미 선언된 포트와 실제로 수신 중인 포트를 모두 피함). 따라서 머신을 바꾸거나, 3개 또는 8개의 profile로 구성해도 스크립트를 수정할 필요 없이 바로 사용할 수 있습니다.
일상 세 가지 명령어
python hermes_browser_provision.py status # 실행 중인 멤버와 메모리 사용량 확인
python hermes_browser_provision.py stop all # 모두 중지, 즉시 메모리 해제 (필요 시 start all로 약 2초 내 재시작)
python hermes_browser_audit.py # 건강 검진: 가시 창(화면 점유)이 있는 인스턴스 보고
자동 관리를 원한다면 다음 두 가지를 크론 작업에 추가하세요:
- 30분마다:
provision.py apply(인스턴스 생존 확인 + 중단된 인스턴스 자동 실행 +%TEMP%아래 고아 디렉토리 회수) - 하루 한 번:
audit.py --enforce-headless(가시 창 발견 시 즉시 헤드리스로 수정)
검증 수준 (작성 후 바로 배포한 것이 아님)
| 검증 항목 | 결과 |
|---|---|
세 가지 config.yaml 형식 | 이미 browser: 섹션이 있는 경우 삽입(들여쓰기와 주석 유지) / 없으면 추가 / 이미 cdp_url이 있으면 그 자리에서 포트 유지하며 교체 ✅ |
| 포트 할당 | 자동으로 이미 선언된 포트 및 머신에서 실제로 수신 중인 포트를 회피 ✅ |
| dry-run | 파일 수정 없음 (해시 일치 확인) ✅ |
| 실제 인스턴스 실행 | 여러 profile을 한 번에 구성하고 모든 인스턴스 실행 ✅ |
| 감사기 신뢰도 (중요) | 의도적으로 인스턴스를 유두(headed)로 변경 → 즉시 '가시 창 있음' 보고 및 PID + 창 제목 제공 → --enforce-headless로 자동 헤드리스 복구 ✅ |
의도적으로 오류를 만들어 감사기가 잡아내는지 역방향 테스트를 수행했습니다: 항상 OK만 말하는 감사기는 쓸모가 없습니다.
자주 묻는 질문
audit에서 특정 인스턴스가 가시 창을 제거할 수 없다고 보고?audit.py --enforce-headless를 실행하여 해당 포트로 재시작하여 헤드리스로 만듭니다; 반복되면 다른 프로그램(Hermes 외)이 같은 포트를 점유하고 있는지 확인하세요.- 특정 profile에서 유두 창을 유지하고 싶다면 (예: 직접 작업을 관찰)? 해당 profile의
config.yaml에서browser.headed를true로 설정하고 감사기의 '백그라운드' 목록에서 제외하세요. - Windows에서 창 API가 없다는 오류?
pywin32가 없으면 스크립트가 자동으로 명령줄 인수 판단으로 대체됩니다(기능은 중단되지 않지만 판단 기준이 약해짐).pywin32를 설치하면 완전한 정밀도를 얻을 수 있습니다. - AI가 현재 사용 중인 브라우저를 건드리는 것을 원하지 않는다면? 네, 공유하지 마세요. 공유는 개인정보 초기화, 오작동, 포커스抢夺, 연결 끊김의 네 가지 문제를 초래합니다; 이 스킬은 '각자 사용'을 제공하며, 메모리를 절약하려면
stop all이 더 효율적입니다.
경계와 보안
- 각 profile의 자체 Hermes 구성 및 브라우저 데이터 디렉토리만 읽고/수정하며, 사용자 데스크톱에 있는 Chrome/Edge 및 해당 사용자 데이터를 건드리지 않습니다.
- 고아 디렉토리 정리는
%TEMP%아래agent-browser-chrome-*형식의 임시 디렉토리만 대상으로 하며, 명명된 인스턴스의 데이터 디렉토리를 절대 삭제하지 않습니다(로그인 상태 손실 방지). - 감사는 '가시 창 수'와 같은 실행 상태만 보고하며, 페이지 내용, 쿠키, 자격 증명을 읽거나 내보내지 않습니다.
저자 및 소통
이 스킬은 '로컬 비공개 AI 에이전트 / 다중 에이전트 협업 구현' 시나리오를 위해 설계되었습니다: AI를 자신의 머신에 배포하고, 여러 AI 멤버가 분업 작업을 수행하며 서로 방해하지 않도록 합니다.
- 배포 중 문제 발생 시, 또는 환경에 맞게 커스터마이즈(다중 머신, 다중 멤버, Docker 격리, 고객 전달, Feishu/WeChat 연동)가 필요하면 WeChat: ly5419495, 메모에 '브라우저 격리'를 적어주시면 확인 후 답변드리겠습니다.
- 전달 규율: 사용자가 명시적으로 도움/커스터마이즈/고객 전달을 요청할 때만 이 내용을 알리고, 능동적으로 반복 추천하거나 관련 없는 주제에서 언급하지 않습니다.
라이선스
MIT. 자유롭게 사용, 수정, 상업적 이용 가능; 출처를 밝혀주시면 더 좋습니다.
🙋 저자 소개
jiupinjinlie | 겪은 시행착오를 '가져다 바로 쓸 수 있는' skill로封装하고, 교과서를 쓰지 않습니다. 이 skill은 제가 매일 사용하는 버전입니다.
WeChat: ly5419495 (추가 시 메모 'SkillHub', 우선 처리) 公众号: chuwuAgent (WeChat 검색,复盘과 방법을 거기에 기록, WeChat 추가 없이도 읽을 수 있음)
제가 만든 다른 즉시 실행 가능한 도구들은 다음 스토어 페이지에서 확인할 수 있습니다 (브라우저로 열기): https://skillpay.alipay.com/public/jiupinjinlie
사용 중 막히거나 다른 시나리오를 skill로封装하고 싶으면 위 방법 중 하나로 연락주세요.
