agentvibes 2.0.5 → 2.0.6

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 (97) hide show
  1. package/.claude/hooks/piper-voice-manager.sh +37 -4
  2. package/README.md +2 -2
  3. package/package.json +1 -1
  4. package/src/installer.js +244 -21
  5. package/agentvibes.org/.claude/commands/agent-vibes/add.md +0 -21
  6. package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +0 -68
  7. package/agentvibes.org/.claude/commands/agent-vibes/commands.json +0 -53
  8. package/agentvibes.org/.claude/commands/agent-vibes/get.md +0 -9
  9. package/agentvibes.org/.claude/commands/agent-vibes/list.md +0 -13
  10. package/agentvibes.org/.claude/commands/agent-vibes/personality.md +0 -79
  11. package/agentvibes.org/.claude/commands/agent-vibes/preview.md +0 -16
  12. package/agentvibes.org/.claude/commands/agent-vibes/provider.md +0 -54
  13. package/agentvibes.org/.claude/commands/agent-vibes/replay.md +0 -19
  14. package/agentvibes.org/.claude/commands/agent-vibes/sample.md +0 -12
  15. package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +0 -52
  16. package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +0 -47
  17. package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +0 -65
  18. package/agentvibes.org/.claude/commands/agent-vibes/switch.md +0 -53
  19. package/agentvibes.org/.claude/commands/agent-vibes/update.md +0 -20
  20. package/agentvibes.org/.claude/commands/agent-vibes/version.md +0 -10
  21. package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +0 -7
  22. package/agentvibes.org/.claude/journal/2025-10-07.html +0 -373
  23. package/agentvibes.org/.claude/journal/index.html +0 -91
  24. package/agentvibes.org/.mcp-minimal.json +0 -60
  25. package/agentvibes.org/CHANGELOG.md +0 -56
  26. package/agentvibes.org/README.md +0 -93
  27. package/agentvibes.org/app/(auth)/layout.tsx +0 -15
  28. package/agentvibes.org/app/(auth)/reset-password/page.tsx +0 -45
  29. package/agentvibes.org/app/(auth)/signin/page.tsx +0 -82
  30. package/agentvibes.org/app/(auth)/signup/page.tsx +0 -104
  31. package/agentvibes.org/app/(default)/layout.tsx +0 -31
  32. package/agentvibes.org/app/(default)/page.tsx +0 -20
  33. package/agentvibes.org/app/api/hello/route.ts +0 -3
  34. package/agentvibes.org/app/css/additional-styles/theme.css +0 -82
  35. package/agentvibes.org/app/css/additional-styles/utility-patterns.css +0 -55
  36. package/agentvibes.org/app/css/style.css +0 -100
  37. package/agentvibes.org/app/layout.tsx +0 -63
  38. package/agentvibes.org/components/cta.tsx +0 -58
  39. package/agentvibes.org/components/features.tsx +0 -256
  40. package/agentvibes.org/components/hero-home.tsx +0 -133
  41. package/agentvibes.org/components/modal-video.tsx +0 -137
  42. package/agentvibes.org/components/page-illustration.tsx +0 -55
  43. package/agentvibes.org/components/spotlight.tsx +0 -77
  44. package/agentvibes.org/components/testimonials.tsx +0 -282
  45. package/agentvibes.org/components/ui/footer.tsx +0 -82
  46. package/agentvibes.org/components/ui/header.tsx +0 -53
  47. package/agentvibes.org/components/ui/logo.tsx +0 -10
  48. package/agentvibes.org/components/workflows.tsx +0 -176
  49. package/agentvibes.org/next.config.js +0 -4
  50. package/agentvibes.org/package-lock.json +0 -1974
  51. package/agentvibes.org/package.json +0 -30
  52. package/agentvibes.org/pnpm-lock.yaml +0 -1141
  53. package/agentvibes.org/postcss.config.js +0 -5
  54. package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
  55. package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
  56. package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
  57. package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
  58. package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
  59. package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
  60. package/agentvibes.org/public/favicon.ico +0 -0
  61. package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
  62. package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
  63. package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
  64. package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
  65. package/agentvibes.org/public/images/blurred-shape-gray.svg +0 -1
  66. package/agentvibes.org/public/images/blurred-shape.svg +0 -1
  67. package/agentvibes.org/public/images/client-logo-01.svg +0 -1
  68. package/agentvibes.org/public/images/client-logo-02.svg +0 -1
  69. package/agentvibes.org/public/images/client-logo-03.svg +0 -1
  70. package/agentvibes.org/public/images/client-logo-04.svg +0 -1
  71. package/agentvibes.org/public/images/client-logo-05.svg +0 -1
  72. package/agentvibes.org/public/images/client-logo-06.svg +0 -1
  73. package/agentvibes.org/public/images/client-logo-07.svg +0 -1
  74. package/agentvibes.org/public/images/client-logo-08.svg +0 -1
  75. package/agentvibes.org/public/images/client-logo-09.svg +0 -1
  76. package/agentvibes.org/public/images/features.png +0 -0
  77. package/agentvibes.org/public/images/footer-illustration.svg +0 -1
  78. package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
  79. package/agentvibes.org/public/images/logo.svg +0 -1
  80. package/agentvibes.org/public/images/page-illustration.svg +0 -1
  81. package/agentvibes.org/public/images/secondary-illustration.svg +0 -1
  82. package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
  83. package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
  84. package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
  85. package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
  86. package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
  87. package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
  88. package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
  89. package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
  90. package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
  91. package/agentvibes.org/public/images/workflow-01.png +0 -0
  92. package/agentvibes.org/public/images/workflow-02.png +0 -0
  93. package/agentvibes.org/public/images/workflow-03.png +0 -0
  94. package/agentvibes.org/public/videos/video.mp4 +0 -0
  95. package/agentvibes.org/tsconfig.json +0 -28
  96. package/agentvibes.org/utils/useMasonry.tsx +0 -67
  97. package/agentvibes.org/utils/useMousePosition.tsx +0 -27
