@vellumai/assistant 0.4.37 → 0.4.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/ARCHITECTURE.md +3 -3
  2. package/README.md +13 -13
  3. package/bun.lock +80 -24
  4. package/docs/architecture/integrations.md +126 -128
  5. package/docs/runbook-trusted-contacts.md +1 -1
  6. package/docs/trusted-contact-access.md +12 -12
  7. package/package.json +3 -1
  8. package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -14
  9. package/src/__tests__/app-bundler.test.ts +209 -0
  10. package/src/__tests__/app-compiler.test.ts +279 -0
  11. package/src/__tests__/app-executors.test.ts +293 -483
  12. package/src/__tests__/app-migration.test.ts +148 -0
  13. package/src/__tests__/app-routes-csp.test.ts +202 -0
  14. package/src/__tests__/avatar-e2e.test.ts +452 -0
  15. package/src/__tests__/avatar-generator.test.ts +193 -0
  16. package/src/__tests__/avatar-router.test.ts +186 -0
  17. package/src/__tests__/browser-download-timeout.test.ts +28 -0
  18. package/src/__tests__/bundled-skill-retrieval-guard.test.ts +9 -9
  19. package/src/__tests__/call-domain.test.ts +3 -7
  20. package/src/__tests__/credential-security-e2e.test.ts +19 -12
  21. package/src/__tests__/credentials-cli.test.ts +30 -4
  22. package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +1 -1
  23. package/src/__tests__/handlers-slack-config.test.ts +0 -72
  24. package/src/__tests__/handlers-telegram-config.test.ts +19 -12
  25. package/src/__tests__/handlers-twitter-config.test.ts +105 -48
  26. package/src/__tests__/inbound-invite-redemption.test.ts +4 -4
  27. package/src/__tests__/integration-status.test.ts +15 -5
  28. package/src/__tests__/integrations-cli.test.ts +1 -1
  29. package/src/__tests__/invite-redemption-service.test.ts +62 -7
  30. package/src/__tests__/ipc-snapshot.test.ts +0 -8
  31. package/src/__tests__/managed-avatar-client.test.ts +280 -0
  32. package/src/__tests__/mcp-cli.test.ts +3 -3
  33. package/src/__tests__/oauth-cli.test.ts +203 -0
  34. package/src/__tests__/relay-server.test.ts +3 -3
  35. package/src/__tests__/secret-onetime-send.test.ts +19 -12
  36. package/src/__tests__/secure-keys.test.ts +78 -0
  37. package/src/__tests__/session-messaging-secret-redirect.test.ts +3 -0
  38. package/src/__tests__/slack-channel-config.test.ts +23 -16
  39. package/src/__tests__/slack-share-routes.test.ts +263 -0
  40. package/src/__tests__/sms-messaging-provider.test.ts +3 -1
  41. package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +7 -7
  42. package/src/__tests__/trusted-contact-multichannel.test.ts +3 -3
  43. package/src/__tests__/trusted-contact-verification.test.ts +10 -10
  44. package/src/__tests__/twilio-config.test.ts +15 -36
  45. package/src/__tests__/twilio-provider.test.ts +4 -0
  46. package/src/__tests__/twitter-auth-handler.test.ts +27 -14
  47. package/src/__tests__/twitter-cli-error-shaping.test.ts +1 -1
  48. package/src/__tests__/twitter-cli-routing.test.ts +38 -53
  49. package/src/__tests__/twitter-oauth-client.test.ts +18 -47
  50. package/src/__tests__/voice-invite-redemption.test.ts +27 -3
  51. package/src/amazon/cart.ts +1 -1
  52. package/src/amazon/client.ts +89 -7
  53. package/src/approvals/guardian-request-resolvers.ts +2 -2
  54. package/src/bundler/app-bundler.ts +77 -32
  55. package/src/bundler/app-compiler.ts +195 -0
  56. package/src/bundler/manifest.ts +1 -1
  57. package/src/bundler/package-resolver.ts +185 -0
  58. package/src/calls/call-domain.ts +4 -14
  59. package/src/calls/relay-server.ts +2 -2
  60. package/src/calls/twilio-config.ts +5 -24
  61. package/src/calls/twilio-rest.ts +19 -5
  62. package/src/cli/amazon.ts +74 -249
  63. package/src/cli/audit.ts +2 -2
  64. package/src/cli/autonomy.ts +9 -9
  65. package/src/cli/channels.ts +5 -5
  66. package/src/cli/completions.ts +27 -27
  67. package/src/cli/config.ts +14 -14
  68. package/src/cli/contacts.ts +27 -27
  69. package/src/cli/credentials.ts +28 -28
  70. package/src/cli/dev.ts +2 -2
  71. package/src/cli/doctor.ts +2 -2
  72. package/src/cli/email.ts +82 -82
  73. package/src/cli/influencer.ts +13 -13
  74. package/src/cli/integrations.ts +19 -144
  75. package/src/cli/keys.ts +10 -10
  76. package/src/cli/map.ts +4 -4
  77. package/src/cli/mcp.ts +17 -17
  78. package/src/cli/memory.ts +18 -18
  79. package/src/cli/notifications.ts +13 -13
  80. package/src/cli/oauth.ts +77 -0
  81. package/src/cli/program.ts +2 -0
  82. package/src/cli/sequence.ts +27 -27
  83. package/src/cli/sessions.ts +12 -12
  84. package/src/cli/trust.ts +8 -8
  85. package/src/cli/twitter.ts +124 -70
  86. package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
  87. package/src/config/bundled-skills/agentmail/SKILL.md +34 -34
  88. package/src/config/bundled-skills/amazon/SKILL.md +54 -54
  89. package/src/config/bundled-skills/app-builder/SKILL.md +137 -3
  90. package/src/config/bundled-skills/app-builder/tools/app-create.ts +10 -4
  91. package/src/config/bundled-skills/configure-settings/SKILL.md +18 -18
  92. package/src/config/bundled-skills/contacts/SKILL.md +12 -12
  93. package/src/config/bundled-skills/doordash/lib/client.ts +7 -9
  94. package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
  95. package/src/config/bundled-skills/frontend-design/icon.svg +16 -0
  96. package/src/config/bundled-skills/google-oauth-setup/SKILL.md +143 -162
  97. package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +4 -4
  98. package/src/config/bundled-skills/influencer/SKILL.md +13 -13
  99. package/src/config/bundled-skills/mcp-setup/SKILL.md +11 -11
  100. package/src/config/bundled-skills/phone-calls/SKILL.md +48 -54
  101. package/src/config/bundled-skills/public-ingress/SKILL.md +6 -6
  102. package/src/config/bundled-skills/slack-app-setup/SKILL.md +1 -1
  103. package/src/config/bundled-skills/sms-setup/SKILL.md +3 -3
  104. package/src/config/bundled-skills/telegram-setup/SKILL.md +2 -2
  105. package/src/config/bundled-skills/twilio-setup/SKILL.md +136 -225
  106. package/src/config/bundled-skills/twitter/SKILL.md +68 -44
  107. package/src/config/bundled-skills/voice-setup/SKILL.md +2 -2
  108. package/src/config/core-schema.ts +26 -0
  109. package/src/config/env.ts +4 -0
  110. package/src/config/feature-flag-registry.json +9 -1
  111. package/src/config/schema.ts +8 -0
  112. package/src/config/system-prompt.ts +6 -3
  113. package/src/config/templates/BOOTSTRAP.md +7 -5
  114. package/src/contacts/contacts-write.ts +5 -1
  115. package/src/daemon/handlers/apps.ts +31 -4
  116. package/src/daemon/handlers/config-ingress.ts +3 -3
  117. package/src/daemon/handlers/config-integrations.ts +120 -49
  118. package/src/daemon/handlers/config-slack-channel.ts +26 -7
  119. package/src/daemon/handlers/config-slack.ts +1 -54
  120. package/src/daemon/handlers/config-telegram.ts +28 -10
  121. package/src/daemon/handlers/config.ts +1 -4
  122. package/src/daemon/handlers/twitter-auth.ts +11 -4
  123. package/src/daemon/ipc-contract/apps.ts +0 -13
  124. package/src/daemon/ipc-contract-inventory.json +0 -2
  125. package/src/daemon/lifecycle.ts +8 -1
  126. package/src/daemon/session-messaging.ts +2 -2
  127. package/src/daemon/tool-side-effects.ts +30 -0
  128. package/src/email/providers/agentmail.ts +1 -1
  129. package/src/email/providers/index.ts +1 -1
  130. package/src/email/service.ts +1 -1
  131. package/src/gallery/default-gallery.ts +538 -0
  132. package/src/gallery/gallery-manifest.ts +5 -1
  133. package/src/influencer/client.ts +8 -6
  134. package/src/mcp/client.ts +1 -1
  135. package/src/media/avatar-router.ts +99 -0
  136. package/src/media/avatar-types.ts +60 -0
  137. package/src/media/managed-avatar-client.ts +189 -0
  138. package/src/memory/app-migration.ts +114 -0
  139. package/src/memory/app-store.ts +11 -0
  140. package/src/memory/qdrant-client.ts +1 -1
  141. package/src/messaging/providers/slack/client.ts +12 -2
  142. package/src/messaging/providers/sms/adapter.ts +6 -10
  143. package/src/migrations/data-layout.ts +8 -1
  144. package/src/oauth/token-persistence.ts +9 -6
  145. package/src/runtime/assistant-scope.ts +5 -0
  146. package/src/runtime/auth/route-policy.ts +4 -0
  147. package/src/runtime/channel-readiness-service.ts +9 -4
  148. package/src/runtime/gateway-internal-client.ts +11 -3
  149. package/src/runtime/http-server.ts +2 -0
  150. package/src/runtime/invite-redemption-service.ts +23 -13
  151. package/src/runtime/middleware/twilio-validation.ts +2 -2
  152. package/src/runtime/routes/app-routes.ts +131 -3
  153. package/src/runtime/routes/inbound-stages/verification-intercept.ts +3 -3
  154. package/src/runtime/routes/integration-routes.ts +2 -2
  155. package/src/runtime/routes/slack-share-routes.ts +235 -0
  156. package/src/runtime/routes/twilio-routes.ts +47 -34
  157. package/src/schedule/integration-status.ts +2 -3
  158. package/src/security/token-manager.ts +11 -3
  159. package/src/tools/apps/executors.ts +116 -8
  160. package/src/tools/browser/browser-manager.ts +30 -2
  161. package/src/tools/browser/chrome-cdp.ts +31 -3
  162. package/src/tools/credentials/vault.ts +9 -7
  163. package/src/tools/executor.ts +4 -0
  164. package/src/tools/system/avatar-generator.ts +55 -34
  165. package/src/twitter/client.ts +1 -1
  166. package/src/twitter/oauth-client.ts +31 -43
  167. package/src/twitter/router.ts +25 -23
  168. package/src/util/platform.ts +5 -0
  169. package/src/slack/slack-webhook.ts +0 -66
