agentvibes 5.12.0-alpha.0 → 5.13.0
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 +15 -1
- package/.agentvibes/install-manifest.json +342 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/commands/agent-vibes/commands.json +0 -20
- package/.claude/commands/agent-vibes/unmute.md +6 -2
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/audio-effects.cfg +6 -6
- package/.claude/config/audio-effects.cfg.bak-kokoro +7 -0
- package/.claude/config/background-music-enabled.txt +1 -1
- package/.claude/config/background-music-position.txt +27 -0
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/background-music.cfg +1 -0
- package/.claude/config/background-music.txt +1 -0
- package/.claude/config/language.txt +1 -0
- package/.claude/config/personality.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +1 -0
- package/.claude/config/tts-verbosity.txt +1 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/agentvibes-session-id.sh +69 -0
- package/.claude/hooks/bmad-party-speak.sh +20 -4
- package/.claude/hooks/bmad-speak.sh +60 -2
- package/.claude/hooks/bmad-tts-injector.sh +20 -1
- package/.claude/hooks/bmad-voice-manager.sh +25 -3
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +21 -2
- package/.claude/hooks/clawdbot-receiver.sh +19 -1
- package/.claude/hooks/elevenlabs-voices.sh +62 -0
- package/.claude/hooks/kokoro-installer.sh +20 -10
- package/.claude/hooks/language-manager.sh +10 -3
- package/.claude/hooks/party-set-room.sh +71 -0
- package/.claude/hooks/party-stage-roster.py +328 -0
- package/.claude/hooks/personality-manager.sh +19 -2
- package/.claude/hooks/piper-voice-manager.sh +3 -2
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +24 -5
- package/.claude/hooks/play-tts-elevenlabs.sh +38 -118
- package/.claude/hooks/play-tts-kokoro.sh +33 -6
- package/.claude/hooks/play-tts-soprano.sh +3 -2
- package/.claude/hooks/play-tts-ssh-remote.sh +72 -27
- package/.claude/hooks/play-tts-termux-ssh.sh +5 -4
- package/.claude/hooks/play-tts.sh +86 -69
- package/.claude/hooks/provider-catalog.json +352 -0
- package/.claude/hooks/provider-catalog.sh +161 -0
- package/.claude/hooks/provider-commands.sh +2 -1
- package/.claude/hooks/provider-manager.sh +47 -9
- package/.claude/hooks/python-resolver.sh +117 -0
- package/.claude/hooks/session-id.sh +56 -0
- package/.claude/hooks/session-start-tts.sh +39 -0
- package/.claude/hooks/speed-manager.sh +1 -1
- package/.claude/hooks/translate-manager.sh +3 -2
- package/.claude/hooks/translator.py +1 -1
- package/.claude/hooks/voice-manager.sh +242 -10
- package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +119 -0
- package/.claude/hooks-windows/language-manager.ps1 +7 -1
- package/.claude/hooks-windows/personality-manager.ps1 +16 -1
- package/.claude/hooks-windows/play-tts-kokoro.ps1 +20 -4
- package/.claude/hooks-windows/play-tts.ps1 +32 -3
- package/.claude/hooks-windows/provider-catalog.ps1 +140 -0
- package/.claude/hooks-windows/provider-manager.ps1 +63 -8
- package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +153 -0
- package/.claude/hooks-windows/tts-watcher.ps1 +84 -8
- package/.claude/hooks-windows/voice-manager-windows.ps1 +49 -0
- package/.claude/piper-voices-dir.txt +1 -0
- package/.clawdbot/README.md +105 -105
- package/.mcp.json +15 -0
- package/LICENSE +190 -190
- package/README.md +20 -6
- package/RELEASE_NOTES.md +81 -0
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/mcp-server.js +121 -121
- package/bin/test-bmad-pr +78 -78
- package/mcp-server/QUICK_START.md +203 -203
- package/mcp-server/README.md +345 -345
- package/mcp-server/examples/claude_desktop_config.json +11 -11
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
- package/mcp-server/examples/custom_instructions.md +169 -169
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +146 -49
- package/mcp-server/test_mcp_correctness.py +20 -2
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +0 -2
- package/package.json +1 -1
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +115 -11
- package/src/commands/bmad-voices.js +394 -394
- package/src/console/app.js +1 -9
- package/src/console/bling.js +71 -0
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +0 -4
- package/src/console/music-preview.js +79 -0
- package/src/console/navigation.js +0 -1
- package/src/console/tabs/agents-tab.js +14 -2
- package/src/console/tabs/help-tab.js +314 -314
- package/src/console/tabs/music-tab.js +81 -5
- package/src/console/tabs/placeholder-tab.js +0 -2
- package/src/console/tabs/readme-tab.js +272 -272
- package/src/console/tabs/settings-tab.js +207 -14
- package/src/console/tabs/setup-tab.js +39 -36
- package/src/console/tabs/voices-tab.js +102 -23
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/track-picker.js +82 -0
- package/src/installer/language-screen.js +31 -31
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +124 -10
- package/src/services/language-service.js +47 -47
- package/src/services/navigation-service.js +1 -1
- package/src/services/provider-catalog.js +412 -0
- package/src/services/provider-voice-catalog.js +52 -73
- package/src/services/tts-engine-service.js +29 -0
- 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/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +144 -144
- package/src/utils/provider-validator.js +62 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/voice-assignments.json +8244 -8244
- package/.claude/commands/agent-vibes/language.md +0 -23
- package/.claude/commands/agent-vibes/learn.md +0 -67
- package/.claude/commands/agent-vibes/replay-target.md +0 -14
- package/.claude/commands/agent-vibes/target-voice.md +0 -26
- package/.claude/commands/agent-vibes/target.md +0 -30
- package/.claude/hooks/learn-manager.sh +0 -492
- package/.claude/hooks/replay-target-audio.sh +0 -95
- package/.claude/hooks-windows/learn-manager.ps1 +0 -241
|
@@ -31,10 +31,76 @@ try {
|
|
|
31
31
|
try { Rename-Item $f.FullName $procFile -ErrorAction Stop } catch { continue }
|
|
32
32
|
try {
|
|
33
33
|
$req = Get-Content $procFile -Raw | ConvertFrom-Json
|
|
34
|
+
|
|
35
|
+
# Music preview: play/stop a standalone background-music track
|
|
36
|
+
# ASYNCHRONOUSLY (Start-Process) so it never blocks the TTS queue,
|
|
37
|
+
# tracking the ffplay PID so a new request (or an explicit stop)
|
|
38
|
+
# replaces the previous track instead of stacking playback.
|
|
39
|
+
# kind=music → stop any current preview, then play the track
|
|
40
|
+
# kind=music-stop → stop any current preview (no new playback)
|
|
41
|
+
if ($req.kind -eq 'music' -or $req.kind -eq 'music-stop') {
|
|
42
|
+
$pidFile = Join-Path $env:USERPROFILE '.agentvibes\music-preview.pid'
|
|
43
|
+
# Stop the currently-playing preview, if any. Verify the PID is
|
|
44
|
+
# actually ffplay so a recycled PID can't kill an unrelated proc.
|
|
45
|
+
if (Test-Path $pidFile) {
|
|
46
|
+
$oldPid = (Get-Content $pidFile -Raw -ErrorAction SilentlyContinue).Trim()
|
|
47
|
+
if ($oldPid -match '^\d+$') {
|
|
48
|
+
$op = Get-Process -Id ([int]$oldPid) -ErrorAction SilentlyContinue
|
|
49
|
+
if ($op -and $op.ProcessName -eq 'ffplay') { Stop-Process -Id ([int]$oldPid) -Force -ErrorAction SilentlyContinue }
|
|
50
|
+
}
|
|
51
|
+
Remove-Item $pidFile -Force -ErrorAction SilentlyContinue
|
|
52
|
+
}
|
|
53
|
+
if ($req.kind -eq 'music') {
|
|
54
|
+
$trackName = [string]$req.music
|
|
55
|
+
if ($trackName -match '^[A-Za-z0-9._][A-Za-z0-9._ \-]*\.mp3$') {
|
|
56
|
+
$tracksDir = Join-Path $env:USERPROFILE '.claude\audio\tracks'
|
|
57
|
+
$full = [System.IO.Path]::GetFullPath((Join-Path $tracksDir $trackName))
|
|
58
|
+
$baseFull = [System.IO.Path]::GetFullPath($tracksDir)
|
|
59
|
+
if (-not $baseFull.EndsWith([IO.Path]::DirectorySeparatorChar)) { $baseFull += [IO.Path]::DirectorySeparatorChar }
|
|
60
|
+
if ($full.StartsWith($baseFull, [StringComparison]::OrdinalIgnoreCase) -and (Test-Path $full)) {
|
|
61
|
+
$ffplay = Get-Command ffplay -ErrorAction SilentlyContinue
|
|
62
|
+
if ($ffplay) {
|
|
63
|
+
Write-WatcherLog "INFO" "music-preview id=$($req.id) track=$trackName"
|
|
64
|
+
# Readiness bling — a short cue played in THIS (audio-capable) watcher
|
|
65
|
+
# session BEFORE the track so a listener knows music is incoming. Launched
|
|
66
|
+
# async (NOT -Wait — the wav's shimmer tail is long); a fixed 0.3s gap then
|
|
67
|
+
# lets the music follow tightly. Best-effort: a missing wav / player error
|
|
68
|
+
# never blocks the track.
|
|
69
|
+
$blingWav = Join-Path $env:USERPROFILE '.claude\audio\ui\bling-success.wav'
|
|
70
|
+
if (-not (Test-Path $blingWav)) { $blingWav = Join-Path $env:USERPROFILE '.agentvibes\bling-success.wav' }
|
|
71
|
+
if (Test-Path $blingWav) {
|
|
72
|
+
try { Start-Process -FilePath $ffplay.Source -ArgumentList @('-autoexit','-nodisp','-loglevel','quiet',$blingWav) -WindowStyle Hidden | Out-Null } catch { }
|
|
73
|
+
Start-Sleep -Milliseconds 300
|
|
74
|
+
}
|
|
75
|
+
$mp = Start-Process -FilePath $ffplay.Source -ArgumentList @('-autoexit','-nodisp','-loglevel','quiet','-volume','80',$full) -WindowStyle Hidden -PassThru
|
|
76
|
+
if ($mp) { Set-Content -Path $pidFile -Value $mp.Id -NoNewline -ErrorAction SilentlyContinue }
|
|
77
|
+
} else {
|
|
78
|
+
Write-WatcherLog "WARN" "ffplay not found - cannot preview music id=$($req.id)"
|
|
79
|
+
}
|
|
80
|
+
} else {
|
|
81
|
+
Write-WatcherLog "WARN" "music track not found id=$($req.id) track=$trackName"
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
Write-WatcherLog "WARN" "invalid music track name id=$($req.id)"
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
Write-WatcherLog "INFO" "music-stop id=$($req.id)"
|
|
88
|
+
}
|
|
89
|
+
Remove-Item $procFile -Force -ErrorAction SilentlyContinue
|
|
90
|
+
continue
|
|
91
|
+
}
|
|
92
|
+
|
|
34
93
|
# Validate voice before passing to command line
|
|
35
94
|
$safeVoice = if ($req.voice -and $req.voice -match '^[a-zA-Z0-9_\-\. :]+$') { $req.voice } else { "" }
|
|
36
95
|
$env:CLAUDE_PROJECT_DIR = $env:USERPROFILE
|
|
37
96
|
$env:AGENTVIBES_NO_PRETEXT = "1"
|
|
97
|
+
# Carry the sender's project (folder name/path) through so a
|
|
98
|
+
# downstream receiver shows the real remote origin instead of
|
|
99
|
+
# this machine's own profile dir.
|
|
100
|
+
if ($req.project) { $env:AGENTVIBES_PROJECT = $req.project }
|
|
101
|
+
else { [System.Environment]::SetEnvironmentVariable("AGENTVIBES_PROJECT", $null, "Process") }
|
|
102
|
+
if ($req.projectPath) { $env:AGENTVIBES_PROJECT_PATH = $req.projectPath }
|
|
103
|
+
else { [System.Environment]::SetEnvironmentVariable("AGENTVIBES_PROJECT_PATH", $null, "Process") }
|
|
38
104
|
# Use SetEnvironmentVariable to truly unset (assignment to $null leaves empty string)
|
|
39
105
|
if ($req.music) { $env:AGENTVIBES_OVERRIDE_MUSIC = $req.music }
|
|
40
106
|
else { [System.Environment]::SetEnvironmentVariable("AGENTVIBES_OVERRIDE_MUSIC", $null, "Process") }
|
|
@@ -44,16 +110,26 @@ try {
|
|
|
44
110
|
else { [System.Environment]::SetEnvironmentVariable("AGENTVIBES_OVERRIDE_EFFECTS", $null, "Process") }
|
|
45
111
|
|
|
46
112
|
if (Test-Path $PlayTts) {
|
|
47
|
-
#
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
113
|
+
# Always play a crisp local "incoming" bling so the user KNOWS audio is
|
|
114
|
+
# on the way — even when audio is routed to a downstream receiver
|
|
115
|
+
# instead of the local speakers. Standard bling-success.wav, async
|
|
116
|
+
# with a 0.3s gap (same as the music-preview path); fall back to the
|
|
117
|
+
# user-configured remote-prefix-sound.txt if the bling wav is missing.
|
|
118
|
+
$ffplay = Get-Command ffplay -ErrorAction SilentlyContinue
|
|
119
|
+
if ($ffplay) {
|
|
120
|
+
$blingWav = Join-Path $env:USERPROFILE '.claude\audio\ui\bling-success.wav'
|
|
121
|
+
if (-not (Test-Path $blingWav)) { $blingWav = Join-Path $env:USERPROFILE '.agentvibes\bling-success.wav' }
|
|
122
|
+
if (-not (Test-Path $blingWav)) {
|
|
123
|
+
$prefixSoundFile = "$env:USERPROFILE\.agentvibes\remote-prefix-sound.txt"
|
|
124
|
+
if (Test-Path $prefixSoundFile) {
|
|
125
|
+
$ps = (Get-Content $prefixSoundFile -Raw).Trim()
|
|
126
|
+
if ($ps -and (Test-Path $ps)) { $blingWav = $ps }
|
|
55
127
|
}
|
|
56
128
|
}
|
|
129
|
+
if (Test-Path $blingWav) {
|
|
130
|
+
try { Start-Process -FilePath $ffplay.Source -ArgumentList @('-autoexit','-nodisp','-loglevel','quiet',$blingWav) -WindowStyle Hidden | Out-Null } catch { }
|
|
131
|
+
Start-Sleep -Milliseconds 300
|
|
132
|
+
}
|
|
57
133
|
}
|
|
58
134
|
|
|
59
135
|
$tempText = Join-Path $env:TEMP "agentvibes-tts-$($req.id).txt"
|
|
@@ -17,6 +17,14 @@ $ClaudeDir = "$env:USERPROFILE\.claude"
|
|
|
17
17
|
$ProviderFile = "$ClaudeDir\tts-provider.txt"
|
|
18
18
|
$VoiceSapiFile = "$ClaudeDir\tts-voice-sapi.txt"
|
|
19
19
|
$VoicePiperFile = "$ClaudeDir\tts-voice-piper.txt"
|
|
20
|
+
$VoiceKokoroFile = "$ClaudeDir\tts-voice-kokoro.txt"
|
|
21
|
+
|
|
22
|
+
# Load the generated Provider Catalog (SSOT) for kokoro switch-time validation.
|
|
23
|
+
# FAIL-SAFE: consumers probe `Get-Command Test-CatalogVoice` and fall back to the
|
|
24
|
+
# legacy shape regex when the artifact is missing (installed-tree skew) — mirrors
|
|
25
|
+
# play-tts.sh's PLAN_OK legacy fallback. Switch never breaks on a missing catalog.
|
|
26
|
+
$CatalogPs1 = Join-Path $PSScriptRoot 'provider-catalog.ps1'
|
|
27
|
+
if (Test-Path $CatalogPs1) { . $CatalogPs1 }
|
|
20
28
|
|
|
21
29
|
# Get active provider
|
|
22
30
|
$ActiveProvider = "windows-sapi"
|
|
@@ -129,6 +137,47 @@ function Switch-Voice {
|
|
|
129
137
|
Write-Host "[INFO] Soprano uses a single fixed voice (Soprano-1.1-80M)" -ForegroundColor Cyan
|
|
130
138
|
return $true
|
|
131
139
|
}
|
|
140
|
+
elseif ($ActiveProvider -eq "kokoro") {
|
|
141
|
+
# Kokoro switch-time validation via the generated Provider Catalog (SSOT):
|
|
142
|
+
# MEMBERSHIP + canonical case-fold, so a typo like af_hart is rejected HERE
|
|
143
|
+
# and never reaches tts-voice-kokoro.txt to die silently at the model.
|
|
144
|
+
# Escape hatch AGENTVIBES_ALLOW_UNLISTED_VOICE=1 bypasses MEMBERSHIP (not
|
|
145
|
+
# shape) so a voice from a newer kokoro model still switches. FAIL-SAFE:
|
|
146
|
+
# fall back to the legacy shape regex when the catalog artifact is missing.
|
|
147
|
+
$kokoroVoice = $NewVoice.ToLower()
|
|
148
|
+
$allowUnlisted = ($env:AGENTVIBES_ALLOW_UNLISTED_VOICE -eq '1')
|
|
149
|
+
if (Get-Command Test-CatalogVoice -ErrorAction SilentlyContinue) {
|
|
150
|
+
$canon = Test-CatalogVoice -Provider 'kokoro' -Voice $NewVoice
|
|
151
|
+
if ($canon) {
|
|
152
|
+
Set-Content -Path $VoiceKokoroFile -Value $canon
|
|
153
|
+
Write-Host "[OK] Voice set to: $canon" -ForegroundColor Green
|
|
154
|
+
return $true
|
|
155
|
+
}
|
|
156
|
+
elseif ($allowUnlisted -and $kokoroVoice -match '^[a-z]{2}_[a-z0-9_]+$') {
|
|
157
|
+
Write-Host "[WARN] '$NewVoice' is not in the shipped Kokoro catalog; allowing it (AGENTVIBES_ALLOW_UNLISTED_VOICE=1)." -ForegroundColor Yellow
|
|
158
|
+
Set-Content -Path $VoiceKokoroFile -Value $kokoroVoice
|
|
159
|
+
Write-Host "[OK] Voice set to: $kokoroVoice" -ForegroundColor Green
|
|
160
|
+
return $true
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
Write-Host "[ERROR] Kokoro voice not found: $NewVoice" -ForegroundColor Red
|
|
164
|
+
Write-Host "That is not a known Kokoro voice. Examples: af_heart, am_michael, bf_emma, bm_george, jf_alpha, zf_xiaoxiao, ef_dora." -ForegroundColor Yellow
|
|
165
|
+
Write-Host "Set AGENTVIBES_ALLOW_UNLISTED_VOICE=1 to allow a newer-model voice." -ForegroundColor Yellow
|
|
166
|
+
return $false
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
# FAIL-SAFE legacy path (catalog artifact missing): shape-only regex.
|
|
171
|
+
if ($kokoroVoice -notmatch '^[a-z]{2}_[a-z0-9_]+$') {
|
|
172
|
+
Write-Host "[ERROR] Kokoro voice not found: $NewVoice" -ForegroundColor Red
|
|
173
|
+
Write-Host "Kokoro ids look like <lang><sex>_name, e.g. af_heart, am_michael, bf_emma." -ForegroundColor Yellow
|
|
174
|
+
return $false
|
|
175
|
+
}
|
|
176
|
+
Set-Content -Path $VoiceKokoroFile -Value $kokoroVoice
|
|
177
|
+
Write-Host "[OK] Voice set to: $kokoroVoice" -ForegroundColor Green
|
|
178
|
+
return $true
|
|
179
|
+
}
|
|
180
|
+
}
|
|
132
181
|
|
|
133
182
|
if ($ValidVoices -notcontains $NewVoice) {
|
|
134
183
|
Write-Host "[ERROR] Voice not found: $NewVoice" -ForegroundColor Red
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
C:\Users\Paul\.claude\piper-voices
|
package/.clawdbot/README.md
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
# Clawdbot Integration
|
|
2
|
-
|
|
3
|
-
AgentVibes TTS integration for Clawdbot - the AI assistant framework.
|
|
4
|
-
|
|
5
|
-
## What is Clawdbot?
|
|
6
|
-
|
|
7
|
-
Clawdbot is a powerful AI assistant framework that connects Claude AI to messaging platforms (WhatsApp, Telegram, Discord, etc.) and provides extensible skills.
|
|
8
|
-
|
|
9
|
-
**Website**: https://clawd.bot
|
|
10
|
-
**GitHub**: https://github.com/clawdbot/clawdbot
|
|
11
|
-
|
|
12
|
-
## AgentVibes + Clawdbot
|
|
13
|
-
|
|
14
|
-
This integration provides Clawdbot with professional TTS capabilities using AgentVibes:
|
|
15
|
-
|
|
16
|
-
- **Free & Offline**: No API costs, works without internet
|
|
17
|
-
- **50+ Voices**: Professional AI voices in 30+ languages
|
|
18
|
-
- **Remote SSH Support**: Audio tunnels from server to local machine
|
|
19
|
-
- **Zero Setup**: Automatic when AgentVibes is installed
|
|
20
|
-
|
|
21
|
-
## Installation
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npx agentvibes install
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
That's it! AgentVibes is ready to use.
|
|
28
|
-
|
|
29
|
-
## Usage from Clawdbot
|
|
30
|
-
|
|
31
|
-
Once installed, use AgentVibes for TTS:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npx agentvibes speak "Hello from Clawdbot"
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Features
|
|
38
|
-
|
|
39
|
-
- **Automatic Detection**: Clawdbot automatically uses AgentVibes when available
|
|
40
|
-
- **Voice Selection**: 50+ voices across 30+ languages
|
|
41
|
-
- **SSH Tunneling**: Audio plays on local machine from remote servers
|
|
42
|
-
- **Zero Config**: Works out of the box once AgentVibes is installed
|
|
43
|
-
|
|
44
|
-
## Remote SSH Audio
|
|
45
|
-
|
|
46
|
-
When running Clawdbot on a remote server, set up PulseAudio tunneling so audio plays on your local machine:
|
|
47
|
-
|
|
48
|
-
**Quick Setup:**
|
|
49
|
-
|
|
50
|
-
1. **Remote server** (`~/.bashrc`):
|
|
51
|
-
```bash
|
|
52
|
-
export PULSE_SERVER=tcp:localhost:14713
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
2. **Local machine** (`~/.ssh/config`):
|
|
56
|
-
```
|
|
57
|
-
Host your-server
|
|
58
|
-
RemoteForward 14713 localhost:14713
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
3. **Connect and test**:
|
|
62
|
-
```bash
|
|
63
|
-
ssh your-server
|
|
64
|
-
agentvibes speak "Testing remote audio"
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Full guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/remote-audio-setup.md
|
|
68
|
-
|
|
69
|
-
## Documentation
|
|
70
|
-
|
|
71
|
-
- **Skill Documentation**: [skill/SKILL.md](skill/SKILL.md)
|
|
72
|
-
- **AgentVibes Docs**: https://agentvibes.org
|
|
73
|
-
- **Clawdbot Docs**: https://docs.clawd.bot
|
|
74
|
-
|
|
75
|
-
## Architecture
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
Clawdbot Request
|
|
79
|
-
↓
|
|
80
|
-
AgentVibes Skill (this)
|
|
81
|
-
↓
|
|
82
|
-
AgentVibes CLI (agentvibes speak)
|
|
83
|
-
↓
|
|
84
|
-
Piper TTS Engine
|
|
85
|
-
↓
|
|
86
|
-
PulseAudio → SSH Tunnel → Local Speakers
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Development
|
|
90
|
-
|
|
91
|
-
The skill is automatically packaged with AgentVibes npm releases. To update:
|
|
92
|
-
|
|
93
|
-
1. Edit `skill/SKILL.md`
|
|
94
|
-
2. Test with Clawdbot
|
|
95
|
-
3. Commit to AgentVibes repo
|
|
96
|
-
4. Publish new AgentVibes version
|
|
97
|
-
|
|
98
|
-
## Support
|
|
99
|
-
|
|
100
|
-
- **AgentVibes Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
101
|
-
- **Clawdbot Issues**: https://github.com/clawdbot/clawdbot/issues
|
|
102
|
-
|
|
103
|
-
## License
|
|
104
|
-
|
|
105
|
-
Apache 2.0 - Same as AgentVibes
|
|
1
|
+
# Clawdbot Integration
|
|
2
|
+
|
|
3
|
+
AgentVibes TTS integration for Clawdbot - the AI assistant framework.
|
|
4
|
+
|
|
5
|
+
## What is Clawdbot?
|
|
6
|
+
|
|
7
|
+
Clawdbot is a powerful AI assistant framework that connects Claude AI to messaging platforms (WhatsApp, Telegram, Discord, etc.) and provides extensible skills.
|
|
8
|
+
|
|
9
|
+
**Website**: https://clawd.bot
|
|
10
|
+
**GitHub**: https://github.com/clawdbot/clawdbot
|
|
11
|
+
|
|
12
|
+
## AgentVibes + Clawdbot
|
|
13
|
+
|
|
14
|
+
This integration provides Clawdbot with professional TTS capabilities using AgentVibes:
|
|
15
|
+
|
|
16
|
+
- **Free & Offline**: No API costs, works without internet
|
|
17
|
+
- **50+ Voices**: Professional AI voices in 30+ languages
|
|
18
|
+
- **Remote SSH Support**: Audio tunnels from server to local machine
|
|
19
|
+
- **Zero Setup**: Automatic when AgentVibes is installed
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx agentvibes install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
That's it! AgentVibes is ready to use.
|
|
28
|
+
|
|
29
|
+
## Usage from Clawdbot
|
|
30
|
+
|
|
31
|
+
Once installed, use AgentVibes for TTS:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx agentvibes speak "Hello from Clawdbot"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- **Automatic Detection**: Clawdbot automatically uses AgentVibes when available
|
|
40
|
+
- **Voice Selection**: 50+ voices across 30+ languages
|
|
41
|
+
- **SSH Tunneling**: Audio plays on local machine from remote servers
|
|
42
|
+
- **Zero Config**: Works out of the box once AgentVibes is installed
|
|
43
|
+
|
|
44
|
+
## Remote SSH Audio
|
|
45
|
+
|
|
46
|
+
When running Clawdbot on a remote server, set up PulseAudio tunneling so audio plays on your local machine:
|
|
47
|
+
|
|
48
|
+
**Quick Setup:**
|
|
49
|
+
|
|
50
|
+
1. **Remote server** (`~/.bashrc`):
|
|
51
|
+
```bash
|
|
52
|
+
export PULSE_SERVER=tcp:localhost:14713
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. **Local machine** (`~/.ssh/config`):
|
|
56
|
+
```
|
|
57
|
+
Host your-server
|
|
58
|
+
RemoteForward 14713 localhost:14713
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. **Connect and test**:
|
|
62
|
+
```bash
|
|
63
|
+
ssh your-server
|
|
64
|
+
agentvibes speak "Testing remote audio"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Full guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/remote-audio-setup.md
|
|
68
|
+
|
|
69
|
+
## Documentation
|
|
70
|
+
|
|
71
|
+
- **Skill Documentation**: [skill/SKILL.md](skill/SKILL.md)
|
|
72
|
+
- **AgentVibes Docs**: https://agentvibes.org
|
|
73
|
+
- **Clawdbot Docs**: https://docs.clawd.bot
|
|
74
|
+
|
|
75
|
+
## Architecture
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Clawdbot Request
|
|
79
|
+
↓
|
|
80
|
+
AgentVibes Skill (this)
|
|
81
|
+
↓
|
|
82
|
+
AgentVibes CLI (agentvibes speak)
|
|
83
|
+
↓
|
|
84
|
+
Piper TTS Engine
|
|
85
|
+
↓
|
|
86
|
+
PulseAudio → SSH Tunnel → Local Speakers
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Development
|
|
90
|
+
|
|
91
|
+
The skill is automatically packaged with AgentVibes npm releases. To update:
|
|
92
|
+
|
|
93
|
+
1. Edit `skill/SKILL.md`
|
|
94
|
+
2. Test with Clawdbot
|
|
95
|
+
3. Commit to AgentVibes repo
|
|
96
|
+
4. Publish new AgentVibes version
|
|
97
|
+
|
|
98
|
+
## Support
|
|
99
|
+
|
|
100
|
+
- **AgentVibes Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
101
|
+
- **Clawdbot Issues**: https://github.com/clawdbot/clawdbot/issues
|
|
102
|
+
|
|
103
|
+
## License
|
|
104
|
+
|
|
105
|
+
Apache 2.0 - Same as AgentVibes
|