agentvibes 5.5.0 → 5.6.1

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 (100) hide show
  1. package/.agentvibes/config.json +3 -30
  2. package/.claude/config/background-music-enabled.txt +1 -1
  3. package/.claude/config/background-music-position.txt +6 -6
  4. package/.claude/github-star-reminder.txt +1 -1
  5. package/.claude/hooks/play-tts-ssh-remote.sh +119 -42
  6. package/.claude/hooks/play-tts-windows-receiver.sh +31 -0
  7. package/.claude/hooks/stop.sh +2 -27
  8. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
  9. package/.claude/hooks-windows/play-tts.ps1 +23 -7
  10. package/.claude/piper-voices-dir.txt +1 -1
  11. package/.clawdbot/skill/README.md +326 -0
  12. package/.mcp.json +17 -27
  13. package/README.md +73 -82
  14. package/RELEASE_NOTES.md +61 -0
  15. package/bin/agent-vibes +39 -39
  16. package/package.json +1 -1
  17. package/src/bmad-detector.js +71 -71
  18. package/src/cli/list-personalities.js +110 -110
  19. package/src/cli/list-voices.js +114 -114
  20. package/src/commands/bmad-voices.js +394 -394
  21. package/src/commands/install-mcp.js +476 -476
  22. package/src/console/brand-colors.js +13 -13
  23. package/src/console/constants/personalities.js +44 -44
  24. package/src/console/modals/modal-overlay.js +247 -247
  25. package/src/console/navigation.js +5 -1
  26. package/src/console/tabs/agents-tab.js +5 -5
  27. package/src/console/tabs/help-tab.js +314 -314
  28. package/src/console/tabs/readme-tab.js +272 -272
  29. package/src/console/tabs/setup-tab.js +32 -17
  30. package/src/console/tabs/voices-tab.js +2 -2
  31. package/src/console/widgets/destroy-list.js +25 -25
  32. package/src/console/widgets/notice.js +55 -55
  33. package/src/console/widgets/personality-picker.js +213 -213
  34. package/src/console/widgets/reverb-picker.js +97 -97
  35. package/src/console/widgets/track-picker.js +1 -1
  36. package/src/i18n/de.js +202 -202
  37. package/src/i18n/es.js +202 -202
  38. package/src/i18n/fr.js +202 -202
  39. package/src/i18n/hi.js +202 -202
  40. package/src/i18n/ja.js +202 -202
  41. package/src/i18n/ko.js +202 -202
  42. package/src/i18n/pt.js +202 -202
  43. package/src/i18n/strings.js +54 -54
  44. package/src/i18n/zh-CN.js +202 -202
  45. package/src/installer/language-screen.js +31 -31
  46. package/src/installer/music-file-input.js +304 -304
  47. package/src/services/agent-voice-store.js +420 -423
  48. package/src/services/config-service.js +264 -264
  49. package/src/services/language-service.js +47 -47
  50. package/src/services/llm-provider-service.js +11 -4
  51. package/src/services/navigation-service.js +34 -10
  52. package/src/services/provider-service.js +143 -143
  53. package/src/utils/audio-duration-validator.js +298 -298
  54. package/src/utils/audio-format-validator.js +277 -277
  55. package/src/utils/dependency-checker.js +469 -469
  56. package/src/utils/file-ownership-verifier.js +358 -358
  57. package/src/utils/list-formatter.js +194 -194
  58. package/src/utils/music-file-validator.js +285 -285
  59. package/src/utils/preview-list-prompt.js +136 -136
  60. package/src/utils/secure-music-storage.js +412 -412
  61. package/.agentvibes/LITE-MODE.md +0 -236
  62. package/.agentvibes/README.md +0 -136
  63. package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +0 -141
  64. package/.agentvibes/backups/agents/analyst_20260204_144958.md +0 -78
  65. package/.agentvibes/backups/agents/architect_20260204_144958.md +0 -72
  66. package/.agentvibes/backups/agents/dev_20260204_144958.md +0 -74
  67. package/.agentvibes/backups/agents/pm_20260204_144958.md +0 -72
  68. package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +0 -64
  69. package/.agentvibes/backups/agents/sm_20260204_144958.md +0 -87
  70. package/.agentvibes/backups/agents/tea_20260204_144958.md +0 -79
  71. package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +0 -82
  72. package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +0 -80
  73. package/.agentvibes/config/README-personality-defaults.md +0 -162
  74. package/.agentvibes/config/agentvibes.json +0 -1
  75. package/.agentvibes/config/mode.txt +0 -1
  76. package/.agentvibes/config/personality-voice-defaults.default.json +0 -21
  77. package/.agentvibes/config/save-audio.txt +0 -1
  78. package/.agentvibes/config/voice-metadata.json +0 -160
  79. package/.agentvibes/hooks/help.sh +0 -191
  80. package/.agentvibes/hooks/post-tool-use-lite.sh +0 -111
  81. package/.agentvibes/hooks/save-audio-manager.sh +0 -162
  82. package/.agentvibes/hooks/session-start-full-optimized.sh +0 -102
  83. package/.agentvibes/hooks/session-start-full.sh +0 -142
  84. package/.agentvibes/hooks/session-start-lite-v2.sh +0 -34
  85. package/.agentvibes/hooks/session-start-lite.sh +0 -29
  86. package/.agentvibes/hooks/stop-lite.sh +0 -115
  87. package/.agentvibes/hooks/switch-mode.sh +0 -215
  88. package/.agentvibes/output-styles/audio-summary.md +0 -30
  89. package/.claude/audio/voice-samples/piper/alan.wav +0 -0
  90. package/.claude/audio/voice-samples/piper/amy.wav +0 -0
  91. package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
  92. package/.claude/audio/voice-samples/piper/joe.wav +0 -0
  93. package/.claude/audio/voice-samples/piper/john.wav +0 -0
  94. package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
  95. package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
  96. package/.claude/audio/voice-samples/piper/linda.wav +0 -0
  97. package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
  98. package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
  99. package/.claude/hooks/post-response.sh +0 -41
  100. package/bin/ensure-soprano-running.sh +0 -43
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**: v5.5
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.6.1
15
15
 