@@ -9,12 +9,12 @@ Help users configure MCP servers so external tools (e.g. Linear, GitHub, Notion)
9
9
 
10
10
  ## CLI Commands
11
11
 
12
- All commands use `vellum mcp`. Run them via `host_bash`.
12
+ All commands use `assistant mcp`. Run them via `host_bash`.
13
13
 
14
14
  ### List servers
15
15
 
16
16
  ```
17
- vellum mcp list
17
+ assistant mcp list
18
18
  ```
19
19
 
20
20
  Shows all configured servers with connection status, transport type, and URL.
@@ -22,7 +22,7 @@ Shows all configured servers with connection status, transport type, and URL.
22
22
  ### Add a server
23
23
 
24
24
  ```
25
- vellum mcp add <name> -t <transport-type> -u <url> [-r <risk>] [--disabled]
25
+ assistant mcp add <name> -t <transport-type> -u <url> [-r <risk>] [--disabled]
26
26
  ```
27
27
 
28
28
  - `<name>` — unique identifier (e.g. `linear`, `github`)
@@ -34,36 +34,36 @@ vellum mcp add <name> -t <transport-type> -u <url> [-r <risk>] [--disabled]
34
34
  Examples:
35
35
 
36
36
  ```
37
- vellum mcp add linear -t streamable-http -u https://mcp.linear.app/mcp
38
- vellum mcp add context7 -t streamable-http -u https://mcp.context7.com/mcp -r low
39
- vellum mcp add local-db -t stdio -c npx -a -y @my/mcp-server
37
+ assistant mcp add linear -t streamable-http -u https://mcp.linear.app/mcp
38
+ assistant mcp add context7 -t streamable-http -u https://mcp.context7.com/mcp -r low
39
+ assistant mcp add local-db -t stdio -c npx -a -y @my/mcp-server
40
40
  ```
