Beta-stage unofficial KakaoTalk CLI for macOS with chat access and LOCO messaging.
OpenKakao
macOS์ฉ ์นด์นด์คํก ๋ฐ์คํฌํ ์ฑ์ ์ํ ๋น๊ณต์ CLI์ ๋๋ค.
ํฐ๋ฏธ๋์์ ์ง์ ์ฐ๊ธฐ ์ข๊ณ , JSON ์ถ๋ ฅ, watch, hook, webhook ํ๋ฆ์ผ๋ก AI๋ agent๊ฐ ํธ์ถํ๊ธฐ์๋ ์ ํฉํฉ๋๋ค.
์คํ ๋ฐ์ด๋๋ฆฌ๋ openkakao-cli์
๋๋ค.
Quick Start ยท ํต์ฌ ยท ๋ฌธ์ ยท Claude Code Skill
ํ๊ตญ์ด | English
[!TIP]
๋ก๊ทธ์ธ ์์ด ๋ฐ๋ก ๋์ํฉ๋๋ค.local-send/ax-read๋ macOS Accessibility API๋ก ์นด์นด์คํก UI๋ฅผ ์ง์ ์ฝ๊ณ ์กฐ์ํด์, ์๋ฒ ์ธ์ ์์ด๋ ์ค์ ๋ฉ์์ง ์ ์ก๊ณผ ์ต๊ทผ ๋ํ ์ฝ๊ธฐ๋ฅผ ์ง์ํฉ๋๋ค. KakaoTalk ์ฑ์ด ์คํ ์ค์ด๊ณ ๋ก๊ทธ์ธ๋ง ๋์ด ์์ผ๋ฉด ๋ฉ๋๋ค โ ์๋ Quick Start ์ฐธ๊ณ .
[!NOTE]
์๋ฒ ๋ก๊ทธ์ธ(login --save/login --manual)์ ์ต๊ทผ KakaoTalk macOS ๋น๋์์ ๋๋ถ๋ถ ๋์ํ์ง ์์ต๋๋ค (#15, #20, #22). ๋ฏธ๋ฑ๋ก ๊ธฐ๊ธฐ๋ก ๋ก๊ทธ์ธ์ ๋ฐ๋ณต ์๋ํ์ง ๋ง์ธ์ โ ์นด์นด์ค๊ฐ ๊ณ์ ์ "์๋ธ ๋๋ฐ์ด์ค ๋ก๊ทธ์ธ"์ ์ฐจ๋จํ๊ฑฐ๋ ๊ณ์ ์ ์ ์ฌํ ์ ์์ต๋๋ค(์ค์ ํผํด ์ฌ๋ก๊ฐ ๋ณด๊ณ ๋์์ต๋๋ค). ๋ก์ปฌ SQLCipher DB(local-chats/local-read/local-search)๋ ์ต์ ๋น๋์์ ํค ์ ๋ ๊ณต์์ด ์ด๊ธ๋ ์ ๋ขฐํ ์ ์์ต๋๋ค โ ๋์ax-read๋ฅผ ์ฐ์ธ์.
[!WARNING]
์ด ํ๋ก์ ํธ๋ ์นด์นด์ค(Kakao Corp.)์ ๋ฌด๊ดํ ๋น๊ณต์ CLI์ ๋๋ค. ์ฐ๊ตฌ, ์๋ํ, ๋ก์ปฌ ์ํฌํ๋ก ์ฉ๋๋ก ๋ง๋ค์๊ณ , ์นด์นด์ค์ ์น์ธ์ด๋ ๋ณด์ฆ์ ๋ฐ์ง ์์์ต๋๋ค.
์ฌ์ฉ ๋ฐฉ์์ ๋ฐ๋ผ ์นด์นด์ค ์ด์ฉ์ฝ๊ด ๋๋ ์ด์์ ์ฑ ์๋ฐ์ผ๋ก ํด์๋ ์ ์์ผ๋ฉฐ, ๊ทธ ๊ฒฝ์ฐ ์ฌ์ฉ์ ๊ณ์ ์ด ์ ์ง๋๊ฑฐ๋ ์๊ตฌ ์ญ์ ๋ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ ์ ๊ด๋ จ ์ ์ฑ ์ ์ง์ ํ์ธํ๊ณ , ๋ชจ๋ ์ฑ ์์ ์ฌ์ฉ์ ๋ณธ์ธ์๊ฒ ์์์ ์ ์ ๋ก ์ ์คํ ์ฌ์ฉํ์ธ์.
| Works with | OpenClaw | Claude Code | Codex | Cursor | Bash | HTTP |
Quick Start
๋ก๊ทธ์ธ ์์ด ์ฐ๊ธฐ (๊ถ์ฅ)
์๋ฒ ๋ก๊ทธ์ธ์ด ํ์ ์๋ ๊ฒฝ๋ก์ ๋๋ค. KakaoTalk ์ฑ์ด ์คํ ์ค์ด๊ณ ๋ก๊ทธ์ธ๋์ด ์๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
# Homebrew
brew tap JungHoonGhae/openkakao
brew install openkakao-cli
1. ์ค์ ์ ์ก ์ ํ์ดํธ๋ฆฌ์คํธ์ ์ฑํ
๋ฐฉ์ ๋ฑ๋ก (ํ์ โ ์๋ฌด ์ฑํ
์๋ ๋ณด๋ด์ง ์๋๋ก)
~/.config/openkakao/config.toml
[safety]
allowaxsend = true
allowedsendchats = ["๋์์ ์ฑํ
์ ํ์๋๋ ์ด๋ฆ"]
2. ๋ฉ์์ง ๋ณด๋ด๊ธฐ โ ์๋ฒ ์ ์ด ์์, ์ค์ ์นดํก UI๋ฅผ ์ง์ ์กฐ์
openkakao-cli local-send "์ฑํ
๋ฐฉ ํ์ ์ด๋ฆ" "Hello from CLI!" --dry-run # ๋ฏธ๋ฆฌ๋ณด๊ธฐ
openkakao-cli local-send "์ฑํ
๋ฐฉ ํ์ ์ด๋ฆ" "Hello from CLI!" -y # ์ค์ ์ ์ก
3. ์ต๊ทผ ๋ฉ์์ง ์ฝ๊ธฐ โ ๊ฐ์ ๋ฐฉ์(AX)์ผ๋ก ํ๋ฉด์ ๋ณด์ด๋ ๋ฉ์์ง๋ฅผ ์คํฌ๋ฉ
openkakao-cli ax-read "์ฑํ
๋ฐฉ ํ์ ์ด๋ฆ" -n 20
4. ์์ ๊ฐ์ง โ ์ฑํ
๋ชฉ๋ก์ ํด๋งํด ์์ฝ์์ด ๋๋ฉด hook/webhook ๋ฐํ (์๋ฒ ์ ์ด ์์)
openkakao-cli ax-watch --hook-cmd 'my-script.sh'
์๋ฒ ๋ก๊ทธ์ธ ๊ธฐ๋ฐ (ํ์ฌ ๋๋ถ๋ถ ๊นจ์ง)
# 1. ์ธ์ฆ ์ ๋ณด ์ ์ฅ โ ์ต์ ๋น๋์์๋ ๋๋ถ๋ถ ์คํจํฉ๋๋ค (#15, #20, #22)
openkakao-cli login --manual --save
(์์ ๋น๋์์ ์บ์ ์ถ์ถ์ด ๋๋ ๊ฒฝ์ฐ: openkakao-cli login --save)
2. ์ฑํ
๋ฐฉ ๋ชฉ๋ก
openkakao-cli chats
3. ๋ฉ์์ง ์ฝ๊ธฐ
openkakao-cli read <chat_id> -n 20
4. ๋ฉ์์ง ๋ณด๋ด๊ธฐ (LOCO write โ opt-in ํ์: safety.allowlocowrite = true)
openkakao-cli send <chat_id> "Hello from CLI!"
๋ก์ปฌ DB ์ฝ๊ธฐ (ํ์ฌ ์ต์ ๋น๋์์ ํค ์ ๋ ์คํจ๋ก ์ ๋ขฐ ๋ถ๊ฐ โ ax-read ๊ถ์ฅ)
openkakao-cli local-chats
openkakao-cli local-read <chat_id>
ํ์ํ ๋๋ง ์์ cache-backed ๊ฒฝ๋ก๋ฅผ ๊ฐ์ ํฉ๋๋ค.
openkakao-cli chats --rest
openkakao-cli read <chat_id> --rest
openkakao-cli members <chat_id> --rest
For Agent
# ๋ก๊ทธ์ธ ์์ด ์ฝ๊ณ ์ฐ๊ธฐ (์๋ฒ ํต์ ์์, AX ๊ธฐ๋ฐ)
openkakao-cli ax-read "์ฑํ
๋ฐฉ ํ์ ์ด๋ฆ" -n 20 --json
openkakao-cli local-send "์ฑํ
๋ฐฉ ํ์ ์ด๋ฆ" "message" -y --json
์คํ ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
openkakao-cli send <chat_id> "message" --dry-run --json
๊ตฌ์กฐํ๋ ์ถ๋ ฅ
openkakao-cli --json chats
openkakao-cli --json read <chat_id> -n 20
์ค์๊ฐ ์ด๋ฒคํธ ๊ฐ์
openkakao-cli watch --json
๋ก์ปฌ hook ๋๋ webhook ํ๋ฆ์ผ๋ก ์ฐ๊ฒฐ
openkakao-cli --unattended --allow-watch-side-effects watch \
--hook-cmd 'jq . > /tmp/openkakao-event.json'
Claude Code์์ ๋ฐ๋ก ์ฐ๋ ค๋ฉด:
npx skills add JungHoonGhae/skills@openkakao-cli
ํต์ฌ
local-send/ax-read๋ก ๋ก๊ทธ์ธ ์์ด ์ค์ ๋ฉ์์ง ์ ์กยท์ฝ๊ธฐ (macOS Accessibility API๋ก ์นดํก UI๋ฅผ ์ง์ ์กฐ์, ์๋ฒ ํต์ ์์)- macOS ์นด์นด์คํก ์ฑ์์ ์ธ์ฆ ์ ๋ณด ์ถ์ถ
- ์ฑํ , ๋ฉ์์ง, ๋ฉค๋ฒ, ์น๊ตฌ, ํ๋กํ ์กฐํ
- LOCO ๊ธฐ๋ฐ ๋ฉ์์ง ์ ์ก, ์ค์๊ฐ watch, ๋ฏธ๋์ด ์ฒ๋ฆฌ
--json์ถ๋ ฅ์ผ๋กjq,cron, SQLite, LLM ํ๋ฆ๊ณผ ์ฐ๊ฒฐ ๊ฐ๋ฅwatch,hook,webhook๋ก ๋ก์ปฌ ์๋ํ์ ์์ด์ ํธ ์ํฌํ๋ก์ ์ฐ๊ฒฐ ๊ฐ๋ฅfriends --local,profile --local,profile --chat-id๋ก ์ผ๋ถ ์กฐํ ๋ณต๊ตฌ ๊ฐ๋ฅlocal-chats,local-read,local-search๋ก ๋ก์ปฌ DB ์ฝ๊ธฐ ์๋ (์ต์ ๋น๋์์๋ ํค ์ ๋ ์คํจ๋ก ์ ๋ขฐ ๋ถ๊ฐ โax-read๊ถ์ฅ)--dry-run์ผ๋ก ์คํ ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐsend --me๋ก ๋์์ ์ฑํ ์ ๋ฐ๋ก ์ ์ก (ํ ์คํธ์ฉ)- LOCO write ๊ธฐ๋ณธ ๋นํ์ฑ โ
safety.allowlocowrite = true๋ก opt-in local-send๋ ๊ธฐ๋ณธ ๋นํ์ฑ โsafety.allowaxsend = true+safety.allowedsendchatsํ์ดํธ๋ฆฌ์คํธ๋ก opt-in
์ด๋ฐ ๊ฒฝ์ฐ์ ์ ๋ง์ต๋๋ค
- ์ฑํ ๊ธฐ๋ก์ JSON์ผ๋ก ์ฝ์ด์ ๋ค๋ฅธ ๋๊ตฌ๋ก ๋๊ธฐ๊ณ ์ถ์ ๋
- ์นด์นด์คํก์ ๋ก์ปฌ ์คํฌ๋ฆฝํธ๋ ์ด์ ๋๊ตฌ์ ์ ๋ ฅ ์ฑ๋๋ก ์ฐ๊ณ ์ถ์ ๋
- watch ์ด๋ฒคํธ๋ฅผ hook์ด๋ webhook์ผ๋ก ๋ฐ์ ํ์ ์์ ์ ์คํํ๊ณ ์ถ์ ๋
- ์ฌ๋์ด ์ง์ ์ฐ๋ CLI์ AI๊ฐ ํธ์ถํ๋ ๋ก์ปฌ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ด ๋๊ณ ์ถ์ ๋
์์ ๋ชจ๋
v1.1.0๋ถํฐ LOCO write ์์ (send, delete, edit, react)์ ๊ธฐ๋ณธ ๋นํ์ฑ์ ๋๋ค. ๊ณ์ ๋ณดํธ๋ฅผ ์ํด ์๋ฒ์ ์ฐ๊ธฐ ์์ฒญ์ ๋ณด๋ด๋ ๋ช ๋ น์ ๋ช ์์ opt-in์ด ํ์ํฉ๋๋ค.
# ~/.config/openkakao/config.toml
[safety]
allowlocowrite = true
local-send(AX ๊ธฐ๋ฐ ์ค์ ์ก)๋ v1.4.0๋ถํฐ ๊ธฐ๋ณธ ๋นํ์ฑ์ด๋ฉฐ, ๋ณ๋๋ก opt-in๊ณผ ์ฑํ
๋ฐฉ ํ์ดํธ๋ฆฌ์คํธ๊ฐ ํ์ํฉ๋๋ค. local-send๋ ์ฑํ
๋ชฉ๋ก์์ ํ์ ์ด๋ฆ์ด ์ ํํ ์ผ์นํ๋ ๋ฐฉ์ ์ฐพ์ ์ ์กํ๋๋ฐ, ๋ก์ปฌ DB์ chat-id๋ก ๋์์ ๋ค์ ๊ฒ์ฆํ ๋ฐฉ๋ฒ์ด ์์ด์ก๊ธฐ ๋๋ฌธ์ ํ์ดํธ๋ฆฌ์คํธ๊ฐ ์ ์ผํ ์์ ์ฅ์น์
๋๋ค:
# ~/.config/openkakao/config.toml
[safety]
allowaxsend = true
allowedsendchats = ["๋์์ ์ฑํ
์ ํ์๋๋ ์ด๋ฆ", "๋ค๋ฅธ ํ์ฉ ์ฑํ
๋ฐฉ ์ด๋ฆ"]
์ฝ๊ธฐ ์ ์ฉ ์์ ์ ํญ์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค:
| ๋ช
๋ น | ์ค๋ช
| ์๋ฒ ํต์ | |------|------|-----------| | ax-read <chat_name> | ํ๋ฉด์ ์ด๋ฆฐ ์ฑํ
์ ์ต๊ทผ ๋ฉ์์ง ์คํฌ๋ฉ (AX) | ์์ | | ax-watch | ์ฑํ
๋ชฉ๋ก์ ํด๋งํด ์์ฝ์ ์ฆ๊ฐ ์ hook/webhook ๋ฐํ (AX, ๋ก๊ทธ์ธ ๋ถํ์) | ์์ | | local-chats | ๋ก์ปฌ DB ์ฑํ
๋ชฉ๋ก (์ต์ ๋น๋์์ ์ ๋ขฐ ๋ถ๊ฐ) | ์์ | | local-read <id> | ๋ก์ปฌ DB ๋ฉ์์ง ์ฝ๊ธฐ (์ต์ ๋น๋์์ ์ ๋ขฐ ๋ถ๊ฐ) | ์์ | | local-search "keyword" | ๋ก์ปฌ DB ๊ฒ์ (์ต์ ๋น๋์์ ์ ๋ขฐ ๋ถ๊ฐ) | ์์ | | chats --rest | REST API ์ฑํ
๋ชฉ๋ก | REST | | read <id> --rest | REST API ๋ฉ์์ง ์ฝ๊ธฐ | REST | | send ... --dry-run | ์ ์ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ์์ | | local-send ... --dry-run | AX ์ ์ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ์์ |
[!NOTE]
local-send/ax-read/ax-watch๋ macOS Accessibility API๋ก ์นด์นด์คํก์ ๋ฉ์ธ ์ฑํ ๋ชฉ๋ก ์ฐฝ์ ์ฐพ์์ผ ๋์ํฉ๋๋ค. ์ด ์ฐฝ์ด ์ต์ํ๋ผ ์๊ฑฐ๋ ํ์ฌ ๋ณด๊ณ ์๋ ๊ฒ๊ณผ ๋ค๋ฅธ macOS Space(๊ฐ์ ๋ฐ์คํฌํ)์ ์์ผ๋ฉด ์ฐพ์ง ๋ชปํฉ๋๋ค(ํฌ์ปค์ค๋ฅผ ๋บ์ง ์๊ณ ๋ ์๋ ๋ณต๊ตฌ๊ฐ ๋ถ๊ฐ๋ฅํด์, ๋ช ํํ ์๋ฌ๋ง ๋ด๊ณ ์ง์ ๋ณต์์ ์์ฒญํฉ๋๋ค). ๊ณ์ ๊ฒช๋๋ค๋ฉด Dock์ ์นด์นด์คํก ์์ด์ฝ ์ฐํด๋ฆญ โ Options โ Assign To โ All Desktops๋ก ํ ๋ฒ๋ง ์ค์ ํด๋์ธ์.
์๊ตฌ ์ฌํญ
| Requirement | Notes | |-------------|-------| | macOS | ์นด์นด์คํก ๋ฐ์คํฌํ ์ฑ ์ค์น ๋ฐ ๋ก๊ทธ์ธ ํ์ | | Rust >= 1.75 | ์์ค ๋น๋ ์ |
์ค์น
Homebrew
brew tap JungHoonGhae/openkakao
brew install openkakao-cli
From source
git clone https://github.com/JungHoonGhae/openkakao-cli.git
cd openkakao/openkakao-cli
cargo install --path .
๋ฌธ์
- ๋ฌธ์ ์ฌ์ดํธ: https://openkakao.vercel.app/
- ๋น ๋ฅธ ์์: https://openkakao.vercel.app/docs/getting-started/quickstart/
- CLI ๋ ํผ๋ฐ์ค: https://openkakao.vercel.app/docs/cli/overview/
- ์๋ํ ๊ฐ์: https://openkakao.vercel.app/docs/automation/overview/
- LLM / agent ์ํฌํ๋ก: https://openkakao.vercel.app/docs/automation/llm-agent-workflows/
- watch ํจํด: https://openkakao.vercel.app/docs/automation/watch-patterns/
- ํ๋กํ ์ฝ ๋ฌธ์: https://openkakao.vercel.app/docs/protocol/overview/
openkakao-cli profile-hints --local-graph --json
openkakao-cli profile-hints --app-state --json > /tmp/profile-before.json
openkakao-cli profile-hints --app-state --app-state-diff /tmp/profile-before.json --json
Claude Code Skill
npx skills add JungHoonGhae/skills@openkakao-cli
๊ฐ๋ฐ
cd openkakao-cli
cargo build --release
์์ธํ ์ฌ์ฉ๋ฒ, ์ด์ ๋ฉ๋ชจ, ํ๋กํ ์ฝ ์ค๋ช ์ ๋ฌธ์ ์ฌ์ดํธ์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
Support
์ด ํ๋ก์ ํธ๊ฐ ๋์์ด ๋์ จ๋ค๋ฉด ์์ํด ์ฃผ์ธ์:
Contributing
๋ฒ๊ทธ ์ ๋ณด์ PR ํ์ํฉ๋๋ค.
Acknowledgments
- kakaocli (MIT) โ
local-send์ macOS Accessibility API ๊ธฐ๋ฐ ์นดํก UI ์๋ ์กฐ์(์ฑํ ๋ฐฉ ํ ์ ํ, ์ ๋ ฅ์ฐฝ ํ์ยท์ ์ก) ๋ก์ง์ Rust๋ก ์ด์ํ์ต๋๋ค (src/axsend.rs). - Peekaboo (MIT) โ
local-send์์CGEventPostToPid๋ก ์ด๋ฒคํธ๋ฅผ ๋์ ํ๋ก์ธ์ค์ ์ง์ ์ ๋ฌํ๋ ๋ฐฉ์์ ์ฐธ๊ณ ํด, kakaocli๊ฐ ๊ฒช๋ ํฌ๊ทธ๋ผ์ด๋ ํ์ฑํ ํ์ด๋ฐ ๋ ์ด์ค(silver-flight-group/kakaocli#9)๋ฅผ ์ฐํํ์ต๋๋ค.
License
MIT