Skip to main content

AI Text-a-roo

Give any AI agent a phone number, in about two minutes.

AI Text-a-roo is an SMS gateway for AI agents. You verify your phone once; then you can text your agent from any phone (no app), and it can text you back, or first, when something needs you. This repo has everything an agent needs to use it: an Agent Skill, plugin manifests for Claude, Codex, Cursor and Gemini CLI, the aitextaroo command, a Python SDK, and an SMS bridge for CLI agents.

Install in your agent

Agent One step
Claude Code claude plugin install aitextaroo --marketplace rwfresh/aitextaroo-clients, or in a session /plugin marketplace add rwfresh/aitextaroo-clients then /plugin install aitextaroo@aitextaroo
Claude, Claude Desktop, Claude Duet Customize → Plugins → Add marketplace → rwfresh/aitextaroo-clients, or Customize → Connectors → Add custom connector → https://api.aitextaroo.com/mcp
ChatGPT and Dots Plugins → + → Add custom MCP server → https://api.aitextaroo.com/mcp → OAuth
Codex codex plugin marketplace add rwfresh/aitextaroo-clients, then codex plugin add aitextaroo@aitextaroo
Gemini CLI gemini extensions install https://github.com/rwfresh/aitextaroo-clients
Grok Bot Say: "Add a custom MCP server called AI Text-a-roo at https://api.aitextaroo.com/mcp"
Cursor Add the MCP server to ~/.cursor/mcp.json (run aitextaroo connect cursor)
Any skills-aware agent npx skills add rwfresh/aitextaroo-clients
Claude Code, Codex, Hermes, OpenClaw, Grok, Gemini, Antigravity, Goose, Cursor (answer texts from your phone) pipx install aitextaroo, then aitextaroo-bridge

The plugins bundle the skill and the remote MCP server. They sign in with OAuth: you enter your phone number and the 6-digit code we text you, so there's no API key to copy. Setup guides for each agent: https://aitextaroo.com/agents.

Or just tell your agent:

Set me up with AI Text-a-roo so I can text you. Instructions: aitextaroo.com/llms.txt

Quick start from a terminal

pipx install aitextaroo                                      # or: pip install --user aitextaroo
aitextaroo-setup --phone +12125551234                        # texts you a 6-digit code
aitextaroo-setup --phone +12125551234 --code 123456 --save   # saves the key (owner-only)
aitextaroo send "Hello from my agent!"

--save stores the API key in ~/.aitextaroo/credentials.json with owner-only permissions. aitextaroo and aitextaroo-bridge find it there, or in AITEXTAROO_API_KEY, or in --api-key.

The aitextaroo command

Made for agents with a shell. Output is JSON; errors go to stderr with exit code 1. aitextaroo verify-pin exits 2 when the PIN is wrong, so aitextaroo verify-pin <<< 4821 && … only continues on a match. verify-pin and set-pin read the PIN from stdin when it isn't an argument. At a terminal they ask for it without echoing, which keeps it out of your shell history (a command with the PIN written in it, like the <<< form, can still be saved there).

aitextaroo send "Build finished: 318 tests passing."
aitextaroo ask "Deploy to production? Reply YES or NO" --timeout 120   # text, then wait for the answer
aitextaroo wait --timeout 60                                            # wait for the next text
aitextaroo recent                                                       # texts from the last 5 minutes
aitextaroo relay --to +12125550100 --name Mom "Happy birthday!"        # Pro: text a contact
aitextaroo verify-pin                                                   # check a PIN (hidden prompt)
aitextaroo set-pin                                                      # set the user's PIN (4-8 digits)
aitextaroo account
aitextaroo upgrade                                                      # Stripe link for Pro
aitextaroo webhook set https://example.com/hook --auth-header "Bearer <token>"
aitextaroo connect [claude-code|codex|gemini|cursor|muse-code|claude|chatgpt|grok]

SMS bridge

The bridge holds one outbound connection to AI Text-a-roo. Each text you send becomes a prompt for a CLI agent on your machine, and its answer is texted back. No webhook, no public IP: it works behind NAT, firewalls and VPNs.

aitextaroo-bridge                       # auto-detects an installed agent
aitextaroo-bridge --agent codex
aitextaroo-bridge --agent-command "pnpm --silent --dir ~/nanoclaw run chat"   # any other CLI
--agent Runs
claude claude -p "<prompt>"
codex codex exec --skip-git-repo-check --color never -o <file> "<prompt>"
hermes hermes -z "<prompt>"
openclaw openclaw agent exec "<prompt>"
grok grok --no-auto-update -p "<prompt>"
gemini gemini -p "<prompt>"
antigravity agy -p "<prompt>"
goose goose run -q --no-session -t "<prompt>"
cursor cursor-agent -p --trust "<prompt>", or agent if that's all there is (explicit only: Grok Build also installs an agent binary, and the bridge refuses it)

Auto-detect tries them in this order. --agent-command runs any CLI that takes the prompt as its last argument and prints the reply.

Conversation history is saved locally in ~/.aitextaroo/sessions/ and survives restarts. Text /help, /new (fresh conversation) or /status. Use --no-persist for memory-only history. Responses are stripped of markdown for SMS.

