agentvibes 5.6.0 → 5.6.2
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/.agentvibes/config.json +3 -38
- package/.claude/config/audio-effects.cfg +1 -1
- package/.claude/config/background-music-enabled.txt +1 -1
- package/.claude/config/background-music-position.txt +6 -6
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/play-tts-ssh-remote.sh +119 -42
- package/.claude/hooks/play-tts-windows-receiver.sh +31 -0
- package/.claude/hooks/stop.sh +2 -27
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
- package/.claude/hooks-windows/play-tts.ps1 +58 -8
- package/.claude/piper-voices-dir.txt +1 -1
- package/.clawdbot/skill/README.md +326 -0
- package/.mcp.json +17 -27
- package/README.md +15 -2
- package/RELEASE_NOTES.md +64 -0
- package/bin/agent-vibes +39 -39
- package/package.json +1 -1
- package/src/bmad-detector.js +71 -71
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/commands/install-mcp.js +476 -476
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/modals/modal-overlay.js +247 -247
- package/src/console/navigation.js +5 -1
- package/src/console/tabs/agents-tab.js +5 -5
- package/src/console/tabs/help-tab.js +314 -314
- package/src/console/tabs/readme-tab.js +272 -272
- package/src/console/tabs/setup-tab.js +32 -17
- package/src/console/tabs/voices-tab.js +2 -2
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +213 -213
- package/src/console/widgets/reverb-picker.js +97 -97
- package/src/console/widgets/track-picker.js +1 -1
- package/src/i18n/de.js +202 -202
- package/src/i18n/es.js +202 -202
- package/src/i18n/fr.js +202 -202
- package/src/i18n/hi.js +202 -202
- package/src/i18n/ja.js +202 -202
- package/src/i18n/ko.js +202 -202
- package/src/i18n/pt.js +202 -202
- package/src/i18n/strings.js +54 -54
- package/src/i18n/zh-CN.js +202 -202
- package/src/installer/language-screen.js +31 -31
- package/src/installer/music-file-input.js +304 -304
- package/src/services/agent-voice-store.js +420 -423
- package/src/services/config-service.js +264 -264
- package/src/services/language-service.js +47 -47
- package/src/services/llm-provider-service.js +11 -4
- package/src/services/navigation-service.js +34 -10
- package/src/services/provider-service.js +143 -143
- package/src/utils/audio-duration-validator.js +298 -298
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -469
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/list-formatter.js +194 -194
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +136 -136
- package/src/utils/secure-music-storage.js +412 -412
- package/.agentvibes/LITE-MODE.md +0 -236
- package/.agentvibes/README.md +0 -136
- package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +0 -141
- package/.agentvibes/backups/agents/analyst_20260204_144958.md +0 -78
- package/.agentvibes/backups/agents/architect_20260204_144958.md +0 -72
- package/.agentvibes/backups/agents/dev_20260204_144958.md +0 -74
- package/.agentvibes/backups/agents/pm_20260204_144958.md +0 -72
- package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +0 -64
- package/.agentvibes/backups/agents/sm_20260204_144958.md +0 -87
- package/.agentvibes/backups/agents/tea_20260204_144958.md +0 -79
- package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +0 -82
- package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +0 -80
- package/.agentvibes/config/README-personality-defaults.md +0 -162
- package/.agentvibes/config/agentvibes.json +0 -1
- package/.agentvibes/config/mode.txt +0 -1
- package/.agentvibes/config/personality-voice-defaults.default.json +0 -21
- package/.agentvibes/config/save-audio.txt +0 -1
- package/.agentvibes/config/voice-metadata.json +0 -160
- package/.agentvibes/hooks/help.sh +0 -191
- package/.agentvibes/hooks/post-tool-use-lite.sh +0 -111
- package/.agentvibes/hooks/save-audio-manager.sh +0 -162
- package/.agentvibes/hooks/session-start-full-optimized.sh +0 -102
- package/.agentvibes/hooks/session-start-full.sh +0 -142
- package/.agentvibes/hooks/session-start-lite-v2.sh +0 -34
- package/.agentvibes/hooks/session-start-lite.sh +0 -29
- package/.agentvibes/hooks/stop-lite.sh +0 -115
- package/.agentvibes/hooks/switch-mode.sh +0 -215
- package/.agentvibes/output-styles/audio-summary.md +0 -30
- package/.claude/audio/voice-samples/piper/alan.wav +0 -0
- package/.claude/audio/voice-samples/piper/amy.wav +0 -0
- package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
- package/.claude/audio/voice-samples/piper/joe.wav +0 -0
- package/.claude/audio/voice-samples/piper/john.wav +0 -0
- package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
- package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
- package/.claude/audio/voice-samples/piper/linda.wav +0 -0
- package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
- package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
- package/.claude/hooks/post-response.sh +0 -41
- package/bin/ensure-soprano-running.sh +0 -43
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
#
|
|
2
2
|
# File: .claude/hooks-windows/play-tts.ps1
|
|
3
3
|
#
|
|
4
4
|
# AgentVibes - Windows TTS Router
|
|
@@ -19,6 +19,18 @@ param(
|
|
|
19
19
|
[string]$llm = ""
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
+
# Text-file handoff: the SSH receiver watcher writes long/special-char text to
|
|
23
|
+
# a UTF-8 temp file and passes the sentinel "__from_file__" on the command line
|
|
24
|
+
# to avoid Windows CLI argument mangling. Load the real text here.
|
|
25
|
+
if ($Text -eq "__from_file__" -and $env:AGENTVIBES_TEXT_FILE) {
|
|
26
|
+
if (Test-Path $env:AGENTVIBES_TEXT_FILE) {
|
|
27
|
+
$Text = [System.IO.File]::ReadAllText($env:AGENTVIBES_TEXT_FILE, [System.Text.UTF8Encoding]::new($false))
|
|
28
|
+
} else {
|
|
29
|
+
Write-Error "AGENTVIBES_TEXT_FILE set to missing path: $($env:AGENTVIBES_TEXT_FILE)"
|
|
30
|
+
exit 1
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
22
34
|
# Configuration paths
|
|
23
35
|
# First check if we're running from a project directory with .claude
|
|
24
36
|
$ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
@@ -53,11 +65,13 @@ if (Test-Path $ProviderFile) {
|
|
|
53
65
|
$ProviderScript = ""
|
|
54
66
|
|
|
55
67
|
switch ($ActiveProvider) {
|
|
56
|
-
"windows-sapi" {
|
|
57
|
-
$ProviderScript = "$HooksDir\play-tts-
|
|
68
|
+
{ $_ -in "sapi", "windows-sapi" } {
|
|
69
|
+
$ProviderScript = "$HooksDir\play-tts-sapi.ps1"
|
|
70
|
+
if (-not (Test-Path $ProviderScript)) { $ProviderScript = "$HooksDir\play-tts-windows-sapi.ps1" }
|
|
58
71
|
}
|
|
59
|
-
"windows-piper" {
|
|
60
|
-
$ProviderScript = "$HooksDir\play-tts-
|
|
72
|
+
{ $_ -in "piper", "windows-piper" } {
|
|
73
|
+
$ProviderScript = "$HooksDir\play-tts-piper.ps1"
|
|
74
|
+
if (-not (Test-Path $ProviderScript)) { $ProviderScript = "$HooksDir\play-tts-windows-piper.ps1" }
|
|
61
75
|
}
|
|
62
76
|
"soprano" {
|
|
63
77
|
$ProviderScript = "$HooksDir\play-tts-soprano.ps1"
|
|
@@ -83,6 +97,16 @@ if (Test-Path $BgEnabledFile) {
|
|
|
83
97
|
$BgEnabled = (Get-Content $BgEnabledFile -Raw).Trim() -eq "true"
|
|
84
98
|
}
|
|
85
99
|
|
|
100
|
+
# Per-message overrides from SSH/remote payload (set by the queue watcher).
|
|
101
|
+
# These allow remote senders (Hermes, SSH remote provider) to override music,
|
|
102
|
+
# volume, and effects for a single message without mutating persistent config.
|
|
103
|
+
$OverrideMusic = if ($env:AGENTVIBES_OVERRIDE_MUSIC) { $env:AGENTVIBES_OVERRIDE_MUSIC.Trim() } else { "" }
|
|
104
|
+
$OverrideVolume = if ($env:AGENTVIBES_OVERRIDE_VOLUME) { $env:AGENTVIBES_OVERRIDE_VOLUME.Trim() } else { "" }
|
|
105
|
+
$OverrideEffects = if ($env:AGENTVIBES_OVERRIDE_EFFECTS) { $env:AGENTVIBES_OVERRIDE_EFFECTS.Trim() } else { "" }
|
|
106
|
+
|
|
107
|
+
# If a music override is set, force background music on for this message
|
|
108
|
+
if ($OverrideMusic -ne "") { $BgEnabled = $true }
|
|
109
|
+
|
|
86
110
|
# Check if reverb is enabled (allowlist validation)
|
|
87
111
|
$ReverbLevel = "off"
|
|
88
112
|
$ReverbFile = "$ConfigDir\reverb-level.txt"
|
|
@@ -92,6 +116,12 @@ if (Test-Path $ReverbFile) {
|
|
|
92
116
|
$ReverbLevel = $reverbVal
|
|
93
117
|
}
|
|
94
118
|
}
|
|
119
|
+
# Per-message reverb override: AGENTVIBES_OVERRIDE_EFFECTS accepts a preset name
|
|
120
|
+
# ("off", "light", "medium", "heavy", "cathedral") — Sox effect strings are Linux-only
|
|
121
|
+
# and are silently ignored on Windows.
|
|
122
|
+
if ($OverrideEffects -ne "" -and $OverrideEffects -in @("off", "light", "medium", "heavy", "cathedral")) {
|
|
123
|
+
$ReverbLevel = $OverrideEffects
|
|
124
|
+
}
|
|
95
125
|
$HasReverb = $ReverbLevel -ne "off"
|
|
96
126
|
|
|
97
127
|
# Check ffmpeg availability for background music mixing or reverb
|
|
@@ -282,12 +312,14 @@ if ($env:AGENTVIBES_VERBOSE -eq "1") {
|
|
|
282
312
|
# ffplay uses libswresample with sinc resampling — no artefacts.
|
|
283
313
|
function Invoke-AudioPlay {
|
|
284
314
|
param([string]$FilePath)
|
|
285
|
-
$
|
|
315
|
+
$ffplayCmd = Get-Command ffplay -ErrorAction SilentlyContinue
|
|
316
|
+
$fp = if ($ffplayCmd) { $ffplayCmd.Source } else { $null }
|
|
286
317
|
if (-not $fp) {
|
|
287
318
|
# Watcher sessions may inherit a minimal PATH — refresh from registry
|
|
288
319
|
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" +
|
|
289
320
|
[System.Environment]::GetEnvironmentVariable("Path","User")
|
|
290
|
-
$
|
|
321
|
+
$ffplayCmd = Get-Command ffplay -ErrorAction SilentlyContinue
|
|
322
|
+
$fp = if ($ffplayCmd) { $ffplayCmd.Source } else { $null }
|
|
291
323
|
}
|
|
292
324
|
if ($fp) {
|
|
293
325
|
& $fp -autoexit -nodisp -loglevel quiet $FilePath 2>$null
|
|
@@ -364,6 +396,21 @@ if (($BgEnabled -or $HasReverb) -and $HasFfmpeg) {
|
|
|
364
396
|
$DefaultTrack = $configTrack
|
|
365
397
|
}
|
|
366
398
|
}
|
|
399
|
+
# Per-message music override from remote payload (e.g. Hermes, SSH remote)
|
|
400
|
+
# Accepts full filename (e.g. "agent_vibes_bachata_v1_loop.mp3") or a
|
|
401
|
+
# keyword (e.g. "bachata") — keyword triggers a glob search in TracksDir.
|
|
402
|
+
if ($OverrideMusic -ne "") {
|
|
403
|
+
if ($OverrideMusic -match '^[a-zA-Z0-9_\-\.]+$') {
|
|
404
|
+
if ($OverrideMusic -match '\.mp3$') {
|
|
405
|
+
# Full filename — use directly
|
|
406
|
+
$DefaultTrack = $OverrideMusic
|
|
407
|
+
} else {
|
|
408
|
+
# Keyword — find first matching track file
|
|
409
|
+
$matched = Get-ChildItem -Path $TracksDir -Filter "*$OverrideMusic*" -File -ErrorAction SilentlyContinue | Select-Object -First 1
|
|
410
|
+
if ($matched) { $DefaultTrack = $matched.Name }
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
}
|
|
367
414
|
$BgTrackPath = Join-Path $TracksDir $DefaultTrack
|
|
368
415
|
# Path containment: verify resolved path stays within tracks directory
|
|
369
416
|
$ResolvedBgTrack = [System.IO.Path]::GetFullPath($BgTrackPath)
|
|
@@ -372,13 +419,16 @@ if (($BgEnabled -or $HasReverb) -and $HasFfmpeg) {
|
|
|
372
419
|
$BgTrackPath = Join-Path $TracksDir "agent_vibes_bachata_v1_loop.mp3"
|
|
373
420
|
}
|
|
374
421
|
|
|
375
|
-
# Get volume (default 0.25)
|
|
422
|
+
# Get volume (default 0.25) — per-message override takes precedence
|
|
376
423
|
$BgVolume = "0.25"
|
|
377
424
|
$VolumeFile = "$ConfigDir\background-music-volume.txt"
|
|
378
425
|
if (Test-Path $VolumeFile) {
|
|
379
426
|
$vol = (Get-Content $VolumeFile -Raw).Trim()
|
|
380
427
|
if ($vol -match '^\d+\.?\d*$') { $BgVolume = $vol }
|
|
381
428
|
}
|
|
429
|
+
if ($OverrideVolume -ne "" -and $OverrideVolume -match '^\d+\.?\d*$') {
|
|
430
|
+
$BgVolume = $OverrideVolume
|
|
431
|
+
}
|
|
382
432
|
|
|
383
433
|
if (Test-Path $BgTrackPath) {
|
|
384
434
|
$MixedFile = $RecentWav.FullName -replace '\.wav$', '-mixed.wav'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
/home/
|
|
1
|
+
/home/administrator/.claude/piper-voices
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
# 🎤 AgentVibes OpenClaw Skill
|
|
2
|
+
|
|
3
|
+
> **Give your voiceless server a voice!** Professional text-to-speech for OpenClaw AI agents running on remote servers, VPS, Mac Minis, or isolated hardware.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/agentvibes)
|
|
6
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
|
+
|
|
8
|
+
**Published by**: Paul Preibisch ([@997Fire](https://x.com/997Fire))
|
|
9
|
+
**ClawHub**: https://clawhub.ai/paulpreibisch/agentvibes-openclaw-skill
|
|
10
|
+
**Full Documentation**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🎯 What This Skill Does
|
|
15
|
+
|
|
16
|
+
AgentVibes adds **professional voice output** to your OpenClaw AI agent using intelligent text streaming—no matter where your agent is running (Mac Mini, VPS, old PC, cloud server).
|
|
17
|
+
|
|
18
|
+
### The Problem
|
|
19
|
+
|
|
20
|
+
You've wisely deployed OpenClaw on isolated hardware for security. But now:
|
|
21
|
+
- Your server has no speakers
|
|
22
|
+
- Your AI agent is mute
|
|
23
|
+
- You're stuck reading text responses
|
|
24
|
+
- Mobile development is clunky
|
|
25
|
+
|
|
26
|
+
### The Solution
|
|
27
|
+
|
|
28
|
+
**Text streaming architecture**: Server sends text → Your device generates voice locally
|
|
29
|
+
|
|
30
|
+
**Benefits:**
|
|
31
|
+
- ✅ 99.9% less bandwidth than audio streaming (200KB vs 800MB per 100 responses)
|
|
32
|
+
- ✅ Works on Linux, macOS, Android
|
|
33
|
+
- ✅ 50+ voices in 30+ languages (free, offline)
|
|
34
|
+
- ✅ Maintains security isolation
|
|
35
|
+
- ✅ Walk, commute, or multitask while your agent talks
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🚀 Quick Start
|
|
40
|
+
|
|
41
|
+
### 1. Install AgentVibes on Your OpenClaw Server
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# On your remote server where OpenClaw runs
|
|
45
|
+
npx agentvibes install
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This installs:
|
|
49
|
+
- Piper TTS engine (free, offline)
|
|
50
|
+
- 50+ professional AI voices
|
|
51
|
+
- Voice management slash commands
|
|
52
|
+
- Text streaming receiver support
|
|
53
|
+
|
|
54
|
+
### 2. Test Voice Output
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Test that TTS works
|
|
58
|
+
/agent-vibes:sample
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
You should hear audio through your device speakers!
|
|
62
|
+
|
|
63
|
+
### 3. Customize Your Voice (Optional)
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# List available voices
|
|
67
|
+
/agent-vibes:list
|
|
68
|
+
|
|
69
|
+
# Preview voices before choosing
|
|
70
|
+
/agent-vibes:preview 5
|
|
71
|
+
|
|
72
|
+
# Switch to your preferred voice
|
|
73
|
+
/agent-vibes:switch en_US-amy-medium
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 📱 Mobile Setup (Walk & Talk)
|
|
79
|
+
|
|
80
|
+
Want your OpenClaw agent to speak to you while walking? Set up the **AgentVibes Receiver**:
|
|
81
|
+
|
|
82
|
+
### For Android (Termux)
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# On your Android phone
|
|
86
|
+
pkg install termux-api openssh python
|
|
87
|
+
pip install agentvibes
|
|
88
|
+
|
|
89
|
+
# On your server, configure SSH host
|
|
90
|
+
echo "android" > ~/.claude/ssh-remote-host.txt
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Now text streams to your phone, generates voice locally, and plays through headphones—no button presses needed!
|
|
94
|
+
|
|
95
|
+
**Full mobile setup**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 🎭 Available Voices
|
|
100
|
+
|
|
101
|
+
### English Voices
|
|
102
|
+
- `en_US-lessac-medium` - Default male (clear, professional)
|
|
103
|
+
- `en_US-amy-medium` - Friendly female
|
|
104
|
+
- `en_US-ryan-high` - High quality male
|
|
105
|
+
- `en_GB-alan-medium` - British male
|
|
106
|
+
|
|
107
|
+
### Romance Languages
|
|
108
|
+
- `es_ES-davefx-medium` - Spanish (Spain)
|
|
109
|
+
- `fr_FR-siwis-medium` - French female
|
|
110
|
+
- `it_IT-riccardo-x_low` - Italian male
|
|
111
|
+
- `pt_BR-faber-medium` - Portuguese (Brazilian)
|
|
112
|
+
|
|
113
|
+
### Asian Languages
|
|
114
|
+
- `ja_JP-ayanami-medium` - Japanese female
|
|
115
|
+
- `zh_CN-huayan-x_low` - Chinese female
|
|
116
|
+
- `ko_KR-kss-medium` - Korean female
|
|
117
|
+
|
|
118
|
+
**And 40+ more voices in 30+ languages!**
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 🎮 Voice Control Commands
|
|
123
|
+
|
|
124
|
+
All commands available in OpenClaw chat:
|
|
125
|
+
|
|
126
|
+
### Voice Selection
|
|
127
|
+
```bash
|
|
128
|
+
/agent-vibes:list # Show all voices
|
|
129
|
+
/agent-vibes:preview 5 # Preview first 5 voices
|
|
130
|
+
/agent-vibes:switch <voice> # Change voice
|
|
131
|
+
/agent-vibes:get # Show current voice
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Playback Control
|
|
135
|
+
```bash
|
|
136
|
+
/agent-vibes:mute # Silence TTS
|
|
137
|
+
/agent-vibes:unmute # Restore voice
|
|
138
|
+
/agent-vibes:replay # Replay last audio
|
|
139
|
+
/agent-vibes:replay 2 # Replay 2nd-to-last
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Advanced
|
|
143
|
+
```bash
|
|
144
|
+
/agent-vibes:provider list # Show TTS providers
|
|
145
|
+
/agent-vibes:set-speed 1.2 # Adjust speech rate
|
|
146
|
+
/agent-vibes:personality # Set voice personality
|
|
147
|
+
/agent-vibes:verbosity high # Control how much AI speaks
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 🔧 Common Use Cases
|
|
153
|
+
|
|
154
|
+
### 1. Code Reviews on the Go
|
|
155
|
+
Walk to a meeting while your AI agent reviews PRs and explains issues verbally.
|
|
156
|
+
|
|
157
|
+
### 2. Hands-Free Development
|
|
158
|
+
Cook dinner while monitoring deployment status or test results via voice.
|
|
159
|
+
|
|
160
|
+
### 3. Commute Learning
|
|
161
|
+
Study new frameworks during your commute—have your agent explain concepts aloud.
|
|
162
|
+
|
|
163
|
+
### 4. Multi-Language Development
|
|
164
|
+
Switch to Spanish, French, or Japanese voices to hear code comments in native languages.
|
|
165
|
+
|
|
166
|
+
### 5. Accessibility
|
|
167
|
+
Fully accessible voice interface for developers who benefit from audio feedback.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 🔒 Security Considerations
|
|
172
|
+
|
|
173
|
+
**⚠️ CRITICAL**: If running OpenClaw on a remote server, read the security guide:
|
|
174
|
+
|
|
175
|
+
https://github.com/paulpreibisch/AgentVibes/blob/master/docs/security-hardening-guide.md
|
|
176
|
+
|
|
177
|
+
**Required security measures:**
|
|
178
|
+
- SSH key-only authentication
|
|
179
|
+
- Non-standard SSH port (e.g., 2222)
|
|
180
|
+
- Firewall configuration (UFW/iptables)
|
|
181
|
+
- Fail2ban for intrusion prevention
|
|
182
|
+
- VPN tunneling (Tailscale recommended)
|
|
183
|
+
|
|
184
|
+
**Never expose OpenClaw directly to the internet without hardening.**
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 🌍 Deployment Options
|
|
189
|
+
|
|
190
|
+
AgentVibes works on all isolated OpenClaw deployments:
|
|
191
|
+
|
|
192
|
+
### Mac Mini
|
|
193
|
+
```bash
|
|
194
|
+
# On your Mac Mini
|
|
195
|
+
npx agentvibes install
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### VPS (AWS, DigitalOcean, Database Mart, etc.)
|
|
199
|
+
```bash
|
|
200
|
+
# On your cloud server
|
|
201
|
+
npx agentvibes install
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Old PC/Laptop (Repurposed Hardware)
|
|
205
|
+
```bash
|
|
206
|
+
# On your dedicated machine
|
|
207
|
+
npx agentvibes install
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Docker Container
|
|
211
|
+
```bash
|
|
212
|
+
# Inside your OpenClaw container
|
|
213
|
+
npx agentvibes install
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## 📊 Bandwidth Comparison
|
|
219
|
+
|
|
220
|
+
**Traditional audio streaming:**
|
|
221
|
+
- 8MB per response
|
|
222
|
+
- 800MB per 100 responses
|
|
223
|
+
- Expensive over cellular
|
|
224
|
+
|
|
225
|
+
**AgentVibes text streaming:**
|
|
226
|
+
- 2KB per response
|
|
227
|
+
- 200KB per 100 responses
|
|
228
|
+
- Negligible cellular cost
|
|
229
|
+
|
|
230
|
+
**Savings: 99.975% bandwidth reduction**
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## 🆘 Troubleshooting
|
|
235
|
+
|
|
236
|
+
### No Audio Output
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Check if Piper is installed
|
|
240
|
+
which piper
|
|
241
|
+
|
|
242
|
+
# Test audio directly
|
|
243
|
+
echo "Hello world" | piper --model en_US-lessac-medium --output_file test.wav
|
|
244
|
+
aplay test.wav # Linux
|
|
245
|
+
afplay test.wav # macOS
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Voice Not Found
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
# List installed voices
|
|
252
|
+
/agent-vibes:list
|
|
253
|
+
|
|
254
|
+
# Download voice if missing
|
|
255
|
+
npx agentvibes install
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### SSH Audio Issues
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
# Verify SSH connection
|
|
262
|
+
ssh your-server "echo Connected"
|
|
263
|
+
|
|
264
|
+
# Check receiver script
|
|
265
|
+
ls ~/.termux/agentvibes-play.sh # Android
|
|
266
|
+
ls ~/.agentvibes/play-remote.sh # Linux/macOS
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Full troubleshooting guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/troubleshooting.md
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
## 📚 Additional Documentation
|
|
274
|
+
|
|
275
|
+
### Full Guides
|
|
276
|
+
- **Main README**: https://github.com/paulpreibisch/AgentVibes
|
|
277
|
+
- **OpenClaw Integration**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
|
|
278
|
+
- **Security Hardening**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/security-hardening-guide.md
|
|
279
|
+
- **Voice Library**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/voice-library.md
|
|
280
|
+
- **Troubleshooting**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/troubleshooting.md
|
|
281
|
+
|
|
282
|
+
### Community
|
|
283
|
+
- **GitHub Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
284
|
+
- **GitHub Discussions**: https://github.com/paulpreibisch/AgentVibes/discussions
|
|
285
|
+
- **Website**: https://agentvibes.org
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 🤝 Contributing
|
|
290
|
+
|
|
291
|
+
AgentVibes is open source (Apache 2.0)! Contributions welcome:
|
|
292
|
+
|
|
293
|
+
- 🐛 Report bugs
|
|
294
|
+
- 💡 Suggest features
|
|
295
|
+
- 🌍 Add voice translations
|
|
296
|
+
- 📝 Improve documentation
|
|
297
|
+
- 🔧 Submit pull requests
|
|
298
|
+
|
|
299
|
+
**Repository**: https://github.com/paulpreibisch/AgentVibes
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## 📄 License
|
|
304
|
+
|
|
305
|
+
Apache License 2.0 - see [LICENSE](https://github.com/paulpreibisch/AgentVibes/blob/master/LICENSE)
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 🙏 Credits
|
|
310
|
+
|
|
311
|
+
**Created by**: Paul Preibisch
|
|
312
|
+
**Twitter/X**: [@997Fire](https://x.com/997Fire)
|
|
313
|
+
**Website**: https://agentvibes.org
|
|
314
|
+
|
|
315
|
+
**Powered by**:
|
|
316
|
+
- [Piper TTS](https://github.com/rhasspy/piper) - Fast, offline neural TTS
|
|
317
|
+
- [Hugging Face Voice Models](https://huggingface.co/rhasspy/piper-voices) - 50+ AI voices
|
|
318
|
+
- [OpenClaw](https://openclaw.ai) - AI assistant framework
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
**⭐ If you find AgentVibes useful, please star the repo on GitHub!**
|
|
323
|
+
|
|
324
|
+
https://github.com/paulpreibisch/AgentVibes
|
|
325
|
+
|
|
326
|
+
Thank you for using AgentVibes! 🎤✨
|
package/.mcp.json
CHANGED
|
@@ -1,38 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
|
-
"
|
|
3
|
+
"agentvibes": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": [
|
|
6
|
+
"-y",
|
|
7
|
+
"--package=agentvibes",
|
|
8
|
+
"agentvibes-mcp-server"
|
|
9
|
+
]
|
|
10
|
+
},
|
|
11
|
+
"firecrawl": {
|
|
4
12
|
"command": "npx",
|
|
5
|
-
"args": [
|
|
13
|
+
"args": [
|
|
14
|
+
"firecrawl-mcp"
|
|
15
|
+
]
|
|
6
16
|
},
|
|
7
|
-
"
|
|
8
|
-
"command": "
|
|
17
|
+
"context7": {
|
|
18
|
+
"command": "npx",
|
|
9
19
|
"args": [
|
|
10
|
-
"
|
|
11
|
-
"-
|
|
12
|
-
"--name",
|
|
13
|
-
"sonarqube-mcp-server-agentvibes",
|
|
14
|
-
"--rm",
|
|
15
|
-
"--dns",
|
|
16
|
-
"8.8.8.8",
|
|
17
|
-
"--dns",
|
|
18
|
-
"8.8.4.4",
|
|
19
|
-
"-e",
|
|
20
|
-
"SONARQUBE_TOKEN",
|
|
21
|
-
"-e",
|
|
22
|
-
"SONARQUBE_ORG",
|
|
23
|
-
"-e",
|
|
24
|
-
"STORAGE_PATH",
|
|
25
|
-
"mcp/sonarqube"
|
|
20
|
+
"-y",
|
|
21
|
+
"@upstash/context7-mcp"
|
|
26
22
|
],
|
|
27
23
|
"env": {
|
|
28
|
-
"
|
|
29
|
-
"SONARQUBE_ORG": "${SONARQUBE_ORG}",
|
|
30
|
-
"STORAGE_PATH": "${STORAGE_PATH}"
|
|
24
|
+
"CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
|
|
31
25
|
}
|
|
32
|
-
},
|
|
33
|
-
"vercel": {
|
|
34
|
-
"type": "sse",
|
|
35
|
-
"url": "https://mcp.vercel.com"
|
|
36
26
|
}
|
|
37
27
|
}
|
|
38
28
|
}
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
|
|
12
12
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
13
13
|
|
|
14
|
-
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.6
|
|
14
|
+
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.6.2
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -40,7 +40,20 @@ Whether you're coding in Claude Code, chatting in Claude Desktop, using Warp Ter
|
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
43
|
-
## 🌟 NEW IN v5.
|
|
43
|
+
## 🌟 NEW IN v5.6.2 — Per-Message Audio Control
|
|
44
|
+
|
|
45
|
+
Remote senders (Hermes, SSH remote provider) can now control **voice, music, reverb, and volume per message** — no persistent config changes needed. Pass any field in the JSON payload and the Windows receiver applies it for that message only.
|
|
46
|
+
|
|
47
|
+
## v5.6.1 — Hermes Agent Integration
|
|
48
|
+
|
|
49
|
+
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/`:
|
|
50
|
+
|
|
51
|
+
- **`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
|
|
52
|
+
- **`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand, supporting laptop and Android targets
|
|
53
|
+
|
|
54
|
+
Also in this release: Windows PS5.1 compatibility fixes for `play-tts.ps1`, modal/hotkey repairs, and BMAD tab now shows all agents.
|
|
55
|
+
|
|
56
|
+
## v5.5 — Per-LLM Audio Routing
|
|
44
57
|
|
|
45
58
|
Give **each LLM its own voice, pretext, and music** — Claude Code, Copilot, and Codex can all sound different without touching global settings.
|
|
46
59
|
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# AgentVibes Release Notes
|
|
2
2
|
|
|
3
|
+
## 🎛️ v5.6.2 — Per-Message Audio Control for Remote Providers
|
|
4
|
+
|
|
5
|
+
**Released:** 2026-05-02
|
|
6
|
+
|
|
7
|
+
### 🎉 Per-Message Override: Voice, Music, Reverb, Volume
|
|
8
|
+
|
|
9
|
+
Remote senders (Hermes, SSH remote provider) can now control every audio parameter **per message** without touching the receiver's persistent config:
|
|
10
|
+
|
|
11
|
+
- **Music** — pass `"music": "bachata"` (keyword) or full filename to switch background track for that message
|
|
12
|
+
- **Volume** — pass `"volume": "0.35"` to adjust music volume for that message
|
|
13
|
+
- **Reverb** — pass `"effects": "medium"` (`off`/`light`/`medium`/`heavy`/`cathedral`) to set reverb per message
|
|
14
|
+
- **Voice** — already worked; now documented with full field reference
|
|
15
|
+
- **Pretext** — pass `"pretext": ""` to suppress the intro prefix for a single message
|
|
16
|
+
|
|
17
|
+
Previously these fields were parsed by the receiver and queued but **never applied** — `play-tts.ps1` didn't read the `AGENTVIBES_OVERRIDE_*` env vars the watcher set. Fixed.
|
|
18
|
+
|
|
19
|
+
### 📚 Hermes Skill: Full Payload Field Reference
|
|
20
|
+
|
|
21
|
+
`agentvibes-target` SKILL.md now documents all 9 JSON payload fields with examples so Hermes (or any AI agent) can say "switch to chillwave", "add reverb", "use a female voice", "remove the intro prefix" — and it just works.
|
|
22
|
+
|
|
23
|
+
### 🐛 Hermes Hook: handler.py + HOOK.yaml now ship in the package
|
|
24
|
+
|
|
25
|
+
`docs/hermes/skills/tts/hermes-agentvibes-hook/` was missing `handler.py` and `HOOK.yaml` — only `SKILL.md` was included. Both files now ship. `handler.py` also reads `AGENTVIBES_MUSIC` from the environment so the default background music is configurable without editing the file.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 🤖 v5.6.1 — Hermes Agent Integration & Windows PS5.1 Fixes
|
|
30
|
+
|
|
31
|
+
**Released:** 2026-05-01
|
|
32
|
+
|
|
33
|
+
### 🎉 Hermes Agent Integration (New!)
|
|
34
|
+
|
|
35
|
+
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/`:
|
|
36
|
+
|
|
37
|
+
**`hermes-agentvibes-hook`** — Auto-speaks every Hermes response via AgentVibes
|
|
38
|
+
- Fires on every `agent:end` event (Telegram, Discord, CLI, etc.)
|
|
39
|
+
- Strips markdown, code blocks, emoji before speaking
|
|
40
|
+
- Truncates at word boundaries, rate-limits to prevent queue flooding
|
|
41
|
+
- MITM-safe SSH with `StrictHostKeyChecking=accept-new` + persistent `known_hosts`
|
|
42
|
+
- Full logging to `tts-hook.log` for debugging
|
|
43
|
+
|
|
44
|
+
**`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand
|
|
45
|
+
- Base64 JSON payload over SSH (same ForceCommand architecture as the Windows receiver)
|
|
46
|
+
- Supports Windows and Android targets
|
|
47
|
+
- Detailed troubleshooting guide included
|
|
48
|
+
|
|
49
|
+
**Install:** Copy the skill to your Hermes home and restart the gateway:
|
|
50
|
+
```bash
|
|
51
|
+
cp -r docs/hermes/skills/tts/hermes-agentvibes-hook ~/.hermes/skills/tts/
|
|
52
|
+
hermes gateway restart
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 🐛 Windows PS5.1 Bug Fixes
|
|
56
|
+
|
|
57
|
+
- **play-tts.ps1 PS5.1 compatibility** — Fixed three regressions from v5.6.0 rebase:
|
|
58
|
+
replaced PS7 null-conditional (`?.`) with PS5.1-compatible if/else, added UTF-8 BOM so
|
|
59
|
+
em-dash literals aren't mangled by CP1252, restored piper provider alias and
|
|
60
|
+
`AGENTVIBES_TEXT_FILE` sentinel lost in merge
|
|
61
|
+
- **Modal & hotkey fixes** — Modal escape key, navigation hotkeys, Q+Caps Lock, and voice
|
|
62
|
+
preview error handling all repaired
|
|
63
|
+
- **BMAD tab** — Now shows all agents regardless of module
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
3
67
|
## 📸 v5.6.0 — TUI Screenshots & Documentation Cleanup
|
|
4
68
|
|
|
5
69
|
**Released:** 2026-04-28
|