claude-voice 1.5.9 → 1.5.11

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/README.md CHANGED
@@ -18,7 +18,21 @@
18
18
  npm install -g claude-voice
19
19
  ```
20
20
 
21
- That's it. The extension auto-installs hooks and starts with Claude Code. Say **"Hey Jarvis"** and speak your command.
21
+ That's it. The extension auto-installs hooks, downloads speech models, and starts with Claude Code. Say **"Hey Jarvis"** and speak your command.
22
+
23
+ ## What Gets Installed
24
+
25
+ The postinstall script sets up everything automatically:
26
+
27
+ 1. Default configuration (`~/.claude-voice/config.json`)
28
+ 2. Claude Code hooks (session-start, stop, post-tool-use, notification)
29
+ 3. Claude Code plugin (voice skill)
30
+ 4. Wake word model (openWakeWord or Sherpa-ONNX KWS)
31
+ 5. **STT model** — Whisper Small (~488MB) for high-accuracy speech recognition
32
+ 6. **TTS voice** — Piper neural voice (`en_US-joe-medium`, ~50MB)
33
+ 7. Audio tools check (sox, afplay, etc.)
34
+
35
+ Total download: ~1GB on first install. All models run locally — no API keys needed.
22
36
 
23
37
  ## Why Claude Voice?
24
38
 
@@ -26,10 +40,12 @@ That's it. The extension auto-installs hooks and starts with Claude Code. Say **
26
40
 
27
41
  **Hear every response** — Claude doesn't just respond in text. It speaks back to you. Step away from the screen and still follow along.
28
42
 
29
- **Works offline** — Local STT (Sherpa-ONNX) and local TTS (Piper, macOS Say) mean zero API calls, zero latency, zero cost. Your voice data never leaves your machine.
43
+ **Works offline** — Local STT (Whisper Small via Sherpa-ONNX) and local TTS (Piper neural voice) mean zero API calls, zero latency, zero cost. Your voice data never leaves your machine.
30
44
 
31
45
  **5 TTS providers, 3 STT providers** — Choose the quality/cost/privacy balance that works for you. From free local voices to premium OpenAI and ElevenLabs.
32
46
 
47
+ **Custom wake words** — Train your own Picovoice keyword model and drop the `.ppn` file in `~/.claude-voice/models/`. Say "Hey Claude" instead of "Hey Jarvis".
48
+
33
49
  **Tool announcements** — Hear "Build completed", "Tests passed", "File written" while you're making coffee. Know what Claude is doing without watching the screen.
34
50
 
35
51
  **Multi-language** — Speak in English, Turkish, German, French, Spanish, Japanese, Chinese, and more. Change with one command: `claude-voice config set stt.language=tr`
@@ -47,9 +63,9 @@ The extension integrates via Claude Code hooks: auto-start on session, speak res
47
63
 
48
64
  | | Local (Free) | Cloud |
49
65
  |---|---|---|
50
- | **TTS** | macOS Say, Piper, espeak | OpenAI, ElevenLabs |
51
- | **STT** | Sherpa-ONNX Whisper | OpenAI Whisper |
52
- | **Wake Word** | openWakeWord, Sherpa-ONNX | Picovoice |
66
+ | **TTS** | Piper (default), macOS Say, espeak | OpenAI, ElevenLabs |
67
+ | **STT** | Sherpa-ONNX Whisper Small (default) | OpenAI Whisper |
68
+ | **Wake Word** | openWakeWord (default), Sherpa-ONNX | Picovoice |
53
69
 
54
70
  **Quick presets:**
55
71
 
@@ -59,6 +75,33 @@ claude-voice openai # Cloud TTS + STT (requires API key)
59
75
  claude-voice local --download # Piper TTS + larger Whisper model (offline)
60
76
  ```
61
77
 
