twilio-setup
The Twilio-setup Claude Code skill guides users through configuring Twilio credentials and phone numbers for voice calls by checking current configuration, securely storing authentication tokens, and verifying setup completion. Use this when implementing voice call functionality in a Vellum assistant to establish the necessary Twilio account connections and phone number settings.
git clone --depth 1 https://github.com/vellum-ai/vellum-assistant /tmp/twilio-setup && cp -r /tmp/twilio-setup/skills/twilio-setup ~/.claude/skills/twilio-setupSKILL.md
You are helping your user configure Twilio for voice calls. Walk through each step below. ## Value Classification Before you begin, understand how each Twilio value is stored: | Value | Type | Storage method | Secret? | | ------------ | ---------- | --------------------------------------------------------------- | ------- | | Account SID | Config | `assistant config set twilio.accountSid` | No | | Auth Token | Credential | `assistant credentials set --service twilio --field auth_token` | **Yes** | | Phone Number | Config | `assistant config set twilio.phoneNumber` | No | - **Config values** (Account SID, Phone Number) are non-sensitive identifiers. Collect them via normal conversation -- the user can paste them in chat or you can use `AskUserQuestion`. **Auth Token** is a secret. Collect it securely via `credential_store` prompt -- never accept it pasted in plaintext chat. ## Retrieving Twilio Credentials Many steps below require the Account SID and Auth Token. Retrieve them with: ```bash TWILIO_SID=$(assistant config get twilio.accountSid) TWILIO_TOKEN=$(assistant credentials reveal --service twilio --field auth_token) ``` # Checking Current Configuration You can determine whether Twilio has been fully set up by checking to see that all the following config and credential values have been set: ```bash assistant config get twilio.accountSid assistant credentials inspect --service twilio --field auth_token --json # check "hasSecret" field assistant config get twilio.phoneNumber ``` - If all three config values are non-empty -- Twilio is fully configured. Offer to show status or reconfigure. - Otherwise, continue to the missing steps. # Twilio Setup Steps Follow the steps below in order to fully configure Twilio in preparation to make phone calls. ## Step 1: Check Current Configuration Mark setup as started before doing any read-only checks. This lets a managed gateway begin opening the Velay tunnel WebSocket immediately, so the public Twilio HTTP and WebSocket routes are warming up while the user finishes entering credentials and selecting a phone number: ```bash assistant config set twilio.setupStarted true assistant platform status --json ``` If `assistant platform status --json` reports an available platform assistant but `velayTunnel.connected` is `false`, continue with setup and check status again before configuring webhooks. Do not treat this as an ngrok setup problem unless the assistant is local/self-hosted without Velay. Refer to "Checking Current Configuration" above to see the current state of the user's Twilio setup. If Twilio appears to be fully configured. Offer to show status or reconfigure. Otherwise, continue to the missing steps below. ## Step 2: Collect and Store Credentials Tell the user: **"You'll need a Twilio account. Sign up at https://www.twilio.com/try-twilio -- it's free to start and includes trial credit."** They need two values from the Twilio Console dashboard (https://console.twilio.com): - **Account SID** -- visible on the dashboard, starts with `AC` (this is not a secret value and can be collected conversationally) - **Auth Token** -- click "Show" to reveal (this is a secret value and should be collected securely) ### Collect Account SID Ask the user for their Account SID. This is NOT a secret value, so the user should be encouraged to comfortable paste it into the chat directly. Once they have, store it as a config value: ```bash assistant config set twilio.accountSid "<Account SID from user>" ``` ### Collect Auth Token Ask the user for their Auth Token. This IS a secret value, so the user should be prompted to enter the value securely. Do NOT ask them to provide it in the chat. Once they have, store it as a credential: - Call `credential_store` with `action: "prompt"`, `service: "twilio"`, `field: "auth_token"`, `label: "Twilio Auth Token"`, `description: "Enter your Auth Token from the Twilio Console dashboard (click 'Show' to reveal it)"`, `placeholder: "your_auth_token"`. Confirm it has been stored successfully: ```bash assistant credentials inspect --service twilio --field auth_token ``` If credentials are invalid, Twilio API calls in Step 3 will fail -- ask the user to re-enter. ## Step 3: Get a Phone Number The assistant needs a phone number for voice calls. Three options: ### Option A: Use an Existing Number You should assume this option if the user had just created their Twilio account. Trial accounts come with one free number. Retrieve credentials, then list numbers on the account: ```bash curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \ "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json" ``` Present the `incoming_phone_numbers` array. Let the user choose. ### Option B: Provision a New Number Retrieve credentials (see "Retrieving Twilio Credentials" above), then: **Search for available numbers:** ```bash curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" \ "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/AvailablePhoneNumbers/US/Local.json?VoiceEnabled=true&AreaCode=415" ``` - `AreaCode` is optional -- ask the user if they have a preference - Replace `US` with another country code if needed Present the first few results from the `available_phone_numbers` array (show `phone_number` and `friendly_name`). **Purchase the chosen number:** ```bash curl -s -u "$TWILIO_SID:$TWILIO_TOKEN" -X POST \ "https://api.twilio.com/2010-04-01/Accounts/$TWILIO_SID/IncomingPhoneNumbers.json" \ -d "PhoneNumber=+14155551234" ``` Note the `sid` field (starts with `PN`) from the response -- needed for webhook setup in Step 4. ### Option C: Manual Entry If the user already has a number and knows it, skip the API calls. They can paste it directly in chat. ### Save the phone number After choosing a number via any option, store it as a config value: ```bash assistant
>
>
>
>
Check Vellum Assistant architecture and package boundaries. Use when editing imports, moving code, adding endpoints, touching assistant/gateway/client/skill boundaries, or reviewing architecture-sensitive changes.
Review Vellum Assistant code changes for correctness, repo-specific quality rules, security risks, and missing validation. Use when reviewing diffs, preparing a PR, finishing implementation work, or when the user asks for a code review, quality pass, or pre-merge check in this repository.
Guide Vellum Assistant feature flag changes and rollout hygiene. Use when adding, editing, reviewing, or documenting assistant feature flags, rollout-gated behavior, or platform flag follow-up work.
Validate Vellum Assistant database and workspace migrations. Use when adding, editing, reviewing, or testing migrations, release-note migrations, persisted schemas, workspace file formats, or data backfills.