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.
- package/.agentvibes/bmad/bmad-voices.md +69 -69
- package/.agentvibes/config.json +12 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/audio/tracks/README.md +52 -52
- package/.claude/commands/agent-vibes/add.md +21 -21
- package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
- package/.claude/commands/agent-vibes/agent.md +79 -79
- package/.claude/commands/agent-vibes/background-music.md +111 -111
- package/.claude/commands/agent-vibes/bmad.md +198 -198
- package/.claude/commands/agent-vibes/clean.md +18 -18
- package/.claude/commands/agent-vibes/cleanup.md +18 -18
- package/.claude/commands/agent-vibes/commands.json +145 -145
- package/.claude/commands/agent-vibes/effects.md +97 -97
- package/.claude/commands/agent-vibes/get.md +9 -9
- package/.claude/commands/agent-vibes/hide.md +91 -91
- package/.claude/commands/agent-vibes/language.md +23 -23
- package/.claude/commands/agent-vibes/learn.md +67 -67
- package/.claude/commands/agent-vibes/list.md +13 -13
- package/.claude/commands/agent-vibes/mute.md +37 -37
- package/.claude/commands/agent-vibes/preview.md +17 -17
- package/.claude/commands/agent-vibes/provider.md +68 -68
- package/.claude/commands/agent-vibes/replay-target.md +14 -14
- package/.claude/commands/agent-vibes/sample.md +12 -12
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
- package/.claude/commands/agent-vibes/set-pretext.md +65 -65
- package/.claude/commands/agent-vibes/set-speed.md +41 -41
- package/.claude/commands/agent-vibes/show.md +84 -84
- package/.claude/commands/agent-vibes/switch.md +87 -87
- package/.claude/commands/agent-vibes/target-voice.md +26 -26
- package/.claude/commands/agent-vibes/target.md +30 -30
- package/.claude/commands/agent-vibes/translate.md +68 -68
- package/.claude/commands/agent-vibes/unmute.md +45 -45
- package/.claude/commands/agent-vibes/verbosity.md +89 -89
- package/.claude/commands/agent-vibes/whoami.md +7 -7
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/agentvibes.json +1 -0
- package/.claude/config/audio-effects.cfg +2 -2
- package/.claude/config/audio-effects.cfg.sample +52 -52
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/intro-text.txt +1 -0
- package/.claude/config/piper-speech-rate.txt +4 -0
- package/.claude/config/piper-target-speech-rate.txt +1 -0
- package/.claude/config/reverb-level.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +4 -0
- package/.claude/config/tts-target-speech-rate.txt +1 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/README-TTS-QUEUE.md +135 -135
- package/.claude/hooks/audio-cache-utils.sh +246 -246
- package/.claude/hooks/audio-processor.sh +433 -433
- package/.claude/hooks/background-music-manager.sh +404 -404
- package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
- package/.claude/hooks/bmad-speak.sh +269 -269
- package/.claude/hooks/bmad-tts-injector.sh +568 -568
- package/.claude/hooks/bmad-voice-manager.sh +928 -928
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
- package/.claude/hooks/clawdbot-receiver.sh +107 -107
- package/.claude/hooks/clean-audio-cache.sh +22 -22
- package/.claude/hooks/cleanup-cache.sh +106 -106
- package/.claude/hooks/configure-rdp-mode.sh +137 -137
- package/.claude/hooks/download-extra-voices.sh +244 -244
- package/.claude/hooks/effects-manager.sh +268 -268
- package/.claude/hooks/github-star-reminder.sh +154 -154
- package/.claude/hooks/language-manager.sh +362 -362
- package/.claude/hooks/learn-manager.sh +492 -492
- package/.claude/hooks/macos-voice-manager.sh +205 -205
- package/.claude/hooks/migrate-background-music.sh +125 -125
- package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
- package/.claude/hooks/optimize-background-music.sh +87 -87
- package/.claude/hooks/path-resolver.sh +60 -60
- package/.claude/hooks/personality-manager.sh +448 -448
- package/.claude/hooks/piper-download-voices.sh +225 -225
- package/.claude/hooks/piper-installer.sh +292 -292
- package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
- package/.claude/hooks/piper-voice-manager.sh +24 -3
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
- package/.claude/hooks/play-tts-enhanced.sh +105 -105
- package/.claude/hooks/play-tts-macos.sh +368 -368
- package/.claude/hooks/play-tts-piper.sh +679 -679
- package/.claude/hooks/play-tts-soprano.sh +356 -356
- package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
- package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
- package/.claude/hooks/play-tts.sh +301 -301
- package/.claude/hooks/prepare-release.sh +54 -54
- package/.claude/hooks/provider-commands.sh +617 -617
- package/.claude/hooks/provider-manager.sh +399 -399
- package/.claude/hooks/replay-target-audio.sh +95 -95
- package/.claude/hooks/requirements.txt +6 -6
- package/.claude/hooks/sentiment-manager.sh +201 -201
- package/.claude/hooks/session-start-tts.sh +81 -81
- package/.claude/hooks/soprano-gradio-synth.py +139 -139
- package/.claude/hooks/speed-manager.sh +291 -291
- package/.claude/hooks/stop-tts.sh +84 -84
- package/.claude/hooks/termux-installer.sh +261 -261
- package/.claude/hooks/translate-manager.sh +341 -341
- package/.claude/hooks/translator.py +237 -237
- package/.claude/hooks/tts-queue-worker.sh +145 -145
- package/.claude/hooks/tts-queue.sh +165 -165
- package/.claude/hooks/verbosity-manager.sh +178 -178
- package/.claude/hooks/voice-manager.sh +548 -548
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
- package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
- package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
- package/.claude/hooks-windows/effects-manager.ps1 +294 -0
- package/.claude/hooks-windows/language-manager.ps1 +193 -0
- package/.claude/hooks-windows/learn-manager.ps1 +241 -0
- package/.claude/hooks-windows/personality-manager.ps1 +266 -0
- package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
- package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
- package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
- package/.claude/hooks-windows/play-tts.ps1 +344 -266
- package/.claude/hooks-windows/provider-manager.ps1 +29 -10
- package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
- package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
- package/.claude/hooks-windows/speed-manager.ps1 +166 -0
- package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
- package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
- package/.claude/output-styles/agent-vibes.md +202 -202
- package/.claude/personalities/angry.md +14 -14
- package/.claude/personalities/annoying.md +14 -14
- package/.claude/personalities/crass.md +14 -14
- package/.claude/personalities/dramatic.md +14 -14
- package/.claude/personalities/dry-humor.md +50 -50
- package/.claude/personalities/flirty.md +20 -20
- package/.claude/personalities/funny.md +14 -14
- package/.claude/personalities/grandpa.md +32 -32
- package/.claude/personalities/millennial.md +14 -14
- package/.claude/personalities/moody.md +14 -14
- package/.claude/personalities/normal.md +16 -16
- package/.claude/personalities/pirate.md +14 -14
- package/.claude/personalities/poetic.md +14 -14
- package/.claude/personalities/professional.md +14 -14
- package/.claude/personalities/rapper.md +55 -55
- package/.claude/personalities/robot.md +14 -14
- package/.claude/personalities/sarcastic.md +38 -38
- package/.claude/personalities/sassy.md +14 -14
- package/.claude/personalities/surfer-dude.md +14 -14
- package/.claude/personalities/zen.md +14 -14
- package/.claude/settings.json +15 -15
- package/.claude/verbosity.txt +1 -1
- package/.clawdbot/README.md +105 -105
- package/.clawdbot/skill/SKILL.md +241 -241
- package/.mcp.json +12 -0
- package/CLAUDE.md +170 -170
- package/README.md +2029 -2007
- package/RELEASE_NOTES.md +1310 -1203
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/agentvibes-voice-browser.js +1840 -1840
- package/bin/agentvibes.js +48 -2
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +206 -206
- 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/WINDOWS_SETUP.md +260 -260
- package/mcp-server/docs/troubleshooting-audio.md +313 -313
- 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/install-deps.js +130 -130
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +1465 -1453
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +336 -0
- package/package.json +110 -110
- package/setup-windows.ps1 +815 -815
- 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/app.js +824 -824
- package/src/console/audio-env.js +20 -1
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +50 -50
- package/src/console/modals/modal-overlay.js +247 -247
- package/src/console/navigation.js +62 -62
- package/src/console/tabs/agents-tab.js +1684 -1516
- package/src/console/tabs/help-tab.js +261 -261
- package/src/console/tabs/install-tab.js +1007 -991
- package/src/console/tabs/music-tab.js +22 -8
- package/src/console/tabs/placeholder-tab.js +53 -53
- package/src/console/tabs/readme-tab.js +267 -267
- package/src/console/tabs/receiver-tab.js +1472 -1212
- package/src/console/tabs/settings-tab.js +152 -79
- package/src/console/tabs/voices-tab.js +100 -21
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/format-utils.js +89 -89
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +185 -185
- package/src/console/widgets/reverb-picker.js +94 -94
- package/src/console/widgets/track-picker.js +285 -285
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +5882 -5829
- package/src/services/agent-voice-store.js +423 -423
- package/src/services/config-service.js +264 -264
- package/src/services/navigation-service.js +123 -123
- package/src/services/provider-service.js +132 -132
- package/src/services/verbosity-service.js +157 -157
- 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 -466
- 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/provider-validator.js +96 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/templates/agentvibes-receiver.sh +482 -482
- package/templates/audio/welcome-music.mp3 +0 -0
- package/voice-assignments.json +8244 -8244
- 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/)
|