Bot Mode와 Bot Screen
기준일: 2026-11-04
문서 반영 버전: v0.22.6
난이도: 중급
공식 기준: Bot Mode, Bot Screen, Profiles
개요
Bot Mode는 Hermes 프로필을 이름·얼굴·역할이 있는 Bot 목록으로 보여 주는 Desktop 기능입니다. v0.21.0에서 Desktop에 기본 포함됐고 처음부터 켜져 있습니다. 따로 설치할 것은 없습니다. 왼쪽 사이드바 Sessions 옆에 Bots 탭이 생기고, Bots 탭을 연 동안 대화 옆에 Routines 창이 붙습니다.
새 개념을 배울 필요는 없습니다. Bot 하나가 곧 프로필 하나입니다. 설정·메모리·스킬·자격 증명·대화 기록은 그대로 ~/.hermes/profiles/<name>/ 아래에 있고, Bot Mode는 그 위에 얹은 화면일 뿐입니다. 그래서 Desktop에서 만든 Bot도 터미널에서 hermes -p <bot> chat으로 똑같이 열립니다.
언제 쓰나
- 리서치용, 코드 리뷰용, 일정 정리용처럼 역할별 에이전트를 따로 두고 싶을 때
- Bot마다 다른 모델을 쓰고 싶을 때 (예: 요약 Bot은 비용이 낮은 모델, 리뷰 Bot은 큰 모델)
- "매일 아침 메일 요약"처럼 반복 작업을 그 일을 맡은 Bot 옆에 두고 싶을 때
- 여러 Bot을 한 방에 모아 같이 의논시키고 싶을 때
프로필을 하나만 쓰고 그때그때 세션만 바꾸는 사용자라면 Bot Mode를 굳이 신경 쓰지 않아도 됩니다. 꺼도 데이터는 그대로입니다.
프로필만 쓸 때와 무엇이 다른가
| 프로필만 쓸 때 | Bot Mode |
|---|---|
| 프로필마다 세션이 쌓이고, 매번 하나를 골라 연다 | Bot마다 Bot Chat 하나가 고정된다. Bot을 누르면 늘 같은 대화로 돌아간다 |
| 다른 전문가와 얘기하려면 프로필을 바꾼다 | 모든 Bot이 한 목록에 아바타·최근 메시지·안 읽음 표시와 함께 있다 |
| 프로필끼리는 서로 말하지 않는다 | Bot끼리 메시지를 주고받고 그룹 채팅에 함께 들어간다 |
예약 작업은 hermes cron에 따로 있다 |
Bot별 루틴을 그 Bot 대화 옆에서 만들고 고친다 |
Bot Chat은 "계속 이어지는 대화"로 설계돼 있습니다. Bot Chat 안에서 /new나 /reset을 치면 새 세션으로 갈라지지 않고 /compact로 바뀝니다. 대화는 이어지고 작업 컨텍스트만 새로 정리됩니다. 같은 프로필의 일반 세션에서는 /new가 평소처럼 동작합니다.
설정 순서
1단계: Bot 만들기
Bots 목록에서 New Agent를 누릅니다. 기본은 Name, Title, Description 세 칸뿐이고, 만들자마자 Bot이 새 Bot Chat에서 자기소개를 합니다.
Advanced를 펼치면 다음을 정할 수 있습니다.
| 항목 | 내용 |
|---|---|
| Clone from an existing profile | 다른 Bot의 설정·스킬·SOUL·메모리를 복사해서 시작. 깨끗하게 시작하려면 Fresh profile |
| Create empty | 기본 번들 스킬 없이 최소 프로필로 생성 |
| Model & provider pin | 이 Bot만의 모델 지정. 비워 두면 실행 프로필의 모델을 따른다 |
| Custom SOUL.md | Bot의 성격과 상시 지시 |
| 스킬·toolset·MCP 서버별 사용 여부 | 이 Bot에 필요한 기능만 체크 |
| Copy API keys from the main profile | 기본 켜짐. 고정 API key는 복사된다 |
OAuth 로그인(Anthropic, OpenAI Codex, xAI)은 다르게 다룹니다. 이 로그인은 한 번 쓰면 바뀌는 refresh token이라 복사하지 않고 공유합니다. Profiles 문서 기준으로 새 Bot은 root ~/.hermes/auth.json의 로그인을 그대로 읽고, 어느 프로필에서 토큰을 갱신하든 root에 다시 써서 모든 프로필이 로그인 상태를 유지합니다. 그러니 따로 로그인할 필요는 없습니다.
그 Bot에 별도 계정을 주고 싶을 때만 Bot 안에서 직접 로그인합니다. 이 로그인은 그 프로필의 auth.json에 저장되고, 이후 그 Bot은 root 로그인 대신 이것을 씁니다.
hermes -p <name> auth add <provider>
참고로 Bot Mode 문서는 "OAuth 로그인은 복사되지 않으니 Bot을 직접 로그인시키라"고 써 있어 Profiles 문서와 어긋납니다. 실제 동작은 위처럼 Profiles 문서 쪽이 더 자세합니다.
만든 뒤에는 Bot을 오른쪽 클릭해 Edit Profile(설정 다시 열기), Duplicate(통째 복제), Delete Profile(영구 삭제)을 고를 수 있습니다. default 프로필은 지울 수 없습니다.
2단계: 루틴 붙이기
Routines 창에서 그 Bot이 할 반복 작업을 만듭니다. 주기 선택기로 고르고, 필요하면 Advanced 칸에 Hermes 일정 문자열을 직접 넣습니다.
루틴은 특별한 기능이 아니라 이름이 [bot:<name>] <routine> 형식인 일반 cron 작업입니다. hermes cron list에도 보이고, 실행 결과는 그 Bot의 Bot Chat에 남습니다. cron 자체는 자동화, Cron, Goals를 참고하세요.
3단계: 그룹 채팅
Bot을 오른쪽 클릭해 Manage groups에서 그룹에 넣거나, New Group Chat으로 방을 만듭니다. 한 방에는 Bot 2~6개가 들어갑니다.
- 메시지를 보내면 최대 3라운드까지 멤버가 차례로 답합니다. 아무도 할 말이 없는 라운드가 오면 멈춥니다.
@이름으로 부르면 그 Bot만 답합니다. 아무도 부르지 않으면 모두에게 기회가 가지만, 각 Bot은 덧붙일 말이 없으면 넘깁니다. 모든 Bot이 매번 답하지는 않습니다.- Bot이 판단을 사용자에게 넘기면
@user를 쓰고, 그룹 행에 needs you 표시가 뜹니다. - 한 번 보낼 때 메시지 10개, 3라운드라는 상한이 있어 방이 혼자 계속 돌지 않습니다.
- 멈추려면
stop @bot처럼 멘션 바로 옆에 stop·halt·pause를 씁니다. 문장 다른 곳에 있는 같은 단어는 명령으로 보지 않습니다.
모든 멤버가 같은 게이트웨이에 있는 방은 그 게이트웨이가 진행을 맡으므로 Desktop을 닫아도 계속 돌아갑니다. 멤버가 여러 기계에 흩어진 방은 Desktop이 진행하므로 Desktop이 열려 있는 동안만 돌아갑니다.
4단계: Bot끼리 메시지
아무 대화에서나 @researcher 이거 좀 봐 줘처럼 쓰면, 지금 Bot이 받는 쪽 Bot에게 보낼 메시지를 스스로 다시 써서 message_agent 도구로 보냅니다. 사용자가 쓴 문장이 그대로 전달되지는 않습니다.
전달은 "보내고 잊기" 방식입니다. 보내는 쪽은 status: queued와 delivery_id를 먼저 받고 차례를 끝냅니다. 이 응답은 전달 완료가 아니라 접수 확인입니다. 결과(답장 또는 실패)는 나중에 완료 알림으로 옵니다. 결과를 모르는 메시지를 다시 보내면 같은 일이 두 번 돌 수 있으니 재전송하지 마세요.
헤드리스 서버에서 쓸 때
Desktop 없이 게이트웨이와 Telegram만 돌리는 서버라면 message_agent 도구가 나타나지 않습니다. 도구가 붙으려면 두 조건이 모두 필요한데, 보통은 Desktop의 Bots 창이 대신 채워 주기 때문입니다.
- 세션 제목이 정확히
Bot Chat이어야 한다 - 설치 안의 어느 프로필이든
profile.yaml에ui_meta: { hermes-bots: … }블록이 있어야 한다 (이걸 써 주는 CLI 명령은 없다)
손으로 맞추려면 이렇게 합니다.
# Bot마다 한 번. 다음부터는 같은 대화를 이어서 연다
hermes -p <bot> chat -c "Bot Chat" --create-if-missing
# ~/.hermes/profiles/<아무-bot>/profile.yaml — 빈 블록이면 충분하다
ui_meta:
hermes-bots: {}
그다음 차례부터 그 Bot Chat에 팀원 목록, 메시지 규약, message_agent가 붙습니다. 규약 주입 자체는 config.yaml의 agent.bot_mode_protocol(기본 true)로 켜고 끕니다.
다른 기계의 Bot과 Desktop 없이 주고받기
다른 기계의 게이트웨이를 peer로 등록하면 Desktop 없이도 Bot끼리 메시지를 보낼 수 있습니다. 상대 기계는 api_server 게이트웨이 플랫폼과 강한 API_SERVER_KEY를 쓰고 있어야 하고, 네트워크 연결(LAN, Tailscale, VPN)은 직접 마련해야 합니다.
hermes peer add spark --url http://spark.lan:8377 --key <API_SERVER_KEY>
hermes peer list
hermes peer dm spark < ~/.hermes/cache/scratch/dm.txt
키는 ~/.hermes/.env에 HERMES_PEER_<NAME>_KEY로, peer 이름과 URL은 config.yaml의 bot_peers에 저장됩니다. peer dm은 차례가 끝날 때까지 HTTP 연결을 붙잡으니 짧은 질문에만 쓰고, 긴 작업은 hermes peer run으로 run_id를 받아 hermes peer status로 확인합니다.
Bot Screen: 서버에서 도는 Bot의 화면 보기
Bot Screen(v0.22.0)은 Linux 게이트웨이 호스트(서버, 클라우드 VM, Hermes Cloud)에서 Bot마다 Xfce 데스크톱을 하나씩 띄우고 그 화면을 Desktop 앱으로 실시간 보여 주는 기능입니다. Bot이 computer_use나 화면이 표시되는 브라우저로 일하다 로그인, 2FA, CAPTCHA, 결제 단계에 막히면 Take over로 직접 처리하고 Hand back으로 돌려줍니다. 사용자가 로그인한 브라우저 세션은 Bot이 이어서 씁니다.
macOS·Windows 호스트에는 이미 실제 화면이 있으니 이 창이 나오지 않습니다.
쓰기 전에 확인할 것
| 항목 | 내용 |
|---|---|
| 기본값 | 꺼져 있다. 호스트에 띄울 때는 Start screen을 누르거나 hermes computer-use screen start를 실행해야 켜진다(샌드박스 배치는 아래 참고) |
| 패키지 | TigerVNC Xvnc와 Xfce 구성 요소가 필요하다. hermes update나 새 설치가 몰래 깔지 않는다. 창의 Install on host나 hermes computer-use screen install로 설치 |
| Docker 공식 이미지 | 비특권 사용자로 돌고 sudo가 없다. 화면에 나온 apt-get 줄을 운영자가 컨테이너 안에서 root로 한 번 실행해야 한다. 미리 넣은 -desktop 태그 이미지도 있다 |
| 메모리 | 브라우저까지 연 화면 하나에 약 1.1~1.5 GB. 4 GB면 데스크톱은 돌고, 브라우저로 넘겨받기까지 편하려면 8 GB |
| 선행 조건 | 그 Bot에 Computer Use(cua-driver)가 켜져 있어야 한다 |
bot_desktop:
geometry: "1440x900"
auto_start: false # true면 첫 computer_use 호출이나 화면 브라우저(browser.headed) 사용 때 자동 시작
min_free_memory_mb: 1536 # 여유 메모리가 이보다 적으면 시작 거부 (0 = 검사 안 함)
idle_stop_minutes: 30 # 이만큼 안 쓰면 정지 (0 = 계속 유지)
placement: auto # auto | terminal | gateway
terminal.backend가 docker·ssh·singularity면 화면은 기본으로 그 샌드박스 안에서 뜹니다. 이때는 auto_start 설정이 없어도 첫 브라우저나 computer_use 호출 때 화면이 샌드박스 안에서 자동으로 뜹니다. 사용자가 고른 샌드박스가 경계이고 그 안의 화면은 바깥을 건드리지 않기 때문입니다. 화면을 띄우지 못하면 호출이 이유와 함께 실패하고, 호스트로 대신 넘어가지는 않습니다. modal·daytona처럼 화면을 띄울 수 없는 백엔드에서는 호스트에 몰래 띄우지 않고 시작을 거부합니다.
보안 경계
공식 문서가 분명히 말하는 부분입니다. 화면은 작업 공간이지 보안 경계가 아닙니다. 같은 호스트의 Bot들은 같은 OS 사용자 계정, 파일, 네트워크를 공유합니다. 사용자가 화면을 잡고 있는 동안 Bot의 computer_use와 브라우저 도구가 human_has_control로 거부되지만, 이건 도구 수준의 울타리일 뿐입니다. Bot의 terminal 도구는 같은 사용자로 돌기 때문에 그 울타리를 우회할 수 있습니다. 믿지 못할 Bot 화면에는 비밀번호를 치지 마세요. Bot마다 격리가 필요하면 호스트를 나누는 수밖에 없습니다.
OS 사용자보다 넓게 열린 곳도 하나 있습니다. Hermes가 띄우는 Chromium(dock의 Browser 포함)은 에이전트가 붙을 수 있도록 loopback에 DevTools 포트를 엽니다. 이 포트는 같은 호스트의 모든 로컬 사용자가 접근할 수 있고, Chromium에는 사용자별로 막는 옵션이 없습니다. 믿지 못할 로컬 사용자가 있는 호스트라면 Bot을 별도 호스트로 옮기세요.
그리고 화면은 US 키맵으로 실행됩니다. 넘겨받은 상태에서 한국어 자판 배열이나 기호 키가 다르게 찍힐 수 있으니 비밀번호를 칠 때 특히 조심하세요.
끄기와 CLI 대응
Bot Mode는 Desktop 번들 플러그인입니다. Capabilities → Plugins → Bots에서 Desktop 스위치를 끄면 재시작 없이 바로 사라집니다. 프로필·세션·cron 작업은 건드리지 않습니다.
| Bot Mode에서 | 터미널에서 |
|---|---|
| Bot과 대화 | hermes -p <bot> chat |
| Bot의 파일·스킬·메모리 | ~/.hermes/profiles/<bot>/ |
| 루틴 | hermes cron list ([bot:<name>] …) |
| 프로필 만들기·보기 | hermes profile create, hermes profile list |
체크리스트
- Bot은 프로필이라는 점을 이해하고, 기존 프로필이 그대로 Bot 목록에 뜨는지 확인했다
- OAuth provider는 root 로그인을 함께 쓴다는 점을 알고, 별도 계정이 필요한 Bot만
hermes -p <name> auth add <provider>로 로그인했다 - 루틴이
hermes cron list에[bot:<name>]으로 보이는지 확인했다 - 헤드리스 서버라면
Bot Chat제목과ui_meta.hermes-bots두 조건을 맞췄다 - Bot Screen을 쓴다면 메모리 여유와 "보안 경계가 아니다"라는 점을 확인했다
다음 단계
- 세션과 프로필: Bot의 바탕인 프로필 구조
- Desktop 앱: 연결 모드와 여러 기계 연결
- 자동화, Cron, Goals: 루틴의 실체인 cron
- 보안과 승인: Bot이 명령을 실행할 때의 승인 규칙