방마다 독립된 Hermes 에이전트가 답하는 얇은 라우터 봇
카카오톡 단톡방용 LLM 봇. 방마다 독립된 Hermes 프로필이 정체성·기억·모델을 따로 갖고 답한다. xbot 본체는 카톡 입출력을 중개하는 얇은 라우터일 뿐 — 두뇌·정체성·규칙·모델은 전부 Hermes 프로필이 소유한다.
Telegram 소스는 Telethon 리스너가 수신해 지정 카톡 방으로 포워딩한다.
| 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 |
| 8766 | xbot webhook (FastAPI) | 127.0.0.1 |
| 5001 | web admin (Flask) | 0.0.0.0 |
| 3000 | K-dexter | * |
| 9119 | Hermes dashboard | 127.0.0.1 |
| 9120 | Hermes 인증 프록시 | 127.0.0.1 |
핵심 데이터: settings.json · sessions.json · user_tickers.json · ~/.xbot/xbot.log
| 방 | chat_id | SOUL 성격 | 역할 |
|---|---|---|---|
| 우장훈 | 252459469807638 | companion | 1:1 동반자 |
| VAAX | 145333759012101 | community | 600명 커뮤니티 매니저 |
| vaax-test | 469041369346893 | community | 테스트 방 |
| AI-Foundry | 466750472891040 | expert | 전문 탐구 |
| aiot | 428279196939418 | expert | 전문 탐구 |
| 김형준 | 468864403843749 | explorer | 개구쟁이 탐구 |
| 고광호 | 469144074241672 | explorer | 개구쟁이 탐구 |
| 섬머-토론 | 468867380893419 | quant | 퀀트 분석가 |
kakao_base = 신규 방이 상속하는 템플릿(차분한 범용 동료). 모든 SOUL에 "이모지·마크다운 미사용" 규칙 포함.
| webhook_receiver | 수신·등록방 게이트·자기송신 필터 |
| message_router | 명령/멘션/1:1/일반 분기 |
| command_handler | ! 명령 직답 |
| ai_engine | Hermes 라우팅 (model=None) |
| qa/hermes_adapter | 프로필 호출·lazy 생성·시드 |
| web/ · forwarding/ | admin · Telegram 포워딩 |
| K-dexter | 한·미 종목 분석 (시그널·진입/목표/손절) |
| vaax-news | 정부과제 692건 (6h 캐시, 1일 2회 갱신) |
| Tavily Firecrawl | 웹 검색·페이지 fetch |
!주가는 xbot이 K-dexter 직접 호출, 자연어 주식질문은 Hermes가 MCP로 호출.
| 명령 | 동작 |
|---|---|
| !주가 <종목|코드> | K-dexter 종합 분석 직답 (예: 삼성전자 · 005930 · 삼전) |
| !요약 | 최근 대화 맥락 요약 |
| !요약 <URL> · !웹 <URL> | 웹페이지 요약 |
| !검색 <쿼리> | 웹 검색 |
| !날씨 [지역] | 날씨 |
| !도움말 | 명령 안내 |
| (자연어) | Hermes 에이전트 답변 · 주식 질문은 K-dexter 데이터 자동 참조 |
종목명은 user_tickers.json 별칭 lookup, 미등록이면 6자리 코드 입력 안내. Hermes는 신규 종목을 만나면 웹검색→자동등록→분석.
tmux·SSH·Claude Bash로 띄우면 kakaocli send가 AX 권한을 상속받지 못해 카톡 송신이 깨진다. 봇이 떠 있는 그 창에서 재시작해야 권한 유지.
| 증상 | 원인 | 조치 |
|---|---|---|
| 수신 멈춤 · -wal mtime 정지 | KakaoTalk App Nap | open -a KakaoTalk → NSAppSleepDisabled YES 후 재시작 |
| send: input field 못 찾음 | 카톡 비활성/백그라운드 | 카톡 활성 유지 + 대상 방 독립 창 |
| 로그 log_id:92233…807 | kakaocli cursor poisoning | Int64.max 필터 패치 확인, 임시 봇 재시작 |
| 텔레그램 포워딩 멈춤 | Telethon silent disconnect | 30분 watchdog 자동복구 / 즉시면 재시작 |
| !주가 N/A 다발 | K-dexter 다운 | bun run src/server.ts & |
| 응답 톤 이상 | SOUL 문제 | admin에서 SOUL 수정(즉시) · 모델 자기소개는 환각 |
변경은 admin 카드 또는 config.yaml 직접 편집. hermes config set은 주석·폴백 파손이라 금지. 글로벌 config는 실사용 안 함(방별 override).
| 대상 | 소유 위치 | 반영 |
|---|---|---|
| 방별 정체성·말투 | profiles/<p>/SOUL.md | 즉시 |
| 공통 동작 규칙 | profiles/<p>/AGENTS.md | 즉시 |
| 방별 모델·폴백 | profiles/<p>/config.yaml | 즉시 |
| 별칭·등록·포워딩·정책 | ~/xbot/settings.json | hot-reload |
| admin·라우터 코드 | ~/xbot/xbot/**.py | 봇 재시작 |