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.
Files changed (129) hide show
  1. package/.agentvibes/config.json +15 -1
  2. package/.agentvibes/install-manifest.json +342 -0
  3. package/.claude/activation-instructions +54 -54
  4. package/.claude/commands/agent-vibes/commands.json +0 -20
  5. package/.claude/commands/agent-vibes/unmute.md +6 -2
  6. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  7. package/.claude/commands/agent-vibes-rdp.md +24 -24
  8. package/.claude/config/audio-effects.cfg +6 -6
  9. package/.claude/config/audio-effects.cfg.bak-kokoro +7 -0
  10. package/.claude/config/background-music-enabled.txt +1 -1
  11. package/.claude/config/background-music-position.txt +27 -0
  12. package/.claude/config/background-music-volume.txt +1 -0
  13. package/.claude/config/background-music.cfg +1 -0
  14. package/.claude/config/background-music.txt +1 -0
  15. package/.claude/config/language.txt +1 -0
  16. package/.claude/config/personality.txt +1 -0
  17. package/.claude/config/tts-speech-rate.txt +1 -0
  18. package/.claude/config/tts-verbosity.txt +1 -0
  19. package/.claude/docs/TERMUX_SETUP.md +408 -408
  20. package/.claude/github-star-reminder.txt +1 -1
  21. package/.claude/hooks/agentvibes-session-id.sh +69 -0
  22. package/.claude/hooks/bmad-party-speak.sh +20 -4
  23. package/.claude/hooks/bmad-speak.sh +60 -2
  24. package/.claude/hooks/bmad-tts-injector.sh +20 -1
  25. package/.claude/hooks/bmad-voice-manager.sh +25 -3
  26. package/.claude/hooks/clawdbot-receiver-SECURE.sh +21 -2
  27. package/.claude/hooks/clawdbot-receiver.sh +19 -1
  28. package/.claude/hooks/elevenlabs-voices.sh +62 -0
  29. package/.claude/hooks/kokoro-installer.sh +20 -10
  30. package/.claude/hooks/language-manager.sh +10 -3
  31. package/.claude/hooks/party-set-room.sh +71 -0
  32. package/.claude/hooks/party-stage-roster.py +328 -0
  33. package/.claude/hooks/personality-manager.sh +19 -2
  34. package/.claude/hooks/piper-voice-manager.sh +3 -2
  35. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +24 -5
  36. package/.claude/hooks/play-tts-elevenlabs.sh +38 -118
  37. package/.claude/hooks/play-tts-kokoro.sh +33 -6
  38. package/.claude/hooks/play-tts-soprano.sh +3 -2
  39. package/.claude/hooks/play-tts-ssh-remote.sh +72 -27
  40. package/.claude/hooks/play-tts-termux-ssh.sh +5 -4
  41. package/.claude/hooks/play-tts.sh +86 -69
  42. package/.claude/hooks/provider-catalog.json +352 -0
  43. package/.claude/hooks/provider-catalog.sh +161 -0
  44. package/.claude/hooks/provider-commands.sh +2 -1
  45. package/.claude/hooks/provider-manager.sh +47 -9
  46. package/.claude/hooks/python-resolver.sh +117 -0
  47. package/.claude/hooks/session-id.sh +56 -0
  48. package/.claude/hooks/session-start-tts.sh +39 -0
  49. package/.claude/hooks/speed-manager.sh +1 -1
  50. package/.claude/hooks/translate-manager.sh +3 -2
  51. package/.claude/hooks/translator.py +1 -1
  52. package/.claude/hooks/voice-manager.sh +242 -10
  53. package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +119 -0
  54. package/.claude/hooks-windows/language-manager.ps1 +7 -1
  55. package/.claude/hooks-windows/personality-manager.ps1 +16 -1
  56. package/.claude/hooks-windows/play-tts-kokoro.ps1 +20 -4
  57. package/.claude/hooks-windows/play-tts.ps1 +32 -3
  58. package/.claude/hooks-windows/provider-catalog.ps1 +140 -0
  59. package/.claude/hooks-windows/provider-manager.ps1 +63 -8
  60. package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +153 -0
  61. package/.claude/hooks-windows/tts-watcher.ps1 +84 -8
  62. package/.claude/hooks-windows/voice-manager-windows.ps1 +49 -0
  63. package/.claude/piper-voices-dir.txt +1 -0
  64. package/.clawdbot/README.md +105 -105
  65. package/.mcp.json +15 -0
  66. package/LICENSE +190 -190
  67. package/README.md +20 -6
  68. package/RELEASE_NOTES.md +81 -0
  69. package/WINDOWS-SETUP.md +208 -208
  70. package/bin/agent-vibes +39 -39
  71. package/bin/mcp-server.js +121 -121
  72. package/bin/test-bmad-pr +78 -78
  73. package/mcp-server/QUICK_START.md +203 -203
  74. package/mcp-server/README.md +345 -345
  75. package/mcp-server/examples/claude_desktop_config.json +11 -11
  76. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  77. package/mcp-server/examples/custom_instructions.md +169 -169
  78. package/mcp-server/pyproject.toml +52 -52
  79. package/mcp-server/requirements.txt +2 -2
  80. package/mcp-server/server.py +146 -49
  81. package/mcp-server/test_mcp_correctness.py +20 -2
  82. package/mcp-server/test_server.py +395 -395
  83. package/mcp-server/test_windows_script_parity.py +0 -2
  84. package/package.json +1 -1
  85. package/src/cli/list-personalities.js +110 -110
  86. package/src/cli/list-voices.js +115 -11
  87. package/src/commands/bmad-voices.js +394 -394
  88. package/src/console/app.js +1 -9
  89. package/src/console/bling.js +71 -0
  90. package/src/console/brand-colors.js +13 -13
  91. package/src/console/constants/personalities.js +44 -44
  92. package/src/console/footer-config.js +0 -4
  93. package/src/console/music-preview.js +79 -0
  94. package/src/console/navigation.js +0 -1
  95. package/src/console/tabs/agents-tab.js +14 -2
  96. package/src/console/tabs/help-tab.js +314 -314
  97. package/src/console/tabs/music-tab.js +81 -5
  98. package/src/console/tabs/placeholder-tab.js +0 -2
  99. package/src/console/tabs/readme-tab.js +272 -272
  100. package/src/console/tabs/settings-tab.js +207 -14
  101. package/src/console/tabs/setup-tab.js +39 -36
  102. package/src/console/tabs/voices-tab.js +102 -23
  103. package/src/console/widgets/destroy-list.js +25 -25
  104. package/src/console/widgets/notice.js +55 -55
  105. package/src/console/widgets/track-picker.js +82 -0
  106. package/src/installer/language-screen.js +31 -31
  107. package/src/installer/music-file-input.js +304 -304
  108. package/src/installer.js +124 -10
  109. package/src/services/language-service.js +47 -47
  110. package/src/services/navigation-service.js +1 -1
  111. package/src/services/provider-catalog.js +412 -0
  112. package/src/services/provider-voice-catalog.js +52 -73
  113. package/src/services/tts-engine-service.js +29 -0
  114. package/src/utils/audio-format-validator.js +277 -277
  115. package/src/utils/dependency-checker.js +469 -469
  116. package/src/utils/file-ownership-verifier.js +358 -358
  117. package/src/utils/music-file-validator.js +285 -285
  118. package/src/utils/preview-list-prompt.js +144 -144
  119. package/src/utils/provider-validator.js +62 -12
  120. package/src/utils/secure-music-storage.js +412 -412
  121. package/voice-assignments.json +8244 -8244
  122. package/.claude/commands/agent-vibes/language.md +0 -23
  123. package/.claude/commands/agent-vibes/learn.md +0 -67
  124. package/.claude/commands/agent-vibes/replay-target.md +0 -14
  125. package/.claude/commands/agent-vibes/target-voice.md +0 -26
  126. package/.claude/commands/agent-vibes/target.md +0 -30
  127. package/.claude/hooks/learn-manager.sh +0 -492
  128. package/.claude/hooks/replay-target-audio.sh +0 -95
  129. 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
- # Play remote arrival prefix sound if configured
48
- $prefixSoundFile = "$env:USERPROFILE\.agentvibes\remote-prefix-sound.txt"
49
- if (Test-Path $prefixSoundFile) {
50
- $prefixSound = (Get-Content $prefixSoundFile -Raw).Trim()
51
- if ($prefixSound -and (Test-Path $prefixSound)) {
52
- $ffplay = Get-Command ffplay -ErrorAction SilentlyContinue
53
- if ($ffplay) {
54
- & $ffplay.Source -autoexit -nodisp -loglevel quiet $prefixSound 2>$null
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
@@ -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
package/.mcp.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "mcpServers": {
3
+ "agentvibes": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "--package=agentvibes",
8
+ "agentvibes-mcp-server"
9
+ ],
10
+ "env": {
11
+ "AGENTVIBES_MCP_FALLBACK": "copilot"
12
+ }
13
+ }
14
+ }
15
+ }