TextMe — Claude via iMessage
Text Claude from your phone over iMessage: send messages, voice notes, or images to steer tasks, approve actions, and get status updates anywhere.
Whitelist restricts send/receive targets; data flows (Sendblue relay, optional OpenAI transcription) are disclosed; MIT license and author attribution present. Deducted: core path depends entirely on third-party Sendblue with credentials transiting an external cloud; secondary tools (send_message, get_conversation, clear_history) lack confirmation/rollback guidance; unverified publisher leaves attribution only basic.
SKILL.md is self-consistent on ask_user/notify_user parameters, timeouts and polling, with check_messages as timeout fallback. Deducted: daemon.test.ts is almost entirely placeholder assertions (expect(true).toBe(true)) and TODOs; key paths (message flow, approval, queue) have no real tests; failure feedback on abnormal input is described but unverified.
Scenarios, invocation guidance (when to use ask_user vs notify_user, when not to) and whitelist boundaries are clearly stated. Deducted: full dependence on Sendblue (a US service) with no statement on mainland-China reachability or Chinese-language support; environment-fit evidence thin.
SKILL.md is well layered (usage → tools → examples → practices → mechanism); README covers install, config, logs and uninstall; MIT license and author explicit. Deducted: no skill-level versioning or changelog; suspicious root dependency "24": "^0.0.0" questions maintenance quality; publisher unverified, update path unclear.
Core value (instructing Claude remotely via iMessage) is concretely described with directly usable workflow examples. Deducted: static review cannot verify output usability; setup requires a Sendblue account, a persistent daemon and multiple config steps (high cost); marginal value over the documented Sendblue MCP alternative is weakly argued.
Primary materials exist (test files, architecture notes). Deducted: the main test file is largely unimplemented placeholder cases, so coverage and reproducibility are thin; no third-party execution evidence and no cross-source corroboration, so capability claims remain author assertions.
- Message content and credentials transit the third-party Sendblue service; sensitive data leaves the local machine — assess exfiltration risk.
- Test code is almost entirely placeholder cases; reliability claims are largely unverified author assertions.
- Core function depends on Sendblue, a US-based service; mainland-China reachability is undeclared and may be limited.
- Destructive or outbound tools (clear_history, send_message) lack confirmation and rollback guidance.
- Publisher is unverified and the root package. contains an anomalous "24" dependency; maintenance status should be confirmed independently.
What does this skill do, and when should you use it?
TextMe lets you converse with Claude from your phone using iMessage instead of sitting at a terminal. It ships in two forms: a persistent daemon paired with Claude Code, and a Sendblue MCP server you can add directly to Claude Code. Voice memos are transcribed automatically via OpenAI Whisper, photos can be analyzed by Claude, and Claude can send files back to you. All traffic runs through the Sendblue service and is restricted to whitelisted phone numbers, making it a good fit for long-running tasks where Claude should check in with you mid-work.
Sends and receives iMessages through the Sendblue API: the daemon polls for new messages every 5 seconds, queues them in order, and feeds text, voice notes (Whisper transcription), and images to Claude Code. The skill itself defines ask_user (send a message and block waiting for a reply, default timeout 5 minutes), notify_user (fire-and-forget status updates), plus secondary tools: check_messages, send_message, get_conversation, mark_read, list_contacts, and clear_history. Conversation history is kept for context, only whitelisted numbers can exchange messages, and crash alerts plus a Stop hook decide whether Claude should proactively reach out.
- A developer running long coding tasks who wants Claude to text them after finishing a module and ask what's next (API endpoints or tests)
- A user kicking off builds or migrations who wants status updates via notify_user without blocking on a reply
- Someone away from their desk sending voice memos as instructions, with transcription handled automatically
- A developer who needs to approve or reject Claude's proposed actions (yes/no) while on the go
- An ops-minded user who wants a phone alert if the daemon crashes during a long-running task
What are this skill's strengths and limitations?
- Offers both interactive (ask_user) and one-way (notify_user) modes so you choose when to block
- Accepts text, voice (auto-transcribed), and images, and can send files back
- Whitelist-only messaging provides a basic security boundary
- Includes a queue system, crash alerts, and PM2/launchd scripts for long-lived deployment
- A daemon-free alternative (Sendblue MCP) works inside Claude Code sessions
- Hard dependency on the third-party Sendblue service — account signup, an assigned number, potential cost, and its availability
- ask_user blocks up to 5 minutes by default, stalling the task when you're unavailable
- Not suited to simple yes/no questions, and cannot message non-whitelisted numbers
- No test suite is declared, and platforms beyond the Apple/iMessage ecosystem are not verified in the source
- Voice transcription requires a separate OpenAI API key — another external dependency and cost
How do you install this skill?
Requires Node.js 18+, the Sendblue CLI, and Claude Code:
brew install node && npm install -g @sendblue/cli && npm install -g @anthropic-ai/claude-code- Run
sendblue setupto create an account and get a number;sendblue show-keysprints your API Key, Secret, and phone number git clone https://github.com/njerschow/textme.git && cd textme/daemon && npm install && npm run build- Write
~/.config/claude-imessage/config.with your Sendblue credentials and whitelisted personal numbers - (Optional) add
OPENAI_API_KEYintextme/daemon/.envfor voice transcription npm startto run the daemon, or deploy with PM2:pm2 start dist/index.js --name textme
Alternatively, skip the daemon and add the Sendblue MCP server to Claude Code: claude mcp add sendblue_api --env SENDBLUE_API_API_KEY=... --env SENDBLUE_API_API_SECRET=... -- npx -y sendblue-api-mcp --client=claude-code --tools=all. The SKILL.md lives at skills/imessage/SKILL.md in the repo; steps for installing into other Agent Skills clients are not documented in the source.
How do you use this skill?
In daemon mode, text your Sendblue number from your phone to start a conversation; send ? for commands like status, history, cd /path, stop, and yes/no. In a Claude Code session, instruct Claude to use ask_user when it needs your input, e.g. "After finishing the auth module, use ask_user to ask whether I want API endpoints or tests next." Use notify_user for updates that need no reply. If you don't respond within the timeout, pick up the reply later with check_messages.
How does this skill compare with similar options?
The source references the call-me skill (voice-call interaction) as a model: ask_user in TextMe plays the role of initiate_call in call-me, but over text messages instead of voice. If you only need iMessage from within a Claude Code terminal session, the Sendblue MCP server in the README is a lighter alternative to running the full daemon.