agentvibes 4.2.0 → 4.4.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 (219) hide show
  1. package/.agentvibes/bmad/bmad-voices.md +69 -69
  2. package/.agentvibes/config.json +12 -0
  3. package/.claude/activation-instructions +54 -54
  4. package/.claude/audio/tracks/README.md +52 -52
  5. package/.claude/commands/agent-vibes/add.md +21 -21
  6. package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
  7. package/.claude/commands/agent-vibes/agent.md +79 -79
  8. package/.claude/commands/agent-vibes/background-music.md +111 -111
  9. package/.claude/commands/agent-vibes/bmad.md +198 -198
  10. package/.claude/commands/agent-vibes/clean.md +18 -18
  11. package/.claude/commands/agent-vibes/cleanup.md +18 -18
  12. package/.claude/commands/agent-vibes/commands.json +145 -145
  13. package/.claude/commands/agent-vibes/effects.md +97 -97
  14. package/.claude/commands/agent-vibes/get.md +9 -9
  15. package/.claude/commands/agent-vibes/hide.md +91 -91
  16. package/.claude/commands/agent-vibes/language.md +23 -23
  17. package/.claude/commands/agent-vibes/learn.md +67 -67
  18. package/.claude/commands/agent-vibes/list.md +13 -13
  19. package/.claude/commands/agent-vibes/mute.md +37 -37
  20. package/.claude/commands/agent-vibes/preview.md +17 -17
  21. package/.claude/commands/agent-vibes/provider.md +68 -68
  22. package/.claude/commands/agent-vibes/replay-target.md +14 -14
  23. package/.claude/commands/agent-vibes/sample.md +12 -12
  24. package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
  25. package/.claude/commands/agent-vibes/set-pretext.md +65 -65
  26. package/.claude/commands/agent-vibes/set-speed.md +41 -41
  27. package/.claude/commands/agent-vibes/show.md +84 -84
  28. package/.claude/commands/agent-vibes/switch.md +87 -87
  29. package/.claude/commands/agent-vibes/target-voice.md +26 -26
  30. package/.claude/commands/agent-vibes/target.md +30 -30
  31. package/.claude/commands/agent-vibes/translate.md +68 -68
  32. package/.claude/commands/agent-vibes/unmute.md +45 -45
  33. package/.claude/commands/agent-vibes/verbosity.md +89 -89
  34. package/.claude/commands/agent-vibes/whoami.md +7 -7
  35. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  36. package/.claude/commands/agent-vibes-rdp.md +24 -24
  37. package/.claude/config/agentvibes.json +1 -0
  38. package/.claude/config/audio-effects.cfg +2 -2
  39. package/.claude/config/audio-effects.cfg.sample +52 -52
  40. package/.claude/config/background-music-volume.txt +1 -0
  41. package/.claude/config/intro-text.txt +1 -0
  42. package/.claude/config/piper-speech-rate.txt +4 -0
  43. package/.claude/config/piper-target-speech-rate.txt +1 -0
  44. package/.claude/config/reverb-level.txt +1 -0
  45. package/.claude/config/tts-speech-rate.txt +4 -0
  46. package/.claude/config/tts-target-speech-rate.txt +1 -0
  47. package/.claude/docs/TERMUX_SETUP.md +408 -408
  48. package/.claude/github-star-reminder.txt +1 -1
  49. package/.claude/hooks/README-TTS-QUEUE.md +135 -135
  50. package/.claude/hooks/audio-cache-utils.sh +246 -246
  51. package/.claude/hooks/audio-processor.sh +433 -433
  52. package/.claude/hooks/background-music-manager.sh +404 -404
  53. package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
  54. package/.claude/hooks/bmad-speak.sh +269 -269
  55. package/.claude/hooks/bmad-tts-injector.sh +568 -568
  56. package/.claude/hooks/bmad-voice-manager.sh +928 -928
  57. package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
  58. package/.claude/hooks/clawdbot-receiver.sh +107 -107
  59. package/.claude/hooks/clean-audio-cache.sh +22 -22
  60. package/.claude/hooks/cleanup-cache.sh +106 -106
  61. package/.claude/hooks/configure-rdp-mode.sh +137 -137
  62. package/.claude/hooks/download-extra-voices.sh +244 -244
  63. package/.claude/hooks/effects-manager.sh +268 -268
  64. package/.claude/hooks/github-star-reminder.sh +154 -154
  65. package/.claude/hooks/language-manager.sh +362 -362
  66. package/.claude/hooks/learn-manager.sh +492 -492
  67. package/.claude/hooks/macos-voice-manager.sh +205 -205
  68. package/.claude/hooks/migrate-background-music.sh +125 -125
  69. package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
  70. package/.claude/hooks/optimize-background-music.sh +87 -87
  71. package/.claude/hooks/path-resolver.sh +60 -60
  72. package/.claude/hooks/personality-manager.sh +448 -448
  73. package/.claude/hooks/piper-download-voices.sh +225 -225
  74. package/.claude/hooks/piper-installer.sh +292 -292
  75. package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
  76. package/.claude/hooks/piper-voice-manager.sh +24 -3
  77. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
  78. package/.claude/hooks/play-tts-enhanced.sh +105 -105
  79. package/.claude/hooks/play-tts-macos.sh +368 -368
  80. package/.claude/hooks/play-tts-piper.sh +679 -679
  81. package/.claude/hooks/play-tts-soprano.sh +356 -356
  82. package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
  83. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  84. package/.claude/hooks/play-tts.sh +301 -301
  85. package/.claude/hooks/prepare-release.sh +54 -54
  86. package/.claude/hooks/provider-commands.sh +617 -617
  87. package/.claude/hooks/provider-manager.sh +399 -399
  88. package/.claude/hooks/replay-target-audio.sh +95 -95
  89. package/.claude/hooks/requirements.txt +6 -6
  90. package/.claude/hooks/sentiment-manager.sh +201 -201
  91. package/.claude/hooks/session-start-tts.sh +81 -81
  92. package/.claude/hooks/soprano-gradio-synth.py +139 -139
  93. package/.claude/hooks/speed-manager.sh +291 -291
  94. package/.claude/hooks/stop-tts.sh +84 -84
  95. package/.claude/hooks/termux-installer.sh +261 -261
  96. package/.claude/hooks/translate-manager.sh +341 -341
  97. package/.claude/hooks/translator.py +237 -237
  98. package/.claude/hooks/tts-queue-worker.sh +145 -145
  99. package/.claude/hooks/tts-queue.sh +165 -165
  100. package/.claude/hooks/verbosity-manager.sh +178 -178
  101. package/.claude/hooks/voice-manager.sh +548 -548
  102. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  103. package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
  104. package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
  105. package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
  106. package/.claude/hooks-windows/effects-manager.ps1 +294 -0
  107. package/.claude/hooks-windows/language-manager.ps1 +193 -0
  108. package/.claude/hooks-windows/learn-manager.ps1 +241 -0
  109. package/.claude/hooks-windows/personality-manager.ps1 +266 -0
  110. package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
  111. package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
  112. package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
  113. package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
  114. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
  115. package/.claude/hooks-windows/play-tts.ps1 +344 -266
  116. package/.claude/hooks-windows/provider-manager.ps1 +29 -10
  117. package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
  118. package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
  119. package/.claude/hooks-windows/speed-manager.ps1 +166 -0
  120. package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
  121. package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
  122. package/.claude/output-styles/agent-vibes.md +202 -202
  123. package/.claude/personalities/angry.md +14 -14
  124. package/.claude/personalities/annoying.md +14 -14
  125. package/.claude/personalities/crass.md +14 -14
  126. package/.claude/personalities/dramatic.md +14 -14
  127. package/.claude/personalities/dry-humor.md +50 -50
  128. package/.claude/personalities/flirty.md +20 -20
  129. package/.claude/personalities/funny.md +14 -14
  130. package/.claude/personalities/grandpa.md +32 -32
  131. package/.claude/personalities/millennial.md +14 -14
  132. package/.claude/personalities/moody.md +14 -14
  133. package/.claude/personalities/normal.md +16 -16
  134. package/.claude/personalities/pirate.md +14 -14
  135. package/.claude/personalities/poetic.md +14 -14
  136. package/.claude/personalities/professional.md +14 -14
  137. package/.claude/personalities/rapper.md +55 -55
  138. package/.claude/personalities/robot.md +14 -14
  139. package/.claude/personalities/sarcastic.md +38 -38
  140. package/.claude/personalities/sassy.md +14 -14
  141. package/.claude/personalities/surfer-dude.md +14 -14
  142. package/.claude/personalities/zen.md +14 -14
  143. package/.claude/settings.json +15 -15
  144. package/.claude/verbosity.txt +1 -1
  145. package/.clawdbot/README.md +105 -105
  146. package/.clawdbot/skill/SKILL.md +241 -241
  147. package/.mcp.json +12 -0
  148. package/CLAUDE.md +170 -170
  149. package/README.md +2029 -2007
  150. package/RELEASE_NOTES.md +1310 -1203
  151. package/WINDOWS-SETUP.md +208 -208
  152. package/bin/agent-vibes +39 -39
  153. package/bin/agentvibes-voice-browser.js +1840 -1840
  154. package/bin/agentvibes.js +48 -2
  155. package/bin/mcp-server.js +121 -121
  156. package/bin/mcp-server.sh +206 -206
  157. package/bin/test-bmad-pr +78 -78
  158. package/mcp-server/QUICK_START.md +203 -203
  159. package/mcp-server/README.md +345 -345
  160. package/mcp-server/WINDOWS_SETUP.md +260 -260
  161. package/mcp-server/docs/troubleshooting-audio.md +313 -313
  162. package/mcp-server/examples/claude_desktop_config.json +11 -11
  163. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  164. package/mcp-server/examples/custom_instructions.md +169 -169
  165. package/mcp-server/install-deps.js +130 -130
  166. package/mcp-server/pyproject.toml +52 -52
  167. package/mcp-server/requirements.txt +2 -2
  168. package/mcp-server/server.py +1465 -1453
  169. package/mcp-server/test_server.py +395 -395
  170. package/mcp-server/test_windows_script_parity.py +336 -0
  171. package/package.json +110 -110
  172. package/setup-windows.ps1 +815 -815
  173. package/src/bmad-detector.js +71 -71
  174. package/src/cli/list-personalities.js +110 -110
  175. package/src/cli/list-voices.js +114 -114
  176. package/src/commands/bmad-voices.js +394 -394
  177. package/src/commands/install-mcp.js +476 -476
  178. package/src/console/app.js +824 -824
  179. package/src/console/audio-env.js +20 -1
  180. package/src/console/brand-colors.js +13 -13
  181. package/src/console/constants/personalities.js +44 -44
  182. package/src/console/footer-config.js +50 -50
  183. package/src/console/modals/modal-overlay.js +247 -247
  184. package/src/console/navigation.js +62 -62
  185. package/src/console/tabs/agents-tab.js +1684 -1516
  186. package/src/console/tabs/help-tab.js +261 -261
  187. package/src/console/tabs/install-tab.js +1007 -991
  188. package/src/console/tabs/music-tab.js +22 -8
  189. package/src/console/tabs/placeholder-tab.js +53 -53
  190. package/src/console/tabs/readme-tab.js +267 -267
  191. package/src/console/tabs/receiver-tab.js +1472 -1212
  192. package/src/console/tabs/settings-tab.js +152 -79
  193. package/src/console/tabs/voices-tab.js +100 -21
  194. package/src/console/widgets/destroy-list.js +25 -25
  195. package/src/console/widgets/format-utils.js +89 -89
  196. package/src/console/widgets/notice.js +55 -55
  197. package/src/console/widgets/personality-picker.js +185 -185
  198. package/src/console/widgets/reverb-picker.js +94 -94
  199. package/src/console/widgets/track-picker.js +285 -285
  200. package/src/installer/music-file-input.js +304 -304
  201. package/src/installer.js +5882 -5829
  202. package/src/services/agent-voice-store.js +423 -423
  203. package/src/services/config-service.js +264 -264
  204. package/src/services/navigation-service.js +123 -123
  205. package/src/services/provider-service.js +132 -132
  206. package/src/services/verbosity-service.js +157 -157
  207. package/src/utils/audio-duration-validator.js +298 -298
  208. package/src/utils/audio-format-validator.js +277 -277
  209. package/src/utils/dependency-checker.js +469 -466
  210. package/src/utils/file-ownership-verifier.js +358 -358
  211. package/src/utils/list-formatter.js +194 -194
  212. package/src/utils/music-file-validator.js +285 -285
  213. package/src/utils/preview-list-prompt.js +136 -136
  214. package/src/utils/provider-validator.js +96 -12
  215. package/src/utils/secure-music-storage.js +412 -412
  216. package/templates/agentvibes-receiver.sh +482 -482
  217. package/templates/audio/welcome-music.mp3 +0 -0
  218. package/voice-assignments.json +8244 -8244
  219. package/.claude/config/background-music-position.txt +0 -1
