agentvibes 5.7.1 → 5.7.4

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.
@@ -0,0 +1,438 @@
1
+ {
2
+ "version": 1,
3
+ "updatedAt": "2026-05-12T16:11:50.143Z",
4
+ "files": {
5
+ "/home/administrator/claude/AgentVibes/.claude/hooks/audio-cache-utils.sh": {
6
+ "hash": "12f3198bc340b01a4cb815f2af00865050294ca141e0df6feb5d31931ef684d6",
7
+ "installedAt": "2026-05-12T16:11:50.000Z"
8
+ },
9
+ "/home/administrator/claude/AgentVibes/.claude/hooks/audio-processor.sh": {
10
+ "hash": "82efc1e67f51a6906414ee04c0053f405869590743b80c04c3ef3f9e34d294be",
11
+ "installedAt": "2026-05-12T16:11:50.001Z"
12
+ },
13
+ "/home/administrator/claude/AgentVibes/.claude/hooks/background-music-manager.sh": {
14
+ "hash": "1be2e32d910c080117350b359699b9c20a7ab0a2ccb6e95c809f21a9d8299eeb",
15
+ "installedAt": "2026-05-12T16:11:50.002Z"
16
+ },
17
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-party-manager.sh": {
18
+ "hash": "a838575cdea65ee6e8ab0956e965380b32fc87a9af2df94ed8798ea17b75c3bb",
19
+ "installedAt": "2026-05-12T16:11:50.003Z"
20
+ },
21
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-party-speak.sh": {
22
+ "hash": "157165d726a98dc1e0feaba5df25993195f06d756cfe2adda00fd6bedc8dd6ae",
23
+ "installedAt": "2026-05-12T16:11:50.003Z"
24
+ },
25
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-speak-enhanced.sh": {
26
+ "hash": "1c80292b63469cf8a616af6a1dde7c0fef1ef5534ae801bc416485e43e25d49c",
27
+ "installedAt": "2026-05-12T16:11:50.004Z"
28
+ },
29
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-speak.sh": {
30
+ "hash": "f4387ff58987bda5a137dab46046608ad417923eba74f0bcae7c1137e5755854",
31
+ "installedAt": "2026-05-12T16:11:50.005Z"
32
+ },
33
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-tts-injector.sh": {
34
+ "hash": "cc61b39d8ba0a71e4eab4926e8895daf82997ec4ff43926952f2599175046c13",
35
+ "installedAt": "2026-05-12T16:11:50.006Z"
36
+ },
37
+ "/home/administrator/claude/AgentVibes/.claude/hooks/bmad-voice-manager.sh": {
38
+ "hash": "7ef0326706e438e2bfef763776f4863ee2924b2172df033f77159ab63b403926",
39
+ "installedAt": "2026-05-12T16:11:50.007Z"
40
+ },
41
+ "/home/administrator/claude/AgentVibes/.claude/hooks/clawdbot-receiver-SECURE.sh": {
42
+ "hash": "0aeb488dd6f345c3a6fecfceda1e68c1179312f1dad0e867bebf51c19bca5e29",
43
+ "installedAt": "2026-05-12T16:11:50.008Z"
44
+ },
45
+ "/home/administrator/claude/AgentVibes/.claude/hooks/clawdbot-receiver.sh": {
46
+ "hash": "c3678870ec11aaabc4e0677727de9524c557da7df1a99e6a1d84057c112698b7",
47
+ "installedAt": "2026-05-12T16:11:50.009Z"
48
+ },
49
+ "/home/administrator/claude/AgentVibes/.claude/hooks/clean-audio-cache.sh": {
50
+ "hash": "7bf5c92fe9df1cce94fbb28a393b0052a898f8ccee01fff17c405f68a2503313",
51
+ "installedAt": "2026-05-12T16:11:50.009Z"
52
+ },
53
+ "/home/administrator/claude/AgentVibes/.claude/hooks/cleanup-cache.sh": {
54
+ "hash": "f41fba9a48836f4fba60501b6dacfb05890221ecca04cc52a3897714a43ae45c",
55
+ "installedAt": "2026-05-12T16:11:50.010Z"
56
+ },
57
+ "/home/administrator/claude/AgentVibes/.claude/hooks/configure-rdp-mode.sh": {
58
+ "hash": "ffb82f1f8a792dcc9e66faba6f2afce826485e9e0c977625ab53577624dbf148",
59
+ "installedAt": "2026-05-12T16:11:50.010Z"
60
+ },
61
+ "/home/administrator/claude/AgentVibes/.claude/hooks/download-extra-voices.sh": {
62
+ "hash": "2fbae741205701f72d326a781ee92b38535d64913fa0b245991b5beaf0a57ac8",
63
+ "installedAt": "2026-05-12T16:11:50.011Z"
64
+ },
65
+ "/home/administrator/claude/AgentVibes/.claude/hooks/effects-manager.sh": {
66
+ "hash": "a56577ee56a316f87129e79046d750bb70cb89832e63f4b7efcbea408070faa1",
67
+ "installedAt": "2026-05-12T16:11:50.012Z"
68
+ },
69
+ "/home/administrator/claude/AgentVibes/.claude/hooks/github-star-reminder.sh": {
70
+ "hash": "a07911f1aa424f20f966049710ea2b8002a2d1ec423b3b40b67ec0942bc86701",
71
+ "installedAt": "2026-05-12T16:11:50.013Z"
72
+ },
73
+ "/home/administrator/claude/AgentVibes/.claude/hooks/language-manager.sh": {
74
+ "hash": "5756b4686ec2e20190bf85f4f74c54b708f04d21c755ad2378b88d5ee1aac444",
75
+ "installedAt": "2026-05-12T16:11:50.014Z"
76
+ },
77
+ "/home/administrator/claude/AgentVibes/.claude/hooks/learn-manager.sh": {
78
+ "hash": "57eeb4f82b5074b7830b391626196058b96b06414c0fca66025647b10e8d7d0c",
79
+ "installedAt": "2026-05-12T16:11:50.015Z"
80
+ },
81
+ "/home/administrator/claude/AgentVibes/.claude/hooks/macos-voice-manager.sh": {
82
+ "hash": "1f04f7ea7ba8e8c862dd9f59f9977d159ffcfcd41883f265baf80320545b1ad1",
83
+ "installedAt": "2026-05-12T16:11:50.015Z"
84
+ },
85
+ "/home/administrator/claude/AgentVibes/.claude/hooks/migrate-background-music.sh": {
86
+ "hash": "960505fb346365189f069ab185584d6d6f8b1024daeb881de51dc0969a072dd3",
87
+ "installedAt": "2026-05-12T16:11:50.016Z"
88
+ },
89
+ "/home/administrator/claude/AgentVibes/.claude/hooks/migrate-to-agentvibes.sh": {
90
+ "hash": "0317cd629430feb811f415527f8699ec5ada9be3675440a2489cb0c65138d557",
91
+ "installedAt": "2026-05-12T16:11:50.017Z"
92
+ },
93
+ "/home/administrator/claude/AgentVibes/.claude/hooks/optimize-background-music.sh": {
94
+ "hash": "685862003d4bbbedb1a94d2ed95217054578b51075bb5f926871c1f5a9ac8d50",
95
+ "installedAt": "2026-05-12T16:11:50.017Z"
96
+ },
97
+ "/home/administrator/claude/AgentVibes/.claude/hooks/path-resolver.sh": {
98
+ "hash": "11341ae59c4e9f584a21cad53a94349c3d68d6f4625d369cf63891088d68ba1f",
99
+ "installedAt": "2026-05-12T16:11:50.018Z"
100
+ },
101
+ "/home/administrator/claude/AgentVibes/.claude/hooks/personality-manager.sh": {
102
+ "hash": "f6616ab941a796f728fe37645b9e98fc643c6b5a9dddad9b0f8203132bc830a1",
103
+ "installedAt": "2026-05-12T16:11:50.019Z"
104
+ },
105
+ "/home/administrator/claude/AgentVibes/.claude/hooks/piper-download-voices.sh": {
106
+ "hash": "5d470b13340728295b99ec683e9247c7713f50367a0ba027cf466a583eba5dcf",
107
+ "installedAt": "2026-05-12T16:11:50.020Z"
108
+ },
109
+ "/home/administrator/claude/AgentVibes/.claude/hooks/piper-installer.sh": {
110
+ "hash": "af40bc622555304380248ebc2ba043d84a3f66cd6cbe3d7534da57f1962b99de",
111
+ "installedAt": "2026-05-12T16:11:50.021Z"
112
+ },
113
+ "/home/administrator/claude/AgentVibes/.claude/hooks/piper-multispeaker-registry.sh": {
114
+ "hash": "d1d55e15ca16ccc81af912463be9a27faf27242d34628e5e6d6e846bc565014a",
115
+ "installedAt": "2026-05-12T16:11:50.021Z"
116
+ },
117
+ "/home/administrator/claude/AgentVibes/.claude/hooks/piper-voice-manager.sh": {
118
+ "hash": "a09371add655c266f9f00887d1da99e51726850629e723d70b637ea8c50a9be5",
119
+ "installedAt": "2026-05-12T16:11:50.023Z"
120
+ },
121
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh": {
122
+ "hash": "1e2cb701fb61e7aef50b54f5601eb5510d3d994f4d65c8fa375382cfc539c55f",
123
+ "installedAt": "2026-05-12T16:11:50.023Z"
124
+ },
125
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-enhanced.sh": {
126
+ "hash": "2274151489750072d5e7d672168f8fcc21a9e2d4cfc2e092330a17862d52d722",
127
+ "installedAt": "2026-05-12T16:11:50.024Z"
128
+ },
129
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-macos.sh": {
130
+ "hash": "9cbad50003f3db999d4eaa78075127c187afc40e98ab9c410d5c6c2dd7ef3b09",
131
+ "installedAt": "2026-05-12T16:11:50.025Z"
132
+ },
133
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-piper.sh": {
134
+ "hash": "7fd72fe3a57b486aec530b8db4993cb9a8574aa43f58f7059a59f9b9f2c68fba",
135
+ "installedAt": "2026-05-12T16:11:50.026Z"
136
+ },
137
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-soprano.sh": {
138
+ "hash": "0a49b6de253512abed4c5e0b6c21438ba646b21df905a5b2abd838882e5355e7",
139
+ "installedAt": "2026-05-12T16:11:50.027Z"
140
+ },
141
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-ssh-remote.sh": {
142
+ "hash": "d135dd09fc3ec7eca7a45d3290bd2d67ac9b5302c5f35202b63bed85c46aa813",
143
+ "installedAt": "2026-05-12T16:11:50.027Z"
144
+ },
145
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-termux-ssh.sh": {
146
+ "hash": "d2b2eb3aad871d71130de0b67a37c623bf72c5192e8cd1005286dcd9e511b43f",
147
+ "installedAt": "2026-05-12T16:11:50.028Z"
148
+ },
149
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts-windows-receiver.sh": {
150
+ "hash": "d83abb59223f01577b9e86d7dcf9a04a3f29a9ad7f58942b7fd17fae32222883",
151
+ "installedAt": "2026-05-12T16:11:50.029Z"
152
+ },
153
+ "/home/administrator/claude/AgentVibes/.claude/hooks/play-tts.sh": {
154
+ "hash": "734766bc861ee466119450891f797b885fa3de5690906cbcea1c98719df80042",
155
+ "installedAt": "2026-05-12T16:11:50.030Z"
156
+ },
157
+ "/home/administrator/claude/AgentVibes/.claude/hooks/provider-commands.sh": {
158
+ "hash": "ff99181ba6aca43925d7106403762a9dd65a35c9ba84e780561e96dc3b09afb7",
159
+ "installedAt": "2026-05-12T16:11:50.031Z"
160
+ },
161
+ "/home/administrator/claude/AgentVibes/.claude/hooks/provider-manager.sh": {
162
+ "hash": "62cadcc3e53d9963d559198e53c4c9f3b9386a2e073a3e48f70a9e23c6dedd1c",
163
+ "installedAt": "2026-05-12T16:11:50.032Z"
164
+ },
165
+ "/home/administrator/claude/AgentVibes/.claude/hooks/replay-target-audio.sh": {
166
+ "hash": "f0f8068c871a74494e77d4fc52e91a577e2481c57aa3e4db115109395d854802",
167
+ "installedAt": "2026-05-12T16:11:50.032Z"
168
+ },
169
+ "/home/administrator/claude/AgentVibes/.claude/hooks/sentiment-manager.sh": {
170
+ "hash": "a75e63b6de59a162a1088a73edf85af8ab1e952ce5eaa570d67c3f3680de3ccb",
171
+ "installedAt": "2026-05-12T16:11:50.033Z"
172
+ },
173
+ "/home/administrator/claude/AgentVibes/.claude/hooks/session-start-tts.sh": {
174
+ "hash": "d472a3df6d240ada38e7a8b95055c20f3235d8db145cd94ec698d7ad9c460f06",
175
+ "installedAt": "2026-05-12T16:11:50.034Z"
176
+ },
177
+ "/home/administrator/claude/AgentVibes/.claude/hooks/speed-manager.sh": {
178
+ "hash": "071c25019cc9fc00e3f08b3aa2ff8b648e21d9c761b0377e7fde006233d3e1c2",
179
+ "installedAt": "2026-05-12T16:11:50.035Z"
180
+ },
181
+ "/home/administrator/claude/AgentVibes/.claude/hooks/stop-tts.sh": {
182
+ "hash": "26b1d924956e6da864e8a5a3a1e7ce12424534bf8b8af7186c30adacfffb2344",
183
+ "installedAt": "2026-05-12T16:11:50.035Z"
184
+ },
185
+ "/home/administrator/claude/AgentVibes/.claude/hooks/stop.sh": {
186
+ "hash": "27cbb8e568deb2a49ca0b777711d2f70688d1512919261352b095f753122a725",
187
+ "installedAt": "2026-05-12T16:11:50.036Z"
188
+ },
189
+ "/home/administrator/claude/AgentVibes/.claude/hooks/termux-installer.sh": {
190
+ "hash": "d8c6875d5bb674c584d65864d16a6500267285c8f4e1cc74f4e626378acf3694",
191
+ "installedAt": "2026-05-12T16:11:50.037Z"
192
+ },
193
+ "/home/administrator/claude/AgentVibes/.claude/hooks/translate-manager.sh": {
194
+ "hash": "ca707162b225c0d8206ca64595f9a6f0a61fe6be243dde7232b0ab21942795ad",
195
+ "installedAt": "2026-05-12T16:11:50.037Z"
196
+ },
197
+ "/home/administrator/claude/AgentVibes/.claude/hooks/tts-queue-worker.sh": {
198
+ "hash": "90c88097a5e5705c09ee97c240f6e3da74847b1b80b4f27e2182237dead8b803",
199
+ "installedAt": "2026-05-12T16:11:50.038Z"
200
+ },
201
+ "/home/administrator/claude/AgentVibes/.claude/hooks/tts-queue.sh": {
202
+ "hash": "47c9f41716a8f386f61e2631b8203ac42df9e95c7a101cd4db9b1dd46ff5f6ea",
203
+ "installedAt": "2026-05-12T16:11:50.039Z"
204
+ },
205
+ "/home/administrator/claude/AgentVibes/.claude/hooks/verbosity-manager.sh": {
206
+ "hash": "86d1a5a76d847090cf3abd86fc33a8d4450194886eb0fe1236fe3467f44842f9",
207
+ "installedAt": "2026-05-12T16:11:50.039Z"
208
+ },
209
+ "/home/administrator/claude/AgentVibes/.claude/hooks/voice-manager.sh": {
210
+ "hash": "713dbf85cb3831c3baf0c58f3337fa5a8619161d460af8792bdec979ae43b72e",
211
+ "installedAt": "2026-05-12T16:11:50.041Z"
212
+ },
213
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/add.md": {
214
+ "hash": "bd3daaa8a3ef7dc1c705db8340b80ec34ad63af8063718b5056e251138d8d03a",
215
+ "installedAt": "2026-05-12T16:11:50.089Z"
216
+ },
217
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/agent-vibes.md": {
218
+ "hash": "38477538c4f015c0e2014ca2f1ee6f751a61541ac2bcdfa6a3ed212b567e9105",
219
+ "installedAt": "2026-05-12T16:11:50.089Z"
220
+ },
221
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/agent.md": {
222
+ "hash": "98e3cbd512678f9a622a93b8aae420abfe08829a4fd5ac27b238a2ff211ac23b",
223
+ "installedAt": "2026-05-12T16:11:50.090Z"
224
+ },
225
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/background-music.md": {
226
+ "hash": "21495a8fd1de53707a7f501a02eb79ef6933cf95e69a475bd1f92dbd8c645599",
227
+ "installedAt": "2026-05-12T16:11:50.091Z"
228
+ },
229
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/bmad.md": {
230
+ "hash": "42b56448eee2bceafc2788bb5f39de0b5f06d37d681f8b99073bd89695ad1704",
231
+ "installedAt": "2026-05-12T16:11:50.091Z"
232
+ },
233
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/clean.md": {
234
+ "hash": "e52b75db5d5a1e8982c3649ab87b511a958d7249708c9c3461ec86325e5d37f8",
235
+ "installedAt": "2026-05-12T16:11:50.092Z"
236
+ },
237
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/cleanup.md": {
238
+ "hash": "f341bacd736bdbd508f7368a8489a8eb30c0ad807cd7783bc972f8aad8fa0ca7",
239
+ "installedAt": "2026-05-12T16:11:50.092Z"
240
+ },
241
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/commands.json": {
242
+ "hash": "5bbb20ee98049f94c1fddc6088564f8f4ad12b7ac79a39089d14066cec1dd406",
243
+ "installedAt": "2026-05-12T16:11:50.093Z"
244
+ },
245
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/effects.md": {
246
+ "hash": "c7df70141beead591e2bcd1e6a68913ab58e15580d62a4bedd3fc336ac6646da",
247
+ "installedAt": "2026-05-12T16:11:50.094Z"
248
+ },
249
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/get.md": {
250
+ "hash": "197611671de8163d0e3b519d199eaceb8a57c3c3a1e08cc0e8d6f2feaa9caf67",
251
+ "installedAt": "2026-05-12T16:11:50.094Z"
252
+ },
253
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/hide.md": {
254
+ "hash": "80ac0970d257d8774f14ce7eb0e82f6bc281db35b81d6fa02e1f3489748f6baa",
255
+ "installedAt": "2026-05-12T16:11:50.095Z"
256
+ },
257
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/language.md": {
258
+ "hash": "94808a41f74907fc971a571379c76699da79f753ace461d7044547e29af8b796",
259
+ "installedAt": "2026-05-12T16:11:50.095Z"
260
+ },
261
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/learn.md": {
262
+ "hash": "f3ef20f6180ccd621bcbed03a437cb97dd12eb25fa650a0e3f298047f3f98112",
263
+ "installedAt": "2026-05-12T16:11:50.096Z"
264
+ },
265
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/list.md": {
266
+ "hash": "6fcbe3a38c16c823c2296595c7a0fc635ddbeb8539eacbcc5ea54cf3270b2377",
267
+ "installedAt": "2026-05-12T16:11:50.097Z"
268
+ },
269
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/mute.md": {
270
+ "hash": "7920d44b03dc402d6f42ec74921ec334bdce256a8be6bc540d91fe086f8b23fe",
271
+ "installedAt": "2026-05-12T16:11:50.097Z"
272
+ },
273
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/personality.md": {
274
+ "hash": "1722d7c69794ef817e94e3c706f21aaa5e3ec8ea8f2c66f6c570670dae81aa74",
275
+ "installedAt": "2026-05-12T16:11:50.098Z"
276
+ },
277
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/preview.md": {
278
+ "hash": "86ca6cbb47a45bdcc91d8e13fce08d49935364e07834296583e27f6cadc6d903",
279
+ "installedAt": "2026-05-12T16:11:50.098Z"
280
+ },
281
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/provider.md": {
282
+ "hash": "c4e6c9126a5ebbebeed6922f0cd644c8de3aa6400ad122e13b51fe4565a9459e",
283
+ "installedAt": "2026-05-12T16:11:50.099Z"
284
+ },
285
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/replay-target.md": {
286
+ "hash": "5f4f5da3bd968dd8d13df9988ade88eeaae9536bc503c33d847198b6a5b96c68",
287
+ "installedAt": "2026-05-12T16:11:50.100Z"
288
+ },
289
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/replay.md": {
290
+ "hash": "1b561f9ba3ce5ec07007e98fe76eb78e726f2b95615204d0dec6e07bbb6e21f4",
291
+ "installedAt": "2026-05-12T16:11:50.100Z"
292
+ },
293
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/sample.md": {
294
+ "hash": "48b6c99c007524bbfc1010c7bbebc676dcdfd48a74784d66cbabf1d6bc7db0c8",
295
+ "installedAt": "2026-05-12T16:11:50.101Z"
296
+ },
297
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/sentiment.md": {
298
+ "hash": "7c92333484b2c80a46f778a9e0860bb9f1086271a2e6eae41bd96482f214d593",
299
+ "installedAt": "2026-05-12T16:11:50.102Z"
300
+ },
301
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/set-favorite-voice.md": {
302
+ "hash": "9662a5c080c703a1a1e79195133a9ccbfbf074c2fe8c84297cd7a35b8be810af",
303
+ "installedAt": "2026-05-12T16:11:50.102Z"
304
+ },
305
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/set-language.md": {
306
+ "hash": "95354538191c97124721e6aa7d90915b4e2018050112c0937091b5107a5c8246",
307
+ "installedAt": "2026-05-12T16:11:50.103Z"
308
+ },
309
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/set-pretext.md": {
310
+ "hash": "31388d03a8145481b4f9fcd6bd6f2bb24124d039ae97ba8b51feaf1dfc845f10",
311
+ "installedAt": "2026-05-12T16:11:50.103Z"
312
+ },
313
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/set-speed.md": {
314
+ "hash": "9513f877200d0faf86f8c19fc26b2c2b87b856d9e86bd30154f18648d09c305c",
315
+ "installedAt": "2026-05-12T16:11:50.104Z"
316
+ },
317
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/show.md": {
318
+ "hash": "5dcc027996e3520555f23eaea5f5da42d7cd6ea45a009c26372e96a60847c61e",
319
+ "installedAt": "2026-05-12T16:11:50.105Z"
320
+ },
321
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/switch.md": {
322
+ "hash": "192038da652af01cd54a8ad0bc2dbcd48ac4059ac43c2a4df839e4909820403b",
323
+ "installedAt": "2026-05-12T16:11:50.105Z"
324
+ },
325
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/target-voice.md": {
326
+ "hash": "9c3ac8d1249ae8fc8014b21a9e785bcb4b69e9e65f3869c91b396b4d95e288fb",
327
+ "installedAt": "2026-05-12T16:11:50.106Z"
328
+ },
329
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/target.md": {
330
+ "hash": "634dfbc6ec274179d58fb0fe9e6281b07ee7c20cd9f9bf02e00c8e920e8b83c4",
331
+ "installedAt": "2026-05-12T16:11:50.107Z"
332
+ },
333
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/translate.md": {
334
+ "hash": "bbc8a9488ec71c03b9bcdc6db1da771331ddd6c97ad851b99a7985d874ff6884",
335
+ "installedAt": "2026-05-12T16:11:50.107Z"
336
+ },
337
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/unmute.md": {
338
+ "hash": "1f843039e69b03c077aac56138eeb1d2a7cb1129ce6893b361623ef9f755da05",
339
+ "installedAt": "2026-05-12T16:11:50.108Z"
340
+ },
341
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/update.md": {
342
+ "hash": "bc1022c7d70cbd6b9b0ad69806e8206cb70b446711db6147d7447d99639e2b6e",
343
+ "installedAt": "2026-05-12T16:11:50.109Z"
344
+ },
345
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/verbosity.md": {
346
+ "hash": "d56647186ce6540c8ae48fd2e8f5ede040743f09f6a2bc372ccc5de28946bd40",
347
+ "installedAt": "2026-05-12T16:11:50.109Z"
348
+ },
349
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/version.md": {
350
+ "hash": "bbc5ba5abaf44af6893e3232791268fd4d9f80d68bac0b95bfbec3cf44869e4f",
351
+ "installedAt": "2026-05-12T16:11:50.110Z"
352
+ },
353
+ "/home/administrator/claude/AgentVibes/.claude/commands/agent-vibes/whoami.md": {
354
+ "hash": "04909e3350e9ccb5886067edc19b37597f846a2bfb1502c1286e33fb6895ba23",
355
+ "installedAt": "2026-05-12T16:11:50.110Z"
356
+ },
357
+ "/home/administrator/claude/AgentVibes/.claude/personalities/angry.md": {
358
+ "hash": "fb1711508b4d42dbfc15f57175dcb0f2da4fac034b68659dacc0991a72afc795",
359
+ "installedAt": "2026-05-12T16:11:50.132Z"
360
+ },
361
+ "/home/administrator/claude/AgentVibes/.claude/personalities/annoying.md": {
362
+ "hash": "ced090e4e5696b8c06ee605a701a6f5c3e7d90ff9850915eca1e5b682eabcaf1",
363
+ "installedAt": "2026-05-12T16:11:50.133Z"
364
+ },
365
+ "/home/administrator/claude/AgentVibes/.claude/personalities/crass.md": {
366
+ "hash": "46a51249e60c41bdf2046903b83965f6265bf34445812ac425601fbfab8660bb",
367
+ "installedAt": "2026-05-12T16:11:50.134Z"
368
+ },
369
+ "/home/administrator/claude/AgentVibes/.claude/personalities/dramatic.md": {
370
+ "hash": "68864221d652dc95055a60f005400ea5e0c2b38c4c75f16d7299a1582d8fed6e",
371
+ "installedAt": "2026-05-12T16:11:50.134Z"
372
+ },
373
+ "/home/administrator/claude/AgentVibes/.claude/personalities/dry-humor.md": {
374
+ "hash": "ec1dbfbb525f1b7e641a911bbcba3649ef70880adaa01c0b281c4580bae63365",
375
+ "installedAt": "2026-05-12T16:11:50.135Z"
376
+ },
377
+ "/home/administrator/claude/AgentVibes/.claude/personalities/flirty.md": {
378
+ "hash": "328ea5a06bf9b9569825922924ae51f7f0b1b3985001ea273a8a9bacf2e02615",
379
+ "installedAt": "2026-05-12T16:11:50.135Z"
380
+ },
381
+ "/home/administrator/claude/AgentVibes/.claude/personalities/funny.md": {
382
+ "hash": "a68efc479819b11c6dfda43f3b290f51740cdfa938c4e3e3e96bd0d656f63fa3",
383
+ "installedAt": "2026-05-12T16:11:50.136Z"
384
+ },
385
+ "/home/administrator/claude/AgentVibes/.claude/personalities/grandpa.md": {
386
+ "hash": "3a2dff1e4d8b121cdcb6fe4c745a9fac5d254156a3658a309319056af9fce42c",
387
+ "installedAt": "2026-05-12T16:11:50.136Z"
388
+ },
389
+ "/home/administrator/claude/AgentVibes/.claude/personalities/millennial.md": {
390
+ "hash": "f69dfa3958153c82ed62fb940360c74beaa8d71ef13d41f32500e9f58fca346c",
391
+ "installedAt": "2026-05-12T16:11:50.137Z"
392
+ },
393
+ "/home/administrator/claude/AgentVibes/.claude/personalities/moody.md": {
394
+ "hash": "5d4e6278ef0d453d64ad4b940667ddad1d59aa9f327ae0a11227085e22690884",
395
+ "installedAt": "2026-05-12T16:11:50.137Z"
396
+ },
397
+ "/home/administrator/claude/AgentVibes/.claude/personalities/normal.md": {
398
+ "hash": "25a209d55a7e752c21cc10688349f1602e769b436639c28850db5c5fd431570f",
399
+ "installedAt": "2026-05-12T16:11:50.138Z"
400
+ },
401
+ "/home/administrator/claude/AgentVibes/.claude/personalities/pirate.md": {
402
+ "hash": "e529aa181574a341bb511dc87929116df112ce21b575726a3f0521406da07cf4",
403
+ "installedAt": "2026-05-12T16:11:50.138Z"
404
+ },
405
+ "/home/administrator/claude/AgentVibes/.claude/personalities/poetic.md": {
406
+ "hash": "57e2506800cdb647fc9f42a904d7da1e5e5b72cf0491fd2527907b64d943bc29",
407
+ "installedAt": "2026-05-12T16:11:50.139Z"
408
+ },
409
+ "/home/administrator/claude/AgentVibes/.claude/personalities/professional.md": {
410
+ "hash": "e89d6bb62eda126e8c5d9d0cc7bf4b9cced7a641b6ea626d0a3d8c93b3e18af3",
411
+ "installedAt": "2026-05-12T16:11:50.139Z"
412
+ },
413
+ "/home/administrator/claude/AgentVibes/.claude/personalities/rapper.md": {
414
+ "hash": "322f36183ddc583306b21a008de469dd116b76f042eeb3dc0dbd4cda42f94dfd",
415
+ "installedAt": "2026-05-12T16:11:50.140Z"
416
+ },
417
+ "/home/administrator/claude/AgentVibes/.claude/personalities/robot.md": {
418
+ "hash": "f4a05b06ebe7c86c4120f36ad077b1edcbdbe9e25662d7f58817faa656e7361b",
419
+ "installedAt": "2026-05-12T16:11:50.141Z"
420
+ },
421
+ "/home/administrator/claude/AgentVibes/.claude/personalities/sarcastic.md": {
422
+ "hash": "2ce5689b090ea58b8356ca703c0376713cf74a83ab86c19e599611fe82ad9b1a",
423
+ "installedAt": "2026-05-12T16:11:50.141Z"
424
+ },
425
+ "/home/administrator/claude/AgentVibes/.claude/personalities/sassy.md": {
426
+ "hash": "e069c093fdc1d7d6bd80c2db8600caea1d4a8a14d89e818101d4ef4514582b52",
427
+ "installedAt": "2026-05-12T16:11:50.142Z"
428
+ },
429
+ "/home/administrator/claude/AgentVibes/.claude/personalities/surfer-dude.md": {
430
+ "hash": "adc1270e42e661a33d1344be2477c92becdb1bb97da46a7eb30dcca5e36d6afc",
431
+ "installedAt": "2026-05-12T16:11:50.142Z"
432
+ },
433
+ "/home/administrator/claude/AgentVibes/.claude/personalities/zen.md": {
434
+ "hash": "cbf56fb5b16fa05024353646ad77615483e9ffe8ac550d1e3a66860e9370189a",
435
+ "installedAt": "2026-05-12T16:11:50.143Z"
436
+ }
437
+ }
438
+ }
@@ -1 +1 @@
1
- 20260511
1
+ 20260512
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Publish](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
12
12
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
13
13
 
14
- **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.7.1
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.7.4
15
15
 
16
16
  ---
17
17
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "agentvibes",
4
- "version": "5.7.1",
4
+ "version": "5.7.4",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code, Claude Desktop (via MCP), and Clawdbot with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
@@ -109,6 +109,29 @@ function _detect(players, env) {
109
109
  return null;
110
110
  }
111
111
 
112
+ /**
113
+ * Detect the first LLM configured with remote transport in
114
+ * ~/.agentvibes/transport-config.json.
115
+ *
116
+ * Returns the LLM key (e.g. "claude-code") whose `mode` is "remote", or
117
+ * null if no such entry exists or the file is absent/invalid.
118
+ * Used by TUI voice-preview functions to route audio through the correct
119
+ * SSH transport rather than playing locally.
120
+ *
121
+ * @returns {string|null}
122
+ */
123
+ export function detectRemoteLlm() {
124
+ const cfgPath = path.join(os.homedir(), '.agentvibes', 'transport-config.json');
125
+ if (!fs.existsSync(cfgPath)) return null;
126
+ try {
127
+ const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8'));
128
+ for (const [llm, opts] of Object.entries(cfg)) {
129
+ if (opts && opts.mode === 'remote') return llm;
130
+ }
131
+ } catch {}
132
+ return null;
133
+ }
134
+
112
135
  /**
113
136
  * Detect the best available MP3 player.
114
137
  * On Windows, falls back to ffplay/mpv if installed, otherwise null.
@@ -18,7 +18,7 @@ import {
18
18
  PIPER_VOICES_DIR, SAMPLE_PHRASES,
19
19
  parseMultiSpeaker, scanInstalledVoices, getVoiceMeta, genderIconTag,
20
20
  } from './voices-tab.js';
21
- import { buildAudioEnv, detectWavPlayer } from '../audio-env.js';
21
+ import { buildAudioEnv, detectWavPlayer, detectRemoteLlm } from '../audio-env.js';
22
22
  import { destroyList } from '../widgets/destroy-list.js';
23
23
  import { BRAND_PINK } from '../brand-colors.js';
24
24
  import { t } from '../../i18n/strings.js';
@@ -917,11 +917,13 @@ ${_tl('bmadDesc')}
917
917
  let _allVoices = [];
918
918
  let _previewProc = null;
919
919
  let _previewVoiceId = null;
920
+ let _previewMinTimer = null;
920
921
  let _vpClosed = false;
921
922
 
922
923
  const _spawnEnv = buildAudioEnv();
923
924
 
924
925
  function _killVP() {
926
+ if (_previewMinTimer) { clearTimeout(_previewMinTimer); _previewMinTimer = null; }
925
927
  if (_previewProc) {
926
928
  try {
927
929
  if (process.platform === 'win32') {
@@ -1028,67 +1030,47 @@ ${_tl('bmadDesc')}
1028
1030
  }
1029
1031
 
1030
1032
  function _previewVoice(voiceId) {
1031
- if (_previewVoiceId === voiceId) { _killVP(); vpPreviewLine.setContent(''); screen.render(); return; }
1033
+ if (_previewVoiceId === voiceId) { _killVP(); vpPreviewLine.setContent(''); _refreshVP(); return; }
1032
1034
  _killVP();
1035
+ if (_previewMinTimer) { clearTimeout(_previewMinTimer); _previewMinTimer = null; }
1033
1036
 
1034
- const _isWin = process.platform === 'win32' && !process.env.WSL_DISTRO_NAME;
1035
-
1036
- const _ms = parseMultiSpeaker(voiceId);
1037
- const voicePath = path.resolve(PIPER_VOICES_DIR, _ms.model + '.onnx');
1038
- const safeBase = path.resolve(PIPER_VOICES_DIR);
1039
- if (!voicePath.startsWith(safeBase + path.sep) && voicePath !== safeBase) return;
1040
-
1041
- const tempWav = _secureTempWav('vp');
1042
1037
  const phrase = SAMPLE_PHRASES[Math.floor(Math.random() * SAMPLE_PHRASES.length)];
1038
+ const playTtsScript = path.join(_projectRoot, '.claude', 'hooks', 'play-tts.sh');
1039
+ if (!fs.existsSync(playTtsScript)) return;
1043
1040
 
1044
- // Resolve piper binary (on Windows, find piper.exe)
1045
- let _piperBin = 'piper';
1046
- if (_isWin) {
1047
- const _lad = process.env.LOCALAPPDATA ||
1048
- (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, 'AppData', 'Local') : null);
1049
- if (_lad) {
1050
- const _ep = path.join(_lad, 'Programs', 'Piper', 'piper.exe');
1051
- if (fs.existsSync(_ep)) _piperBin = _ep;
1052
- }
1053
- }
1041
+ const remoteLlm = detectRemoteLlm();
1042
+ const args = [playTtsScript, phrase, voiceId];
1043
+ if (remoteLlm) args.push('--llm', remoteLlm);
1054
1044
 
1055
- const args = ['--model', voicePath, '--output_file', tempWav];
1056
- if (_ms.speakerId != null) args.push('--speaker', String(_ms.speakerId));
1057
- const piper = spawn(_piperBin, args, {
1058
- stdio: ['pipe', 'ignore', 'ignore'],
1059
- detached: !_isWin,
1060
- windowsHide: true,
1061
- env: _spawnEnv,
1045
+ _previewProc = spawn('bash', args, {
1046
+ stdio: 'ignore',
1047
+ detached: true,
1048
+ env: { ..._spawnEnv, CLAUDE_PROJECT_DIR: _projectRoot },
1049
+ cwd: _projectRoot,
1062
1050
  });
1063
- piper.stdin.write(phrase + '\n');
1064
- piper.stdin.end();
1065
- _previewProc = piper;
1066
1051
  _previewVoiceId = voiceId;
1067
1052
 
1068
1053
  if (!_vpClosed) {
1069
- vpPreviewLine.setContent(`{bright-cyan-fg}♪ Synthesizing: ${voiceId}...{/bright-cyan-fg}`);
1070
- screen.render();
1054
+ vpPreviewLine.setContent(`{bright-cyan-fg}♪ Playing: ${voiceId}...{/bright-cyan-fg}`);
1055
+ _refreshVP();
1071
1056
  }
1072
1057
 
1073
- piper.on('exit', (code) => {
1074
- if (_previewVoiceId !== voiceId) { try { fs.unlinkSync(tempWav); } catch {} return; }
1075
- if (code !== 0) { _previewProc = null; _previewVoiceId = null; try { fs.unlinkSync(tempWav); } catch {} return; }
1076
- const wp = detectWavPlayer(_spawnEnv);
1077
- if (!wp) return;
1078
- const pp = spawn(wp.bin, wp.args(tempWav), {
1079
- stdio: 'ignore',
1080
- detached: !_isWin,
1081
- windowsHide: true,
1082
- env: _spawnEnv,
1083
- });
1084
- _previewProc = pp;
1085
- if (!_vpClosed) { vpPreviewLine.setContent(`{bright-cyan-fg}♪ Playing: ${voiceId}{/bright-cyan-fg}`); screen.render(); }
1086
- pp.on('exit', () => {
1087
- if (_previewVoiceId === voiceId) { _previewVoiceId = null; _previewProc = null; if (!_vpClosed) { vpPreviewLine.setContent(''); screen.render(); } }
1088
- try { fs.unlinkSync(tempWav); } catch {}
1089
- });
1058
+ const _clearAfterMinDisplay = () => {
1059
+ if (_previewVoiceId === voiceId) {
1060
+ _previewVoiceId = null;
1061
+ _previewProc = null;
1062
+ if (!_vpClosed) { vpPreviewLine.setContent(''); _refreshVP(); }
1063
+ }
1064
+ _previewMinTimer = null;
1065
+ };
1066
+
1067
+ // Keep indicator visible for at least 2s (ssh-remote exits immediately)
1068
+ _previewProc.on('exit', () => {
1069
+ _previewMinTimer = setTimeout(_clearAfterMinDisplay, 2000);
1070
+ });
1071
+ _previewProc.on('error', () => {
1072
+ _previewMinTimer = setTimeout(_clearAfterMinDisplay, 2000);
1090
1073
  });
1091
- piper.on('error', () => { _previewProc = null; _previewVoiceId = null; });
1092
1074
  }
1093
1075
 
1094
1076
  vpList.key(['enter'], () => {
@@ -1220,8 +1202,10 @@ ${_tl('bmadDesc')}
1220
1202
  const _spawnEnv = buildAudioEnv();
1221
1203
  const scriptDir = path.join(_projectRoot, '.claude', 'hooks');
1222
1204
  const plainScript = path.join(scriptDir, 'play-tts.sh');
1205
+ const remoteLlm = detectRemoteLlm();
1223
1206
  const args = [plainScript, phrase];
1224
1207
  if (voiceId) args.push(voiceId);
1208
+ if (remoteLlm) args.push('--llm', remoteLlm);
1225
1209
 
1226
1210
  const proc = spawn('bash', args, {
1227
1211
  stdio: ['ignore', 'ignore', 'ignore'],
@@ -24,7 +24,7 @@ import {
24
24
  } from './voices-tab.js';
25
25
  import { LanguageService } from '../../services/language-service.js';
26
26
  import { SUPPORTED_LANGUAGES, t } from '../../i18n/strings.js';
27
- import { buildAudioEnv, detectWavPlayer } from '../audio-env.js';
27
+ import { buildAudioEnv, detectWavPlayer, detectRemoteLlm } from '../audio-env.js';
28
28
  import { destroyList } from '../widgets/destroy-list.js';
29
29
  import { openReverbPicker } from '../widgets/reverb-picker.js';
30
30
  import { openPersonalityPicker } from '../widgets/personality-picker.js';
@@ -633,61 +633,35 @@ export function createSettingsTab(screen, services) {
633
633
  if (_previewVoiceId === voiceId) { _killVP(); vpPreviewLine.setContent(''); _refreshVP(); return; }
634
634
  _killVP();
635
635
 
636
- const _ms = parseMultiSpeaker(voiceId);
637
- const voicePath = path.resolve(PIPER_VOICES_DIR, _ms.model + '.onnx');
638
- const safeBase = path.resolve(PIPER_VOICES_DIR);
639
- if (!voicePath.startsWith(safeBase + path.sep) && voicePath !== safeBase) return;
640
-
641
- const tempWav = _secureTempWav('vp');
642
636
  const phrase = SAMPLE_PHRASES[Math.floor(Math.random() * SAMPLE_PHRASES.length)];
637
+ const playTtsScript = path.join(_projectRoot, '.claude', 'hooks', 'play-tts.sh');
638
+ if (!fs.existsSync(playTtsScript)) return;
643
639
 
644
- let _piperBin = 'piper';
645
- if (_isWin) {
646
- const _lad = process.env.LOCALAPPDATA ||
647
- (process.env.USERPROFILE ? path.join(process.env.USERPROFILE, 'AppData', 'Local') : null);
648
- if (_lad) {
649
- const _ep = path.join(_lad, 'Programs', 'Piper', 'piper.exe');
650
- if (fs.existsSync(_ep)) _piperBin = _ep;
651
- }
652
- }
640
+ const remoteLlm = detectRemoteLlm();
641
+ const args = [playTtsScript, phrase, voiceId];
642
+ if (remoteLlm) args.push('--llm', remoteLlm);
653
643
 
654
- const args = ['--model', voicePath, '--output_file', tempWav];
655
- if (_ms.speakerId != null) args.push('--speaker', String(_ms.speakerId));
656
- const piper = spawn(_piperBin, args, {
657
- stdio: ['pipe', 'ignore', 'ignore'],
658
- detached: !_isWin,
659
- windowsHide: true,
644
+ _previewProc = spawn('bash', args, {
645
+ stdio: 'ignore',
646
+ detached: true,
660
647
  env: _spawnEnv,
648
+ cwd: _projectRoot,
661
649
  });
662
- piper.stdin.write(phrase + '\n');
663
- piper.stdin.end();
664
- _previewProc = piper;
665
650
  _previewVoiceId = voiceId;
666
651
 
667
652
  if (!_vpClosed) {
668
- vpPreviewLine.setContent(`{cyan-fg}♪ Synthesizing: ${voiceId}...{/cyan-fg}`);
653
+ vpPreviewLine.setContent(`{cyan-fg}♪ Playing: ${voiceId}...{/cyan-fg}`);
669
654
  _refreshVP();
670
655
  }
671
656
 
672
- piper.on('exit', (code) => {
673
- if (_previewVoiceId !== voiceId) { try { fs.unlinkSync(tempWav); } catch {} return; }
674
- if (code !== 0) { _previewProc = null; _previewVoiceId = null; try { fs.unlinkSync(tempWav); } catch {} return; }
675
- const wp = detectWavPlayer(_spawnEnv);
676
- if (!wp) return;
677
- const pp = spawn(wp.bin, wp.args(tempWav), {
678
- stdio: 'ignore',
679
- detached: !_isWin,
680
- windowsHide: true,
681
- env: _spawnEnv,
682
- });
683
- _previewProc = pp;
684
- if (!_vpClosed) { vpPreviewLine.setContent(`{cyan-fg}♪ Playing: ${voiceId}{/cyan-fg}`); screen.render(); }
685
- pp.on('exit', () => {
686
- if (_previewVoiceId === voiceId) { _previewVoiceId = null; _previewProc = null; if (!_vpClosed) { vpPreviewLine.setContent(''); _refreshVP(); } }
687
- try { fs.unlinkSync(tempWav); } catch {}
688
- });
657
+ _previewProc.on('exit', () => {
658
+ if (_previewVoiceId === voiceId) {
659
+ _previewVoiceId = null;
660
+ _previewProc = null;
661
+ if (!_vpClosed) { vpPreviewLine.setContent(''); _refreshVP(); }
662
+ }
689
663
  });
690
- piper.on('error', () => { _previewProc = null; _previewVoiceId = null; });
664
+ _previewProc.on('error', () => { _previewProc = null; _previewVoiceId = null; });
691
665
  }
692
666
 
693
667
  vpList.key(['enter'], () => {
@@ -2112,6 +2112,17 @@ export function createSetupTab(screen, services) {
2112
2112
  const _spawnEnv = buildAudioEnv();
2113
2113
  const _isWin = process.platform === 'win32' && !process.env.WSL_DISTRO_NAME;
2114
2114
 
2115
+ // Check if this LLM has mode=remote in transport-config.json so voice previews
2116
+ // are routed to the remote receiver even when the global provider is piper/local.
2117
+ let _llmIsRemote = false;
2118
+ if (llmKey) {
2119
+ try {
2120
+ const _tcPath = path.join(os.homedir(), '.agentvibes', 'transport-config.json');
2121
+ const _tc = JSON.parse(fs.readFileSync(_tcPath, 'utf8'));
2122
+ _llmIsRemote = _tc[llmKey]?.mode === 'remote';
2123
+ } catch {}
2124
+ }
2125
+
2115
2126
  function _killVP() {
2116
2127
  if (_previewProc) {
2117
2128
  try {
@@ -2239,7 +2250,7 @@ export function createSetupTab(screen, services) {
2239
2250
  }
2240
2251
  } catch {}
2241
2252
 
2242
- if (_remoteProviders.includes(_activeProvider)) {
2253
+ if (_remoteProviders.includes(_activeProvider) || _llmIsRemote) {
2243
2254
  const _playTtsName = _isWin
2244
2255
  ? path.join('.claude', 'hooks-windows', 'play-tts.ps1')
2245
2256
  : path.join('.claude', 'hooks', 'play-tts.sh');
@@ -10,7 +10,7 @@ import fs from 'node:fs';
10
10
  import os from 'node:os';
11
11
  import { spawn } from 'node:child_process';
12
12
  import { destroyList } from './destroy-list.js';
13
- import { buildAudioEnv } from '../audio-env.js';
13
+ import { buildAudioEnv, detectRemoteLlm } from '../audio-env.js';
14
14
  import { BRAND_PINK } from '../brand-colors.js';
15
15
  import { PERSONALITY_EMOJIS, PERSONALITIES } from '../constants/personalities.js';
16
16
 
@@ -138,7 +138,10 @@ export function openPersonalityPicker(screen, currentPersonality, onSelect, onCl
138
138
  });
139
139
  } else {
140
140
  const ttsScript = path.join(process.cwd(), '.claude', 'hooks', 'play-tts.sh');
141
- _pickerTtsProc = spawn('bash', [ttsScript, phrase], {
141
+ const remoteLlm = detectRemoteLlm();
142
+ const ttsArgs = [ttsScript, phrase];
143
+ if (remoteLlm) ttsArgs.push('--llm', remoteLlm);
144
+ _pickerTtsProc = spawn('bash', ttsArgs, {
142
145
  stdio: 'ignore',
143
146
  detached: true,
144
147
  env: _env,