From cc-imessage-control
Quick-reference card for cc-imessage-control — what it does, how to install on macOS or Linux, the slash commands, where files live, FAQ. One-shot display, not a persistent mode. Trigger when user asks "/cc-imessage-control help", "what does cc-imessage-control do", "how do I use cc-imessage-control", "claude remote router help".
How this skill is triggered — by the user, by Claude, or both
Slash command
/cc-imessage-control:cc-imessage-control-helpThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Display this reference. One-shot — do NOT change state, write config, or
Display this reference. One-shot — do NOT change state, write config, or persist anything. Plain prose so the card reads as a reference.
Start Claude on your Mac or Linux box from a text.
Text yourself Claude api (or any project name) from your iPhone — a
native iOS/macOS Shortcut catches the keyword and launches
claude --remote-control "<slug>" in a fresh terminal on the target
box. You open the iOS Claude app → Code tab → tap the new session
entry → drive the box from anywhere with cell signal. Claude never
sees a message it wasn't explicitly addressed in — no chat.db
reading.
The Claude iOS app has Remote Control — drive a session on a remote box from your phone. But you still had to physically be at the box to start the session. This bridge removes that step. You can spin up a Claude Code session from the couch, the airport, the trail.
claude plugin marketplace add nathan-hekman/cc-imessage-control
claude plugin install cc-imessage-control@cc-imessage-control
Restart Claude Code. Then run /cc-imessage-control setup to wire it
into Shortcuts (macOS) or systemd (Linux).
Full docs: https://github.com/nathan-hekman/cc-imessage-control
macOS (Tier 1, batteries included): macOS Shortcuts watches your
own iMessage thread for the keyword, runs claude-router.sh directly.
No network exposure, no listener, no secret.
Linux (Tier 2, HTTP over Tailscale): A tiny Python HTTP listener
on the box accepts POST /trigger with a bearer-token header. iPhone
Personal Automation does the same Message → "Get Contents of URL"
shortcut, hitting the listener. Tailscale (or LAN, or a tunnel) keeps
it off the public internet.
| Command | What |
|---|---|
/cc-imessage-control setup | Interactive setup wizard. Detects platform, writes config, walks through the trigger surface, runs a self-test. |
/cc-imessage-control status | Shows config, project list, last 5 log lines. Phone number / secret masked. |
/cc-imessage-control test | Runs the router locally with a test phrase (Claude) to verify wiring without spawning a session. |
/cc-imessage-control tail | Last 20 lines of router.log. |
/cc-imessage-control help | This card. |
~/.claude/plugins/cache/cc-imessage-control/cc-imessage-control/<commit>/~/.claude/.cc-remote-env (survives plugin updates;
legacy ~/.claude/.cc-imessage-env still read for backwards compat)~/.claude/.cc-remote-logs/router.log~/.config/systemd/user/cc-imessage-control.servicebin/claude-router.sh is the entry point on both
platforms. bin/cc_imessage_listen.py is the Linux HTTP receiver.Tailscale / same Wi-Fi? macOS: no — iMessage uses Apple's push network. Linux: yes — the iPhone needs to be able to reach the listener URL. Tailscale is the easiest answer; LAN works if you're home; a tunnel works if you want public access.
Does this give Claude access to my whole iMessage history? No.
macOS: the Shortcuts filter (Sender = you + Message contains "claude") gates triggering. Linux: the listener only receives the
specific message body the iPhone Shortcut posts. No chat.db
reading anywhere.
Can someone else text my Mac/Linux box "claude" and run code?
macOS: no — Shortcuts filters on your contact card. Linux: no —
the listener requires a Bearer <secret> header, and you should
bind it to Tailscale or localhost.
What does it cost per trigger? One Claude Haiku 4.5 call (~few hundred tokens). Well under $0.001 per text. The session itself uses your normal Claude Code plan.
bash "${CLAUDE_PLUGIN_ROOT}/bin/imessage_send.sh" "test" manually. macOS will prompt for Messages automation permission the first time.~/.claude/.cc-remote-logs/router.log. Most common: claude: command not found because Shortcuts runs without .zshrc. Edit the export PATH=... line in claude-router.sh.systemctl --user status cc-imessage-control.service and journalctl --user -u cc-imessage-control.service -n 50. Most common: CC_REMOTE_SECRET unset, or the ExecStart= path still references HEAD instead of the real install commit dir.CC_REMOTE_SECRET in the config file. Copy fresh.infer_project.sh returns NONE every time → run claude setup-token to mint a headless OAuth token.Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.
Guides Payload CMS config (payload.config.ts), collections, fields, hooks, access control, APIs. Debugs validation errors, security, relationships, queries, transactions, hook behavior.
Implements vector databases with Pinecone, Weaviate, Qdrant, Milvus, pgvector for semantic search, RAG, recommendations, and similarity systems. Optimizes embeddings, indexing, and hybrid search.
npx claudepluginhub nathan-hekman/cc-imessage-control --plugin cc-imessage-control