xbot
01 / 13
← → · SPACE · SCROLL
KakaoTalk × Hermes Agent

카카오톡 단톡방
LLM 봇 · xbot

방마다 독립된 Hermes 에이전트가 답하는 얇은 라우터 봇

현재 형상 · 2026-05-21 Python 3.9 · Swift · Bun 방 8개 운영
System Architecture

전체 아키텍처 한 장채널 → I/O 브릿지 → xbot 라우터 → Hermes 두뇌 → 도구 → 모델 (위→아래로 위임)

Channels입출력
KakaoTalk Mac · SQLCipher DB Telegram · 소스 채널
I/O Bridge
kakaocli sync 2초 polling kakaocli send AX UI 자동화 Telethon 리스너 + watchdog
xbot CorePython 3.9
webhook :8766 MessageRouter CommandHandler AIEngine model=None forwarding web admin :5001
Brain
Hermes 프로필 ×8 + kakao_base SOUL.md 정체성 AGENTS.md 공통규칙 config.yaml 모델
Tools
K-dexter 주식 :3000 vaax-news MCP 정부과제 Tavily / Firecrawl 웹검색
Models3층 폴백
codex/gpt-5.4-mini deepseek-v4-flash sonnet-4.6 xbot 폴백
Overview

xbot은 무엇인가

카카오톡 단톡방용 LLM 봇. 방마다 독립된 Hermes 프로필이 정체성·기억·모델을 따로 갖고 답한다. xbot 본체는 카톡 입출력을 중개하는 얇은 라우터일 뿐 — 두뇌·정체성·규칙·모델은 전부 Hermes 프로필이 소유한다.

ROUTERxbot 본체카톡 수신/송신 중개, 모델·프롬프트 미주입
BRAINHermes 프로필방별 정체성·규칙·모델·기억 소유
TOOLSMCP · 웹검색K-dexter 주식, vaax-news 정부과제, Tavily/Firecrawl
I/OkakaocliSQLCipher DB 읽기 + AX UI 자동 송신
8운영 단톡방
5SOUL 성격
3층모델 폴백
5서비스 포트
Architecture · Flow

메시지 한 건이 흐르는 길

SOURCE
KakaoTalk Mac
SQLCipher 로컬 DB
SYNC
kakaocli sync
2초 polling → webhook POST
:8766
xbot webhook
등록 방만 통과 · 자기송신 필터
ROUTE
MessageRouter
명령 / 멘션 / 1:1 / 일반 분기
CMD
CommandHandler
!주가·!요약 등 직답
AI
AIEngine → HermesAdapter
시각·[질문자] prefix만 부착
BRAIN
hermes --profile kakao_<id>
모델: 그 방 config.yaml · 도구: MCP/웹검색
SEND
kakaocli send
AX UI 자동화 → 카톡 게시

Telegram 소스는 Telethon 리스너가 수신해 지정 카톡 방으로 포워딩한다.

Topology

구성요소 위치 · 포트

구성요소 경로 / 런타임

xbot 본체~/xbot/Python 3.9
kakaocli~/kakaocli/Swift
Hermes Agent~/…/OpenClaw/hermes-agent/
방별 프로필~/.hermes/profiles/<p>/
K-dexter~/…/K-dexter/TS · Bun
vaax-news MCP~/…/vaax-news-mcp/Python 3.11

리스닝 포트

8766xbot webhook (FastAPI)127.0.0.1
5001web admin (Flask)0.0.0.0
3000K-dexter*
9119Hermes dashboard127.0.0.1
9120Hermes 인증 프록시127.0.0.1

핵심 데이터: settings.json · sessions.json · user_tickers.json · ~/.xbot/xbot.log

Rooms

등록된 방 8개 · 방별 에이전트각 방 = 독립 Hermes 프로필 kakao_<chatid> · 정체성·규칙·모델 분리

chat_idSOUL 성격역할
우장훈252459469807638companion1:1 동반자
VAAX145333759012101community600명 커뮤니티 매니저
vaax-test469041369346893community테스트 방
AI-Foundry466750472891040expert전문 탐구
aiot428279196939418expert전문 탐구
김형준468864403843749explorer개구쟁이 탐구
고광호469144074241672explorer개구쟁이 탐구
섬머-토론468867380893419quant퀀트 분석가

kakao_base = 신규 방이 상속하는 템플릿(차분한 범용 동료). 모든 SOUL에 "이모지·마크다운 미사용" 규칙 포함.

Components · ①

입출력 계층 · xbot 본체 모듈

kakaocli — 카톡 I/O

  • 수신 SQLCipher DB를 2초 polling → webhook POST
  • 송신 macOS AX API로 UI 조작, 표시명 substring 매칭
  • 복호화 숫자 user-id 필요 (이 Mac 310850988)
  • ⚠ send는 AX 권한 상속 필요 → plain Terminal 필수

xbot 본체 (Python 3.9)

webhook_receiver수신·등록방 게이트·자기송신 필터
message_router명령/멘션/1:1/일반 분기
command_handler! 명령 직답
ai_engineHermes 라우팅 (model=None)
qa/hermes_adapter프로필 호출·lazy 생성·시드
web/ · forwarding/admin · Telegram 포워딩
Components · ②

Hermes 프로필 · 외부 도구

한 프로필이 소유하는 것

  • SOUL.md 정체성·말투. 매 chat 읽어 즉시 반영
  • AGENTS.md 공통 동작 규칙. kakao_base가 원본 → 신규 방 상속
  • config.yaml 모델·폴백
  • 호출 hermes --profile kakao_<id> chat — ephemeral subprocess, gateway 불필요
  • 세션 키 profile:<name> 로 방 기억 격리