41
41
 
42
42
  ### Authenticate (OAuth)
43
43
 
44
44
  ```
45
- vellum mcp auth <name>
45
+ assistant mcp auth <name>
46
46
  ```
47
47
 
48
48
  Opens the user's browser for OAuth authorization. Only works for `sse`/`streamable-http` servers that require authentication. After the user completes login in the browser, tokens are saved automatically.
49
49
 
50
50
  Use this when:
51
51
 
52
- - A server shows `! Needs authentication` in `vellum mcp list`
52
+ - A server shows `! Needs authentication` in `assistant mcp list`
53
53
  - An MCP tool call fails with an auth/token error
54
54
  - Setting up a new OAuth-protected server for the first time
55
55
 
56
56
  ### Remove a server
57
57
 
58
58
  ```
59
- vellum mcp remove <name>
59
+ assistant mcp remove <name>
60
60
  ```
61
61
 
62
62
  Removes the server config and cleans up any stored OAuth credentials.
63
63
 
64
64
  ## After Changes
65
65
 
66
- After adding, removing, or authenticating a server, the user must **quit and relaunch the Vellum app** for changes to take effect. The app runs its own assistant process — `vellum daemon restart` only restarts the CLI assistant, which is a separate process.
66
+ After adding, removing, or authenticating a server, the user must **quit and relaunch the Vellum app** for changes to take effect. The app runs its own assistant process — `assistant daemon restart` only restarts the CLI assistant, which is a separate process.
67
67
 