aitextaroo-bridge [OPTIONS]
  --api-key KEY          API key (default: AITEXTAROO_API_KEY or the saved credentials)
  --agent NAME           auto, claude, codex, hermes, openclaw, grok, gemini, antigravity, goose, cursor
  --agent-command CMD    Any other CLI agent (overrides --agent)
  --sessions-dir PATH    Session files (default ~/.aitextaroo/sessions/)
  --no-persist           Keep history in memory only
  --base-url URL         Custom API URL
  -v, --verbose          Debug logging

Python SDK

import asyncio
from aitextaroo import TextarooClient

async def main():
    client = TextarooClient(api_key="YOUR_KEY")
    await client.send("All tests pass. Open a PR? Reply YES or NO.")
    reply = await client.wait_for_reply(timeout_seconds=90)
    print(reply.text if reply else "No answer yet")
    await client.close()

asyncio.run(main())
Method What it does
send(text) Text the user. Returns the message ID.
wait_for_reply(timeout_seconds=60) Wait up to 120 s for the user's next text (or one that arrived since your last send). Returns an InboundMessage or None.
recent_messages(after_id=None) Texts from the last five minutes.
listen() Async iterator over inbound texts via SSE, with automatic reconnect and replay.
text_contact(to, text, recipient_name=None) Pro: text someone else; their replies go to the user's phone.
verify_pin(pin) Check a PIN the user texted: {"verified": bool, "attempts_remaining": int | None}.
set_pin(pin) / remove_pin() Set, change or remove the user's security PIN (4–8 digits).
set_webhook(url, auth_header=None) / remove_webhook() Forward inbound texts to a URL (signed with X-Signature).
account() Plan, assigned number, usage and daily limit.
upgrade_link() Stripe checkout link for Pro.
TextarooClient.request_verification(phone) / confirm_verification(phone, code) Sign-up, no key needed.

InboundMessage has id, text, received_at, channel ("sms"), trust_level and has_pin. See examples/ for an echo bot, a listener and an ask-and-wait flow.

MCP server

https://api.aitextaroo.com/mcp (streamable HTTP). Tools: send_text, wait_for_reply, get_recent_messages, text_contact, verify_pin, get_account, get_upgrade_link. Clients sign in with OAuth, or send Authorization: Bearer <API key>:

claude mcp add --transport http --scope user aitextaroo https://api.aitextaroo.com/mcp \
  --header "Authorization: Bearer $AITEXTAROO_API_KEY"

Run aitextaroo connect for every client's exact setup. Reference: https://aitextaroo.com/docs/mcp.

Plans

Free ($0) Pro ($5/mo, 14-day free trial)
Messages per day 10 200
Two-way texting, MCP, skill, SDK, bridge ✓ ✓
Security PIN ✓ ✓
Text your contacts, with replies forwarded ✓

Up to 5 texts per minute. Limits reset at midnight UTC.

Privacy and security

  • Message content is never written to AI Text-a-roo's database. Texts are held in memory for at most five minutes so an agent can catch up after a dropped connection.
  • Phone numbers are encrypted at rest; PINs are stored as bcrypt hashes.
  • The bridge's history and the saved credentials live only on your machine.
  • SMS isn't end-to-end encrypted, and sender IDs can be spoofed. The bridge tells every agent to ask for your PIN before anything sensitive, because some CLIs (for example hermes -z) auto-approve their own tool calls in one-shot mode. Run the bridge with an agent whose permissions you're comfortable exposing to your phone number.

Details: https://aitextaroo.com/security.

Environment variables

Variable Description
AITEXTAROO_API_KEY API key (alternative to --api-key and the saved credentials)
AITEXTAROO_BASE_URL Custom API URL

Releasing

Bump the version in pyproject.toml, aitextaroo/__init__.py, plugin.json, .claude-plugin/plugin.json and gemini-extension.json, merge to main, then push a matching tag: git tag v0.2.2 && git push origin v0.2.2. The Release workflow tests, builds and publishes to PyPI with Trusted Publishing.

License

MIT

Metadata

Release files for aitextaroo 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aitextaroo 0.2.1
File Size Uploaded Provenance
aitextaroo-0.2.1.tar.gz 51.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for aitextaroo 0.2.1
File Interpreter ABI Platform
aitextaroo-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 89.6 kB

Release files / aitextaroo-0.2.1.tar.gz

Download URL aitextaroo-0.2.1.tar.gz
Size 51.7 kB
Tags Source
SHA-256 checksum
How to use checksums
06232b8bc21fefacd4d38adc73c114efb5e7834eb7c7e3744ab306832e84caa1
BLAKE2b-256 checksum
How to use checksums
1c5cee597f47c72bbc09e3ec1952678e633f71bc8f7bef0f37f24dafc63f6623
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Release files / aitextaroo-0.2.1-py3-none-any.whl

Download URL aitextaroo-0.2.1-py3-none-any.whl
Size 37.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bf1b91821394033067c107a3f38ec659dbc5990648924e085c084076572dab9b
BLAKE2b-256 checksum
How to use checksums
0d228ccafde4da12b1f725aedcb696b59a986ea3cf443e6bde2c622f29b035ab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

Security for aitextaroo 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for aitextaroo-0.2.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page