@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
package/src/cli/email.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CLI command group: `vellum email`
2
+ * CLI command group: `assistant email`
3
3
  *
4
4
  * Provider-agnostic email operations routed through the service facade.
5
5
  * All commands output JSON to stdout. Use --json for machine-readable output.
@@ -86,11 +86,11 @@ enforced at send time. If a guardrail blocks sending, exit code 2 is returned.
86
86
  Exit codes: 0 = success, 1 = error, 2 = guardrail blocked.
87
87
 
88
88
  Examples:
89
- $ vellum email status
90
- $ vellum email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
91
- $ vellum email draft approve-send --draft-id d_abc123 --confirm
92
- $ vellum email guardrails set --daily-cap 50
93
- $ vellum email setup domain --domain example.com`,
89
+ $ assistant email status
90
+ $ assistant email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
91
+ $ assistant email draft approve-send --draft-id d_abc123 --confirm
92
+ $ assistant email guardrails set --daily-cap 50
93
+ $ assistant email setup domain --domain example.com`,
94
94
  );
95
95
 
96
96
  const svc = getEmailService();
@@ -110,8 +110,8 @@ configuration. The active provider determines which backend handles domain
110
110
  setup, inbox creation, DNS records, and message delivery.
111
111
 
112
112
  Examples:
113
- $ vellum email provider get
114
- $ vellum email provider set agentmail`,
113
+ $ assistant email provider get
114
+ $ assistant email provider set agentmail`,
115
115
  );
116
116
 
117
117
  provider
@@ -125,8 +125,8 @@ resend). Use this to confirm which backend is handling email operations
125
125
  before making changes.
126
126
 
127
127
  Examples:
128
- $ vellum email provider get
129
- $ vellum email provider get --json`,
128
+ $ assistant email provider get
129
+ $ assistant email provider get --json`,
130
130
  )