68
68
  Tell the user: "Please quit and relaunch the Vellum app, then start a new conversation."
69
69
 
@@ -71,5 +71,5 @@ Tell the user: "Please quit and relaunch the Vellum app, then start a new conver
71
71
 
72
72
  - User asks to connect/set up an external service via MCP
73
73
  - User asks "what MCP servers do I have?"
74
- - An MCP tool returns an auth error — offer to run `vellum mcp auth <name>`
74
+ - An MCP tool returns an auth error — offer to run `assistant mcp auth <name>`
75
75
  - User wants to remove an MCP integration
@@ -41,14 +41,16 @@ The user's assistant gets its own personal phone number through Twilio. All impl
41
41
  Check whether Twilio credentials, phone number, and public ingress are already configured:
42
42
 
43
43
  ```bash
44
- vellum integrations twilio config --json
44
+ assistant config get twilio.accountSid
45
+ assistant credentials inspect twilio:auth_token --json # check "hasSecret" field
46
+ assistant config get twilio.phoneNumber
45
47
  ```
46
48
 
47
49
  ```bash
48
- vellum config get calls.enabled
50
+ assistant config get calls.enabled
49
51
  ```
50
52
 
51
- If `hasCredentials` is `true`, `phoneNumber` is set, and `calls.enabled` is `true`, skip to the **Making Outbound Calls** section.
53
+ If `twilio.accountSid` has a value, `hasSecret` is `true`, `twilio.phoneNumber` is set, and `calls.enabled` is `true`, skip to the **Making Outbound Calls** section.
52
54
 
53
55
  If Twilio is not yet configured, load the **twilio-setup** skill — it handles credential storage, phone number provisioning, and public ingress setup:
54
56
 
@@ -61,13 +63,13 @@ Once twilio-setup completes, return here to enable calls.
61
63
  Enable the calls feature:
62
64
 
63
65
  ```bash
64
- vellum config set calls.enabled true
66
+ assistant config set calls.enabled true
65
67
  ```
66
68
 
67
69
  Verify:
68
70
 
69
71
  ```bash
70
- vellum config get calls.enabled
72
+ assistant config get calls.enabled
71
73
  ```
72
74
 
73
75
  ## Step 3: Choose a Voice
@@ -81,7 +83,7 @@ The shared config key `elevenlabs.voiceId` is the single source of truth for Ele
81
83
  Before presenting the voice list, check the current shared voice:
82
84
 
83
85
  ```bash
84
- vellum config get elevenlabs.voiceId
86
+ assistant config get elevenlabs.voiceId
85
87
  ```
86
88
 
87
89
  **If a non-default voice is already set**, the user chose it during voice-setup or a previous session. Tell them:
@@ -137,37 +139,33 @@ voice_config_update setting="tts_voice_id" value="<selected-voice-id>"
137
139
 
138
140
  Before making real calls, offer a quick verification:
139
141
 
140
- 1. Confirm credentials are stored: run `vellum integrations twilio config --json` and verify `hasCredentials: true` plus `phoneNumber`
141
- 2. Confirm ingress is running: `ingress.publicBaseUrl` must be set and the tunnel active
142
- 3. Confirm calls are enabled: `calls.enabled` must be `true`
143
- 4. Confirm voice is configured: `elevenlabs.voiceId` should be set
142
+ 1. Confirm credentials are stored: `assistant config get twilio.accountSid` should return a value and `assistant credentials inspect twilio:auth_token --json` should show `hasSecret: true`
143
+ 2. Confirm phone number is assigned: `assistant config get twilio.phoneNumber` should return a number
144
+ 3. Confirm ingress is running: `ingress.publicBaseUrl` must be set and the tunnel active
145
+ 4. Confirm calls are enabled: `calls.enabled` must be `true`
146
+ 5. Confirm voice is configured: `elevenlabs.voiceId` should be set
144
147
 