@@ -1,408 +1,408 @@
1
- # Termux SSH TTS Provider Setup Guide
2
-
3
- ## Overview
4
-
5
- The `termux-ssh` provider allows AgentVibes to send TTS audio output to your Android device when you're connected from Termux via SSH. Instead of playing audio locally on your server/desktop, text is sent to your phone via SSH and spoken using Android's native TTS engine (`termux-tts-speak`).
6
-
7
- **Use Case:** You're working on a remote server (VPS, cloud instance, home server) and want to hear AgentVibes TTS on your Android phone instead of the server's speakers.
8
-
9
- ### Why This Provider?
10
-
11
- - **Solves PulseAudio issues**: PulseAudio tunneling doesn't work reliably on Android/Termux
12
- - **Uses native Android TTS**: High-quality voices from Google TTS or other installed engines
13
- - **Near-instant**: Only sends text, not audio files
14
- - **Works from anywhere**: With Tailscale, access your Android from any network
15
- - **No configuration overhead**: Works with standard SSH setup
16
-
17
- ## Prerequisites
18
-
19
- > **💡 Tip:** Install Tailscale first (see [Advanced Configuration](#using-tailscale-for-internet-wide-access-recommended)) for the best experience. It allows you to access your Android device from anywhere, not just your local WiFi.
20
-
21
- ### On Android Device (Termux)
22
-
23
- 1. **Install Termux** from F-Droid (NOT Google Play - it's outdated)
24
- ```bash
25
- # Download from: https://f-droid.org/en/packages/com.termux/
26
- ```
27
-
28
- 2. **Install required packages**:
29
- ```bash
30
- pkg update
31
- pkg install termux-api openssh
32
- ```
33
-
34
- 3. **Install Termux:API app** from F-Droid:
35
- ```bash
36
- # Download from: https://f-droid.org/en/packages/com.termux.api/
37
- ```
38
-
39
- 4. **Start SSH server**:
40
- ```bash
41
- # Generate SSH keys (first time only)
42
- ssh-keygen -t rsa -b 4096
43
-
44
- # Start SSH daemon
45
- sshd
46
-
47
- # Find your SSH port (usually 8022)
48
- cat $PREFIX/var/run/sshd.pid
49
- ```
50
-
51
- 5. **Get your device IP address**:
52
-
53
- **Option A: Tailscale IP (Recommended)**
54
- ```bash
55
- # After installing Tailscale (see Advanced Configuration)
56
- tailscale ip -4
57
- # Example: 100.100.100.100
58
- ```
59
-
60
- **Option B: Local WiFi IP (Same Network Only)**
61
- ```bash
62
- # Only works when both devices are on the same WiFi
63
- ifconfig wlan0 | grep "inet addr"
64
- # Example: 192.168.1.100
65
- ```
66
-
67
- > ⚠️ **Local WiFi IPs only work on the same network.** Use Tailscale for reliable access from anywhere.
68
-
69
- ### On Server/Desktop
70
-
71
- 1. **Copy SSH public key to Android**:
72
- ```bash
73
- # On your desktop/server
74
- ssh-copy-id -p 8022 u0_a###@<android-ip>
75
-
76
- # Replace:
77
- # - u0_a### with your Termux username (run 'whoami' in Termux)
78
- # - <android-ip> with your Android device IP
79
- ```
80
-
81
- 2. **Configure SSH host alias** in `~/.ssh/config`:
82
- ```ssh-config
83
- Host android
84
- HostName <your-android-ip>
85
- User <your-termux-username>
86
- Port 8022
87
- IdentityFile ~/.ssh/id_rsa
88
- ServerAliveInterval 60
89
- ServerAliveCountMax 3
90
- ```
91
-
92
- **Example**:
93
- ```ssh-config
94
- Host android
95
- HostName 100.100.100.100 # Tailscale IP
96
- User u0_a123 # From 'whoami' in Termux
97
- Port 8022
98
- IdentityFile ~/.ssh/id_ed25519
99
- ServerAliveInterval 60
100
- ```
101
-
102
- 3. **Test SSH connection**:
103
- ```bash
104
- ssh android "echo 'Connection successful!'"
105
- ```
106
-
107
- ## AgentVibes Configuration
108
-
109
- ### 1. Set SSH Host Alias
110
-
111
- Choose ONE of these methods:
112
-
113
- **Option A: Environment Variable** (Temporary)
114
- ```bash
115
- export TERMUX_SSH_HOST="android"
116
- ```
117
-
118
- **Option B: Global Config File** (Recommended)
119
- ```bash
120
- echo "android" > ~/.claude/termux-ssh-host.txt
121
- ```
122
-
123
- **Option C: Project-Specific**
124
- ```bash
125
- echo "android" > /path/to/project/.claude/termux-ssh-host.txt
126
- ```
127
-
128
- ### 2. Switch to termux-ssh Provider
129
-
130
- ```bash
131
- # Using slash command (in Claude Code)
132
- /agent-vibes:provider switch termux-ssh
133
-
134
- # Or manually
135
- echo "termux-ssh" > ~/.claude/tts-provider.txt
136
- ```
137
-
138
- ### 3. Verify Setup
139
-
140
- ```bash
141
- # List available providers (should include termux-ssh)
142
- /agent-vibes:provider list
143
-
144
- # Check active provider
145
- /agent-vibes:provider get
146
-
147
- # Test TTS
148
- .claude/hooks/play-tts.sh "Testing Android TTS via SSH"
149
- ```
150
-
151
- ## Usage
152
-
153
- Once configured, AgentVibes will automatically route TTS to your Android device:
154
-
155
- ```bash
156
- # TTS plays on your Android phone, not the server
157
- .claude/hooks/play-tts.sh "This will play on my Android device"
158
- ```
159
-
160
- ## Troubleshooting
161
-
162
- ### "Cannot connect to SSH host 'android'"
163
-
164
- **Possible causes**:
165
- 1. SSH server not running on Android: `sshd` in Termux
166
- 2. Wrong IP/hostname in ~/.ssh/config
167
- 3. Firewall blocking port 8022
168
- 4. Android device not on same network (or no VPN connection)
169
-
170
- **Debug**:
171
- ```bash
172
- # Test SSH connection manually
173
- ssh android "echo ok"
174
-
175
- # Check SSH config
176
- cat ~/.ssh/config | grep -A5 "Host android"
177
-
178
- # Verify sshd is running on Android
179
- ssh android "ps aux | grep sshd"
180
- ```
181
-
182
- ### "termux-tts-speak: command not found"
183
-
184
- **Solution**:
185
- ```bash
186
- # On Android (Termux)
187
- pkg install termux-api
188
-
189
- # Verify installation
190
- which termux-tts-speak
191
- ```
192
-
193
- ### "Provider 'termux-ssh' not found"
194
-
195
- **Solution**:
196
- ```bash
197
- # Verify provider file exists
198
- ls -la .claude/hooks/play-tts-termux-ssh.sh
199
-
200
- # Check if executable
201
- chmod +x .claude/hooks/play-tts-termux-ssh.sh
202
-
203
- # List providers to confirm
204
- /agent-vibes:provider list
205
- ```
206
-
207
- ### Audio plays but very slow/delayed
208
-
209
- This is normal for the first invocation. Subsequent calls should be instant.
210
-
211
- **Optimization**:
212
- ```bash
213
- # Add ControlMaster to ~/.ssh/config for connection pooling
214
- Host android
215
- ControlMaster auto
216
- ControlPath ~/.ssh/sockets/%r@%h-%p
217
- ControlPersist 10m
218
- ```
219
-
220
- ## Advanced Configuration
221
-
222
- ### Using Tailscale for Internet-Wide Access (Recommended)
223
-
224
- #### Why Use Tailscale?
225
-
226
- **The Problem:**
227
- - Your Android device and server are on different networks (home WiFi, mobile data, office)
228
- - SSH requires both devices on the same local network OR a public IP with port forwarding
229
- - Port forwarding is complex, insecure, and often blocked by carriers/ISPs
230
- - Public WiFi networks block SSH connections
231
-
232
- **The Solution: Tailscale**
233
-
234
- Tailscale creates a secure, private VPN network between your devices that works from anywhere:
235
- - ✅ Access your Android from any network (home, office, coffee shop, mobile data)
236
- - ✅ No port forwarding or firewall configuration needed
237
- - ✅ Encrypted point-to-point connections
238
- - ✅ Works behind NAT, firewalls, and on mobile data
239
- - ✅ Free for personal use (up to 100 devices)
240
- - ✅ Each device gets a stable private IP (100.x.x.x)
241
-
242
- #### Step 1: Install Tailscale on Android
243
-
244
- 1. **Download Tailscale from Play Store:**
245
- - Search for "Tailscale" in Google Play Store
246
- - Install the official Tailscale app
247
- - OR download APK from: https://tailscale.com/download/android
248
-
249
- 2. **Connect to Tailscale:**
250
- - Open Tailscale app
251
- - Tap "Sign in with Google" (or another provider)
252
- - Grant VPN permissions when prompted
253
- - Toggle the connection ON
254
-
255
- 3. **Get your Android's Tailscale IP:**
256
- ```bash
257
- # In Termux, run:
258
- tailscale ip -4
259
- # Example output: 100.100.100.100
260
- ```
261
-
262
- **OR** check in the Tailscale app:
263
- - Open Tailscale app
264
- - Your IP is shown under your device name (e.g., "100.100.100.100")
265
-
266
- #### Step 2: Install Tailscale on Server/Desktop
267
-
268
- **On Ubuntu/Debian:**
269
- ```bash
270
- curl -fsSL https://tailscale.com/install.sh | sh
271
- sudo tailscale up
272
- ```
273
-
274
- **On macOS:**
275
- ```bash
276
- brew install tailscale
277
- sudo tailscale up
278
- ```
279
-
280
- **On Windows:**
281
- - Download installer from https://tailscale.com/download/windows
282
- - Run installer and sign in
283
-
284
- **Get your server's Tailscale IP:**
285
- ```bash
286
- tailscale ip -4
287
- # Example output: 100.100.100.101
288
- ```
289
-
290
- #### Step 3: Configure SSH with Tailscale IP
291
-
292
- Update your `~/.ssh/config` to use the Tailscale IP instead of local WiFi IP:
293
-
294
- ```ssh-config
295
- Host android
296
- HostName 100.100.100.100 # ← Use Tailscale IP (from Step 1)
297
- User u0_a123 # ← Your Termux username (run 'whoami' in Termux)
298
- Port 8022
299
- IdentityFile ~/.ssh/id_ed25519
300
- ServerAliveInterval 60
301
- ServerAliveCountMax 3
302
- ```
303
-
304
- **Why this works everywhere:**
305
- - Tailscale IPs (100.x.x.x) are stable and work on ANY network
306
- - No need to change config when switching WiFi networks
307
- - Works even when Android is on mobile data
308
-
309
- #### Step 4: Test Connection
310
-
311
- ```bash
312
- # Test from your server/desktop
313
- ssh android "echo 'Connected via Tailscale!'"
314
-
315
- # If successful, you're ready for AgentVibes
316
- ```
317
-
318
- #### Benefits Summary
319
-
320
- | Without Tailscale | With Tailscale |
321
- |------------------|----------------|
322
- | Only works on same WiFi | Works from anywhere |
323
- | Need to update IP when network changes | Stable IP that never changes |
324
- | Port forwarding required | No configuration needed |
325
- | Insecure over internet | End-to-end encrypted |
326
- | Doesn't work on mobile data | Works on mobile data |
327
-
328
- **Recommendation:** Always use Tailscale for the best experience. It makes your Android device accessible from anywhere while keeping connections secure and private.
329
-
330
- ### Multiple Android Devices
331
-
332
- Configure different host aliases:
333
-
334
- ```ssh-config
335
- Host android-phone
336
- HostName 100.100.100.100
337
- User u0_a123
338
- Port 8022
339
-
340
- Host android-tablet
341
- HostName 100.100.100.101
342
- User u0_a456
343
- Port 8022
344
- ```
345
-
346
- Then switch between them:
347
- ```bash
348
- echo "android-tablet" > ~/.claude/termux-ssh-host.txt
349
- ```
350
-
351
- ### Custom TTS Voices
352
-
353
- Android TTS voices are managed in Android Settings, not AgentVibes:
354
-
355
- 1. Open Android **Settings** → **Accessibility** → **Text-to-Speech**
356
- 2. Install additional voice engines from Play Store (e.g., Google TTS, eSpeak)
357
- 3. Select preferred engine and voice
358
- 4. AgentVibes will use the selected voice automatically
359
-
360
- ## Security Considerations
361
-
362
- - **SSH Key Authentication**: Always use SSH keys, never passwords
363
- - **Firewall**: Expose SSH port 8022 only on trusted networks
364
- - **VPN Recommended**: Use Tailscale/ZeroTier instead of public IPs
365
- - **No Sensitive Data**: Don't send sensitive information via TTS
366
-
367
- ## How It Works
368
-
369
- ```
370
- ┌──────────────┐ ┌──────────────┐
371
- │ Desktop │ │ Android │
372
- │ (Server) │ │ (Termux) │
373
- └──────┬───────┘ └───────┬──────┘
374
- │ │
375
- │ 1. User runs command │
376
- │ .claude/hooks/play-tts.sh │
377
- │ │
378
- │ 2. Route to termux-ssh │
379
- │ provider │
380
- │ │
381
- │ 3. SSH to Android │
382
- ├──────────────────────────────>│
383
- │ ssh android "termux-tts- │
384
- │ speak 'text'" │
385
- │ │
386
- │ │ 4. Android TTS
387
- │ │ speaks text
388
- │ │ 🔊
389
- │ │
390
- │ 5. Returns immediately │
391
- │<──────────────────────────────┤
392
- │ │
393
- └───────────────────────────────┘
394
- ```
395
-
396
- ## Limitations
397
-
398
- - **Requires SSH connection**: Must be reachable via network
399
- - **No audio file output**: Provider outputs to remote device only
400
- - **Language support**: Limited to Android TTS engine capabilities
401
- - **Network latency**: Adds ~100-500ms depending on connection
402
-
403
- ## See Also
404
-
405
- - [Provider Management](../commands/agent-vibes/provider.md)
406
- - [Voice Configuration](../commands/agent-vibes/voice.md)
407
- - [SSH Configuration Guide](https://www.ssh.com/academy/ssh/config)
408
- - [Termux Wiki](https://wiki.termux.com/)
1
+ # Termux SSH TTS Provider Setup Guide
2
+
3
+ ## Overview
4
+
5
+ The `termux-ssh` provider allows AgentVibes to send TTS audio output to your Android device when you're connected from Termux via SSH. Instead of playing audio locally on your server/desktop, text is sent to your phone via SSH and spoken using Android's native TTS engine (`termux-tts-speak`).
6
+
7
+ **Use Case:** You're working on a remote server (VPS, cloud instance, home server) and want to hear AgentVibes TTS on your Android phone instead of the server's speakers.
8
+
9
+ ### Why This Provider?
10
+
11
+ - **Solves PulseAudio issues**: PulseAudio tunneling doesn't work reliably on Android/Termux
12
+ - **Uses native Android TTS**: High-quality voices from Google TTS or other installed engines
13
+ - **Near-instant**: Only sends text, not audio files
14
+ - **Works from anywhere**: With Tailscale, access your Android from any network
15
+ - **No configuration overhead**: Works with standard SSH setup
16
+
17
+ ## Prerequisites
18
+
19
+ > **💡 Tip:** Install Tailscale first (see [Advanced Configuration](#using-tailscale-for-internet-wide-access-recommended)) for the best experience. It allows you to access your Android device from anywhere, not just your local WiFi.
20
+
21
+ ### On Android Device (Termux)
22
+
23
+ 1. **Install Termux** from F-Droid (NOT Google Play - it's outdated)
24
+ ```bash
25
+ # Download from: https://f-droid.org/en/packages/com.termux/
26
+ ```
27
+
28
+ 2. **Install required packages**:
29
+ ```bash
30
+ pkg update
31
+ pkg install termux-api openssh
32
+ ```
33
+
34
+ 3. **Install Termux:API app** from F-Droid:
35
+ ```bash
36
+ # Download from: https://f-droid.org/en/packages/com.termux.api/
37
+ ```
38
+
39
+ 4. **Start SSH server**:
40
+ ```bash
41
+ # Generate SSH keys (first time only)
42
+ ssh-keygen -t rsa -b 4096
43
+
44
+ # Start SSH daemon
45
+ sshd
46
+
47
+ # Find your SSH port (usually 8022)
48
+ cat $PREFIX/var/run/sshd.pid
49
+ ```
50
+
51
+ 5. **Get your device IP address**:
52
+
53
+ **Option A: Tailscale IP (Recommended)**
54
+ ```bash
55
+ # After installing Tailscale (see Advanced Configuration)
56
+ tailscale ip -4
57
+ # Example: 100.100.100.100
58
+ ```
59
+
60
+ **Option B: Local WiFi IP (Same Network Only)**
61
+ ```bash
62
+ # Only works when both devices are on the same WiFi
63
+ ifconfig wlan0 | grep "inet addr"
64
+ # Example: 192.168.1.100
65
+ ```
66
+
67
+ > ⚠️ **Local WiFi IPs only work on the same network.** Use Tailscale for reliable access from anywhere.
68
+
69
+ ### On Server/Desktop
70
+
71
+ 1. **Copy SSH public key to Android**:
72
+ ```bash
73
+ # On your desktop/server
74
+ ssh-copy-id -p 8022 u0_a###@<android-ip>
75
+
76
+ # Replace:
77
+ # - u0_a### with your Termux username (run 'whoami' in Termux)
78
+ # - <android-ip> with your Android device IP
79
+ ```
80
+
81
+ 2. **Configure SSH host alias** in `~/.ssh/config`:
82
+ ```ssh-config
83
+ Host android
84
+ HostName <your-android-ip>
85
+ User <your-termux-username>
86
+ Port 8022
87
+ IdentityFile ~/.ssh/id_rsa
88
+ ServerAliveInterval 60
89
+ ServerAliveCountMax 3
90
+ ```
91
+
92
+ **Example**:
93
+ ```ssh-config
94
+ Host android
95
+ HostName 100.100.100.100 # Tailscale IP
96
+ User u0_a123 # From 'whoami' in Termux
97
+ Port 8022
98
+ IdentityFile ~/.ssh/id_ed25519
99
+ ServerAliveInterval 60
100
+ ```
101
+
102
+ 3. **Test SSH connection**:
103
+ ```bash
104
+ ssh android "echo 'Connection successful!'"
105
+ ```
106
+
107
+ ## AgentVibes Configuration
108
+
109
+ ### 1. Set SSH Host Alias
110
+
111
+ Choose ONE of these methods:
112
+
113
+ **Option A: Environment Variable** (Temporary)
114
+ ```bash
115
+ export TERMUX_SSH_HOST="android"
116
+ ```
117
+
118
+ **Option B: Global Config File** (Recommended)
119
+ ```bash
120
+ echo "android" > ~/.claude/termux-ssh-host.txt
121
+ ```
122
+
123
+ **Option C: Project-Specific**
124
+ ```bash
125
+ echo "android" > /path/to/project/.claude/termux-ssh-host.txt
126
+ ```
127
+
128
+ ### 2. Switch to termux-ssh Provider
129
+
130
+ ```bash
131
+ # Using slash command (in Claude Code)
132
+ /agent-vibes:provider switch termux-ssh
133
+
134
+ # Or manually
135
+ echo "termux-ssh" > ~/.claude/tts-provider.txt
136
+ ```
137
+
138
+ ### 3. Verify Setup
139
+
140
+ ```bash
141
+ # List available providers (should include termux-ssh)
142
+ /agent-vibes:provider list
143
+
144
+ # Check active provider
145
+ /agent-vibes:provider get
146
+
147
+ # Test TTS
148
+ .claude/hooks/play-tts.sh "Testing Android TTS via SSH"
149
+ ```
150
+
151
+ ## Usage
152
+
153
+ Once configured, AgentVibes will automatically route TTS to your Android device:
154
+
155
+ ```bash
156
+ # TTS plays on your Android phone, not the server
157
+ .claude/hooks/play-tts.sh "This will play on my Android device"
158
+ ```
159
+
160
+ ## Troubleshooting
161
+
162
+ ### "Cannot connect to SSH host 'android'"
163
+
164
+ **Possible causes**:
165
+ 1. SSH server not running on Android: `sshd` in Termux
166
+ 2. Wrong IP/hostname in ~/.ssh/config
167
+ 3. Firewall blocking port 8022
168
+ 4. Android device not on same network (or no VPN connection)
169
+
170
+ **Debug**:
171
+ ```bash
172
+ # Test SSH connection manually
173
+ ssh android "echo ok"
174
+
175
+ # Check SSH config
176
+ cat ~/.ssh/config | grep -A5 "Host android"
177
+
178
+ # Verify sshd is running on Android
179
+ ssh android "ps aux | grep sshd"
180
+ ```
181
+
182
+ ### "termux-tts-speak: command not found"
183
+
184
+ **Solution**:
185
+ ```bash
186
+ # On Android (Termux)
187
+ pkg install termux-api
188
+
189
+ # Verify installation
190
+ which termux-tts-speak
191
+ ```
192
+
193
+ ### "Provider 'termux-ssh' not found"
194
+
195
+ **Solution**:
196
+ ```bash
197
+ # Verify provider file exists
198
+ ls -la .claude/hooks/play-tts-termux-ssh.sh
199
+
200
+ # Check if executable
201
+ chmod +x .claude/hooks/play-tts-termux-ssh.sh
202
+
203
+ # List providers to confirm
204
+ /agent-vibes:provider list
205
+ ```
206
+
207
+ ### Audio plays but very slow/delayed
208
+
209
+ This is normal for the first invocation. Subsequent calls should be instant.
210
+
211
+ **Optimization**:
212
+ ```bash
213
+ # Add ControlMaster to ~/.ssh/config for connection pooling
214
+ Host android
215
+ ControlMaster auto
216
+ ControlPath ~/.ssh/sockets/%r@%h-%p
217
+ ControlPersist 10m
218
+ ```
219
+
220
+ ## Advanced Configuration
221
+
222
+ ### Using Tailscale for Internet-Wide Access (Recommended)
223
+
224
+ #### Why Use Tailscale?
225
+
226
+ **The Problem:**
227
+ - Your Android device and server are on different networks (home WiFi, mobile data, office)
228
+ - SSH requires both devices on the same local network OR a public IP with port forwarding
229
+ - Port forwarding is complex, insecure, and often blocked by carriers/ISPs
230
+ - Public WiFi networks block SSH connections
231
+
232
+ **The Solution: Tailscale**
233
+
234
+ Tailscale creates a secure, private VPN network between your devices that works from anywhere:
235
+ - ✅ Access your Android from any network (home, office, coffee shop, mobile data)
236
+ - ✅ No port forwarding or firewall configuration needed
237
+ - ✅ Encrypted point-to-point connections
238
+ - ✅ Works behind NAT, firewalls, and on mobile data
239
+ - ✅ Free for personal use (up to 100 devices)
240
+ - ✅ Each device gets a stable private IP (100.x.x.x)
241
+
242
+ #### Step 1: Install Tailscale on Android
243
+
244
+ 1. **Download Tailscale from Play Store:**
245
+ - Search for "Tailscale" in Google Play Store
246
+ - Install the official Tailscale app
247
+ - OR download APK from: https://tailscale.com/download/android
248
+
249
+ 2. **Connect to Tailscale:**
250
+ - Open Tailscale app
251
+ - Tap "Sign in with Google" (or another provider)
252
+ - Grant VPN permissions when prompted
253
+ - Toggle the connection ON
254
+
255
+ 3. **Get your Android's Tailscale IP:**
256
+ ```bash
257
+ # In Termux, run:
258
+ tailscale ip -4
259
+ # Example output: 100.100.100.100
260
+ ```
261
+
262
+ **OR** check in the Tailscale app:
263
+ - Open Tailscale app
264
+ - Your IP is shown under your device name (e.g., "100.100.100.100")
265
+
266
+ #### Step 2: Install Tailscale on Server/Desktop
267
+
268
+ **On Ubuntu/Debian:**
269
+ ```bash
270
+ curl -fsSL https://tailscale.com/install.sh | sh
271
+ sudo tailscale up
272
+ ```
273
+
274
+ **On macOS:**
275
+ ```bash
276
+ brew install tailscale
277
+ sudo tailscale up
278
+ ```
279
+
280
+ **On Windows:**
281
+ - Download installer from https://tailscale.com/download/windows
282
+ - Run installer and sign in
283
+
284
+ **Get your server's Tailscale IP:**
285
+ ```bash
286
+ tailscale ip -4
287
+ # Example output: 100.100.100.101
288
+ ```
289
+
290
+ #### Step 3: Configure SSH with Tailscale IP
291
+
292
+ Update your `~/.ssh/config` to use the Tailscale IP instead of local WiFi IP:
293
+
294
+ ```ssh-config
295
+ Host android
296
+ HostName 100.100.100.100 # ← Use Tailscale IP (from Step 1)
297
+ User u0_a123 # ← Your Termux username (run 'whoami' in Termux)
298
+ Port 8022
299
+ IdentityFile ~/.ssh/id_ed25519
300
+ ServerAliveInterval 60
301
+ ServerAliveCountMax 3
302
+ ```
303
+
304
+ **Why this works everywhere:**
305
+ - Tailscale IPs (100.x.x.x) are stable and work on ANY network
306
+ - No need to change config when switching WiFi networks
307
+ - Works even when Android is on mobile data
308
+
309
+ #### Step 4: Test Connection
310
+
311
+ ```bash
312
+ # Test from your server/desktop
313
+ ssh android "echo 'Connected via Tailscale!'"
314
+
315
+ # If successful, you're ready for AgentVibes
316
+ ```
317
+
318
+ #### Benefits Summary
319
+
320
+ | Without Tailscale | With Tailscale |
321
+ |------------------|----------------|
322
+ | Only works on same WiFi | Works from anywhere |
323
+ | Need to update IP when network changes | Stable IP that never changes |
324
+ | Port forwarding required | No configuration needed |
325
+ | Insecure over internet | End-to-end encrypted |
326
+ | Doesn't work on mobile data | Works on mobile data |
327
+
328
+ **Recommendation:** Always use Tailscale for the best experience. It makes your Android device accessible from anywhere while keeping connections secure and private.
329
+
330
+ ### Multiple Android Devices
331
+
332
+ Configure different host aliases:
333
+
334
+ ```ssh-config
335
+ Host android-phone
336
+ HostName 100.100.100.100
337
+ User u0_a123
338
+ Port 8022
339
+
340
+ Host android-tablet
341
+ HostName 100.100.100.101
342
+ User u0_a456
343
+ Port 8022
344
+ ```
345
+
346
+ Then switch between them:
347
+ ```bash
348
+ echo "android-tablet" > ~/.claude/termux-ssh-host.txt
349
+ ```
350
+
351
+ ### Custom TTS Voices
352
+
353
+ Android TTS voices are managed in Android Settings, not AgentVibes:
354
+
355
+ 1. Open Android **Settings** → **Accessibility** → **Text-to-Speech**
356
+ 2. Install additional voice engines from Play Store (e.g., Google TTS, eSpeak)
357
+ 3. Select preferred engine and voice
358
+ 4. AgentVibes will use the selected voice automatically
359
+
360
+ ## Security Considerations
361
+
362
+ - **SSH Key Authentication**: Always use SSH keys, never passwords
363
+ - **Firewall**: Expose SSH port 8022 only on trusted networks
364
+ - **VPN Recommended**: Use Tailscale/ZeroTier instead of public IPs
365
+ - **No Sensitive Data**: Don't send sensitive information via TTS
366
+
367
+ ## How It Works
368
+
369
+ ```
370
+ ┌──────────────┐ ┌──────────────┐
371
+ │ Desktop │ │ Android │
372
+ │ (Server) │ │ (Termux) │
373
+ └──────┬───────┘ └───────┬──────┘
374
+ │ │
375
+ │ 1. User runs command │
376
+ │ .claude/hooks/play-tts.sh │
377
+ │ │
378
+ │ 2. Route to termux-ssh │
379
+ │ provider │
380
+ │ │
381
+ │ 3. SSH to Android │
382
+ ├──────────────────────────────>│
383
+ │ ssh android "termux-tts- │
384
+ │ speak 'text'" │
385
+ │ │
386
+ │ │ 4. Android TTS
387
+ │ │ speaks text
388
+ │ │ 🔊
389
+ │ │
390
+ │ 5. Returns immediately │
391
+ │<──────────────────────────────┤
392
+ │ │
393
+ └───────────────────────────────┘
394
+ ```
395
+
396
+ ## Limitations
397
+
398
+ - **Requires SSH connection**: Must be reachable via network
399
+ - **No audio file output**: Provider outputs to remote device only
400
+ - **Language support**: Limited to Android TTS engine capabilities
401
+ - **Network latency**: Adds ~100-500ms depending on connection
402
+
403
+ ## See Also
404
+
405
+ - [Provider Management](../commands/agent-vibes/provider.md)
406
+ - [Voice Configuration](../commands/agent-vibes/voice.md)
407
+ - [SSH Configuration Guide](https://www.ssh.com/academy/ssh/config)
408
+ - [Termux Wiki](https://wiki.termux.com/)