Hermes가 호출하는 도구

K-dexter한·미 종목 분석 (시그널·진입/목표/손절)
vaax-news정부과제 692건 (6h 캐시, 1일 2회 갱신)
Tavily
Firecrawl
웹 검색·페이지 fetch

!주가는 xbot이 K-dexter 직접 호출, 자연어 주식질문은 Hermes가 MCP로 호출.

Admin & Forwarding

web admin · 포워딩

CARD방별 에이전트방마다 모델·폴백·정체성(SOUL)을 한 카드에서 편집. 첫 행은 kakao_base 템플릿
CARD카톡 방 관리감지된 미등록 방을 클릭 한 번에 등록
CARD📨 수동 전달포워딩 실패 복구용. 방 선택+메시지 → 그 방 Hermes 응답 게시

Telegram → KakaoTalk 포워딩

  • Telethon User Account 리스너가 새 글 수신 → 매핑 방으로 송신
  • URL만 있으면 웹 요약 + 원문 URL을 400자 안에 (URL 가공 금지)
  • 현재 매핑: vaax notifier → vaax-test · VAAX · AI-Foundry
  • watchdog: 30분 무이벤트 시 강제 reconnect

능동 일일 리포트 (옵션)

  • settings.daily_report — 지정 시각 자동 브리핑
  • 현재 VAAX 정부과제 브리핑 프롬프트 탑재, 비활성
  • 켜기: enabled=true + 시각 설정 후 봇 재시작
Usage · Commands

카톡 명령어그룹 방은 멘션(@bot/@xbot/@xb) 또는 ! 명령에 반응 · 1:1 방은 모든 메시지 자동 응답

명령동작
!주가 <종목|코드>K-dexter 종합 분석 직답 (예: 삼성전자 · 005930 · 삼전)
!요약최근 대화 맥락 요약
!요약 <URL> · !웹 <URL>웹페이지 요약
!검색 <쿼리>웹 검색
!날씨 [지역]날씨
!도움말명령 안내
(자연어)Hermes 에이전트 답변 · 주식 질문은 K-dexter 데이터 자동 참조

종목명은 user_tickers.json 별칭 lookup, 미등록이면 6자리 코드 입력 안내. Hermes는 신규 종목을 만나면 웹검색→자동등록→분석.

Operations

시작 · 재시작 · 헬스체크

⚠ 반드시 plain Terminal.app 에서 실행

tmux·SSH·Claude Bash로 띄우면 kakaocli send가 AX 권한을 상속받지 못해 카톡 송신이 깨진다. 봇이 떠 있는 그 창에서 재시작해야 권한 유지.

시작 / 재시작

  • cd ~/xbot && python3 main.py
  • 떠 있으면 그 창에서 Ctrl+C 후 재실행
  • kill -INT $(lsof -ti:8766)
  • .py·admin 변경 → 봇 재시작 후 반영
  • SOUL·AGENTS·모델즉시 반영 (재시작 불필요)

헬스체크

  • curl …:8766/healthz
  • curl …:5001/
  • curl …:3000/health
  • hermes mcp list
  • 응답 로그: tail -f ~/.xbot/xbot.log
Troubleshooting

"봇이 응답 안 함" — 본체부터 확인대개 Python 본체는 멀쩡한데 입출력 계층이 막힌 경우

증상원인조치
수신 멈춤 · -wal mtime 정지KakaoTalk App Napopen -a KakaoTalkNSAppSleepDisabled YES 후 재시작
send: input field 못 찾음카톡 비활성/백그라운드카톡 활성 유지 + 대상 방 독립 창
로그 log_id:92233…807kakaocli cursor poisoningInt64.max 필터 패치 확인, 임시 봇 재시작
텔레그램 포워딩 멈춤Telethon silent disconnect30분 watchdog 자동복구 / 즉시면 재시작
!주가 N/A 다발K-dexter 다운bun run src/server.ts &
응답 톤 이상SOUL 문제admin에서 SOUL 수정(즉시) · 모델 자기소개는 환각
Configuration · Models

모델 — 3층 폴백 구조응답 모델 선택권은 Hermes 프로필이 단일 소스 · xbot은 model=None

Hermes 메인
profile config.yaml model: · 평상시
openai-codex / gpt-5.4-mini
Hermes 폴백
fallback_providers: · rate-limit/5xx 시, MCP 도구 유지
openrouter / deepseek-v4-flash
xbot 폴백
settings.policy.ai_model · Hermes 통째 실패 시 직호출(도구 없음)
anthropic / claude-sonnet-4.6

변경은 admin 카드 또는 config.yaml 직접 편집. hermes config set은 주석·폴백 파손이라 금지. 글로벌 config는 실사용 안 함(방별 override).

Configuration · Source of Truth

무엇이 어디에 있나

대상소유 위치반영
방별 정체성·말투profiles/<p>/SOUL.md즉시
공통 동작 규칙profiles/<p>/AGENTS.md즉시
방별 모델·폴백profiles/<p>/config.yaml즉시
별칭·등록·포워딩·정책~/xbot/settings.jsonhot-reload
admin·라우터 코드~/xbot/xbot/**.py봇 재시작

AGENTS.md 핵심 규칙

  • 도구 선택 · 종목코드 lookup · 주가 포맷 · KST 시각
  • §9 URL 원문 보존 단축·가공 금지
  • §14 질문자 인식 [질문자:이름]로 톤·깊이 조절

원격 접속 (사내망)

  • …ts.net:10000 → admin :5001
  • …ts.net:8443 → 프록시 :9120 → :9119
  • ⚠ Hermes는 자체 인증 없음 → Basic Auth 프록시 필수