145
148
  Suggest a test call to the user's own phone: **"Want to do a quick test call to your phone to make sure everything works? This is a good way to hear how your chosen voice sounds."**
146
149
 
147
150
  If they agree, ask for their personal phone number and place a test call with a simple task like "Introduce yourself and confirm the call system is working."
148
151
 
149
- ## Step 5: Verify Guardian Identity (Voice)
152
+ ## Step 5: Guardian Verification (Optional)
150
153
 
151
- Now link the user's phone number as the trusted voice guardian. Tell the user: "Now let's verify your guardian identity for voice. This links your phone number so the assistant can verify inbound callers."
154
+ Link the user's phone number as the trusted voice guardian so the assistant can verify inbound callers.
152
155
 
153
- Load the **guardian-verify-setup** skill to handle the verification flow:
156
+ Load the guardian-verify-setup skill with `channel: "voice"`:
154
157
 
155
- - Call `skill_load` with `skill: "guardian-verify-setup"` to load the dependency skill.
156
-
157
- When invoking the skill, indicate the channel is `voice`. The guardian-verify-setup skill manages the full outbound verification flow, including:
158
-
159
- - Collecting the user's phone number as the destination
160
- - Starting the outbound verification session via the gateway endpoint `POST /v1/integrations/guardian/outbound/start` with `channel: "voice"`
161
- - Calling the phone number and providing a code for the user to enter via their phone's keypad
162
- - Proactively polling for completion (voice auto-check) so the user gets instant confirmation
163
- - Checking guardian status to confirm the binding was created
164
- - Handling resend, cancel, and error cases
158
+ ```
159
+ skill_load skill=guardian-verify-setup
160
+ ```
165
161
 
166
- Tell the user: _"I've loaded the guardian verification guide. It will walk you through linking your phone number as the trusted voice guardian."_
162
+ The skill handles the full verification flow (outbound call, code entry, confirmation). If the user declines, skip this step.
167
163
 
168
- After the guardian-verify-setup skill completes (or the user skips), continue to the next sections.
164
+ To re-check guardian status later:
169
165
 
170
- **Note:** Guardian verification is optional but recommended. If the user declines or wants to skip, proceed without blocking. Once verified, inbound callers can be prompted for voice verification before calls proceed (see the **Guardian voice verification for inbound calls** section below).
166
+ ```bash
167
+ assistant integrations guardian status --channel voice --json
168
+ ```
171
169
 
172
170
  ## Caller Identity
173
171
 
@@ -179,18 +177,18 @@ If the user wants a specific call to appear as coming from their own phone numbe
179
177
 
180
178
  **To configure a user phone number:**
181
179
 
182
- ```
183
- credential_store action=store service=twilio field=user_phone_number value=+14155559999
180
+ ```bash
181
+ assistant config set calls.callerIdentity.userNumber "+14155559999"
184
182
  ```
185
183
 
186
184
  **To use it for a specific call**, pass `caller_identity_mode: 'user_number'` when calling `call_start` — see the Making Outbound Calls section for examples. User-number mode cannot be set as a global default; it must be requested explicitly per call.
187
185
 
188
186
  ### Configuration reference
189
187
 
190
- | Setting | Description | Default |
191
- | ------------------------------------------- | ------------------------------------------------------------------------------------------------ | --------- |
192
- | `calls.callerIdentity.allowPerCallOverride` | Whether per-call mode selection is allowed | `true` |
193
- | `calls.callerIdentity.userNumber` | Optional E.164 phone number for user-number mode (alternative to storing via `credential_store`) | _(empty)_ |
188
+ | Setting | Description | Default |
189
+ | ------------------------------------------- | ------------------------------------------------ | --------- |
190
+ | `calls.callerIdentity.allowPerCallOverride` | Whether per-call mode selection is allowed | `true` |
191
+ | `calls.callerIdentity.userNumber` | Optional E.164 phone number for user-number mode | _(empty)_ |
194
192
 
195
193
  ## DTMF Callee Verification
196
194
 
@@ -236,21 +234,21 @@ Users who have an ElevenLabs account and API key (e.g., from the **voice-setup**
236
234
  To check if the user has an API key stored:
237
235
 
238
236
  ```bash