78
+ ## Wake Word
79
+
80
+ ### Default: openWakeWord
81
+ Works out of the box. Say **"Hey Jarvis"** to activate.
82
+
83
+ ### Picovoice (best accuracy)
84
+ Picovoice offers 97%+ keyword detection accuracy with custom wake words.
85
+
86
+ ```bash
87
+ claude-voice picovoice --key YOUR_ACCESS_KEY
88
+ ```
89
+
90
+ Get a free access key at [console.picovoice.ai](https://console.picovoice.ai/).
91
+
92
+ ### Custom Wake Words (Picovoice)
93
+ Train a custom keyword at [Picovoice Console](https://console.picovoice.ai/), download the `.ppn` file, and place it in `~/.claude-voice/models/`:
94
+
95
+ ```bash
96
+ # Example: use "Hey Claude" as wake word
97
+ cp hey-claude_en_mac_v3_0_0.ppn ~/.claude-voice/models/hey-claude.ppn
98
+ claude-voice config set wakeWord.provider=picovoice
99
+ claude-voice config set wakeWord.keyword=hey-claude
100
+ claude-voice restart
101
+ ```
102
+
103
+ The detector searches for `<keyword>.ppn` in `~/.claude-voice/models/` first, then falls back to Picovoice built-in keywords (jarvis, alexa, computer, etc.).
104
+
62
105
  ## Configuration
63
106
 
64
107
  ```bash
@@ -75,13 +118,15 @@ Config file: `~/.claude-voice/config.json`
75
118
 
76
119
  | Option | Default | Description |
77
120
  |--------|---------|-------------|
78
- | `tts.provider` | `macos-say` | macos-say, piper, openai, elevenlabs, espeak, disabled |
79
- | `tts.autoSpeak` | `true` | Auto-speak Claude responses |
121
+ | `tts.provider` | `piper` | piper, macos-say, openai, elevenlabs, espeak, disabled |
122
+ | `tts.autoSpeak` | `false` | Auto-speak Claude responses |
80
123
  | `tts.maxSpeechLength` | `5000` | Max characters to speak |
81
124
  | `stt.provider` | `sherpa-onnx` | sherpa-onnx, openai, whisper-local, disabled |
125
+ | `stt.sherpaOnnx.model` | `whisper-small` | whisper-tiny (75MB), whisper-base (142MB), whisper-small (488MB) |
82
126
  | `stt.language` | `en` | Language code (en, tr, de, fr, es, ja, zh...) |
83
127
  | `wakeWord.enabled` | `true` | Enable wake word detection |
84
128
  | `wakeWord.provider` | `openwakeword` | openwakeword, sherpa-onnx, picovoice |
129
+ | `wakeWord.keyword` | `jarvis` | Wake word (or custom .ppn filename without extension) |
85
130
  | `wakeWord.sensitivity` | `0.5` | Detection sensitivity (0.0-1.0) |
86
131
  | `voiceOutput.enabled` | `false` | TTS-friendly response formatting |
87
132
  | `toolTTS.enabled` | `false` | Announce tool completions |
@@ -100,6 +145,11 @@ claude-voice start / stop / restart / status
100
145
  claude-voice setup # Interactive wizard
101
146
  claude-voice doctor # Diagnose issues
102
147
 
148
+ # Provider Presets
149
+ claude-voice openai # Cloud TTS + STT
150
+ claude-voice local --download # Local with model downloads
151
+ claude-voice picovoice --key KEY # Best wake word accuracy
152
+
103
153
  # Models & Voices
104
154
  claude-voice model list / download <id> # STT models (whisper-tiny/base/small)
105
155
  claude-voice voice list / download <id> # Piper TTS voices
@@ -120,11 +170,11 @@ claude-voice devices # List audio devices
120
170
 
121
171
  | | macOS | Linux |
122
172
  |---|---|---|
123
- | TTS | Say, Piper, OpenAI, ElevenLabs | espeak, Piper, OpenAI, ElevenLabs |
173
+ | TTS | Piper, Say, OpenAI, ElevenLabs | Piper, espeak, OpenAI, ElevenLabs |
124
174
  | STT | Sherpa-ONNX, OpenAI | Sherpa-ONNX, OpenAI |
125
175
  | Wake Word | openWakeWord, Sherpa-ONNX, Picovoice | openWakeWord, Sherpa-ONNX, Picovoice |
126
176
 
127
- **Requires:** Node.js 18+, microphone access. Python 3 recommended (for openWakeWord).
177
+ **Requires:** Node.js 18+, microphone access. Python 3 recommended (for Piper TTS and openWakeWord).
128
178
 
129
179
  ## Troubleshooting
130
180
 
@@ -134,7 +184,9 @@ claude-voice logs # Check daemon logs
134
184
  claude-voice start -f # Run in foreground for debugging
135
185
  ```
136
186
 
137
- **Wake word not detecting?** Run `claude-voice openwakeword --install` for better accuracy.
187
+ **Wake word not detecting?** Run `claude-voice openwakeword --install` for better accuracy, or switch to Picovoice for 97%+ detection rate.
188
+
189
+ **STT not working?** Check model is installed: `claude-voice model list`. Re-download if needed: `claude-voice model download whisper-small`.
138
190
 
139
191
  ## License
140
192
 
@@ -34,7 +34,7 @@
34
34
  "provider": "sherpa-onnx",
35
35
  "language": "en",
36
36
  "sherpaOnnx": {
37
- "model": "whisper-tiny"
37
+ "model": "whisper-small"
38
38
  },
39
39
  "whisperLocal": {
40
40
  "model": "base",
@@ -13,6 +13,7 @@ export declare class PicovoiceDetector extends EventEmitter {
13
13
  private recordingProcess;
14
14
  constructor(wakeWordConfig: WakeWordConfig, recordingConfig: RecordingConfig);
15
15
  initialize(): Promise<void>;
16
+ private findCustomKeywordPath;
16
17
  start(): Promise<void>;
17
18
  private tryPvRecorder;
18
19
  private readFrames;
@@ -1 +1 @@
1
- {"version":3,"file":"picovoice-detector.d.ts","sourceRoot":"","sources":["../../src/wake-word/picovoice-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAsB5D,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,gBAAgB,CAAyC;gBAErD,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe;IAMtE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBd,aAAa;YAgBb,UAAU;IAkDxB,OAAO,CAAC,iBAAiB;IAqFzB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,8BAA8B;IA6BtC,OAAO,CAAC,eAAe;IAavB,IAAI,IAAI,IAAI;IAoBZ,OAAO,IAAI,IAAI;IAsBf,gBAAgB,IAAI,IAAI;IAQxB,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"picovoice-detector.d.ts","sourceRoot":"","sources":["../../src/wake-word/picovoice-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAsB5D,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IAEzC,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,gBAAgB,CAAyC;gBAErD,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,eAAe;IAMtE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8CjC,OAAO,CAAC,qBAAqB;IAgBvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBd,aAAa;YAgBb,UAAU;IAkDxB,OAAO,CAAC,iBAAiB;IAqFzB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,8BAA8B;IA6BtC,OAAO,CAAC,eAAe;IAavB,IAAI,IAAI,IAAI;IAoBZ,OAAO,IAAI,IAAI;IAsBf,gBAAgB,IAAI,IAAI;IAQxB,KAAK,IAAI,IAAI;IAIb,MAAM,IAAI,IAAI;CAGf"}
@@ -36,6 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
36
36
  exports.PicovoiceDetector = void 0;
37
37
  const events_1 = require("events");
38
38
  const child_process_1 = require("child_process");
39
+ const path = __importStar(require("path"));
40
+ const fs = __importStar(require("fs"));
39
41
  const platform_1 = require("../platform");
40
42
  const audio_1 = require("../utils/audio");
41
43
  // Built-in Porcupine keywords
@@ -86,18 +88,26 @@ class PicovoiceDetector extends events_1.EventEmitter {
86
88
  try {
87
89
  // Dynamic import for picovoice
88
90
  const { Porcupine, BuiltinKeyword } = await Promise.resolve().then(() => __importStar(require('@picovoice/porcupine-node')));
89
- // Get keyword
91
+ // Get keyword - check for custom .ppn file first
90
92
  const keywordLower = this.config.keyword.toLowerCase();
91
- const builtinName = BUILTIN_KEYWORDS[keywordLower];
92
- if (!builtinName) {
93
- console.warn(`Keyword "${this.config.keyword}" is not a built-in Porcupine keyword.`);
94
- console.warn(`Available: ${Object.keys(BUILTIN_KEYWORDS).join(', ')}`);
95
- return;
93
+ const customPpnPath = this.findCustomKeywordPath(keywordLower);
94
+ if (customPpnPath) {
95
+ // Use custom .ppn model file
96
+ console.log(`Using custom Picovoice keyword: ${customPpnPath}`);
97
+ this.porcupine = new Porcupine(accessKey, [customPpnPath], [this.config.sensitivity]);
98
+ }
99
+ else {
100
+ // Fall back to built-in keyword
101
+ const builtinName = BUILTIN_KEYWORDS[keywordLower];
102
+ if (!builtinName) {
103
+ console.warn(`Keyword "${this.config.keyword}" is not a built-in Porcupine keyword and no .ppn file found.`);
104
+ console.warn(`Available built-in: ${Object.keys(BUILTIN_KEYWORDS).join(', ')}`);
105
+ console.warn(`Custom .ppn files can be placed in ~/.claude-voice/models/`);
106
+ return;
107
+ }
108
+ const keyword = BuiltinKeyword[builtinName];
109
+ this.porcupine = new Porcupine(accessKey, [keyword], [this.config.sensitivity]);
96
110
  }
97
- // Get the built-in keyword enum value
98
- const keyword = BuiltinKeyword[builtinName];
99
- // Create Porcupine instance
100
- this.porcupine = new Porcupine(accessKey, [keyword], [this.config.sensitivity]);
101
111
  console.log(`Picovoice detector initialized (keyword: "${this.config.keyword}")`);
102
112
  }
103
113
  catch (error) {
@@ -105,6 +115,20 @@ class PicovoiceDetector extends events_1.EventEmitter {
105
115
  throw error;
106
116
  }
107
117
  }
118
+ findCustomKeywordPath(keyword) {
119
+ // Normalize keyword: "hey-claude" or "hey_claude" or "hey claude" → "hey-claude.ppn"
120
+ const normalized = keyword.replace(/[\s_]/g, '-');
121
+ const searchPaths = [
122
+ path.join(process.env.HOME || '', '.claude-voice', 'models', `${normalized}.ppn`),
123
+ path.join(__dirname, '..', '..', 'models', `${normalized}.ppn`),
124
+ ];
125
+ for (const p of searchPaths) {
126
+ if (fs.existsSync(p)) {
127
+ return p;
128
+ }
129
+ }
130
+ return null;
131
+ }
108
132
  async start() {
109
133
  if (!this.porcupine) {
110
134
  console.warn('Picovoice detector not initialized');
@@ -1 +1 @@
1
- {"version":3,"file":"picovoice-detector.js","sourceRoot":"","sources":["../../src/wake-word/picovoice-detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picovoice-detector.js","sourceRoot":"","sources":["../../src/wake-word/picovoice-detector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-voice",
3
- "version": "1.5.9",
3
+ "version": "1.5.11",
4
4
  "description": "Voice interface extension for Claude Code - TTS, STT, and wake word detection",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -7,10 +7,8 @@
7
7
  * 2. Install Claude Code hooks
8
8
  * 3. Install Claude Code plugin
9
9
  * 4. Download keyword spotting model for wake word (19MB)
10
- * 5. Check platform-specific audio tools
11
- *
12
- * TTS uses native providers (macOS-say / espeak) for zero-config.
13
- * STT model (whisper-tiny) downloads on first voice command.
10
+ * 5. Download STT model (whisper-small, ~488MB)
11
+ * 6. Check platform-specific audio tools
14
12
  * Uses pure Node.js for downloads (no curl/bzip2 system dependencies)
15
13
  */
16
14
 
@@ -198,7 +196,7 @@ async function runSetup() {
198
196
  let ttsProviderId = platform === 'darwin' ? 'macos-say' : 'espeak';
199
197
 
200
198
  // 1. Create config directory and set up configuration
201
- console.log('Step 1/6: Setting up configuration...');
199
+ console.log('Step 1/7: Setting up configuration...');
202
200
  if (!fs.existsSync(CONFIG_DIR)) {
203
201
  fs.mkdirSync(CONFIG_DIR, { recursive: true });
204
202
  console.log(' [✓] Created config directory');
@@ -224,7 +222,7 @@ async function runSetup() {
224
222
  config.stt = config.stt || {};
225
223
  config.stt.provider = 'sherpa-onnx';
226
224
  config.stt.sherpaOnnx = config.stt.sherpaOnnx || {};
227
- config.stt.sherpaOnnx.model = 'whisper-tiny';
225
+ config.stt.sherpaOnnx.model = 'whisper-small';
228
226
  config.wakeWord = config.wakeWord || {};
229
227
  // Smart wake word provider: prefer openWakeWord if Python 3 is available
230
228
  const pythonCmd = hasPython3();
@@ -241,7 +239,7 @@ async function runSetup() {
241
239
  }
242
240
 
243
241
  // 2. Install Claude Code hooks
244
- console.log('\nStep 2/6: Installing Claude Code hooks...');
242
+ console.log('\nStep 2/7: Installing Claude Code hooks...');
245
243
  try {
246
244
  const settingsFile = installHooks(HOOKS_DIR);
247
245
  console.log(' [✓] Hooks installed');
@@ -251,7 +249,7 @@ async function runSetup() {
251
249
  }
252
250
 
253
251
  // 3. Install Claude Code plugin (skill)
254
- console.log('\nStep 3/6: Installing Claude Code plugin...');
252
+ console.log('\nStep 3/7: Installing Claude Code plugin...');
255
253
  try {
256
254
  const pluginPath = installPlugin(path.join(__dirname, '..'));
257
255
  console.log(' [✓] Plugin installed');
@@ -261,7 +259,7 @@ async function runSetup() {
261
259
  }
262
260
 
263
261
  // 4. Set up wake word detection
264
- console.log('\nStep 4/6: Setting up wake word detection...');
262
+ console.log('\nStep 4/7: Setting up wake word detection...');
265
263
 
266
264
  // Re-read config to check which provider was selected
267
265
  let wakeWordProvider = 'sherpa-onnx';
@@ -330,8 +328,53 @@ async function runSetup() {
330
328
  console.log(' Tip: Install Python 3 + openwakeword for better wake word detection');
331
329
  }
332
330
 
333
- // 5. Install Piper TTS voice for high-quality speech
334
- console.log('\nStep 5/6: Installing Piper TTS voice...');
331
+ // Copy custom Picovoice .ppn keyword files to models dir
332
+ try {
333
+ const ppnSourceDir = path.join(__dirname, '..', 'models');
334
+ if (fs.existsSync(ppnSourceDir)) {
335
+ const ppnFiles = fs.readdirSync(ppnSourceDir).filter(f => f.endsWith('.ppn'));
336
+ if (ppnFiles.length > 0) {
337
+ if (!fs.existsSync(MODELS_DIR)) {
338
+ fs.mkdirSync(MODELS_DIR, { recursive: true });
339
+ }
340
+ for (const ppn of ppnFiles) {
341
+ const src = path.join(ppnSourceDir, ppn);
342
+ const dest = path.join(MODELS_DIR, ppn);
343
+ fs.copyFileSync(src, dest);
344
+ }
345
+ console.log(` [✓] Copied ${ppnFiles.length} Picovoice keyword model(s): ${ppnFiles.join(', ')}`);
346
+ }
347
+ }
348
+ } catch (err) {
349
+ console.log(' [!] Could not copy Picovoice keyword models:', err.message);
350
+ }
351
+
352
+ // 5. Download STT model (whisper-small)
353
+ console.log('\nStep 5/7: Downloading STT model...');
354
+ try {
355
+ const sttModelId = 'whisper-small';
356
+ const sttModelFolder = 'sherpa-onnx-whisper-small';
357
+ const sttModelUrl = 'https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-whisper-small.tar.bz2';
358
+ const sttModelPath = path.join(MODELS_DIR, sttModelFolder);
359
+
360
+ if (fs.existsSync(sttModelPath)) {
361
+ console.log(` [✓] STT model already installed: ${sttModelId}`);
362
+ } else {
363
+ if (!fs.existsSync(MODELS_DIR)) {
364
+ fs.mkdirSync(MODELS_DIR, { recursive: true });
365
+ }
366
+
367
+ console.log(` Model: Whisper Small (~950MB download, ~488MB extracted)`);
368
+ await downloadAndExtract(sttModelUrl, MODELS_DIR, sttModelFolder, sttModelId);
369
+ console.log(` [✓] STT model installed: ${sttModelId}`);
370
+ }
371
+ } catch (err) {
372
+ console.log(' [!] Could not download STT model:', err.message);
373
+ console.log(' Run manually: claude-voice model download whisper-small');
374
+ }
375
+
376
+ // 6. Install Piper TTS voice for high-quality speech
377
+ console.log('\nStep 6/7: Installing Piper TTS voice...');
335
378
  const pythonForPiper = hasPython3();
336
379
  if (pythonForPiper) {
337
380
  try {
@@ -407,8 +450,8 @@ async function runSetup() {
407
450
  console.log(` Using ${ttsProvider} (native TTS)`);
408
451
  }
409
452
 
410
- // 6. Check platform-specific audio tools
411
- console.log('\nStep 6/6: Checking audio tools...');
453
+ // 7. Check platform-specific audio tools
454
+ console.log('\nStep 7/7: Checking audio tools...');
412
455
 
413
456
  if (platform === 'darwin') {
414
457
  console.log(' [✓] TTS: macOS Say (built-in)');
@@ -494,11 +537,12 @@ async function runSetup() {
494
537
  }
495
538
  }
496
539
 
497
- // STT model downloads on first use - just note it
540
+ // Check STT model
541
+ const whisperSmall = path.join(MODELS_DIR, 'sherpa-onnx-whisper-small');
498
542
  const whisperTiny = path.join(MODELS_DIR, 'sherpa-onnx-whisper-tiny');
499
543
  const whisperBase = path.join(MODELS_DIR, 'sherpa-onnx-whisper-base');
500
- if (!fs.existsSync(whisperTiny) && !fs.existsSync(whisperBase)) {
501
- console.log(' [i] STT model (whisper-tiny, 75MB) will download on first voice command');
544
+ if (!fs.existsSync(whisperSmall) && !fs.existsSync(whisperTiny) && !fs.existsSync(whisperBase)) {
545
+ installationIssues.push('STT model not installed. Run: claude-voice model download whisper-small');
502
546
  } else {
503
547
  console.log(' [✓] STT model installed');
504
548
  }
@@ -536,7 +580,7 @@ async function runSetup() {
536
580
  console.log(' The extension will auto-start when you launch Claude Code.');
537
581
  const ttsLabel = ttsProviderId === 'piper' ? `${ttsProvider} (neural voice: en_US-joe-medium)` : `${ttsProvider} (native)`;
538
582
  console.log(` TTS: ${ttsLabel}`);
539
- console.log(' STT: Sherpa-ONNX Whisper (downloads on first use)');
583
+ console.log(' STT: Sherpa-ONNX Whisper Small');
540
584
  const wakeWordName = wakeWordProvider === 'openwakeword' ? 'openWakeWord' : 'Sherpa-ONNX KWS';
541
585
  const wakeWordPhrase = wakeWordProvider === 'openwakeword' ? 'Hey Jarvis' : 'Jarvis';
542
586
  console.log(` Wake Word: ${wakeWordName} - Say "${wakeWordPhrase}" to start speaking.\n`);