@@ -17,11 +17,44 @@ PIPER_VOICES_BASE_URL="https://huggingface.co/rhasspy/piper-voices/resolve/main"
17
17
  # @why Voice models are large (~25MB each) and should be shared globally across all projects
18
18
  # @returns Echoes path to voice storage directory (~/.claude/piper-voices)
19
19
  # @sideeffects Creates directory if it doesn't exist
20
- # @architecture Always uses global storage to avoid redundant downloads per project
20
+ # @architecture Supports custom path via PIPER_VOICES_DIR env var, defaults to global storage
21
21
  get_voice_storage_dir() {
22
- # Always use global storage for voice models
23
- # This prevents downloading 125MB+ of models into every project
24
- local voice_dir="$HOME/.claude/piper-voices"
22
+ local voice_dir
23
+
24
+ # Check for custom path in environment or config file
25
+ if [[ -n "$PIPER_VOICES_DIR" ]]; then
26
+ voice_dir="$PIPER_VOICES_DIR"
27
+ else
28
+ # Check for config file (project-local first, then global)
29
+ local config_file
30
+ if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -f "$CLAUDE_PROJECT_DIR/.claude/piper-voices-dir.txt" ]]; then
31
+ config_file="$CLAUDE_PROJECT_DIR/.claude/piper-voices-dir.txt"
32
+ else
33
+ # Search up directory tree for .claude/
34
+ local current_dir="$PWD"
35
+ while [[ "$current_dir" != "/" ]]; do
36
+ if [[ -f "$current_dir/.claude/piper-voices-dir.txt" ]]; then
37
+ config_file="$current_dir/.claude/piper-voices-dir.txt"
38
+ break
39
+ fi
40
+ current_dir=$(dirname "$current_dir")
41
+ done
42
+
43
+ # Check global config
44
+ if [[ -z "$config_file" ]] && [[ -f "$HOME/.claude/piper-voices-dir.txt" ]]; then
45
+ config_file="$HOME/.claude/piper-voices-dir.txt"
46
+ fi
47
+ fi
48
+
49
+ if [[ -n "$config_file" ]]; then
50
+ voice_dir=$(cat "$config_file" | tr -d '[:space:]')
51
+ fi
52
+ fi
53
+
54
+ # Fallback to default global storage
55
+ if [[ -z "$voice_dir" ]]; then
56
+ voice_dir="$HOME/.claude/piper-voices"
57
+ fi
25
58
 
26
59
  mkdir -p "$voice_dir"