239
- credential_store action=get service=elevenlabs field=api_key
237
+ assistant credentials inspect elevenlabs:api_key --json
240
238
  ```
241
239
 
242
240
  If they have a key and want to browse voices, fetch the voice list:
243
241
 
244
242
  ```bash
245
243
  curl -s "https://api.elevenlabs.io/v2/voices?category=premade&page_size=50" \
246
- -H "xi-api-key: <api_key_from_credential_store>" | python3 -m json.tool
244
+ -H "xi-api-key: $(assistant credentials reveal elevenlabs:api_key)" | python3 -m json.tool
247
245
  ```
248
246
 
249
247
  To search for a specific voice style:
250
248
 
251
249
  ```bash
252
250
  curl -s "https://api.elevenlabs.io/v2/voices?search=warm+female&page_size=10" \
253
- -H "xi-api-key: <api_key_from_credential_store>" | python3 -m json.tool
251
+ -H "xi-api-key: $(assistant credentials reveal elevenlabs:api_key)" | python3 -m json.tool
254
252
  ```
255
253
 
256
254
  After the user picks a voice, set the shared voice ID:
@@ -265,13 +263,13 @@ Fine-tune how the selected voice sounds. These parameters apply to all ElevenLab
265
263
 
266
264
  ```bash
267
265
  # Playback speed (0.7 = slower, 1.0 = normal, 1.2 = faster)
268
- vellum config set elevenlabs.speed 1.0
266
+ assistant config set elevenlabs.speed 1.0
269
267
 
270
268
  # Stability (0.0 = more expressive/variable, 1.0 = more consistent/monotone)
271
- vellum config set elevenlabs.stability 0.5
269
+ assistant config set elevenlabs.stability 0.5
272
270
 
273
271
  # Similarity boost (0.0 = more creative, 1.0 = closer to original voice)
274
- vellum config set elevenlabs.similarityBoost 0.75
272
+ assistant config set elevenlabs.similarityBoost 0.75
275
273
  ```
276
274
 
277
275
  Lower stability makes the voice more expressive but less predictable — good for conversational calls. Higher stability is better for scripted/formal calls.
@@ -283,7 +281,7 @@ By default, the system sends a **bare** `voiceId` to Twilio ConversationRelay (n
283
281
  If you want to force Twilio's extended voice spec, you can optionally set a model ID:
284
282
 
285
283
  ```bash
286
- vellum config set elevenlabs.voiceModelId "flash_v2_5"
284
+ assistant config set elevenlabs.voiceModelId "flash_v2_5"
287
285
  ```
288
286
 
289
287
  When `voiceModelId` is set, the emitted voice string becomes:
@@ -365,11 +363,7 @@ No additional configuration is needed beyond Twilio setup and `calls.enabled` be
365
363
 
366
364
  ### Guardian voice verification for inbound calls
367
365
 
368
- For guardian verification setup, load the skill by calling `skill_load` with `skill: "guardian-verify-setup"`. This skill handles the full outbound verification flow; `phone-calls` does not orchestrate it inline. Do not use `call_start` to place guardian verification calls — the guardian outbound verification endpoints already place those calls.
369
-
370
- Once a guardian binding exists for the voice channel, inbound callers may be prompted for verification before calls proceed. The relay server detects pending challenges and prompts callers: "Please enter your six-digit verification code using your keypad, or speak the digits now." If verification fails after 3 attempts, the call ends with "Verification failed. Goodbye."
371
-
372
- This feature is separate from the outbound DTMF callee verification. It uses the channel guardian verification system rather than the per-call verification config.
366
+ To set up guardian verification, load the skill: `skill_load skill=guardian-verify-setup`. Once a guardian binding exists, inbound callers may be prompted for verification before calls proceed.
373
367
 
374
368
  ## Interacting with a Live Call
375
369
 
@@ -537,7 +531,7 @@ The `context` field is powerful — use it to give the agent background that hel
537
531
 
538
532
  ## Configuration Reference
539
533
 
540
- All call-related settings can be managed via `vellum config`:
534
+ All call-related settings can be managed via `assistant config`:
541
535
 
542
536
  | Setting | Description | Default |
543
537
  | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
@@ -562,16 +556,16 @@ All call-related settings can be managed via `vellum config`:
562
556
 
563
557
  ```bash
564
558
  # Increase max call duration to 2 hours
