Help us improve
Share bugs, ideas, or general feedback.
From antigravity-awesome-skills
Lets you text, voice-note, or image-prompt Claude Code from your phone via iMessages, using the njerschow/textme daemon and Sendblue bridge. Activates on requests like "text Claude" or "drive Claude from my phone."
npx claudepluginhub sickn33/antigravity-awesome-skills --plugin antigravity-bundle-aas-web-app-builderHow this skill is triggered — by the user, by Claude, or both
Slash command
/antigravity-awesome-skills:textmeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
[`njerschow/textme`](https://github.com/njerschow/textme) is a local daemon that bridges inbound iMessages (via [Sendblue](https://sendblue.com)) to a Claude Code session on the user's machine. Whitelisted phone numbers can text, send voice notes, send images, and drive Claude through filesystem operations, code execution, and `cd`-based directory navigation — turning the user's phone into a re...
Sends iMessages for real-time user input and status notifications during Claude Code sessions. Use ask_user to wait for responses on decisions or clarifications; notify_user for non-blocking updates.
Claude Channels(텔레그램/디스코드) 자동 셋업. 폰에서 메시지로 Claude Code에 작업 지시 가능. --auto 플래그와 FORGE_OUTPUT=json 프로토콜 공유.
Guides setup of messaging channels (WhatsApp, Telegram, Discord, iMessage, Slack) for external access to Claude Code agents via plugin installs. Shows exact commands, prerequisites, and relaunch steps.
Share bugs, ideas, or general feedback.
njerschow/textme is a local daemon that bridges inbound iMessages (via Sendblue) to a Claude Code session on the user's machine. Whitelisted phone numbers can text, send voice notes, send images, and drive Claude through filesystem operations, code execution, and cd-based directory navigation — turning the user's phone into a remote control for Claude on their laptop. This is the inbound counterpart to outbound notification patterns ([[sendblue-notify]]): textme is phone → Claude; sendblue-notify is Claude → phone.
sendblue setup, then sendblue show-keys to surface API key/secret).npm install -g @anthropic-ai/claude-code).git clone https://github.com/njerschow/textme.git
cd textme/daemon
npm install
npm run build
mkdir -p ~/.config/claude-imessage
Create ~/.config/claude-imessage/config.json:
{
"sendblue": {
"apiKey": "YOUR_SENDBLUE_API_KEY",
"apiSecret": "YOUR_SENDBLUE_API_SECRET",
"phoneNumber": "+1SENDBLUE_NUMBER"
},
"whitelist": ["+1YOUR_PHONE"],
"pollIntervalMs": 5000,
"conversationWindowSize": 20
}
The whitelist is the only authorization gate between an inbound iMessage and code execution on the host. Treat it as a security boundary, not a UX preference. Add only phone numbers the user controls; never add a shared, work, or family number "just in case".
For voice transcription, optionally add to .env in the daemon directory:
OPENAI_API_KEY=sk-...
For a quick test run:
cd textme/daemon
npm start
For persistent operation (recommended once the user has verified behavior):
pm2 start dist/index.js --name textme
pm2 save
pm2 startup
Or, on macOS, install the launchd service:
./scripts/install-launchd.sh
Once the daemon is running, an iMessage from a whitelisted number to the Sendblue phone number reaches Claude. Built-in commands:
| Command | Effect |
|---|---|
? | List available commands |
status | Show current daemon status and working directory |
queue | Show messages queued for processing |
history | Recent message history |
home | cd back to home directory |
reset | Return home and clear conversation history |
cd /path | Change working directory |
stop | Cancel the current Claude task |
yes / no | Approve or reject the pending action |
Anything else is treated as a Claude prompt and routed to the active session.
Before using textme in unattended workflows, the user must:
status from the whitelisted phone — should get a directory + state reply.pwd, ls) and confirm output arrives.If any of these fail, do not enable launchd / pm2 auto-start.
# 1. Make sure sendblue CLI is set up and creds work
sendblue whoami
# 2. Grab Sendblue API key & secret (these are NOT the CLI's bearer token)
sendblue show-keys
# 3. Clone + build the daemon
git clone https://github.com/njerschow/textme.git
cd textme/daemon && npm install && npm run build
# 4. Fill in ~/.config/claude-imessage/config.json with the values from step 2
# and YOUR personal phone number as the only whitelist entry
# 5. Start, send "?" from your phone, confirm response
npm start
sendblue-notifyWire outbound completion pings via [[sendblue-notify]] and inbound control via textme — they share the same Sendblue account but solve opposite problems:
Stop hook).# pm2
pm2 logs textme
# Standalone
tail -f ~/.local/log/claude-imessage.log
If the user wants Sendblue messaging available to Claude Code as tools but does not want a polling daemon listening for inbound commands, they can register Sendblue as an MCP server instead:
claude mcp add sendblue_api \
--env SENDBLUE_API_API_KEY=your-api-key \
--env SENDBLUE_API_API_SECRET=your-api-secret \
-- npx -y sendblue-api-mcp --client=claude-code --tools=all
This gives Claude outbound Sendblue tools inside a session but does not open the inbound phone-controls-Claude channel that textme provides. Pick textme when "text Claude from anywhere" is the goal; pick MCP when Claude only needs to send.
sudo.cd ~/textme-sandbox), not in ~ or a real repo.pollIntervalMs ≥ 5000 unless the user understands the Sendblue rate limits and cost implications.config.json in a repo, dotfiles backup, or cloud sync — it contains API credentials and the user's phone number.textme is a remote code execution surface gated only by a phone-number whitelist. Treat it accordingly.
config.json contains an API key, API secret, and the user's phone number. Mode it 600, keep it out of dotfile repos, and never paste it into shared logs, gists, or screenshots.yes/no reply path for those prompts, which means the phone number is making the approval. Make sure the whitelist matches the trust level of approving destructive operations remotely.eval, shell substitution, or scripts that bypass Claude Code's review.whitelist whenever the host changes hands or scope.apiKey / apiSecret confusion. Sendblue's API credentials (from sendblue show-keys) are distinct from the CLI's local bearer token in ~/.sendblue/credentials.json. textme needs the API credentials, not the CLI auth file.sendblue contacts before relying on the loop.pm2 save-ing the daemon before testing the non-whitelist ignore path will baseline a potentially open daemon at boot. Verify first, persist second.~ or a repo with secrets. The working directory at startup is exposed to anything textme is told to do (ls, cat, etc.). Start in a sandbox directory and cd deliberately.@sendblue-notify — Outbound counterpart (Claude → phone). Composes with textme to make the loop bidirectional.@sendblue-cli — Account setup, credential management, and the show-keys command that surfaces the API key/secret textme needs.@sendblue-api — HTTP API reference for users who want to build a custom inbound handler instead of using textme's daemon.@update-config — If wiring textme alongside Claude Code hooks (e.g. a Stop hook that pings the user), use this for the settings.json edits.