[object Object]

← back to Ventura Claw

Add ElevenLabs as a VenturaClaw connector

e175bc9b6abab45f269255890f3bdaf53cd760ac · 2026-05-06 12:09:10 -0700 · Steve Abrams

- server/connectors/elevenlabs.js — REAL impl, health probe returns
  subscription tier + char usage
- server/connectors/index.js — registered in REAL, READ_ACTIONS, WRITE_ACTIONS
- server/connectors.json — added catalog entry (now 57 connectors)
- scripts/sync-tokens.js — routes ELEVENLABS_API_KEY into the user vault
  (verified: 'live' on next sync, health 200 with starter tier 9.3K/90K chars)

Files touched

Diff

commit e175bc9b6abab45f269255890f3bdaf53cd760ac
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Wed May 6 12:09:10 2026 -0700

    Add ElevenLabs as a VenturaClaw connector
    
    - server/connectors/elevenlabs.js — REAL impl, health probe returns
      subscription tier + char usage
    - server/connectors/index.js — registered in REAL, READ_ACTIONS, WRITE_ACTIONS
    - server/connectors.json — added catalog entry (now 57 connectors)
    - scripts/sync-tokens.js — routes ELEVENLABS_API_KEY into the user vault
      (verified: 'live' on next sync, health 200 with starter tier 9.3K/90K chars)
---
 scripts/sync-tokens.js     |  3 ++-
 server/connectors.json     | 23 ++++++++++++++++++++++-
 server/connectors/index.js |  5 ++++-
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/scripts/sync-tokens.js b/scripts/sync-tokens.js
index 8172ba4..462b07c 100755
--- a/scripts/sync-tokens.js
+++ b/scripts/sync-tokens.js
@@ -83,7 +83,8 @@ function scanProjectEnvs(homeDir) {
     ["slack",      { SLACK_BOT_TOKEN: pick("SLACK_BOT_TOKEN", "SLACK_TOKEN") }],
     ["twilio",     { TWILIO_ACCOUNT_SID: pick("TWILIO_ACCOUNT_SID", "TWILIO_SID"),
                      TWILIO_AUTH_TOKEN: pick("TWILIO_AUTH_TOKEN"),
-                     TWILIO_FROM_NUMBER: pick("TWILIO_FROM_NUMBER", "TWILIO_PHONE_NUMBER", "TWILIO_FROM") }]
+                     TWILIO_FROM_NUMBER: pick("TWILIO_FROM_NUMBER", "TWILIO_PHONE_NUMBER", "TWILIO_FROM") }],
+    ["elevenlabs", { ELEVENLABS_API_KEY: pick("ELEVENLABS_API_KEY") }],
   ];
 
   // Login
diff --git a/server/connectors.json b/server/connectors.json
index a59c9dc..005be68 100644
--- a/server/connectors.json
+++ b/server/connectors.json
@@ -670,5 +670,26 @@
     "logo": "internetarchive",
     "tint": "#000000",
     "sensitive": false
+  },
+  {
+    "id": "elevenlabs",
+    "name": "ElevenLabs",
+    "category": "ai-voice",
+    "docsUrl": "https://elevenlabs.io/docs/api-reference/introduction",
+    "auth": "api_key",
+    "triggers": [
+      "text to speech",
+      "voice generation",
+      "narrate",
+      "speak this",
+      "tts"
+    ],
+    "actions": [
+      "voicesList",
+      "user",
+      "modelsList",
+      "textToSpeech"
+    ],
+    "sensitive": false
   }
-]
\ No newline at end of file
+]
diff --git a/server/connectors/index.js b/server/connectors/index.js
index b30b133..a013593 100644
--- a/server/connectors/index.js
+++ b/server/connectors/index.js
@@ -13,8 +13,9 @@ const etsy       = require("./etsy");
 const gmail      = require("./gmail");
 const purelymail = require("./purelymail");
 const archive    = require("./archive");
+const elevenlabs = require("./elevenlabs");
 
-const REAL = { slack, stripe, cloudflare, mailchimp, hubspot, notion, airtable, twilio, figma, canva, etsy, gmail, purelymail, archive };
+const REAL = { slack, stripe, cloudflare, mailchimp, hubspot, notion, airtable, twilio, figma, canva, etsy, gmail, purelymail, archive, elevenlabs };
 
 // Phase 8 — central sensitivity registry. Source of truth for "this action mutates state."
 // Anything in WRITE_ACTIONS[id] requires the approval gate. Anything NOT listed is treated as read-only.
@@ -34,6 +35,7 @@ const WRITE_ACTIONS = {
   slack:      new Set(["channels.create", "chat.postMessage", "reactions.add"]),
   stripe:     new Set(["charge.create", "customer.create", "payment_link.create", "refund.create", "subscription.cancel"]),
   twilio:     new Set(["sms.send"]),
+  elevenlabs: new Set(["textToSpeech"]),
 };
 
 // Read actions enumerated per connector — explicit allowlist for fail-safe behavior.
@@ -52,6 +54,7 @@ const READ_ACTIONS = {
   slack:      new Set(["channels.list", "users.lookup"]),
   stripe:     new Set(["balance.get", "charges.list"]),
   twilio:     new Set(["messages.list", "phone_numbers.list"]),
+  elevenlabs: new Set(["voicesList", "user", "modelsList"]),
 };
 
 function isWrite(id, action) {

← 35b8bea test: confirm post-commit celebration sound fires globally  ·  back to Ventura Claw  ·  no breakins: pull plaintext creds from login banner, add PUT 817b756 →