565
- vellum config set calls.maxDurationSeconds 7200
559
+ assistant config set calls.maxDurationSeconds 7200
566
560
 
567
561
  # Disable AI disclosure (check local regulations first)
568
- vellum config set calls.disclosure.enabled false
562
+ assistant config set calls.disclosure.enabled false
569
563
 
570
564
  # Custom disclosure message
571
- vellum config set calls.disclosure.text "Just so you know, this is an assistant calling on behalf of my human."
565
+ assistant config set calls.disclosure.text "Just so you know, this is an assistant calling on behalf of my human."
572
566
 
573
567
  # Give more time for user consultation
574
- vellum config set calls.userConsultTimeoutSeconds 300
568
+ assistant config set calls.userConsultTimeoutSeconds 300
575
569
  ```
576
570
 
577
571
  ## Troubleshooting
@@ -582,7 +576,7 @@ Load the `twilio-setup` skill to store your Account SID and Auth Token.
582
576
 
583
577
  ### "Calls feature is disabled"
584
578
 
585
- Run `vellum config set calls.enabled true`.
579
+ Run `assistant config set calls.enabled true`.
586
580
 
587
581
  ### "No public base URL configured"
588
582
 
@@ -598,7 +592,7 @@ Run the **public-ingress** skill to set up ngrok and configure `ingress.publicBa
598
592
  ### Call connects but no audio / one-way audio
599
593
 
600
594
  - The ConversationRelay WebSocket may not be connecting. Check that `ingress.publicBaseUrl` is correct and the tunnel is active
601
- - Verify the gateway is running at `$GATEWAY_BASE_URL`
595
+ - Verify the assistant runtime is running
602
596
 
603
597
  ### "Number not eligible for caller identity"
604
598
 
@@ -606,7 +600,7 @@ The user's phone number is not owned by or verified with the Twilio account. The
606
600
 
607
601
  ### "Per-call caller identity override is disabled"
608
602
 
609
- The setting `calls.callerIdentity.allowPerCallOverride` is set to `false`, so per-call `caller_identity_mode` selection is not allowed. Re-enable overrides with `vellum config set calls.callerIdentity.allowPerCallOverride true`.
603
+ The setting `calls.callerIdentity.allowPerCallOverride` is set to `false`, so per-call `caller_identity_mode` selection is not allowed. Re-enable overrides with `assistant config set calls.callerIdentity.allowPerCallOverride true`.
610
604
 
611
605
  ### Caller identity call fails on trial account
612
606
 
@@ -621,7 +615,7 @@ Emergency numbers (911, 112, 999, 000, 110, 119) are permanently blocked for saf
621
615
  If you restarted ngrok, the public URL has changed. Update it:
622
616
 
623
617
  ```bash
624
- vellum config set ingress.publicBaseUrl "<new-url>"
618
+ assistant config set ingress.publicBaseUrl "<new-url>"
625
619
  ```
626
620
 
627
621
  Or re-run the public-ingress skill to auto-detect and save the new URL.
@@ -640,4 +634,4 @@ The system has a 30-second silence timeout. If nobody speaks for 30 seconds duri
640
634
  - This often means ConversationRelay rejected voice configuration after TwiML fetch
641
635
  - Keep `elevenlabs.voiceModelId` empty first (bare `voiceId` mode)
642
636
  - If you set `voiceModelId`, try clearing it and retesting:
643
- `vellum config set elevenlabs.voiceModelId ""`
637
+ `assistant config set elevenlabs.voiceModelId ""`
@@ -22,7 +22,7 @@ This skill installs ngrok, configures authentication, starts a tunnel, discovers
22
22
  First, check whether ingress is already configured:
23
23
 
24
24
  ```bash
25
- vellum integrations ingress config --json
25
+ assistant integrations ingress config --json
26
26
  ```
27
27
 
28
28
  The response includes:
@@ -156,14 +156,14 @@ If no tunnel is found, check `/tmp/ngrok.log` for errors and report them to the
156
156
  Save the discovered public URL and enable ingress:
157
157
 
158
158
  ```bash
159
- vellum config set ingress.publicBaseUrl "<public-url>"
160
- vellum config set ingress.enabled true
159
+ assistant config set ingress.publicBaseUrl "<public-url>"
160
+ assistant config set ingress.enabled true
161
161
  ```
162
162
 
163
163
  Verify it was saved:
164
164
 
165
165
  ```bash
166
- vellum integrations ingress config --json
166
+ assistant integrations ingress config --json
167
167
  ```