27
60
  echo "$voice_dir"
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Publish](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
12
12
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
13
13
 
14
- **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.0.3
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.0.6
15
15
 
16
16
  ---
17
17
 
@@ -45,7 +45,7 @@
45
45
 
46
46
  ## 📰 Latest Release
47
47
 
48
- **[v2.0.0 - The Multi-Provider Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.0.3)** 🎉
48
+ **[v2.0.0 - The Multi-Provider Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.0.6)** 🎉
49
49
 
50
50
  The biggest update ever! **Multi-provider TTS support** (ElevenLabs + Piper TTS), **30+ languages**, expanded voice library (27+ voices), advanced sentiment system, enhanced BMAD integration, and comprehensive multilingual support. Choose between premium ElevenLabs voices or free offline Piper TTS!
51
51
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "agentvibes",
4
- "version": "2.0.5",
4
+ "version": "2.0.6",
5
5
  "description": "Bring your Claude Code sessions to life with voice! Professional TTS narration with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
package/src/installer.js CHANGED
@@ -68,11 +68,9 @@ async function install(options = {}) {
68
68
  // When running via npx, process.cwd() returns the npm cache directory
69
69
  // Use INIT_CWD (set by npm/npx) to get the actual user's working directory
70
70
  const currentDir = process.env.INIT_CWD || process.cwd();
71
- const targetDir = options.directory || currentDir;
72
71
 
73
72
  console.log(chalk.cyan('\n📍 Installation Details:'));
74
73
  console.log(chalk.gray(` Current directory: ${currentDir}`));
75
- console.log(chalk.gray(` Install location: ${targetDir}/.claude/ (project-local)`));
76
74
  console.log(chalk.gray(` Package version: ${VERSION}`));
77
75
 
78
76
  // Show latest release notes from git log
@@ -96,6 +94,224 @@ async function install(options = {}) {
96
94
  // Git not available or not a git repo - skip release notes
97
95
  }
98
96
 
97
+ // Provider selection prompt
98
+ let selectedProvider = 'piper';
99
+ let elevenLabsKey = process.env.ELEVENLABS_API_KEY;
100
+
101
+ if (!options.yes) {
102
+ console.log(chalk.cyan('🎭 Choose Your TTS Provider:\n'));
103
+
104
+ const { provider } = await inquirer.prompt([
105
+ {
106
+ type: 'list',
107
+ name: 'provider',
108
+ message: 'Which TTS provider would you like to use?',
109
+ choices: [
110
+ {
111
+ name: chalk.green('🆓 Piper TTS (Free, Offline)') + chalk.gray(' - 50+ neural voices, no API key needed'),
112
+ value: 'piper',
113
+ },
114
+ {
115
+ name: chalk.cyan('🎤 ElevenLabs (Premium)') + chalk.gray(' - 150+ AI voices, requires API key'),
116
+ value: 'elevenlabs',
117
+ },
118
+ ],
119
+ default: 'piper',
120
+ },
121
+ ]);
122
+
123
+ selectedProvider = provider;
124
+
125
+ // If Piper selected, ask for voice storage location
126
+ let piperVoicesPath = null;
127
+ if (selectedProvider === 'piper') {
128
+ const homeDir = process.env.HOME || process.env.USERPROFILE;
129
+ const defaultPiperPath = path.join(homeDir, '.claude', 'piper-voices');
130
+
131
+ console.log(chalk.cyan('\n📁 Piper Voice Storage Location:\n'));
132
+ console.log(chalk.gray(' Piper voice models are ~25MB each. They can be stored globally'));
133
+ console.log(chalk.gray(' to be shared across all your projects, or locally per project.\n'));
134
+
135
+ const { piperPath } = await inquirer.prompt([
136
+ {
137
+ type: 'input',
138
+ name: 'piperPath',
139
+ message: 'Where should Piper voice models be downloaded?',
140
+ default: defaultPiperPath,
141
+ validate: (input) => {
142
+ if (!input || input.trim() === '') {
143
+ return 'Please provide a valid path';
144
+ }
145
+ return true;
146
+ },
147
+ },
148
+ ]);
149
+
150
+ piperVoicesPath = piperPath;
151
+ console.log(chalk.green(`✓ Piper voices will be stored in: ${piperVoicesPath}`));
152
+ }
153
+
154
+ // If ElevenLabs selected, handle API key
155
+ if (selectedProvider === 'elevenlabs') {
156
+ if (elevenLabsKey) {
157
+ console.log(chalk.green(`\n✓ ElevenLabs API key detected from environment`));
158
+ console.log(chalk.gray(` Key: ${elevenLabsKey.substring(0, 10)}...`));
159
+
160
+ const { useExisting } = await inquirer.prompt([
161
+ {
162
+ type: 'confirm',
163
+ name: 'useExisting',
164
+ message: 'Use this existing API key?',
165
+ default: true,
166
+ },
167
+ ]);
168
+
169
+ if (!useExisting) {
170
+ elevenLabsKey = null;
171
+ }
172
+ }
173
+
174
+ if (!elevenLabsKey) {
175
+ console.log(chalk.yellow('\n⚠️ ElevenLabs API Key Required'));
176
+ console.log(chalk.gray(' Get your free API key at: https://elevenlabs.io'));
177
+ console.log(chalk.gray(' Free tier: 10,000 characters/month\n'));
178
+
179
+ const { setupMethod } = await inquirer.prompt([
180
+ {
181
+ type: 'list',
182
+ name: 'setupMethod',
183
+ message: 'How would you like to set up your API key?',
184
+ choices: [
185
+ {
186
+ name: 'Add to shell config (recommended)',
187
+ value: 'shell',
188
+ },
189
+ {
190
+ name: 'Enter manually (I\'ll set it up myself later)',
191
+ value: 'manual',
192
+ },
193
+ {
194
+ name: 'Skip (use Piper TTS instead)',
195
+ value: 'skip',
196
+ },
197
+ ],
198
+ },
199
+ ]);
200
+
201
+ if (setupMethod === 'skip') {
202
+ console.log(chalk.yellow('\n→ Switching to Piper TTS (free option)\n'));
203
+ selectedProvider = 'piper';
204
+ } else if (setupMethod === 'manual') {
205
+ const { apiKey } = await inquirer.prompt([
206
+ {
207
+ type: 'input',
208
+ name: 'apiKey',
209
+ message: 'Enter your ElevenLabs API key:',
210
+ validate: (input) => input.length > 0 || 'API key cannot be empty',
211
+ },
212
+ ]);
213
+ elevenLabsKey = apiKey;
214
+ console.log(chalk.yellow('\n⚠️ Remember to add this to your environment variables later:'));
215
+ console.log(chalk.gray(` export ELEVENLABS_API_KEY="${apiKey}"\n`));
216
+ } else if (setupMethod === 'shell') {
217
+ const { apiKey } = await inquirer.prompt([
218
+ {
219
+ type: 'input',
220
+ name: 'apiKey',
221
+ message: 'Enter your ElevenLabs API key:',
222
+ validate: (input) => input.length > 0 || 'API key cannot be empty',
223
+ },
224
+ ]);
225
+ elevenLabsKey = apiKey;
226
+
227
+ // Detect shell
228
+ const shell = process.env.SHELL || '';
229
+ let shellConfig = '';
230
+ let shellName = '';
231
+
232
+ if (shell.includes('zsh')) {
233
+ shellConfig = path.join(process.env.HOME, '.zshrc');
234
+ shellName = 'zsh';
235
+ } else if (shell.includes('bash')) {
236
+ shellConfig = path.join(process.env.HOME, '.bashrc');
237
+ shellName = 'bash';
238
+ } else {
239
+ console.log(chalk.yellow('\n⚠️ Could not detect shell type'));
240
+ console.log(chalk.gray(' Please add manually to your shell config:'));
241
+ console.log(chalk.gray(` export ELEVENLABS_API_KEY="${apiKey}"\n`));
242
+ }
243
+
244
+ if (shellConfig && shellName) {
245
+ console.log(chalk.cyan(`\n🐚 Detected shell: ${shellName}`));
246
+ console.log(chalk.gray(` Config file: ${shellConfig}`));
247
+
248
+ const { confirmShell } = await inquirer.prompt([
249
+ {
250
+ type: 'confirm',
251
+ name: 'confirmShell',
252
+ message: `Add ELEVENLABS_API_KEY to ${shellConfig}?`,
253
+ default: true,
254
+ },
255
+ ]);
256
+
257
+ if (confirmShell) {
258
+ try {
259
+ const configContent = `\n# ElevenLabs API Key for AgentVibes\nexport ELEVENLABS_API_KEY="${apiKey}"\n`;
260
+ await fs.appendFile(shellConfig, configContent);
261
+ console.log(chalk.green(`\n✓ API key added to ${shellConfig}`));
262
+ console.log(chalk.yellow(' Run this to use immediately: ') + chalk.cyan(`source ${shellConfig}`));
263
+ } catch (error) {
264
+ console.log(chalk.red(`\n✗ Failed to write to ${shellConfig}`));
265
+ console.log(chalk.gray(' Please add manually:'));
266
+ console.log(chalk.gray(` export ELEVENLABS_API_KEY="${apiKey}"\n`));
267
+ }
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+
274
+ console.log(''); // Spacing
275
+ } else {
276
+ console.log(chalk.green('✓ Auto-confirmed (--yes flag)'));
277
+ // Auto-detect provider based on API key
278
+ if (elevenLabsKey) {
279
+ selectedProvider = 'elevenlabs';
280
+ console.log(chalk.green('✓ Using ElevenLabs (API key detected)\n'));
281
+ } else {
282
+ selectedProvider = 'piper';
283
+ console.log(chalk.green('✓ Using Piper TTS (free option)\n'));
284
+ }
285
+ }
286
+
287
+ // Ask for installation directory
288
+ let targetDir = options.directory || currentDir;
289
+
290
+ if (!options.yes) {
291
+ console.log(chalk.cyan('\n📂 AgentVibes Installation Location:\n'));
292
+ console.log(chalk.gray(' AgentVibes will be installed in the .claude/ subdirectory'));
293
+ console.log(chalk.gray(' of your chosen location.\n'));
294
+
295
+ const { installDir } = await inquirer.prompt([
296
+ {
297
+ type: 'input',
298
+ name: 'installDir',
299
+ message: 'Where should AgentVibes be installed?',
300
+ default: currentDir,
301
+ validate: (input) => {
302
+ if (!input || input.trim() === '') {
303
+ return 'Please provide a valid directory path';
304
+ }
305
+ return true;
306
+ },
307
+ },
308
+ ]);
309
+
310
+ targetDir = installDir;
311
+ console.log(chalk.green(`✓ AgentVibes will be installed in: ${targetDir}/.claude/`));
312
+ }
313
+
314
+ // Show installation summary
99
315
  console.log(chalk.cyan('\n📦 What will be installed:'));
100
316
  console.log(chalk.gray(` • 16 slash commands → ${targetDir}/.claude/commands/agent-vibes/`));
101
317
  console.log(chalk.gray(` • Multi-provider TTS system (ElevenLabs + Piper TTS) → ${targetDir}/.claude/hooks/`));
@@ -112,7 +328,7 @@ async function install(options = {}) {
112
328
  {
113
329
  type: 'confirm',
114
330
  name: 'confirm',
115
- message: chalk.yellow(`Install AgentVibes in ${targetDir}/.claude/ ?`),
331
+ message: chalk.yellow(`Install AgentVibes with ${selectedProvider === 'elevenlabs' ? 'ElevenLabs' : 'Piper TTS'} in ${targetDir}/.claude/ ?`),
116
332
  default: true,
117
333
  },
118
334
  ]);
@@ -121,8 +337,6 @@ async function install(options = {}) {
121
337
  console.log(chalk.red('\n❌ Installation cancelled.\n'));
122
338
  process.exit(0);
123
339
  }
124
- } else {
125
- console.log(chalk.green('✓ Auto-confirmed (--yes flag)\n'));
126
340
  }
127
341
 
128
342
  console.log(''); // Add spacing
@@ -258,24 +472,19 @@ async function install(options = {}) {
258
472
  }
259
473
  spinner.succeed(chalk.green('Installed output styles!\n'));
260
474
 
261
- // Check for API key
262
- spinner.start('Checking ElevenLabs API key...');
263
- const apiKey = process.env.ELEVENLABS_API_KEY;
475
+ // Save provider selection
476
+ spinner.start('Saving provider configuration...');
477
+ const providerConfigPath = path.join(claudeDir, 'tts-provider.txt');
478
+ await fs.writeFile(providerConfigPath, selectedProvider);
264
479
 
265
- if (!apiKey) {
266
- spinner.warn(chalk.yellow('ElevenLabs API key not found!'));
267
- console.log(chalk.yellow('\n⚠️ To use AgentVibes, you need an ElevenLabs API key:\n'));
268
- console.log(chalk.white(' 1. Go to https://elevenlabs.io/'));
269
- console.log(chalk.white(' 2. Sign up or log in (free tier available)'));
270
- console.log(chalk.white(' 3. Copy your API key from the profile section'));
271
- console.log(chalk.white(' 4. Set it in your shell profile:\n'));
272
- console.log(chalk.cyan(' export ELEVENLABS_API_KEY="your-key-here"'));
273
- console.log(chalk.gray('\n Add this to ~/.bashrc or ~/.zshrc to make it permanent\n'));
274
- } else {
275
- spinner.succeed(chalk.green('ElevenLabs API key found!'));
276
- console.log(chalk.gray(` Key: ${apiKey.substring(0, 10)}...\n`));
480
+ // Save Piper voices directory if Piper is selected
481
+ if (selectedProvider === 'piper' && piperVoicesPath) {
482
+ const piperConfigPath = path.join(claudeDir, 'piper-voices-dir.txt');
483
+ await fs.writeFile(piperConfigPath, piperVoicesPath);
277
484
  }
278
485
 
486
+ spinner.succeed(chalk.green(`Provider set to: ${selectedProvider === 'elevenlabs' ? 'ElevenLabs' : 'Piper TTS'}\n`));
487
+
279
488
  // List what was installed
280
489
  console.log(chalk.cyan('📦 Installation Summary:'));
281
490
  console.log(chalk.white(` • ${commandFiles.length} slash commands installed`));
@@ -283,7 +492,21 @@ async function install(options = {}) {
283
492
  console.log(chalk.white(` • ${personalityFiles.length} personality templates installed`));
284
493
  console.log(chalk.white(` • ${outputStyleFiles.length} output styles installed`));
285
494
  console.log(chalk.white(` • Voice manager ready`));
286
- console.log(chalk.white(` • 22 unique ElevenLabs voices available\n`));
495
+
496
+ if (selectedProvider === 'elevenlabs') {
497
+ console.log(chalk.white(` • 27+ ElevenLabs AI voices available`));
498
+ console.log(chalk.white(` • 30+ languages supported`));
499
+ if (elevenLabsKey) {
500
+ console.log(chalk.green(` • ElevenLabs API key configured ✓`));
501
+ } else {
502
+ console.log(chalk.yellow(` • ElevenLabs API key: Set manually later`));
503
+ }
504
+ } else {
505
+ console.log(chalk.white(` • 50+ Piper neural voices available (free!)`));
506
+ console.log(chalk.white(` • 18 languages supported`));
507
+ console.log(chalk.green(` • No API key needed ✓`));
508
+ }
509
+ console.log('');
287
510
 
288
511
  // Show recent changes from git log or RELEASE_NOTES.md
289
512
  try {
@@ -1,21 +0,0 @@
1
- ---
2
- description: Add a new custom ElevenLabs TTS voice
3
- argument-hint: <voice_name> <voice_id>
4
- ---
5
-
6
- Add a new custom ElevenLabs TTS voice to your voice library.
7
-
8
- Usage:
9
- - `/agent-vibes:add "My Custom Voice" abc123xyz456789`
10
- - `/agent-vibes:add Narrator KTPVrSVAEUSJRClDzBw7`
11
-
12
- The voice ID should be a 15-30 character alphanumeric string from your ElevenLabs account.
13
-
14
- To find your voice IDs:
15
- 1. Go to https://elevenlabs.io/app/voice-library
16
- 2. Click on a voice
17
- 3. Copy the voice ID from the URL or settings
18
-
19
- After adding, you can switch to it with `/agent-vibes:switch "Voice Name"`
20
-
21
- !bash .claude/hooks/voice-manager.sh add $ARGUMENTS
@@ -1,68 +0,0 @@
1
- ---
2
- description: ElevenLabs TTS voice management commands
3
- ---
4
-
5
- # 🎤 ElevenLabs Voice Management
6
-
7
- Manage your ElevenLabs text-to-speech voices with these commands:
8
-
9
- ## Available Commands
10
-
11
- ### `/agent-vibes:list [first|last] [N]`
12
- List all available voices, with optional filtering
13
- - `/agent-vibes:list` - Show all voices
14
- - `/agent-vibes:list first 5` - Show first 5 voices
15
- - `/agent-vibes:list last 3` - Show last 3 voices
16
-
17
- ### `/agent-vibes:preview [first|last] [N]`
18
- Preview voices by playing audio samples
19
- - `/agent-vibes:preview` - Preview first 3 voices
20
- - `/agent-vibes:preview 5` - Preview first 5 voices
21
- - `/agent-vibes:preview last 5` - Preview last 5 voices
22
-
23
- ### `/agent-vibes:switch <voice_name>`
24
- Switch to a different default voice
25
- - `/agent-vibes:switch Northern Terry`
26
- - `/agent-vibes:switch "Cowboy Bob"`
27
-
28
- ### `/agent-vibes:get`
29
- Display the currently selected voice
30
-
31
- ### `/agent-vibes:add <name> <voice_id>`
32
- Add a new custom voice from your ElevenLabs account
33
- - `/agent-vibes:add "My Voice" abc123xyz456`
34
-
35
- ### `/agent-vibes:replay [N]`
36
- Replay recently played TTS audio
37
- - `/agent-vibes:replay` - Replay last audio
38
- - `/agent-vibes:replay 1` - Replay most recent
39
- - `/agent-vibes:replay 2` - Replay second-to-last
40
- - `/agent-vibes:replay 3` - Replay third-to-last
41
-
42
- Keeps last 10 audio files in history.
43
-
44
- ### `/agent-vibes:set-pretext <word>`
45
- Set a prefix word/phrase for all TTS messages
46
- - `/agent-vibes:set-pretext AgentVibes` - All TTS starts with "AgentVibes:"
47
- - `/agent-vibes:set-pretext "Project Alpha"` - Custom phrase
48
- - `/agent-vibes:set-pretext ""` - Clear pretext
49
-
50
- Saved locally in `.claude/config/agentvibes.json`
51
-
52
- ## Getting Voice IDs
53
-
54
- To add your own custom voices:
55
- 1. Go to https://elevenlabs.io/app/voice-library
56
- 2. Select or create a voice
57
- 3. Copy the voice ID (15-30 character alphanumeric string)
58
- 4. Use `/agent-vibes:add` to add it
59
-
60
- ## Default Voices
61
-
62
- The system comes with these Character Voices from ElevenLabs:
63
- - Northern Terry, Grandpa Spuds Oxley, Ms. Walker
64
- - Ralf Eisend, Amy, Michael, Jessica Anne Bogart
65
- - Aria, Lutz Laugh, Dr. Von Fusion, Matthew Schmitz
66
- - Demon Monster, Cowboy Bob, Drill Sergeant
67
-
68
- Enjoy your TTS experience! 🎵
@@ -1,53 +0,0 @@
1
- {
2
- "namespace": "agent-vibes",
3
- "commands": [
4
- {
5
- "name": "list",
6
- "description": "List all available ElevenLabs voices"
7
- },
8
- {
9
- "name": "preview",
10
- "description": "Preview ElevenLabs voices by playing audio samples"
11
- },
12
- {
13
- "name": "switch",
14
- "description": "Switch to a different ElevenLabs voice"
15
- },
16
- {
17
- "name": "whoami",
18
- "description": "Display currently selected voice"
19
- },
20
- {
21
- "name": "sample",
22
- "description": "Play a sample with the current or specified voice"
23
- },
24
- {
25
- "name": "replay",
26
- "description": "Replay the last TTS message"
27
- },
28
- {
29
- "name": "personality",
30
- "description": "Manage AI personality settings"
31
- },
32
- {
33
- "name": "sentiment",
34
- "description": "Set temporary personality sentiment"
35
- },
36
- {
37
- "name": "set-pretext",
38
- "description": "Configure pre-TTS message text"
39
- },
40
- {
41
- "name": "set-language",
42
- "description": "Set TTS language for multilingual voices"
43
- },
44
- {
45
- "name": "add",
46
- "description": "Add a new personality"
47
- },
48
- {
49
- "name": "get",
50
- "description": "Get personality details"
51
- }
52
- ]
53
- }
@@ -1,9 +0,0 @@
1
- ---
2
- description: Get the currently selected ElevenLabs TTS voice
3
- ---
4
-
5
- Display the currently selected ElevenLabs TTS voice.
6
-
7
- This shows which voice is currently set as the default for TTS audio generation.
8
-
9
- !bash .claude/hooks/voice-manager.sh get
@@ -1,13 +0,0 @@
1
- ---
2
- description: List available ElevenLabs TTS voices with optional filtering
3
- argument-hint: [first|last] [N]
4
- ---
5
-
6
- List available ElevenLabs TTS voices.
7
-
8
- Usage examples:
9
- - `/agent-vibes:list` - Show all voices
10
- - `/agent-vibes:list first 5` - Show first 5 voices
11
- - `/agent-vibes:list last 3` - Show last 3 voices
12
-
13
- !bash .claude/hooks/voice-manager.sh list $ARGUMENTS
@@ -1,79 +0,0 @@
1
- ---
2
- description: Set or customize the personality style for TTS messages
3
- argument-hint: [personality_name|list|add|edit|get|reset]
4
- ---
5
-
6
- # /agent-vibes:personality
7
-
8
- Set or customize the personality style for TTS messages.
9
-
10
- This command allows you to add character and emotion to your TTS announcements by applying personality modifiers to messages.
11
-
12
- ## Usage
13
-
14
- ```bash
15
- # Set a personality
16
- /agent-vibes:personality flirty
17
- /agent-vibes:personality sarcastic
18
-
19
- # List all personalities
20
- /agent-vibes:personality list
21
-
22
- # Add custom personality
23
- /agent-vibes:personality add cowboy "Howdy partner!" "Yeehaw!"
24
-
25
- # Show current personality
26
- /agent-vibes:personality get
27
-
28
- # Reset to normal
29
- /agent-vibes:personality reset
30
- ```
31
-
32
- ## Available Personalities
33
-
34
- - **normal** - Standard professional tone
35
- - **flirty** - Playful and charming
36
- - **angry** - Frustrated and irritated
37
- - **sassy** - Bold with attitude
38
- - **moody** - Melancholic and brooding
39
- - **funny** - Lighthearted and comedic
40
- - **sarcastic** - Dry wit and irony
41
- - **poetic** - Elegant and lyrical
42
- - **annoying** - Over-enthusiastic
43
- - **professional** - Formal and precise
44
- - **pirate** - Seafaring swagger
45
- - **robot** - Mechanical and precise
46
- - **surfer-dude** - Chill beach vibes
47
- - **millennial** - Internet generation speak
48
- - **zen** - Peaceful and mindful
49
- - **dramatic** - Theatrical flair
50
- - **crass** - Edgy and blunt
51
- - **random** - Picks a different personality each time!
52
-
53
- ## Editing Personalities
54
-
55
- Each personality is stored as a markdown file in `.claude/personalities/`. You can:
56
-
57
- ### Edit existing personalities:
58
- ```bash
59
- /agent-vibes:personality edit flirty
60
- ```
61
- This shows the file path - edit it directly to customize behavior.
62
-
63
- ### Create new personalities:
64
- ```bash
65
- /agent-vibes:personality add cowboy
66
- ```
67
- Creates a new personality file, then edit it to customize.
68
-
69
- ### Personality files contain:
70
- - **Prefix**: Text added before messages
71
- - **Suffix**: Text added after messages
72
- - **AI Instructions**: How the AI should speak
73
- - **Example Responses**: Sample messages
74
-
75
- Files are located in `.claude/personalities/[name].md`
76
-
77
- ## Implementation
78
-
79
- !bash .claude/hooks/personality-manager.sh $ARGUMENTS
@@ -1,16 +0,0 @@
1
- ---
2
- description: Preview ElevenLabs TTS voices by playing audio samples
3
- argument-hint: [voice_name|first|last] [N]
4
- ---
5
-
6
- Preview ElevenLabs TTS voices by playing audio samples.
7
-
8
- Usage examples:
9
- - `/agent-vibes:preview` - Preview first 3 voices (default)
10
- - `/agent-vibes:preview 5` - Preview first 5 voices
11
- - `/agent-vibes:preview Jessica` - Preview Jessica Anne Bogart voice
12
- - `/agent-vibes:preview "Northern Terry"` - Preview Northern Terry voice
13
- - `/agent-vibes:preview first 10` - Preview first 10 voices
14
- - `/agent-vibes:preview last 5` - Preview last 5 voices
15
-
16
- !bash .claude/hooks/voice-manager.sh preview $ARGUMENTS