16
16
  ---
17
17
 
@@ -40,13 +40,22 @@ Whether you're coding in Claude Code, chatting in Claude Desktop, using Warp Ter
40
40
 
41
41
  ---
42
42
 
43
- ## 🌟 NEW IN v5.5Per-LLM Audio Routing
43
+ ## 🌟 NEW IN v5.6.1Hermes Agent Integration
44
+
45
+ AgentVibes now speaks for **[Hermes Agent](https://github.com/NousResearch/hermes-agent)** — the self-hosted, self-improving AI assistant. Two production-ready skills ship in `docs/hermes/skills/`:
46
+
47
+ - **`hermes-agentvibes-hook`** — Auto-speaks every Hermes response via AgentVibes TTS. Fires on `agent:end`, strips markdown, rate-limits, and ships with full SSH MITM protection
48
+ - **`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand, supporting laptop and Android targets
49
+
50
+ Also in this release: Windows PS5.1 compatibility fixes for `play-tts.ps1`, modal/hotkey repairs, and BMAD tab now shows all agents.
51
+
52
+ ## v5.5 — Per-LLM Audio Routing
44
53
 
45
54
  Give **each LLM its own voice, pretext, and music** — Claude Code, Copilot, and Codex can all sound different without touching global settings.
46
55
 
47
56
  - Add `llm:<name>|...|voice|pretext|engine` rows to `audio-effects.cfg`
48
57
  - MCP server auto-detects which LLM is calling and passes `--llm <key>`
49
- - Configure via **Setup Default → Configure** in the TUI
58
+ - Configure via **Setup tab → Configure** in the TUI
50
59
 
51
60
  Also fixed: Windows installer crash (`spinner.info is not a function`) on **reinstall** with an older global AgentVibes install.
52
61
 
@@ -54,34 +63,20 @@ Also fixed: Windows installer crash (`spinner.info is not a function`) on **rein
54
63
 
55
64
  ## v5.4 — TUI Installer, Spinner Fix & Dependency Cleanup
56
65
 
57
- ### 🎤 Agent Vibes v1.0 Voice Browser
58
-
59
- **🎤 Browse, Sample & Install 914 Voices in Real-Time**
60
-
61
- ```bash
62
- npx agentvibes-voice-browser
63
- ```
66
+ ### 🎤 Voice Browser Browse, Sample & Install 914 Voices
64
67
 
65
- The new **AgentVibes Voice Browser** is an interactive console application that lets you:
68
+ **Built right into the TUI accessible via Setup Configure Voice**
66
69
 
67
- - 🎧 **Hear Before You Choose** - Real-time audio sampling with one keypress
68
- - ⭐ **Mark Your Favorites** - Build your personal voice collection
69
- - 🔍 **Smart Search** - Filter by name, personality, accent, or gender
70
- - 📦 **One-Click Install** - Press 'I' to instantly switch to any voice
71
- - 🎨 **Beautiful Interface** - Stunning terminal UI powered by blessed.js
70
+ - 🎧 **Hear Before You Choose** - Press Space to preview any voice instantly
71
+ - ⭐ **Mark Your Favorites** - Thumbs up/down with `+` / `-`
72
+ - 🔍 **Alpha Jump** - Press any letter to jump to names starting with it
73
+ - 📦 **One-Click Select** - Press Enter to set as your voice
74
+ - 🎨 **Beautiful Interface** - Stunning terminal UI built into AgentVibes
72
75
 
73
76
  **914 Total Voices:**
74
77
  - 904 High-Quality Piper TTS Speakers (libritts-high model)
75
78
  - 10 Hand-Curated Personality Voices
76
79
 
77
- **Perfect for:**
78
- - Finding your ideal AI voice
79
- - Exploring voice characteristics
80
- - Quick voice switching
81
- - Building favorite collections
82
-
83
- Launch now: `npx agentvibes-voice-browser`
84
-
85
80
  ---
86
81
 
87
82
  ### 💬 Intro Text (Pretext) - Your Personal AI Branding
@@ -132,9 +127,11 @@ Configure now: `npx agentvibes config intro-text`
132
127
  **Upload your own background music with battle-tested security!**
133
128
 
134
129
  ```bash
135
- npx agentvibes config music
130
+ npx agentvibes # press M for Music tab
136
131
  ```
137
132
 
133
+ ![AgentVibes Music Tab](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-music.png)
134
+
138
135
  Replace the default background tracks with your own audio files for complete sonic branding.
139
136
 
140
137
  **Supported Formats:**
@@ -252,10 +249,10 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
252
249
  - [📋 Prerequisites](#-prerequisites) - What you actually need (Node.js + optional tools)
253
250
  - [✨ What is AgentVibes?](#-what-is-agentvibes) - Overview & key features
254
251
  - [🌟 NEW FEATURE HIGHLIGHTS](#-new-feature-highlights) - **START HERE!**
255
- - [🎤 Voice Browser v1.0](#-agent-vibes-v10-voice-browser) - Browse & sample 914 voices
252
+ - [🎤 Voices Tab](#-voices-tab) - Browse & sample 914 voices in the TUI
256
253
  - [💬 Intro Text](#-intro-text-pretext---your-personal-ai-branding) - Custom TTS prefixes
257
254
  - [🎵 Custom Background Music](#-custom-background-music---complete-audio-control) - Upload your own tracks
258
- - [📰 Latest Release](#-latest-release) - v3.6.0 "Voice Explorer" with Voice Browser, Friendly Names, Custom Music
255
+ - [📰 Latest Release](#-latest-release) - v5.5.0 with Per-LLM Audio Routing, Windows Installer Resilience
259
256
  - [🪟 Windows Setup Guide for Claude Desktop](mcp-server/WINDOWS_SETUP.md) - Complete Windows installation with WSL & Python
260
257
 
261
258
  ### AgentVibes MCP (Natural Language Control)
@@ -265,7 +262,7 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
265
262
  - [For Claude Code](docs/mcp-setup.md#for-claude-code) - Project-specific setup
266
263
 
267
264
  ### Core Features
268
- - [🎤 AgentVibes Voice Browser](#-agentvibes-voice-browser) - **Browse and sample 914 voices interactively**
265
+ - [🎤 Voices Tab](#-voices-tab) - **Browse and sample 914 voices in the TUI**
269
266
  - [🎤 Commands Reference](#-commands-reference) - All available commands
270
267
  - [🎙️ Verbosity Control](#%EF%B8%8F-verbosity-control) - Control how much Claude speaks (low/medium/high)
271
268
  - [🎭 Personalities vs Sentiments](#-personalities-vs-sentiments) - Two systems explained
@@ -303,20 +300,17 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
303
300
 
304
301
  **[v3.6.0 - "Voice Explorer" Release](https://github.com/paulpreibisch/AgentVibes/releases/tag/v3.6.0)** 🎉
305
302
 
306
- ### 🎤 AgentVibes Voice Browser
303
+ ### 🎤 Voices Tab — Browse & Sample 914 Voices
307
304
 
308
- **Browse and sample 914 voices in real-time!**
305
+ **Built into the TUI launch with `npx agentvibes` then press V**
309
306
 
310
- ```bash
311
- npx agentvibes-voice-browser
312
- ```
307
+ ![AgentVibes Voices Tab](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-voices.png)
313
308
 
314
- Interactive console browser with:
315
- - 🎧 Real-time voice sampling - hear before you choose
309
+ - 🎧 Real-time voice sampling - press Space to hear before you choose
316
310
  - ⭐ Favorite system - mark your top voices
317
311
  - 🔍 Search & filter - find voices by personality, accent, gender
318
- - 📦 One-click install - install directly from browser
319
- - 🎨 Beautiful UI - stunning console interface
312
+ - 📦 One-click select - press Enter to install directly
313
+ - 🎨 Beautiful UI - built into the AgentVibes TUI
320
314
 
321
315
  **914 Total Voices:**
322
316
  - 904 Piper speaker variations (libritts-high)
@@ -379,8 +373,8 @@ npx agentvibes config music
379
373
  # Install AgentVibes
380
374
  npx agentvibes install
381
375
 
382
- # Launch Voice Browser
383
- npx agentvibes-voice-browser
376
+ # Browse voices in the TUI
377
+ npx agentvibes # press V for Voices tab
384
378
  ```
385
379
 
386
380
  **🐞 Bug Fixes in v3.6.0:**
@@ -432,6 +426,12 @@ Just say "Switch to Aria voice" or "Speak in Spanish" instead of typing commands
432
426
  npx agentvibes install
433
427
  ```
434
428
 
429
+ ![AgentVibes Setup Tab — LLM Providers](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-setup.png)
430
+
431
+ Click **Configure** on any LLM to set its voice, pretext, reverb, and music:
432
+
433
+ ![AgentVibes Configure Claude Code Audio](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-configure.png)
434
+
435
435
  ### 2️⃣ Choose Provider (Auto-Detected)
436
436
  - **macOS**: Native `say` provider (100+ voices) ✨
437
437
  - **Linux/WSL**: Piper TTS (50+ free voices) 🎙️
@@ -457,39 +457,37 @@ macOS ships with bash 3.2 (from 2007). After this, everything works perfectly!
457
457
 
458
458
  ---
459
459
 
460
- ## 🎤 AgentVibes Voice Browser
460
+ ## 🎤 Voice Browser
461
461
 
462
- **The easiest way to find your perfect voice!**
463
-
464
- ### Launch the Browser
462
+ **914 voices browse, preview, and select right inside the TUI.**
465
463
 
466
464
  ```bash
467
- npx agentvibes-voice-browser
465
+ npx agentvibes # Setup tab → Configure → Voice (or press V for global voice)
468
466
  ```
469
467
 
468
+ ![AgentVibes Voice Browser](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-voice-browser.png)
469
+
470
470
  ### Features
471
471
 
472
472
  - **914 Voices** - Browse 904 Piper speakers + 10 curated voices
473
- - **Real-Time Sampling** - Press ENTER to hear any voice instantly
474
- - **Favorite System** - Mark favorites for quick access
475
- - **Smart Search** - Filter by name, personality, accent, or gender
476
- - **One-Click Install** - Press 'I' to install and switch to a voice
477
- - **Beautiful UI** - Stunning console interface with blessed.js
473
+ - **Real-Time Sampling** - Press Space to hear any voice instantly
474
+ - **Favorite System** - Thumbs up `+` / thumbs down `-` for quick filtering
475
+ - **Alpha Jump** - Press any letter key to jump to that part of the list
476
+ - **One-Click Select** - Press Enter to install and switch to a voice
477
+ - **Beautiful UI** - Stunning console interface built into AgentVibes
478
478
 
479
479
  ### Keyboard Shortcuts
480
480
 
481
481
  | Key | Action |
482
482
  |-----|--------|
483
- | **ENTER** | Play voice sample |
484
- | **I** | Install/Select voice for AgentVibes |
485
- | **F** | Toggle favorite |
486
- | **/** | Search voices |
487
- | **ESC** | Clear search / Back |
483
+ | **Space** | Preview voice sample |
484
+ | **Enter** | Select/Install voice |
485
+ | **+** | Thumbs up (favorite) |
486
+ | **-** | Thumbs down |
487
+ | **PgUp / PgDn** | Page through list |
488
488
  | **↑/↓** | Navigate list |
489
- | **G** | Jump to top |
490
- | **Shift+G** | Jump to bottom |
491
- | **H** | Show help |
492
- | **Q** | Quit |
489
+ | **a-z** | Jump to names starting with letter |
490
+ | **Esc** | Cancel / close |
493
491
 
494
492
  ### Voice Categories
495
493
 
@@ -505,13 +503,13 @@ npx agentvibes-voice-browser
505
503
 
506
504
  ### Finding Your Perfect Voice
507
505
 
508
- 1. **Launch browser:** `npx agentvibes-voice-browser`
509
- 2. **Search by trait:** Press `/` and type "friendly" or "professional"
510
- 3. **Sample voices:** Navigate with arrows, press ENTER to hear
511
- 4. **Mark favorites:** Press 'F' on voices you like
512
- 5. **Install:** Press 'I' to set as your AgentVibes voice
506
+ 1. **Open voice browser:** Setup tab → Configure → navigate to Voice → Enter
507
+ 2. **Jump alphabetically:** Press a letter key to jump to that name
508
+ 3. **Sample voices:** Navigate with arrows, press Space to hear
509
+ 4. **Mark favorites:** Press `+` on voices you like
510
+ 5. **Select:** Press Enter to set as your voice
513
511
 
514
- **Pro Tip:** Use the search to find voices matching your project's mood!
512
+ **Pro Tip:** Use PgUp/PgDn to page quickly through 900+ voices!
515
513
 
516
514
  [↑ Back to top](#-table-of-contents)
517
515
 
@@ -860,18 +858,13 @@ AgentVibes provides **50+ slash commands** and **natural language MCP equivalent
860
858
 
861
859
  **[→ View Complete Command Reference](docs/commands.md)** - All voice, system, personality, sentiment, language, and BMAD commands with MCP equivalents
862
860
 
863
- ### Voice Browser Commands
861
+ ### Voices Tab Commands
864
862
 
865
863
  ```bash
866
- # Launch voice browser
867
- npx agentvibes-voice-browser
868
-
869
- # Or use global command (if installed globally)
870
- agentvibes-voice-browser
864
+ # Launch the TUI and open Voices tab
865
+ npx agentvibes # then press V
871
866
  ```
872
867
 
873
- **MCP Equivalent:** Currently CLI-only (no MCP command)
874
-
875
868
  ### Intro Text Commands
876
869
 
877
870
  ```bash
@@ -1010,7 +1003,7 @@ Every task acknowledgment plays **twice** - first in English, then in your targe
1010
1003
 
1011
1004
  ## 🗣️ Voice Library
1012
1005
 
1013
- **NEW in v3.6.0:** Use the **[AgentVibes Voice Browser](#-agentvibes-voice-browser)** to browse, sample, and install from 914 voices! Launch with `npx agentvibes-voice-browser`.
1006
+ **Browse voices in the TUI:** Run `npx agentvibes` and press **V** to open the **[Voices Tab](#-voices-tab)** browse, sample, and install from 914 voices without leaving your terminal.
1014
1007
 
1015
1008
  ### Friendly Voice Names
1016
1009
 
@@ -1052,13 +1045,11 @@ The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`)
1052
1045
 
1053
1046
  **Version Support**: AgentVibes supports both BMAD v4 and v6-alpha installations. Version detection is automatic - just install BMAD and AgentVibes will detect and configure itself correctly!
1054
1047
 
1055
- ### 🎭 Party ModeScreenshots
1056
-
1057
- Open the **BMad** tab in the AgentVibes TUI (`npx agentvibes`) to configure which voice each agent uses:
1048
+ ### 🎭 BMad TabAssign a Voice to Every Agent
1058
1049
 
1059
- ![BMAD Party Mode Tab](docs/installation-screenshots/screenshot-bmad-party-mode.png)
1050
+ Open the **BMad** tab in the AgentVibes TUI (`npx agentvibes` → press **B**) to configure which voice, reverb, and pretext each BMAD agent uses:
1060
1051
 
1061
- > 📸 **Don't have a screenshot yet?** Run `npx agentvibes`, switch to the **BMad** tab, and take a screenshot — then save it as `docs/installation-screenshots/screenshot-bmad-party-mode.png`.
1052
+ ![AgentVibes BMad Tab](https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/docs/installation-screenshots/screenshot-bmad.png)
1062
1053
 
1063
1054
  ### 🔊 TTS Injection: How It Works
1064
1055
 
@@ -1882,10 +1873,10 @@ Both do the exact same thing - MCP is more convenient, slash commands are more t
1882
1873
  - **Optional**: sox (audio effects), ffmpeg (background music, padding)
1883
1874
  - All TTS generation works without optional dependencies - they just enhance the experience
1884
1875
 
1885
- ### Voice Browser & New Features
1876
+ ### Voices Tab & New Features
1886
1877
 
1887
- **Q: How do I use the Voice Browser?**
1888
- **A:** Simply run `npx agentvibes-voice-browser` and you'll see an interactive console with 914 voices. Use arrow keys to navigate, ENTER to sample voices, 'I' to install, 'F' to favorite, and '/' to search.
1878
+ **Q: How do I browse and select voices?**
1879
+ **A:** Run `npx agentvibes` and press **V** to open the Voices tab. Use arrow keys to navigate, Space to preview voices, Enter to select/install, F to favorite, and / to search.
1889
1880
 
1890
1881
  **Q: What are friendly voice names?**
1891
1882
  **A:** Instead of technical IDs like `en_US-ryan-high`, you can now use simple names like "Ryan" when switching voices. All 904+ voices have friendly names matched to their characteristics.
@@ -1903,7 +1894,7 @@ Both do the exact same thing - MCP is more convenient, slash commands are more t
1903
1894
  **A:** No! You can type "ryan", "Ryan", or "RYAN" - they all work. The voice resolution is case-insensitive.
1904
1895
 
1905
1896
  **Q: Can I favorite voices without installing them?**
1906
- **A:** Yes! In the Voice Browser, press 'F' to mark any voice as a favorite. Favorites are saved and you can filter to show only favorites later.
1897
+ **A:** Yes! In the Voices tab, press 'F' to mark any voice as a favorite. Favorites are saved and you can filter to show only favorites later.
1907
1898
 
1908
1899
  **Q: Does custom music work with all TTS providers?**
1909
1900
  **A:** Yes! Custom background music works with Piper TTS, Soprano, macOS Say, and Windows SAPI.
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # AgentVibes Release Notes
2
2
 
3
+ ## 🤖 v5.6.1 — Hermes Agent Integration & Windows PS5.1 Fixes
4
+
5
+ **Released:** 2026-05-01
6
+
7
+ ### 🎉 Hermes Agent Integration (New!)
8
+
9
+ AgentVibes now officially supports **[Hermes Agent](https://github.com/NousResearch/hermes-agent)** — the self-hosted, self-improving AI assistant. Two production-ready Hermes skills ship in `docs/hermes/skills/`:
10
+
11
+ **`hermes-agentvibes-hook`** — Auto-speaks every Hermes response via AgentVibes
12
+ - Fires on every `agent:end` event (Telegram, Discord, CLI, etc.)
13
+ - Strips markdown, code blocks, emoji before speaking
14
+ - Truncates at word boundaries, rate-limits to prevent queue flooding
15
+ - MITM-safe SSH with `StrictHostKeyChecking=accept-new` + persistent `known_hosts`
16
+ - Full logging to `tts-hook.log` for debugging
17
+
18
+ **`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand
19
+ - Base64 JSON payload over SSH (same ForceCommand architecture as the Windows receiver)
20
+ - Supports Windows and Android targets
21
+ - Detailed troubleshooting guide included
22
+
23
+ **Install:** Copy the skill to your Hermes home and restart the gateway:
24
+ ```bash
25
+ cp -r docs/hermes/skills/tts/hermes-agentvibes-hook ~/.hermes/skills/tts/
26
+ hermes gateway restart
27
+ ```
28
+
29
+ ### 🐛 Windows PS5.1 Bug Fixes
30
+
31
+ - **play-tts.ps1 PS5.1 compatibility** — Fixed three regressions from v5.6.0 rebase:
32
+ replaced PS7 null-conditional (`?.`) with PS5.1-compatible if/else, added UTF-8 BOM so
33
+ em-dash literals aren't mangled by CP1252, restored piper provider alias and
34
+ `AGENTVIBES_TEXT_FILE` sentinel lost in merge
35
+ - **Modal & hotkey fixes** — Modal escape key, navigation hotkeys, Q+Caps Lock, and voice
36
+ preview error handling all repaired
37
+ - **BMAD tab** — Now shows all agents regardless of module
38
+
39
+ ---
40
+
41
+ ## 📸 v5.6.0 — TUI Screenshots & Documentation Cleanup
42
+
43
+ **Released:** 2026-04-28
44
+
45
+ ### 📸 TUI Screenshots Added
46
+
47
+ Added real screenshots of every major TUI tab to the README:
48
+
49
+ - **Setup tab** — LLM Providers screen (Claude Code, Copilot, Codex, Default)
50
+ - **Configure dialog** — Per-LLM audio config (voice, pretext, reverb, music)
51
+ - **Voice Browser** — Select Voice dialog with alpha-jump, thumbs up/down, 914 voices
52
+ - **Music tab** — Built-in tracks list with preview and toggle
53
+ - **BMad tab** — Agent voice assignment (voice, reverb, music, pretext per agent)
54
+
55
+ ### 🧹 Documentation Cleanup
56
+
57
+ - Removed all `npx agentvibes-voice-browser` references (tool retired, replaced by TUI)
58
+ - Renamed "Voice Browser" section to reflect TUI-native access via Setup → Configure → Voice
59
+ - All image paths now use absolute GitHub raw URLs (renders correctly on npmjs.com)
60
+ - Fixed BMad section placeholder screenshot replaced with real screenshot
61
+
62
+ ---
63
+
3
64
  ## 🎵 v5.5.0 — Per-LLM Audio Routing & Windows Installer Resilience
4
65
 
5
66
  **Released:** 2026-04-27
package/bin/agent-vibes CHANGED
@@ -1,40 +1,40 @@
1
1
  #!/usr/bin/env node
2
-
3
- /**
4
- * AgentVibes - Beautiful ElevenLabs TTS voice commands for Claude Code
5
- * This file ensures proper execution when run via npx
6
- */
7
-
8
- import { execFileSync } from 'node:child_process';
9
- import path from 'node:path';
10
- import fs from 'node:fs';
11
- import { fileURLToPath } from 'node:url';
12
-
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = path.dirname(__filename);
15
-
16
- // Check if we're running in an npx temporary directory
17
- const isNpxExecution = __dirname.includes('_npx') || __dirname.includes('.npm');
18
-
19
- // Get CLI arguments
20
- const arguments_ = process.argv.slice(2);
21
-
22
- // Route through the TUI console (agentvibes.js) which handles install/config/etc
23
- const installerPath = path.join(__dirname, 'agentvibes.js');
24
-
25
- if (!fs.existsSync(installerPath)) {
26
- console.error('Error: Could not find installer.js at', installerPath);
27
- console.error('Current directory:', __dirname);
28
- process.exit(1);
29
- }
30
-
31
- try {
32
- // Security: Use execFileSync with array args to prevent command injection
33
- // Arguments are passed as array elements, not string interpolation
34
- execFileSync('node', [installerPath, ...arguments_], {
35
- stdio: 'inherit',
36
- cwd: path.dirname(__dirname),
37
- });
38
- } catch (error) {
39
- process.exit(error.status || 1);
40
- }
2
+
3
+ /**
4
+ * AgentVibes - Beautiful ElevenLabs TTS voice commands for Claude Code
5
+ * This file ensures proper execution when run via npx
6
+ */
7
+
8
+ import { execFileSync } from 'node:child_process';
9
+ import path from 'node:path';
10
+ import fs from 'node:fs';
11
+ import { fileURLToPath } from 'node:url';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+
16
+ // Check if we're running in an npx temporary directory
17
+ const isNpxExecution = __dirname.includes('_npx') || __dirname.includes('.npm');
18
+
19
+ // Get CLI arguments
20
+ const arguments_ = process.argv.slice(2);
21
+
22
+ // Route through the TUI console (agentvibes.js) which handles install/config/etc
23
+ const installerPath = path.join(__dirname, 'agentvibes.js');
24
+
25
+ if (!fs.existsSync(installerPath)) {
26
+ console.error('Error: Could not find installer.js at', installerPath);
27
+ console.error('Current directory:', __dirname);
28
+ process.exit(1);
29
+ }
30
+
31
+ try {
32
+ // Security: Use execFileSync with array args to prevent command injection
33
+ // Arguments are passed as array elements, not string interpolation
34
+ execFileSync('node', [installerPath, ...arguments_], {
35
+ stdio: 'inherit',
36
+ cwd: path.dirname(__dirname),
37
+ });
38
+ } catch (error) {
39
+ process.exit(error.status || 1);
40
+ }
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": "5.5.0",
4
+ "version": "5.6.1",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code, Claude Desktop (via MCP), and Clawdbot with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
@@ -1,71 +1,71 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs/promises';
3
- import yaml from 'js-yaml';
4
-
5
- /**
6
- * Detect BMAD installation and version
7
- * @param {string} targetDir - Directory to check
8
- * @returns {Promise<Object>} Detection result with version info
9
- */
10
- export async function detectBMAD(targetDir) {
11
- // Check v6 first (newer version) - support both .bmad and bmad paths
12
- // Try .bmad (standard path with dot prefix) first
13
- let v6Manifest = path.join(targetDir, '.bmad/_cfg/manifest.yaml');
14
- let bmadPath = '.bmad';
15
-
16
- try {
17
- await fs.access(v6Manifest);
18
- } catch {
19
- // Try bmad (alternative path without dot prefix)
20
- v6Manifest = path.join(targetDir, 'bmad/_cfg/manifest.yaml');
21
- bmadPath = 'bmad';
22
- try {
23
- await fs.access(v6Manifest);
24
- } catch {
25
- // Neither path found, continue to v4 check
26
- bmadPath = null;
27
- }
28
- }
29
-
30
- if (bmadPath) {
31
- try {
32
- const manifestContent = await fs.readFile(v6Manifest, 'utf8');
33
- const manifest = yaml.load(manifestContent);
34
-
35
- return {
36
- version: 6,
37
- detailedVersion: manifest.installation?.version || '6.0.0-alpha.x',
38
- manifestPath: v6Manifest,
39
- configPath: path.join(targetDir, bmadPath, 'core/config.yaml'),
40
- bmadPath: path.join(targetDir, bmadPath),
41
- installed: true
42
- };
43
- } catch {}
44
- }
45
-
46
- // Check v4 (legacy)
47
- const v4Manifest = path.join(targetDir, '.bmad-core/install-manifest.yaml');
48
- try {
49
- await fs.access(v4Manifest);
50
- return {
51
- version: 4,
52
- detailedVersion: '4.x',
53
- manifestPath: v4Manifest,
54
- configPath: path.join(targetDir, '.bmad-core/config.yaml'),
55
- bmadPath: path.join(targetDir, '.bmad-core'),
56
- installed: true
57
- };
58
- } catch {}
59
-
60
- // Not installed
61
- return { version: null, installed: false };
62
- }
63
-
64
- /**
65
- * Get BMAD configuration file path for detected version
66
- * @param {Object} detection - Result from detectBMAD()
67
- * @returns {string|null} Path to config.yaml or null
68
- */
69
- export function getBMADConfigPath(detection) {
70
- return detection.installed ? detection.configPath : null;
71
- }
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import yaml from 'js-yaml';
4
+
5
+ /**
6
+ * Detect BMAD installation and version
7
+ * @param {string} targetDir - Directory to check
8
+ * @returns {Promise<Object>} Detection result with version info
9
+ */
10
+ export async function detectBMAD(targetDir) {
11
+ // Check v6 first (newer version) - support both .bmad and bmad paths
12
+ // Try .bmad (standard path with dot prefix) first
13
+ let v6Manifest = path.join(targetDir, '.bmad/_cfg/manifest.yaml');
14
+ let bmadPath = '.bmad';
15
+
16
+ try {
17
+ await fs.access(v6Manifest);
18
+ } catch {
19
+ // Try bmad (alternative path without dot prefix)
20
+ v6Manifest = path.join(targetDir, 'bmad/_cfg/manifest.yaml');
21
+ bmadPath = 'bmad';
22
+ try {
23
+ await fs.access(v6Manifest);
24
+ } catch {
25
+ // Neither path found, continue to v4 check
26
+ bmadPath = null;
27
+ }
28
+ }
29
+
30
+ if (bmadPath) {
31
+ try {
32
+ const manifestContent = await fs.readFile(v6Manifest, 'utf8');
33
+ const manifest = yaml.load(manifestContent);
34
+
35
+ return {
36
+ version: 6,
37
+ detailedVersion: manifest.installation?.version || '6.0.0-alpha.x',
38
+ manifestPath: v6Manifest,
39
+ configPath: path.join(targetDir, bmadPath, 'core/config.yaml'),
40
+ bmadPath: path.join(targetDir, bmadPath),
41
+ installed: true
42
+ };
43
+ } catch {}
44
+ }
45
+
46
+ // Check v4 (legacy)
47
+ const v4Manifest = path.join(targetDir, '.bmad-core/install-manifest.yaml');
48
+ try {
49
+ await fs.access(v4Manifest);
50
+ return {
51
+ version: 4,
52
+ detailedVersion: '4.x',
53
+ manifestPath: v4Manifest,
54
+ configPath: path.join(targetDir, '.bmad-core/config.yaml'),
55
+ bmadPath: path.join(targetDir, '.bmad-core'),
56
+ installed: true
57
+ };
58
+ } catch {}
59
+
60
+ // Not installed
61
+ return { version: null, installed: false };
62
+ }
63
+
64
+ /**
65
+ * Get BMAD configuration file path for detected version
66
+ * @param {Object} detection - Result from detectBMAD()
67
+ * @returns {string|null} Path to config.yaml or null
68
+ */
69
+ export function getBMADConfigPath(detection) {
70
+ return detection.installed ? detection.configPath : null;
71
+ }