168
168
 
169
169
  ## Step 7: Report Completion
@@ -171,7 +171,7 @@ vellum integrations ingress config --json
171
171
  Summarize the setup:
172
172
 
173
173
  - **Public URL:** `<the-url>` (this is your `ingress.publicBaseUrl`)
174
- - **Local gateway target:** `<localGatewayTarget from vellum integrations ingress config --json>`
174
+ - **Local gateway target:** `<localGatewayTarget from assistant integrations ingress config --json>`
175
175
  - **ngrok dashboard:** http://127.0.0.1:4040
176
176
 
177
177
  Provide useful follow-up commands:
@@ -200,7 +200,7 @@ The ngrok process may not be running. Check with `ps aux | grep ngrok`. If not r
200
200
 
201
201
  ### Gateway not reachable on local target
202
202
 
203
- Re-check local gateway target with `vellum integrations ingress config --json`, then run `curl -s "<localGatewayTarget>/healthz"`. If the gateway is not running, start the assistant first.
203
+ Re-check local gateway target with `assistant integrations ingress config --json`, then run `curl -s "<localGatewayTarget>/healthz"`. If the gateway is not running, start the assistant first.
204
204
 
205
205
  ### "Too many connections" or tunnel limit errors
206
206
 
@@ -171,7 +171,7 @@ curl -s "$INTERNAL_GATEWAY_BASE_URL/v1/integrations/slack/channel/config" \
171
171
  Check guardian binding status:
172
172
 
173
173
  ```bash
174
- vellum integrations guardian status --channel slack --json
174
+ assistant integrations guardian status --channel slack --json
175
175
  ```
176
176
 
177
177
  The Settings > Channels > Slack card auto-refreshes on view appear via `fetchSlackChannelConfig()`, so the user will see the "Connected" status badge when they open or re-open that page.
@@ -12,7 +12,7 @@ You are helping your user set up SMS messaging. This skill orchestrates Twilio s
12
12
  First, check the current SMS channel readiness state via Vellum CLI:
13
13
 
14
14
  ```bash
15
- vellum integrations twilio config --json
15
+ assistant integrations twilio config --json
16
16
  ```
17
17
 
18
18
  Inspect the response for `hasCredentials` and `phoneNumber`.
@@ -33,7 +33,7 @@ Tell the user: _"SMS needs Twilio configured first. I've loaded the Twilio setup
33
33
  After twilio-setup completes, re-check readiness:
34
34
 
35
35
  ```bash
36
- vellum integrations twilio config --json
36
+ assistant integrations twilio config --json
37
37
  ```
38
38
 
39
39
  If baseline is still not ready, report the specific failures and ask the user to address them before continuing.
@@ -43,7 +43,7 @@ If baseline is still not ready, report the specific failures and ask the user to
43
43
  Once baseline is ready, check SMS compliance status including remote (Twilio API) checks:
44
44
 
45
45
  ```bash
46
- vellum integrations twilio sms compliance --json
46
+ assistant integrations twilio sms compliance --json
47
47
  ```
48
48
 
49
49
  Examine the compliance results:
@@ -100,7 +100,7 @@ If routing is misconfigured, inbound Telegram messages will be rejected and the
100
100
  Before reporting success, confirm the guardian binding was actually created. Check guardian binding status via Vellum CLI:
101
101
 
102
102
  ```bash
103
- vellum integrations guardian status --channel telegram --json
103
+ assistant integrations guardian status --channel telegram --json
104
104
  ```
105
105
 
106
106
  If the binding is absent and the user said they completed the verification:
@@ -119,7 +119,7 @@ Summarize what was done:
119
119
  - Guardian identity: {verified | not configured}
120
120
  - Guardian verification status: {verified via outbound flow | skipped}
121
121
  - Routing configuration validated
122
- - To re-check guardian status later, use: `vellum integrations guardian status --channel telegram --json`
122
+ - To re-check guardian status later, use: `assistant integrations guardian status --channel telegram --json`
123
123
 
124
124
  The gateway automatically detects credentials from the vault, reconciles the Telegram webhook registration, and begins accepting Telegram webhooks shortly. In single-assistant mode, routing is automatically configured — no manual environment variable configuration or webhook registration is needed. If the webhook secret changes later, the gateway's credential watcher will automatically re-register the webhook. If the ingress URL changes (e.g., tunnel restart), the assistant triggers an immediate internal reconcile so the webhook re-registers automatically without a gateway restart.
125
125