Skip to content

v0.2.0 — automatic push mode

Choose a tag to compare

@lostmygithubaccount lostmygithubaccount released this 18 Apr 02:34
· 4 commits to main since this release
0abc48a

Highlights

Inbound iMessages now auto-inject into your LLM session. Install the MCP server, register it with Claude Code or the codex fork, and texts from allowlisted handles land in the session as channel events — no list_messages poll loop, no bridge, no tmux watcher.

What changed

  • New watch mode, ON by default. The MCP server tails ~/Library/Messages/chat.db in the background and emits a notifications/claude/channel JSON-RPC notification for every new allowlisted inbound iMessage. Claude Code and the codex fork both consume this method.
  • Codex filesystem channel support. If CODEX_CHANNEL_DIR is set, the same event is also written as a JSON envelope under <dir>/inbox/<name>.json in the fork's expected shape (hardlink-atomic, kind = "brief", spec filename).
  • --watch / --no-watch CLI flags. DKDC_IO_WATCH=0 disables. DKDC_IO_WATCH_INTERVAL_MS tunes the poll cadence (default 750 ms, min 100 ms).
  • End-to-end integration tests at crates/imessage-mcp/tests/watch_push.rs exercise both emission paths and the allowlist gate.
  • Repo renamed from dkdc-io/imessage-mcp to dkdc-io/imessage. Crate and binary names stay dkdc-io-imessage.

Full details: CHANGELOG.md.

Install

cargo install dkdc-io-imessage

Then grant Full Disk Access, populate ~/.config/dkdc-io/imessage/access.toml, and point your LLM CLI at dkdc-io-imessage --stdio. Full setup in the crate README.

Security

Allowlist is the only access surface. Non-allowlisted senders are never pushed. Groups and SMS are dropped for now — only service = 'iMessage' and chat.style = 45 (DM) rows flow through. Empty allowlist still fails closed.