131
131
  .action((_opts: unknown, cmd: Command) => {
132
132
  output({ ok: true, provider: svc.getProviderName() }, getJson(cmd));
@@ -147,7 +147,7 @@ Persists the provider selection to config. All subsequent email commands
147
147
  (setup, inbox, draft, guardrails) will route through the selected provider.
148
148
 
149
149
  Examples:
150
- $ vellum email provider set agentmail`,
150
+ $ assistant email provider set agentmail`,
151
151
  )
152
152
  .action((name: string, _opts: unknown, cmd: Command) => {
153
153
  if (!SUPPORTED_PROVIDERS.includes(name as SupportedProvider)) {
@@ -176,8 +176,8 @@ status, configured inboxes with their addresses, and current guardrail state
176
176
  Use this to verify the email stack is fully configured before sending.
177
177
 
178
178
  Examples:
179
- $ vellum email status
180
- $ vellum email status --json`,
179
+ $ assistant email status
180
+ $ assistant email status --json`,
181
181
  )
182
182
  .action(async (_opts: unknown, cmd: Command) => {
183
183
  await run(cmd, async () => {
@@ -206,9 +206,9 @@ The setup workflow configures the email stack in order:
206
206
  Run each step in sequence. "verify" will fail until DNS records propagate.
207
207
 
208
208
  Examples:
209
- $ vellum email setup domain --domain example.com
210
- $ vellum email setup dns --domain example.com
211
- $ vellum email setup verify --domain example.com`,
209
+ $ assistant email setup domain --domain example.com
210
+ $ assistant email setup dns --domain example.com
211
+ $ assistant email setup verify --domain example.com`,
212
212
  );
213
213
 
214
214
  setup
@@ -226,8 +226,8 @@ Use --dry-run to preview the registration without creating it. This returns
226
226
  the DNS records that would need to be configured without committing changes.
227
227
 
228
228
  Examples:
229
- $ vellum email setup domain --domain example.com
230
- $ vellum email setup domain --domain example.com --dry-run`,
229
+ $ assistant email setup domain --domain example.com
230
+ $ assistant email setup domain --domain example.com --dry-run`,
231
231
  )
232
232
  .action(
233
233
  async (opts: { domain: string; dryRun?: boolean }, cmd: Command) => {
@@ -252,8 +252,8 @@ behalf of your domain and improve deliverability.
252
252
  Add all returned records to your DNS provider before running "setup verify".
253
253
 
254
254
  Examples:
255
- $ vellum email setup dns --domain example.com
256
- $ vellum email setup dns --domain example.com --json`,
255
+ $ assistant email setup dns --domain example.com
256
+ $ assistant email setup dns --domain example.com --json`,
257
257
  )
258
258
  .action(async (opts: { domain: string }, cmd: Command) => {
259
259
  await run(cmd, async () => {
@@ -277,7 +277,7 @@ Run this after adding all records returned by "setup dns". If verification
277
277
  fails, wait for propagation and retry.
278
278
 
279
279
  Examples:
280
- $ vellum email setup verify --domain example.com`,
280
+ $ assistant email setup verify --domain example.com`,
281
281
  )
282
282
  .action(async (opts: { domain: string }, cmd: Command) => {
283
283
  await run(cmd, async () => {
@@ -299,7 +299,7 @@ specified domain. Idempotent — re-running skips already existing inboxes.
299
299
  The domain must be registered and verified before creating inboxes.
300
300
 
301
301
  Examples:
302
- $ vellum email setup inboxes --domain example.com`,
302
+ $ assistant email setup inboxes --domain example.com`,
303
303
  )
304
304
  .action(async (opts: { domain: string }, cmd: Command) => {
305
305
  await run(cmd, async () => {
@@ -324,8 +324,8 @@ secret so you can verify authenticity. If omitted, the provider may generate
324
324
  one automatically (provider-dependent).
325
325
 
326
326
  Examples:
327
- $ vellum email setup webhook --url https://example.com/api/email/inbound
328
- $ vellum email setup webhook --url https://example.com/api/email/inbound --secret whsec_abc123`,
327
+ $ assistant email setup webhook --url https://example.com/api/email/inbound
328
+ $ assistant email setup webhook --url https://example.com/api/email/inbound --secret whsec_abc123`,
329
329
  )
330
330
  .action(async (opts: { url: string; secret?: string }, cmd: Command) => {
331
331
  await run(cmd, async () => {
@@ -347,8 +347,8 @@ configured provider. Each inbox has a username (local part), domain, and
347
347
  optional display name.
348
348
 
349
349
  Examples:
350
- $ vellum email inbox list
351
- $ vellum email inbox create --username sam --domain example.com --display-name "Samwise"`,
350
+ $ assistant email inbox list
351
+ $ assistant email inbox create --username sam --domain example.com --display-name "Samwise"`,
352
352
  );
353
353
 
354
354
  inbox
@@ -370,9 +370,9 @@ The --display-name sets the friendly name shown in the "From" header
370
370
  (e.g. "Samwise <sam@example.com>").
371
371
 
372
372
  Examples:
373
- $ vellum email inbox create --username sam --domain example.com
374
- $ vellum email inbox create --username support --domain example.com --display-name "Support Team"
375
- $ vellum email inbox create --username hello`,
373
+ $ assistant email inbox create --username sam --domain example.com
374
+ $ assistant email inbox create --username support --domain example.com --display-name "Support Team"
375
+ $ assistant email inbox create --username hello`,
376
376
  )
377
377
  .action(
378
378
  async (
@@ -403,8 +403,8 @@ Use this to verify which inboxes are available before creating drafts or
403
403
  configuring inbound webhooks.
404
404
 
405
405
  Examples:
406
- $ vellum email inbox list
407
- $ vellum email inbox list --json`,
406
+ $ assistant email inbox list
407
+ $ assistant email inbox list --json`,
408
408
  )
409
409
  .action(async (_opts: unknown, cmd: Command) => {
410
410
  await run(cmd, async () => {
@@ -431,9 +431,9 @@ Drafts can also be listed, inspected by ID, or deleted. Use "draft list
431
431
  --status pending" to see drafts awaiting approval.
432
432
 
433
433
  Examples:
434
- $ vellum email draft create --from hello@example.com --to user@test.com --subject "Hi" --body "Hello"
435
- $ vellum email draft list --status pending
436
- $ vellum email draft approve-send --draft-id d_abc123 --confirm`,
434
+ $ assistant email draft create --from hello@example.com --to user@test.com --subject "Hi" --body "Hello"
435
+ $ assistant email draft list --status pending
436
+ $ assistant email draft approve-send --draft-id d_abc123 --confirm`,
437
437
  );
438
438
 
439
439
  draft
@@ -462,9 +462,9 @@ Optional fields:
462
462
  --in-reply-to Message ID of the email being replied to (for threading)
463
463
 
464
464
  Examples:
465
- $ vellum email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
466
- $ vellum email draft create --from hello@example.com --to user@test.com --subject "Re: Question" --body "Sure thing" --in-reply-to msg_abc123
467
- $ vellum email draft create --from hello@example.com --to user@test.com --subject "Update" --body "FYI" --cc manager@test.com`,
465
+ $ assistant email draft create --from hello@example.com --to user@test.com --subject "Hello" --body "Hi there"
466
+ $ assistant email draft create --from hello@example.com --to user@test.com --subject "Re: Question" --body "Sure thing" --in-reply-to msg_abc123
467
+ $ assistant email draft create --from hello@example.com --to user@test.com --subject "Update" --body "FYI" --cc manager@test.com`,
468
468
  )
469
469
  .action(
470
470
  async (
@@ -509,9 +509,9 @@ not appear here. The "rejected" status only applies to provider-side
509
509
  delivery failures.
510
510
 
511
511
  Examples:
512
- $ vellum email draft list
513
- $ vellum email draft list --status pending
514
- $ vellum email draft list --status sent --json`,
512
+ $ assistant email draft list
513
+ $ assistant email draft list --status pending
514
+ $ assistant email draft list --status sent --json`,
515
515
  )
516
516
  .action(async (opts: { status?: string }, cmd: Command) => {
517
517
  await run(cmd, async () => {
@@ -535,9 +535,9 @@ status, and timestamps. Use --inbox to scope the lookup in multi-inbox
535
535
  setups.
536
536
 
537
537
  Examples:
538
- $ vellum email draft get d_abc123
539
- $ vellum email draft get d_abc123 --inbox inbox_456
540
- $ vellum email draft get d_abc123 --json`,
538
+ $ assistant email draft get d_abc123
539
+ $ assistant email draft get d_abc123 --inbox inbox_456
540
+ $ assistant email draft get d_abc123 --json`,
541
541
  )
542
542
  .action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
543
543
  await run(cmd, async () => {
@@ -568,8 +568,8 @@ pending state and can be retried after adjusting guardrails.
568
568
  Aliases: "draft send", "draft approve"
569
569
 
570
570
  Examples:
571
- $ vellum email draft approve-send --draft-id d_abc123 --confirm
572
- $ vellum email draft approve-send --draft-id d_abc123 --confirm --json`,
571
+ $ assistant email draft approve-send --draft-id d_abc123 --confirm
572
+ $ assistant email draft approve-send --draft-id d_abc123 --confirm --json`,
573
573
  )
574
574
  .action(
575
575
  async (
@@ -605,9 +605,9 @@ sent. The --reason flag is accepted for logging but the draft itself is
605
605
  removed from the provider and cannot be recovered.
606
606
 
607
607
  Examples:
608
- $ vellum email draft reject --draft-id d_abc123
609
- $ vellum email draft reject --draft-id d_abc123 --reason "Wrong recipient"
610
- $ vellum email draft reject --draft-id d_abc123 --inbox inbox_456`,
608
+ $ assistant email draft reject --draft-id d_abc123
609
+ $ assistant email draft reject --draft-id d_abc123 --reason "Wrong recipient"
610
+ $ assistant email draft reject --draft-id d_abc123 --inbox inbox_456`,
611
611
  )
612
612
  .action(
613
613
  async (
@@ -636,8 +636,8 @@ result in permanent deletion; use "reject" when you want to log a reason
636
636
  for not sending. Use --inbox to scope the deletion in multi-inbox setups.
637
637
 
638
638
  Examples:
639
- $ vellum email draft delete d_abc123
640
- $ vellum email draft delete d_abc123 --inbox inbox_456`,
639
+ $ assistant email draft delete d_abc123
640
+ $ assistant email draft delete d_abc123 --inbox inbox_456`,
641
641
  )
642
642
  .action(async (draftId: string, opts: { inbox?: string }, cmd: Command) => {
643
643
  await run(cmd, async () => {
@@ -661,9 +661,9 @@ Use "inbound list" to browse received messages and "inbound get" to
661
661
  retrieve the full content of a specific message.
662
662
 
663
663
  Examples:
664
- $ vellum email inbound list
665
- $ vellum email inbound list --thread-id thr_abc123
666
- $ vellum email inbound get msg_def456`,
664
+ $ assistant email inbound list
665
+ $ assistant email inbound list --thread-id thr_abc123
666
+ $ assistant email inbound get msg_def456`,
667
667
  );
668
668
 
669
669
  inbound
@@ -679,10 +679,10 @@ thread ID to see only messages belonging to a specific conversation, or
679
679
  by inbox ID to scope to a particular inbox.
680
680
 
681
681
  Examples:
682
- $ vellum email inbound list
683
- $ vellum email inbound list --thread-id thr_abc123
684
- $ vellum email inbound list --inbox inbox_456
685
- $ vellum email inbound list --json`,
682
+ $ assistant email inbound list
683
+ $ assistant email inbound list --thread-id thr_abc123
684
+ $ assistant email inbound list --inbox inbox_456
685
+ $ assistant email inbound list --json`,
686
686
  )
687
687
  .action(
688
688
  async (opts: { threadId?: string; inbox?: string }, cmd: Command) => {
@@ -706,8 +706,8 @@ Returns the full inbound message including sender, recipients, subject,
706
706
  body, headers, and timestamps.
707
707
 
708
708
  Examples:
709
- $ vellum email inbound get msg_abc123
710
- $ vellum email inbound get msg_abc123 --json`,
709
+ $ assistant email inbound get msg_abc123
710
+ $ assistant email inbound get msg_abc123 --json`,
711
711
  )
712
712
  .action(async (messageId: string, _opts: unknown, cmd: Command) => {
713
713
  await run(cmd, async () => {
@@ -731,8 +731,8 @@ Use "thread list" to browse all threads and "thread get" to retrieve
731
731
  the full conversation history for a specific thread.
732
732
 
733
733
  Examples:
734
- $ vellum email thread list
735
- $ vellum email thread get thr_abc123`,
734
+ $ assistant email thread list
735
+ $ assistant email thread get thr_abc123`,
736
736
  );
737
737
 
738
738
  thread
@@ -745,8 +745,8 @@ Lists all email threads. Each thread entry includes its ID, subject,
745
745
  participant addresses, message count, and timestamps.
746
746
 
747
747
  Examples:
748
- $ vellum email thread list
749
- $ vellum email thread list --json`,
748
+ $ assistant email thread list
749
+ $ assistant email thread list --json`,
750
750
  )
751
751
  .action(async (_opts: unknown, cmd: Command) => {
752
752
  await run(cmd, async () => {
@@ -768,8 +768,8 @@ Returns the full thread including all messages (inbound and outbound),
768
768
  participants, subject, and timestamps. Messages are ordered chronologically.
769
769
 
770
770
  Examples:
771
- $ vellum email thread get thr_abc123
772
- $ vellum email thread get thr_abc123 --json`,
771
+ $ assistant email thread get thr_abc123
772
+ $ assistant email thread get thr_abc123 --json`,
773
773
  )
774
774
  .action(async (threadId: string, _opts: unknown, cmd: Command) => {
775
775
  await run(cmd, async () => {
@@ -799,10 +799,10 @@ When a guardrail blocks a send, exit code 2 is returned with the specific
799
799
  guardrail error in the response.
800
800
 
801
801
  Examples:
802
- $ vellum email guardrails get
803
- $ vellum email guardrails set --paused true
804
- $ vellum email guardrails set --daily-cap 100
805
- $ vellum email guardrails block "*@spam.com"`,
802
+ $ assistant email guardrails get
803
+ $ assistant email guardrails set --paused true
804
+ $ assistant email guardrails set --daily-cap 100
805
+ $ assistant email guardrails block "*@spam.com"`,
806
806
  );
807
807
 
808
808
  guardrails
@@ -817,8 +817,8 @@ daily send cap, today's send count, and a summary of address rules.
817
817
  Use this to verify guardrail settings before sending emails.
818
818
 
819
819
  Examples:
820
- $ vellum email guardrails get
821
- $ vellum email guardrails get --json`,
820
+ $ assistant email guardrails get
821
+ $ assistant email guardrails get --json`,
822
822
  )
823
823
  .action((_opts: unknown, cmd: Command) => {
824
824
  output({ ok: true, ...svc.getGuardrails() }, getJson(cmd));
@@ -841,9 +841,9 @@ value unchanged.
841
841
  calendar day. Set to 0 to disable sending entirely.
842
842
 
843
843
  Examples:
844
- $ vellum email guardrails set --paused true
845
- $ vellum email guardrails set --paused false --daily-cap 50
846
- $ vellum email guardrails set --daily-cap 0`,
844
+ $ assistant email guardrails set --paused true
845
+ $ assistant email guardrails set --paused false --daily-cap 50
846
+ $ assistant email guardrails set --daily-cap 0`,
847
847
  )
848
848
  .action((opts: { paused?: string; dailyCap?: string }, cmd: Command) => {
849
849
  const updates: { paused?: boolean; dailyCap?: number } = {};
@@ -877,8 +877,8 @@ pattern will be rejected with exit code 2. Rules are evaluated in order;
877
877
  block rules take precedence over allow rules for the same address.
878
878
 
879
879
  Examples:
880
- $ vellum email guardrails block "*@spam.com"
881
- $ vellum email guardrails block "marketing@*"`,
880
+ $ assistant email guardrails block "*@spam.com"
881
+ $ assistant email guardrails block "marketing@*"`,
882
882
  )
883
883
  .action((pattern: string, _opts: unknown, cmd: Command) => {
884
884
  const rule = svc.addRule("block", pattern);
@@ -900,8 +900,8 @@ address-rule guardrail check during "approve-send". Note that block rules
900
900
  take precedence over allow rules for the same address.
901
901
 
902
902
  Examples:
903
- $ vellum email guardrails allow "*@partner.com"
904
- $ vellum email guardrails allow "vip@example.com"`,
903
+ $ assistant email guardrails allow "*@partner.com"
904
+ $ assistant email guardrails allow "vip@example.com"`,
905
905
  )
906
906
  .action((pattern: string, _opts: unknown, cmd: Command) => {
907
907
  const rule = svc.addRule("allow", pattern);
@@ -920,8 +920,8 @@ entry includes its ID, type (block or allow), and the glob pattern.
920
920
  Use the rule ID with "guardrails unrule" to remove a specific rule.
921
921
 
922
922
  Examples:
923
- $ vellum email guardrails rules
924
- $ vellum email guardrails rules --json`,
923
+ $ assistant email guardrails rules
924
+ $ assistant email guardrails rules --json`,
925
925
  )
926
926
  .action((_opts: unknown, cmd: Command) => {
927
927
  output({ ok: true, rules: svc.listAddressRules() }, getJson(cmd));
@@ -941,8 +941,8 @@ Permanently removes a block or allow rule. The rule takes effect immediately —
941
941
  subsequent "approve-send" calls will no longer be affected by the removed rule.
942
942
 
943
943
  Examples:
944
- $ vellum email guardrails unrule rule_abc123
945
- $ vellum email guardrails rules # list rules to find the ID first`,
944
+ $ assistant email guardrails unrule rule_abc123
945
+ $ assistant email guardrails rules # list rules to find the ID first`,
946
946
  )
947
947
  .action((ruleId: string, _opts: unknown, cmd: Command) => {
948
948
  if (svc.removeRule(ruleId)) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * CLI command group: `vellum influencer`
2
+ * CLI command group: `assistant influencer`
3
3
  *
4
4
  * Research influencers on Instagram, TikTok, and X/Twitter via the Chrome extension relay.
5
5
  * All commands output JSON to stdout. Use --json for machine-readable output.
@@ -71,9 +71,9 @@ platform (Instagram, TikTok, X/Twitter) in Chrome for the relay to work.
71
71
  Supported platforms: instagram, tiktok, twitter (X).
72
72
 
73
73
  Examples:
74
- $ vellum influencer search "fitness coach" --platforms instagram,tiktok
75
- $ vellum influencer profile natgeo --platform instagram
76
- $ vellum influencer compare instagram:nike twitter:nike tiktok:nike`,
74
+ $ assistant influencer search "fitness coach" --platforms instagram,tiktok
75
+ $ assistant influencer profile natgeo --platform instagram
76
+ $ assistant influencer compare instagram:nike twitter:nike tiktok:nike`,
77
77
  );
78
78
 
79
79
  // =========================================================================
@@ -120,9 +120,9 @@ Plain integers are also accepted (e.g. 50000).
120
120
  --verified restricts results to verified/blue-check accounts only.
121
121
 
122
122
  Examples:
123
- $ vellum influencer search "vegan food" --min-followers 10k --max-followers 1m
124
- $ vellum influencer search "tech reviewer" --platforms tiktok --limit 5 --verified
125
- $ vellum influencer search "streetwear" --platforms instagram,twitter --min-followers 50k`,
123
+ $ assistant influencer search "vegan food" --min-followers 10k --max-followers 1m
124
+ $ assistant influencer search "tech reviewer" --platforms tiktok --limit 5 --verified
125
+ $ assistant influencer search "streetwear" --platforms instagram,twitter --min-followers 50k`,
126
126
  )
127
127
  .action(
128
128
  async (
@@ -196,9 +196,9 @@ Returns detailed profile data including follower count, bio, engagement
196
196
  metrics, and recent post statistics.
197
197
 
198
198
  Examples:
199
- $ vellum influencer profile natgeo --platform instagram
200
- $ vellum influencer profile charlidamelio --platform tiktok
201
- $ vellum influencer profile elonmusk --platform twitter`,
199
+ $ assistant influencer profile natgeo --platform instagram
200
+ $ assistant influencer profile charlidamelio --platform tiktok
201
+ $ assistant influencer profile elonmusk --platform twitter`,
202
202
  )
203
203
  .action(
204
204
  async (username: string, opts: { platform: string }, cmd: Command) => {
@@ -255,9 +255,9 @@ useful for comparing follower counts, engagement rates, and content
255
255
  metrics across platforms or between competing accounts.
256
256
 
257
257
  Examples:
258
- $ vellum influencer compare instagram:nike twitter:nike tiktok:nike
259
- $ vellum influencer compare instagram:natgeo instagram:discoverearth
260
- $ vellum influencer compare tiktok:charlidamelio tiktok:addisonre`,
258
+ $ assistant influencer compare instagram:nike twitter:nike tiktok:nike
259
+ $ assistant influencer compare instagram:natgeo instagram:discoverearth
260
+ $ assistant influencer compare tiktok:charlidamelio tiktok:addisonre`,
261
261
  )
262
262
  .action(async (influencers: string[], _opts: unknown, cmd: Command) => {
263
263
  await run(cmd, async () => {