📝 한줄 요약
오픈소스 카톡 TUI(agent-messenger)에 KakaoTalk Mac 앱의 로컬 DB를 직접 꽂아서, 3.1년치 옛 대화 + 친구 별명 + 터미널 송신을 한 화면에서 다 되는 하이브리드 어댑터를 만들었습니다. 무엇보다 서브폰·서브컴 없이 메인폰 하나로 카톡 자동화가 가능해졌어요.
🎯 이런 분들께 도움돼요
카톡 자동화 시도해본 적 있는 분 — PC카톡 위에 매크로 올려봤거나 AppleScript로 어떻게든 굴려본 경험이 있는데, 백그라운드에서 깨지거나 서브폰/서브컴까지 동원해야 했던 분
오픈소스 도구를 자기 환경에 맞게 길들이는 사례에 관심 있는 개발자 — npm 글로벌 패키지가 마음에 안 드는 동작을 할 때 어떻게 멱등 패치 스크립트로 길들이는지 궁금한 분
카톡 + Slack + Discord 등 여러 메신저로 커뮤니티/챌린지 운영하는 1인 운영자 — 한 화면에서 다 처리하는 구조가 궁금한 분
😫 문제 상황 (Before)
기존에 카톡 자동화를 하려면 선택지가 사실상 PC카톡 + 매크로밖에 없었어요.
문제는:
PC카톡은 한 디바이스 슬롯만 점유 가능 — 평소 쓰는 메인 계정이 점유하고 있으면 자동화용 계정은 다른 컴퓨터를 따로 둬야 함
그래서 결국 서브폰 + 서브컴퓨터 셋팅이 필요했고, 인프라 부담이 컸어요
PC카톡 UI를 매크로로 조작하는 방식이라 백그라운드 동작이 안 정적이지 못함 — 창이 가려지거나 비활성화되면 깨짐
게다가 옛날 대화는 카톡 앱 직접 켜서 무한 스크롤해야만 볼 수 있었어요
이 와중에 지인이 agent-messenger라는 오픈소스 TUI를 알려줬어요. 카카오톡 LOCO 서버에 직접 접속해서 메시지를 받아오는 도구였습니다. 태블릿 디바이스로 등록되니까 PC카톡 슬롯을 안 건드린다는 점이 매력적이었어요. "이거면 메인폰 하나로 되는 거 아닌가?" 싶어서 한번 깊게 파봤습니다.
🛠️ 사용한 도구
도구명: Claude Code (CLI)
모델: Claude Opus 4.7 (1M context)
특이사항:
분석/패치/문서 동기화까지 자율 실행하는
/autopilot스킬 활용작업 중 발견사항을 다음 세션에 자동 전달하는 메모리 시스템 사용
🔧 작업 과정
1. 일단 띄워보자 — 그런데 시작부터 막힘
agent-messenger를 깔자마자 모듈 누락 에러로 죽었어요.
이거 한번 봐볼래? 그리고 내 컴퓨터에서도 세팅하고 싶어.
Claude한테 공식 문서 분석부터 맡겼더니, 카카오톡 인증 흐름(이메일 → 비밀번호 → 디바이스 코드)을 정리해 주고, 누락된 npm 패키지 5개를 한 번에 설치하는 방식까지 알려줬어요. 분리해서 설치하면 앞에 깐 게 빠져버리는 미묘한 npm 동작까지 짚어줘서, 한 줄짜리 명령어가 아니라 "왜 이렇게 해야 하는지"가 같이 정리됐어요.
이 단계에서 카톡 인증을 마치고 메인폰 카톡과는 별도로 태블릿 슬롯에 자리를 잡았습니다.
2. "이거 메시지 안 보이잖아" — 표시 문제 발견
TUI를 띄워보니 채팅방 이름이 멤버 닉네임 자동 조합으로 나오고, 메시지 작성자가 그냥 숫자 ID로 표시됐어요.
근데 메시지를 가져올때 보면
내가 저장한 이름이 아니고 유저가 본인이 세팅해둔 카카오톡 닉네임이 나오고
채팅방 내 대화 내역에서는 카카오톡 닉네임이 아닌 유저 ID 번호로 나오거든?
만약 테블릿인척 하면 유저 닉네임으로 제대로 나와야할텐데 왜 그런거야?
Claude가 분석해준 답: 디바이스 타입 문제가 아니라, agent-messenger가 친구 풀 메타데이터 동기화 API를 구현하지 않은 게 근본 원 인이었어요. 카카오 서버는 메시지 패킷에 작성자의 숫자 ID만 보내고, 실제 별명은 클라이언트가 별도로 동기화해서 매칭해야 합니다.
3. 등록일 ± 1일 한계 발견 — 진짜 골치는 여기서
근데 전부 다 4/28부터 보이고 있어서 등록일과 연관이 있는 것 같긴해.
위로 스크롤해도 며칠 전까지밖에 안 보였어요. 카카오 LOCO 서버는 신규 디바이스에 백필을 풀로 안 줘서, 새로 등록한 슬롯은 등록일 ± 약 1일까지밖에 메시지를 못 받습니다. 메시지 한 번에 가져오는 양을 50개에서 200개로 늘려도 소용없었어요. 시간 자체가 짤려 있었던 거예요.
여기서 이 작업의 첫 번째 깨달음의 순간이 왔습니다.
side-project/kakao_automation 폴더를 보면 로컬에 저장되어 있는 카카오톡 정보를 가지고 있고, 내가 이 피씨에 카톡을 설치한지 오래 되어서 내가 원하는 만큼의 정보가 이미 있긴한데, 이걸 가져오는게 가능할까?
Mac에 카톡 깐 지 오래됐으니 로컬 DB에 분명 옛 메시지가 다 있을 것 같아서 들춰봤더니, 2023년 3월 7일부터 현재까지 3.1년치 메시지가 sqlcipher DB에 그대로 있었어요. 친구 별명·채팅방 이름·멤버 정보까지 통째로요. 손만 뻗으면 닿는 데 있었는데 그동안 못 보던 거였습니다.
4. 두 데이터 소스의 약점이 서로의 강점이라는 발견
이 시점에서 두 번째 깨달음이 왔어요.
LOCO (agent-messenger)
로컬 DB (KakaoTalk Mac 앱)
옛 히스토리
❌ 등록일 ± 1일까지만
✅ 3.1년치 (2023-03-07~)
친구 별명·방 이름
❌ 숫자 ID·자동조합
✅ 내가 저장한 이름 그대로
실시간 송수신
✅ TCP 직결, 즉시
❌ UI 자동화 필요 (백그라운드 부적합)
외부 인프라
메인 카톡 슬롯 무관
카톡 앱이 켜져 있으면 됨
서로 정확히 반대로 보완하는 구조였어요. 읽기는 로컬 DB에서, 쓰기는 LOCO에서 가져가면 한쪽 단점도 없이 합쳐집니다. 이걸 어댑터 한 군데에 꽂으면 되는 거였어요.
5. 패치 스크립트로 길들이기 (v1 → v2)
agent-messenger는 npm 글로벌 패키지라 npm update -g 한 번이면 패치한 부분이 통째로 덮어씌워져요. 손으로 매번 수정할 순 없으니, 한 명령에 패치를 다시 발라주는 스크립트가 필요했습니다.
일단 각 채팅방별로 메시지를 200개씩 볼 수 있게 수정해보자.
Claude가 만들어준 patch_messenger.py는:
어댑터 파일에 정확한 문자열 매칭으로 4곳을 수정
멱등성 보장 (이미 적용된 상태면 건너뜀)
// kakao-name-patch:v2같은 마커로 버전 추적누락 npm 패키지 5개 자동 설치
친구 별명·채팅방 이름 캐시 자동 갱신
ESM import 검증으로 패치 후 정상 동작 확인
여기까지가 v2였어요. 이름 매핑 + 200개 limit + 누락 deps까지 한 번에 처리되는 깔끔한 구조였습니다.
6. 본진 작업 — getMessages 본문을 통째로 갈아끼우기 (v3)
이제 옛 히스토리를 끌어오기 위해 메시지 fetch 본문 자체를 로컬 DB 호출로 교체할 차례. 다음 세션에서 autopilot 스킬로 이 부분을 통째로 맡겼어요.
/oh-my-claudecode:autopilot
agent-messenger TUI를 로컬 KakaoTalk DB(kakaocli) 기반으로 전환 ... Phase 1 — getMessages 본문을 kakaocli 호출로 교체
autopilot은 분석부터 코드 수정·검증·문서 동기화까지 약 7분 안에 완료했어요:
마커를 v2에서 v3으로 올리고, 이전 버전 마커가 감지되면 자동으로 백업에서 복원 후 v3 적용하는 마이그레이션 로직 추가
메시지 가져오는 함수의 본문을 통째로 로컬 DB CLI 호출로 교체
호출이 실패하면(예: 카톡 앱이 꺼져 있으면) 자동으로 LOCO 서버로 fallback하는 안전망 추가
송신 부분은 일부러 안 건드림 (LOCO가 실시간이라 그대로 둬야 함)
패치 후 자동으로 ESM import 검증까지 통과
처음 실행해봤을 때 메시지가 시간 역순으로 나오는 작은 버그가 하나 있었어요.
노출되는 대화가 시간 역순인거 말고는 괜찮아보여
원인은 단순했어요. 로컬 DB CLI는 최신순으로 내려주는데 TUI는 오래된→최신 순서를 기대하는 거였습니다. 한 줄(reverse()) 추가로 해결됐어요.
7. 문서 + 패치 최종 동기화
여기까지 우리 문서랑 side-project/kakao_automation의 문서에 업데이트하고 패치도 적용하자.
마지막으로 두 프로젝트의 canonical 설계 문서와 README를 v3 사양으로 업데이트했어요. 변경된 데이터 흐름 다이어그램, 5개 EDIT 명세, 알려진 한계(캐시 stale, 라이브 listener 미구현 등)까지 정리하고 풀 패치 재적용 — 8,058명 친구 별명 / 458개 채팅방 / 2,065방 멤버 캐시까지 갱신되어 끝.
✅ 결과 (After)
Before vs After
항목
Before (PC카톡 매크로)
After (agent-messenger v3 패치)
필요 인프라
메인폰 + 메인컴 + 서브폰 + 서브컴
메인폰 + 메인컴 (한 대)
자동화 슬롯 점유
PC카톡 슬롯 (메인 계정 충돌)
태블릿 슬롯 (PC카톡과 분리)
백그라운드 동작
창 가려지면 매크로 깨짐
터미널 코드라 안정적
옛 메시지 조회
카톡 앱 무한 스크롤
TUI에서 위로 스크롤 → 3.1년치
작성자 표시
그대로 (숫자 ID 또는 카톡 닉네임)
내가 저장한 별명
채팅방 이름 표시
멤버 닉네임 자동 조합
내가 설정한 이름 그대로
메시지 송신
UI 클릭/타이핑 시뮬레이션
터미널 한 줄 (cron·스크립트로 시간 발송 가능)
가장 큰 변화
PC카톡 매크로 시절엔 자동화하려고 폰 한 대 + 컴 한 대를 더 사야 했어요. 메인 환경을 그대로 두고 자동화하려니 어쩔 수 없었습니다. 이제는 메인폰 하나로 태블릿 슬롯을 쓰니까 추가 디바이스 0대예요.