Overview
rousseau sms is a send-only SMS bridge backed by Twilio or Vonage. Inbound SMS requires a public HTTP webhook, which conflicts with rousseau's zero-inbound-surface posture — so rousseau does not accept inbound SMS. Use this transport with rousseau cron or from other code paths that need to text a number.
Source: internal/cli/sms.go. Transport: internal/transport/sms/.
Synopsis
rousseau sms [--provider twilio|vonage] [--from <e164|MG…>] \
[--account-sid AC…] [--auth-token <secret>] [--api-key <key>]
Flags
| Flag | Type | Default | Effect |
|---|---|---|---|
--provider |
string | sms.provider |
twilio or vonage. |
--from |
string | sms.from |
E.164 sending number, or a Twilio Messaging Service SID (MG…). |
--account-sid |
string | sms.account_sid |
Twilio AC… AccountSID. |
--auth-token |
string | sms.auth_token |
Twilio auth token or Vonage API secret. |
--api-key |
string | sms.api_key |
Vonage API key. |
--config |
string | inherits from root | Path to the YAML config file. |
Config keys respected
internal/config/config.go SMSConfig:
| Key | Type | Default | Effect |
|---|---|---|---|
sms.provider |
string | empty | Required. twilio or vonage. |
sms.from |
string | empty | Required. E.164 or MG SID. |
sms.account_sid |
string | empty | Twilio only. |
sms.auth_token |
string | empty | Both providers. |
sms.api_key |
string | empty | Vonage only. |
sms.base_url |
string | empty | Override for regional endpoints or test doubles. |
sms.reply_header |
string | empty | Prefix on outbound messages. |
Environment variables
| Variable | Effect |
|---|---|
ROUSSEAU_SMS_PROVIDER |
Override provider. |
ROUSSEAU_SMS_FROM |
Override from. |
ROUSSEAU_SMS_ACCOUNT_SID |
Override Twilio SID. |
ROUSSEAU_SMS_AUTH_TOKEN |
Override auth token. |
ROUSSEAU_SMS_API_KEY |
Override Vonage API key. |
Startup sequence
- Resolve provider + from; fail if either is empty.
- Default
claudecli.permission_modetobypassPermissions. - Open session store, build agent wiring (no inbound router used).
sms.New— HTTP client.wiring.startCron— cron delivery via REST.- Block on
client.Start(a no-op for send-only; keeps the process alive).
Exit codes
| Code | Meaning |
|---|---|
| 0 | Clean context cancellation. |
| 1 | Missing provider/from, HTTP failure, provider/store error. |
| 130 | SIGINT. |
Worked examples
rousseau sms \
--provider twilio \
--from "+15550001111" \
--account-sid "$TWILIO_SID" \
--auth-token "$TWILIO_TOKEN"
For a Messaging Service, replace --from "+1555…" with --from "MG…".
rousseau sms \
--provider vonage \
--from "RousseauBot" \
--api-key "$VONAGE_KEY" \
--auth-token "$VONAGE_SECRET"
Vonage from can be an alphanumeric sender id in supported regions.
Common failure modes
- Twilio
21606"The 'From' phone number is not a valid message-capable Twilio phone number" — buy a proper SMS-capable number in the console. - Vonage
Non-Whitelisted Destination— free-trial accounts can only send to verified numbers. - Long messages truncated — SMS is 160 GSM-7 characters per segment; both providers concatenate but charge per segment.
- Delivery reports — rousseau does not consume delivery-status webhooks. Monitor them on Twilio/Vonage directly.