@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.
- package/ARCHITECTURE.md +3 -3
- package/README.md +13 -13
- package/bun.lock +80 -24
- package/docs/architecture/integrations.md +126 -128
- package/docs/runbook-trusted-contacts.md +1 -1
- package/docs/trusted-contact-access.md +12 -12
- package/package.json +3 -1
- package/src/__tests__/__snapshots__/ipc-snapshot.test.ts.snap +0 -14
- package/src/__tests__/app-bundler.test.ts +209 -0
- package/src/__tests__/app-compiler.test.ts +279 -0
- package/src/__tests__/app-executors.test.ts +293 -483
- package/src/__tests__/app-migration.test.ts +148 -0
- package/src/__tests__/app-routes-csp.test.ts +202 -0
- package/src/__tests__/avatar-e2e.test.ts +452 -0
- package/src/__tests__/avatar-generator.test.ts +193 -0
- package/src/__tests__/avatar-router.test.ts +186 -0
- package/src/__tests__/browser-download-timeout.test.ts +28 -0
- package/src/__tests__/bundled-skill-retrieval-guard.test.ts +9 -9
- package/src/__tests__/call-domain.test.ts +3 -7
- package/src/__tests__/credential-security-e2e.test.ts +19 -12
- package/src/__tests__/credentials-cli.test.ts +30 -4
- package/src/__tests__/guardian-verify-setup-skill-regression.test.ts +1 -1
- package/src/__tests__/handlers-slack-config.test.ts +0 -72
- package/src/__tests__/handlers-telegram-config.test.ts +19 -12
- package/src/__tests__/handlers-twitter-config.test.ts +105 -48
- package/src/__tests__/inbound-invite-redemption.test.ts +4 -4
- package/src/__tests__/integration-status.test.ts +15 -5
- package/src/__tests__/integrations-cli.test.ts +1 -1
- package/src/__tests__/invite-redemption-service.test.ts +62 -7
- package/src/__tests__/ipc-snapshot.test.ts +0 -8
- package/src/__tests__/managed-avatar-client.test.ts +280 -0
- package/src/__tests__/mcp-cli.test.ts +3 -3
- package/src/__tests__/oauth-cli.test.ts +203 -0
- package/src/__tests__/relay-server.test.ts +3 -3
- package/src/__tests__/secret-onetime-send.test.ts +19 -12
- package/src/__tests__/secure-keys.test.ts +78 -0
- package/src/__tests__/session-messaging-secret-redirect.test.ts +3 -0
- package/src/__tests__/slack-channel-config.test.ts +23 -16
- package/src/__tests__/slack-share-routes.test.ts +263 -0
- package/src/__tests__/sms-messaging-provider.test.ts +3 -1
- package/src/__tests__/trusted-contact-lifecycle-notifications.test.ts +7 -7
- package/src/__tests__/trusted-contact-multichannel.test.ts +3 -3
- package/src/__tests__/trusted-contact-verification.test.ts +10 -10
- package/src/__tests__/twilio-config.test.ts +15 -36
- package/src/__tests__/twilio-provider.test.ts +4 -0
- package/src/__tests__/twitter-auth-handler.test.ts +27 -14
- package/src/__tests__/twitter-cli-error-shaping.test.ts +1 -1
- package/src/__tests__/twitter-cli-routing.test.ts +38 -53
- package/src/__tests__/twitter-oauth-client.test.ts +18 -47
- package/src/__tests__/voice-invite-redemption.test.ts +27 -3
- package/src/amazon/cart.ts +1 -1
- package/src/amazon/client.ts +89 -7
- package/src/approvals/guardian-request-resolvers.ts +2 -2
- package/src/bundler/app-bundler.ts +77 -32
- package/src/bundler/app-compiler.ts +195 -0
- package/src/bundler/manifest.ts +1 -1
- package/src/bundler/package-resolver.ts +185 -0
- package/src/calls/call-domain.ts +4 -14
- package/src/calls/relay-server.ts +2 -2
- package/src/calls/twilio-config.ts +5 -24
- package/src/calls/twilio-rest.ts +19 -5
- package/src/cli/amazon.ts +74 -249
- package/src/cli/audit.ts +2 -2
- package/src/cli/autonomy.ts +9 -9
- package/src/cli/channels.ts +5 -5
- package/src/cli/completions.ts +27 -27
- package/src/cli/config.ts +14 -14
- package/src/cli/contacts.ts +27 -27
- package/src/cli/credentials.ts +28 -28
- package/src/cli/dev.ts +2 -2
- package/src/cli/doctor.ts +2 -2
- package/src/cli/email.ts +82 -82
- package/src/cli/influencer.ts +13 -13
- package/src/cli/integrations.ts +19 -144
- package/src/cli/keys.ts +10 -10
- package/src/cli/map.ts +4 -4
- package/src/cli/mcp.ts +17 -17
- package/src/cli/memory.ts +18 -18
- package/src/cli/notifications.ts +13 -13
- package/src/cli/oauth.ts +77 -0
- package/src/cli/program.ts +2 -0
- package/src/cli/sequence.ts +27 -27
- package/src/cli/sessions.ts +12 -12
- package/src/cli/trust.ts +8 -8
- package/src/cli/twitter.ts +124 -70
- package/src/config/bundled-skills/_shared/CLI_RETRIEVAL_PATTERN.md +1 -1
- package/src/config/bundled-skills/agentmail/SKILL.md +34 -34
- package/src/config/bundled-skills/amazon/SKILL.md +54 -54
- package/src/config/bundled-skills/app-builder/SKILL.md +137 -3
- package/src/config/bundled-skills/app-builder/tools/app-create.ts +10 -4
- package/src/config/bundled-skills/configure-settings/SKILL.md +18 -18
- package/src/config/bundled-skills/contacts/SKILL.md +12 -12
- package/src/config/bundled-skills/doordash/lib/client.ts +7 -9
- package/src/config/bundled-skills/email-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/frontend-design/icon.svg +16 -0
- package/src/config/bundled-skills/google-oauth-setup/SKILL.md +143 -162
- package/src/config/bundled-skills/guardian-verify-setup/SKILL.md +4 -4
- package/src/config/bundled-skills/influencer/SKILL.md +13 -13
- package/src/config/bundled-skills/mcp-setup/SKILL.md +11 -11
- package/src/config/bundled-skills/phone-calls/SKILL.md +48 -54
- package/src/config/bundled-skills/public-ingress/SKILL.md +6 -6
- package/src/config/bundled-skills/slack-app-setup/SKILL.md +1 -1
- package/src/config/bundled-skills/sms-setup/SKILL.md +3 -3
- package/src/config/bundled-skills/telegram-setup/SKILL.md +2 -2
- package/src/config/bundled-skills/twilio-setup/SKILL.md +136 -225
- package/src/config/bundled-skills/twitter/SKILL.md +68 -44
- package/src/config/bundled-skills/voice-setup/SKILL.md +2 -2
- package/src/config/core-schema.ts +26 -0
- package/src/config/env.ts +4 -0
- package/src/config/feature-flag-registry.json +9 -1
- package/src/config/schema.ts +8 -0
- package/src/config/system-prompt.ts +6 -3
- package/src/config/templates/BOOTSTRAP.md +7 -5
- package/src/contacts/contacts-write.ts +5 -1
- package/src/daemon/handlers/apps.ts +31 -4
- package/src/daemon/handlers/config-ingress.ts +3 -3
- package/src/daemon/handlers/config-integrations.ts +120 -49
- package/src/daemon/handlers/config-slack-channel.ts +26 -7
- package/src/daemon/handlers/config-slack.ts +1 -54
- package/src/daemon/handlers/config-telegram.ts +28 -10
- package/src/daemon/handlers/config.ts +1 -4
- package/src/daemon/handlers/twitter-auth.ts +11 -4
- package/src/daemon/ipc-contract/apps.ts +0 -13
- package/src/daemon/ipc-contract-inventory.json +0 -2
- package/src/daemon/lifecycle.ts +8 -1
- package/src/daemon/session-messaging.ts +2 -2
- package/src/daemon/tool-side-effects.ts +30 -0
- package/src/email/providers/agentmail.ts +1 -1
- package/src/email/providers/index.ts +1 -1
- package/src/email/service.ts +1 -1
- package/src/gallery/default-gallery.ts +538 -0
- package/src/gallery/gallery-manifest.ts +5 -1
- package/src/influencer/client.ts +8 -6
- package/src/mcp/client.ts +1 -1
- package/src/media/avatar-router.ts +99 -0
- package/src/media/avatar-types.ts +60 -0
- package/src/media/managed-avatar-client.ts +189 -0
- package/src/memory/app-migration.ts +114 -0
- package/src/memory/app-store.ts +11 -0
- package/src/memory/qdrant-client.ts +1 -1
- package/src/messaging/providers/slack/client.ts +12 -2
- package/src/messaging/providers/sms/adapter.ts +6 -10
- package/src/migrations/data-layout.ts +8 -1
- package/src/oauth/token-persistence.ts +9 -6
- package/src/runtime/assistant-scope.ts +5 -0
- package/src/runtime/auth/route-policy.ts +4 -0
- package/src/runtime/channel-readiness-service.ts +9 -4
- package/src/runtime/gateway-internal-client.ts +11 -3
- package/src/runtime/http-server.ts +2 -0
- package/src/runtime/invite-redemption-service.ts +23 -13
- package/src/runtime/middleware/twilio-validation.ts +2 -2
- package/src/runtime/routes/app-routes.ts +131 -3
- package/src/runtime/routes/inbound-stages/verification-intercept.ts +3 -3
- package/src/runtime/routes/integration-routes.ts +2 -2
- package/src/runtime/routes/slack-share-routes.ts +235 -0
- package/src/runtime/routes/twilio-routes.ts +47 -34
- package/src/schedule/integration-status.ts +2 -3
- package/src/security/token-manager.ts +11 -3
- package/src/tools/apps/executors.ts +116 -8
- package/src/tools/browser/browser-manager.ts +30 -2
- package/src/tools/browser/chrome-cdp.ts +31 -3
- package/src/tools/credentials/vault.ts +9 -7
- package/src/tools/executor.ts +4 -0
- package/src/tools/system/avatar-generator.ts +55 -34
- package/src/twitter/client.ts +1 -1
- package/src/twitter/oauth-client.ts +31 -43
- package/src/twitter/router.ts +25 -23
- package/src/util/platform.ts +5 -0
- 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 `
|
|
12
|
+
All commands use `assistant mcp`. Run them via `host_bash`.
|
|
13
13
|
|
|
14
14
|
### List servers
|
|
15
15
|
|
|
16
16
|
```
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
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 `
|
|
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
|
-
|
|
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 — `
|
|
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 `
|
|
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
|
-
|
|
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
|
-
|
|
50
|
+
assistant config get calls.enabled
|
|
49
51
|
```
|
|
50
52
|
|
|
51
|
-
If `
|
|
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
|
-
|
|
66
|
+
assistant config set calls.enabled true
|
|
65
67
|
```
|
|
66
68
|
|
|
67
69
|
Verify:
|
|
68
70
|
|
|
69
71
|
```bash
|
|
70
|
-
|
|
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
|
-
|
|
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:
|
|
141
|
-
2. Confirm
|
|
142
|
-
3. Confirm
|
|
143
|
-
4. Confirm
|
|
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:
|
|
152
|
+
## Step 5: Guardian Verification (Optional)
|
|
150
153
|
|
|
151
|
-
|
|
154
|
+
Link the user's phone number as the trusted voice guardian so the assistant can verify inbound callers.
|
|
152
155
|
|
|
153
|
-
Load the
|
|
156
|
+
Load the guardian-verify-setup skill with `channel: "voice"`:
|
|
154
157
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
162
|
+
The skill handles the full verification flow (outbound call, code entry, confirmation). If the user declines, skip this step.
|
|
167
163
|
|
|
168
|
-
|
|
164
|
+
To re-check guardian status later:
|
|
169
165
|
|
|
170
|
-
|
|
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
|
-
|
|
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
|
|
191
|
-
| ------------------------------------------- |
|
|
192
|
-
| `calls.callerIdentity.allowPerCallOverride` | Whether per-call mode selection is allowed
|
|
193
|
-
| `calls.callerIdentity.userNumber` | Optional E.164 phone number for user-number mode
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
266
|
+
assistant config set elevenlabs.speed 1.0
|
|
269
267
|
|
|
270
268
|
# Stability (0.0 = more expressive/variable, 1.0 = more consistent/monotone)
|
|
271
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 `
|
|
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
|
-
|
|
559
|
+
assistant config set calls.maxDurationSeconds 7200
|
|
566
560
|
|
|
567
561
|
# Disable AI disclosure (check local regulations first)
|
|
568
|
-
|
|
562
|
+
assistant config set calls.disclosure.enabled false
|
|
569
563
|
|
|
570
564
|
# Custom disclosure message
|
|
571
|
-
|
|
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
|
-
|
|
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 `
|
|
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
|
|
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 `
|
|
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
|
-
|
|
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
|
-
`
|
|
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
|
-
|
|
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
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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
|
|
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 `
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: `
|
|
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
|
|