--- name: kakaotalk-send description: 밤밤 대신 카카오톡 메시지를 보내거나 읽을 때 읽을 것. "카톡 보내줘", "○○님한테 카톡으로 전달해줘", "카톡방 확인해줘" 같은 요청을 처리한다. 특정 프로젝트에 묶이지 않는 범용 절차다. --- > **이 스킬이 시스템에 하는 일 (설치 전 확인)** > > - **macOS 전용**입니다. 접근성(Accessibility) 권한이 필요합니다. > - 외부 도구 `kmsg`/`kakaocli`를 통해 **카카오톡 앱을 조작**하고 로컬 메시지 DB를 읽습니다. > - 메시지 내용을 외부로 전송하지 않습니다. 전부 로컬에서 처리됩니다. > - 접근성 권한은 화면의 다른 앱도 조작할 수 있는 강한 권한입니다. 부여 전에 이해하고 결정하세요. # 카카오톡 보내기·읽기 **정본 도구는 `kmsg`다.** `kakaocli send`는 쓰지 않는다 — 화면에 렌더링된 채팅 목록만 훑어서 아래로 밀린 방을 못 찾고, DB 키를 받는 옵션도 없다. ## 왜 SSH를 거치나 Aside 샌드박스는 **GUI 실행·AX(손쉬운 사용)·타 프로세스 조회가 전부 막혀 있다.** 그래서 모든 명령은 SSH 루프백으로 샌드박스 밖에서 실행한다. ```bash ssh -o BatchMode=yes localhost 'export PATH=/opt/homebrew/bin:$PATH; kmsg ...' ``` `kakaocli status`가 "App state: notRunning"이라고 해도 믿지 말 것. 샌드박스가 프로세스를 못 볼 뿐 카톡은 대개 켜져 있다. 선행 조건(2026-08-15 부여 완료): `/usr/libexec/sshd-keygen-wrapper`에 시스템 설정 → 개인정보 보호 및 보안 → **손쉬운 사용** 권한. 없으면 모든 AX 호출이 `-25211`로 막힌다. ## 절차 ```bash # 1. 상태와 열린 창 확인 — 이 단계를 건너뛰지 말 것 kmsg status --verbose # 2. (메인 창 외에 채팅 창이 열려 있으면 닫는다) # 3. 보낼 내용을 파일로 빼서 따옴표 문제를 피한다 kmsg send "<방이름>" "$(cat /path/msg.txt)" # 4. 실제로 나갔는지 읽어서 확인 kmsg read "<방이름>" --limit 1 --json ``` - **`kmsg send`는 성공 후 방 창을 닫는다.** 그래서 직후 `kmsg read`는 창이 없다며 실패한다. 발송 검증은 `kakaocli messages --chat-id ... --key`로 DB를 보거나, 창을 다시 열고 읽는다. - 방은 이름 substring 또는 `--chat-id`로 지정한다. `kmsg chats --json`로 목록. - 보내기 전 `--dry-run`으로 수신자를 한 번 확인한다. - **나와의 채팅은 `나와의 채팅`이 아니라 프로필명 `태현-밤밤`으로 지정한다.** - 처음 보내는 상대이거나 내용이 길면 먼저 `태현-밤밤`으로 연습 발송해 서식을 확인한다. ## AI가 보냈다는 표시 (필수) 카톡은 밤밤 본인 명의로 나가므로, **대신 보내는 전달·공지·안내성 메시지에는 본문 맨 끝에 서명 한 줄을 붙인다.** ``` — 이 메시지는 밤밤을 대신해 AI가 정리해서 보냈습니다 ``` 밤밤이 2026-08-15에 직접 요청했다("디스코드 봇은 그렇게 해주잖아"). 디스코드는 밤냥이 봇 계정이라 이미 드러나지만 카톡은 안 드러난다는 게 이유. 개인 브랜드 콘텐츠(블로그·스레드·링크드인)는 예외. ## 단톡방에 보낼 때 - **진짜 @멘션은 걸 수 없다.** 카톡 멘션은 `@` 입력 시 뜨는 멤버 선택 팝업에서 골라야 생기고, 자동 입력은 그 팝업 때문에 문장이 깨질 위험이 있다. 이름을 본문에 나열하는 방식으로 쓰고, 하이라이트가 필요하면 밤밤이 직접 단다. - 여러 명이 읽는 메시지는 **먼저 `태현-밤밤`으로 연습 발송해 서식을 확인**하고, 밤밤 승인을 받은 뒤 보낸다. ## 실패하면 | 증상 | 원인과 조치 | |---|---| | `[SEARCH_MISS] Search field not found` | 다른 채팅 창이 열려 있다. 닫고 `--refresh-cache` | | 같은 오류인데 창이 메인 하나뿐 | 방 창이 막 열리는 중이라 AX 캐시가 어긋난 것. **그대로 `--refresh-cache`로 한 번만 재시도하면 나간다**(2026-08-16 실측). 첫 실패로 발송이 안 된 것이 맞는지 `kakaocli messages`로 먼저 확인할 것 | | `[WINDOW_NOT_READY]` | 같은 원인. `open -a KakaoTalk` 후 재시도 | | `[BACKGROUND_SAFE_BLOCKED]` | `--background-safe`는 이미 열린 창만 읽는다. 정상 동작 | | 방을 못 찾음 | `kmsg chats --limit 200 --json`로 이름 확인 | ## 하지 말 것 - **`kmsg harvest`류의 메타데이터 재수집을 실행하지 말 것.** `kakaocli harvest`가 `~/.kakaocli/metadata.json`의 방 이름을 전부 `(unknown)`으로 덮어쓴 사고가 있었다. 백업: `~/.kakaocli/backups/` - AppleScript `keystroke`로 한글을 치지 말 것 — `ㅁㅁㅁ`으로 깨진다. SSH `pbcopy`도 GUI 페이스트보드에 닿지 않는다. - **대량 발송·무인 자동응답 봇으로 확장하지 말 것.** 카카오 운영정책에 자동화 프로그램 이용 제한이 있고 계정 제재 가능성이 있다. 밤밤이 2026-08-15에 무인 자동응답은 돌리지 않겠다고 명시했다. ## 참고 - 읽기 전용 대량 조회·검색이 필요하면 `kakaocli`(DB 직접 복호화)를 쓴다. 키는 맥미니 `~/Projects/seocho-ai-festa/dashboard/.env`의 `KAKAOCLI_KEY`이며 `--key`로 넘긴다(환경변수는 읽지 않는다). 절대 출력하지 말 것. - 전체 배경·폴백(수동 AX 주입)·AppleScript 함정: `~/.aside/u/0/memory/agent/kakaotalk-send-procedure.md` - 무인 상시 운영이 필요해지면: `~/.aside/u/0/memory/agent/unattended-mac-agent-xpair.md`