verbalcoding 0.2.11 → 0.2.13

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 (235) hide show
  1. package/.env.example +98 -2
  2. package/README.es.md +134 -0
  3. package/README.fr.md +134 -0
  4. package/README.ja.md +134 -0
  5. package/README.ko.md +134 -0
  6. package/README.md +118 -74
  7. package/README.ru.md +134 -0
  8. package/README.zh.md +133 -0
  9. package/app-node/agent_adapters.mjs +37 -5
  10. package/app-node/agent_adapters.test.mjs +27 -1
  11. package/app-node/agent_detect.mjs +73 -0
  12. package/app-node/agent_detect.test.mjs +77 -0
  13. package/app-node/agent_routing.mjs +148 -0
  14. package/app-node/agent_routing.test.mjs +138 -0
  15. package/app-node/agent_turn.mjs +86 -0
  16. package/app-node/agent_turn.test.mjs +109 -0
  17. package/app-node/bridge_context.mjs +73 -0
  18. package/app-node/bridge_context.test.mjs +54 -0
  19. package/app-node/bridge_state.mjs +4 -0
  20. package/app-node/bridge_wireup.test.mjs +462 -0
  21. package/app-node/cli_install.test.mjs +31 -0
  22. package/app-node/cross_agent_routing.test.mjs +78 -0
  23. package/app-node/discord_command_router.mjs +204 -0
  24. package/app-node/discord_command_router.test.mjs +311 -0
  25. package/app-node/discord_voice_setup.mjs +251 -0
  26. package/app-node/discord_voice_setup.test.mjs +86 -0
  27. package/app-node/hermes_profiles.test.mjs +12 -1
  28. package/app-node/install_config.mjs +113 -3
  29. package/app-node/install_config.test.mjs +8 -0
  30. package/app-node/instance_doctor.test.mjs +9 -0
  31. package/app-node/instances.test.mjs +8 -1
  32. package/app-node/main.mjs +513 -1058
  33. package/app-node/mcp_tools.test.mjs +7 -0
  34. package/app-node/notification_handler.mjs +89 -0
  35. package/app-node/notification_handler.test.mjs +187 -0
  36. package/app-node/notify.mjs +73 -0
  37. package/app-node/notify.test.mjs +68 -0
  38. package/app-node/plan_dispatcher.mjs +215 -0
  39. package/app-node/plan_dispatcher.test.mjs +101 -0
  40. package/app-node/plan_mode.mjs +203 -0
  41. package/app-node/plan_mode.test.mjs +231 -0
  42. package/app-node/progress_handler.mjs +220 -0
  43. package/app-node/progress_handler.test.mjs +193 -0
  44. package/app-node/progress_speech.mjs +54 -32
  45. package/app-node/progress_speech.test.mjs +12 -3
  46. package/app-node/project_sessions.mjs +5 -2
  47. package/app-node/project_sessions.test.mjs +7 -0
  48. package/app-node/research_mode.mjs +282 -0
  49. package/app-node/research_mode.test.mjs +264 -0
  50. package/app-node/restart_notice.mjs +3 -0
  51. package/app-node/restart_notice.test.mjs +11 -0
  52. package/app-node/session_ontology.mjs +271 -0
  53. package/app-node/session_ontology.test.mjs +130 -0
  54. package/app-node/smart_progress.mjs +94 -0
  55. package/app-node/smart_progress.test.mjs +66 -0
  56. package/app-node/stream_sentencer.mjs +91 -0
  57. package/app-node/stream_sentencer.test.mjs +129 -0
  58. package/app-node/streaming_tts_queue.mjs +52 -0
  59. package/app-node/streaming_tts_queue.test.mjs +64 -0
  60. package/app-node/stt_whisper.mjs +24 -0
  61. package/app-node/stt_whisper.test.mjs +32 -0
  62. package/app-node/text_routing.mjs +22 -0
  63. package/app-node/text_routing.test.mjs +23 -1
  64. package/app-node/tts_backends.mjs +537 -3
  65. package/app-node/tts_backends.test.mjs +454 -0
  66. package/app-node/tts_player.mjs +164 -0
  67. package/app-node/tts_player.test.mjs +202 -0
  68. package/app-node/tts_runtime.mjs +134 -0
  69. package/app-node/tts_runtime.test.mjs +89 -0
  70. package/app-node/tts_settings.mjs +150 -3
  71. package/app-node/tts_settings.test.mjs +204 -0
  72. package/app-node/tts_voice_config.mjs +136 -2
  73. package/app-node/tts_voice_config.test.mjs +94 -0
  74. package/app-node/utterance_router.mjs +216 -0
  75. package/app-node/utterance_router.test.mjs +236 -0
  76. package/app-node/voice_autojoin.mjs +37 -0
  77. package/app-node/voice_autojoin.test.mjs +59 -0
  78. package/app-node/voice_io.mjs +272 -0
  79. package/app-node/voice_io.test.mjs +102 -0
  80. package/app-node/voice_turn_runner.mjs +449 -0
  81. package/app-node/voice_turn_runner.test.mjs +289 -0
  82. package/docs/CONFIGURATION.md +79 -96
  83. package/docs/FRESH_INSTALL.md +105 -63
  84. package/docs/HARNESSES.md +58 -0
  85. package/docs/HARNESS_AIDER.md +50 -0
  86. package/docs/HARNESS_CLAUDE.md +56 -0
  87. package/docs/HARNESS_CODEX.md +56 -0
  88. package/docs/HARNESS_CURSOR.md +45 -0
  89. package/docs/HARNESS_GEMINI.md +45 -0
  90. package/docs/HARNESS_HERMES.md +57 -0
  91. package/docs/HARNESS_OPENCLAW.md +44 -0
  92. package/docs/HARNESS_OPENCODE.md +44 -0
  93. package/docs/HERMES_VOICE.md +65 -0
  94. package/docs/MULTI_INSTANCE.md +16 -0
  95. package/docs/README.md +50 -0
  96. package/docs/RELEASE.md +42 -19
  97. package/docs/ROADMAP.md +53 -0
  98. package/docs/TROUBLESHOOTING.md +126 -0
  99. package/docs/TTS_BACKENDS.md +227 -0
  100. package/docs/USAGE.md +94 -40
  101. package/docs/assets/figures/verbalcoding-flow.svg +1 -1
  102. package/docs/i18n/AGENTS.es.md +34 -0
  103. package/docs/i18n/AGENTS.fr.md +34 -0
  104. package/docs/i18n/AGENTS.ja.md +34 -0
  105. package/docs/i18n/AGENTS.ko.md +34 -0
  106. package/docs/i18n/AGENTS.ru.md +34 -0
  107. package/docs/i18n/AGENTS.zh.md +34 -0
  108. package/docs/i18n/CONFIGURATION.es.md +25 -0
  109. package/docs/i18n/CONFIGURATION.fr.md +25 -0
  110. package/docs/i18n/CONFIGURATION.ja.md +25 -0
  111. package/docs/i18n/CONFIGURATION.ko.md +25 -0
  112. package/docs/i18n/CONFIGURATION.ru.md +25 -0
  113. package/docs/i18n/CONFIGURATION.zh.md +25 -0
  114. package/docs/i18n/FRESH_INSTALL.es.md +27 -2
  115. package/docs/i18n/FRESH_INSTALL.fr.md +27 -2
  116. package/docs/i18n/FRESH_INSTALL.ja.md +27 -2
  117. package/docs/i18n/FRESH_INSTALL.ko.md +27 -2
  118. package/docs/i18n/FRESH_INSTALL.ru.md +27 -2
  119. package/docs/i18n/FRESH_INSTALL.zh.md +27 -2
  120. package/docs/i18n/HARNESSES.es.md +58 -0
  121. package/docs/i18n/HARNESSES.fr.md +58 -0
  122. package/docs/i18n/HARNESSES.ja.md +58 -0
  123. package/docs/i18n/HARNESSES.ko.md +58 -0
  124. package/docs/i18n/HARNESSES.ru.md +58 -0
  125. package/docs/i18n/HARNESSES.zh.md +58 -0
  126. package/docs/i18n/HARNESS_AIDER.es.md +48 -0
  127. package/docs/i18n/HARNESS_AIDER.fr.md +48 -0
  128. package/docs/i18n/HARNESS_AIDER.ja.md +50 -0
  129. package/docs/i18n/HARNESS_AIDER.ko.md +50 -0
  130. package/docs/i18n/HARNESS_AIDER.ru.md +48 -0
  131. package/docs/i18n/HARNESS_AIDER.zh.md +48 -0
  132. package/docs/i18n/HARNESS_CLAUDE.es.md +55 -0
  133. package/docs/i18n/HARNESS_CLAUDE.fr.md +55 -0
  134. package/docs/i18n/HARNESS_CLAUDE.ja.md +56 -0
  135. package/docs/i18n/HARNESS_CLAUDE.ko.md +56 -0
  136. package/docs/i18n/HARNESS_CLAUDE.ru.md +55 -0
  137. package/docs/i18n/HARNESS_CLAUDE.zh.md +56 -0
  138. package/docs/i18n/HARNESS_CODEX.es.md +55 -0
  139. package/docs/i18n/HARNESS_CODEX.fr.md +55 -0
  140. package/docs/i18n/HARNESS_CODEX.ja.md +56 -0
  141. package/docs/i18n/HARNESS_CODEX.ko.md +56 -0
  142. package/docs/i18n/HARNESS_CODEX.ru.md +55 -0
  143. package/docs/i18n/HARNESS_CODEX.zh.md +56 -0
  144. package/docs/i18n/HARNESS_CURSOR.es.md +42 -0
  145. package/docs/i18n/HARNESS_CURSOR.fr.md +42 -0
  146. package/docs/i18n/HARNESS_CURSOR.ja.md +45 -0
  147. package/docs/i18n/HARNESS_CURSOR.ko.md +45 -0
  148. package/docs/i18n/HARNESS_CURSOR.ru.md +42 -0
  149. package/docs/i18n/HARNESS_CURSOR.zh.md +42 -0
  150. package/docs/i18n/HARNESS_GEMINI.es.md +44 -0
  151. package/docs/i18n/HARNESS_GEMINI.fr.md +44 -0
  152. package/docs/i18n/HARNESS_GEMINI.ja.md +45 -0
  153. package/docs/i18n/HARNESS_GEMINI.ko.md +45 -0
  154. package/docs/i18n/HARNESS_GEMINI.ru.md +44 -0
  155. package/docs/i18n/HARNESS_GEMINI.zh.md +45 -0
  156. package/docs/i18n/HARNESS_HERMES.es.md +54 -0
  157. package/docs/i18n/HARNESS_HERMES.fr.md +54 -0
  158. package/docs/i18n/HARNESS_HERMES.ja.md +57 -0
  159. package/docs/i18n/HARNESS_HERMES.ko.md +57 -0
  160. package/docs/i18n/HARNESS_HERMES.ru.md +54 -0
  161. package/docs/i18n/HARNESS_HERMES.zh.md +57 -0
  162. package/docs/i18n/HARNESS_OPENCLAW.es.md +41 -0
  163. package/docs/i18n/HARNESS_OPENCLAW.fr.md +41 -0
  164. package/docs/i18n/HARNESS_OPENCLAW.ja.md +44 -0
  165. package/docs/i18n/HARNESS_OPENCLAW.ko.md +44 -0
  166. package/docs/i18n/HARNESS_OPENCLAW.ru.md +41 -0
  167. package/docs/i18n/HARNESS_OPENCLAW.zh.md +42 -0
  168. package/docs/i18n/HARNESS_OPENCODE.es.md +41 -0
  169. package/docs/i18n/HARNESS_OPENCODE.fr.md +41 -0
  170. package/docs/i18n/HARNESS_OPENCODE.ja.md +44 -0
  171. package/docs/i18n/HARNESS_OPENCODE.ko.md +44 -0
  172. package/docs/i18n/HARNESS_OPENCODE.ru.md +41 -0
  173. package/docs/i18n/HARNESS_OPENCODE.zh.md +44 -0
  174. package/docs/i18n/HERMES_VOICE.es.md +46 -0
  175. package/docs/i18n/HERMES_VOICE.fr.md +46 -0
  176. package/docs/i18n/HERMES_VOICE.ja.md +46 -0
  177. package/docs/i18n/HERMES_VOICE.ko.md +65 -0
  178. package/docs/i18n/HERMES_VOICE.ru.md +46 -0
  179. package/docs/i18n/HERMES_VOICE.zh.md +46 -0
  180. package/docs/i18n/MULTI_INSTANCE.es.md +25 -0
  181. package/docs/i18n/MULTI_INSTANCE.fr.md +25 -0
  182. package/docs/i18n/MULTI_INSTANCE.ja.md +25 -0
  183. package/docs/i18n/MULTI_INSTANCE.ko.md +25 -0
  184. package/docs/i18n/MULTI_INSTANCE.ru.md +25 -0
  185. package/docs/i18n/MULTI_INSTANCE.zh.md +25 -0
  186. package/docs/i18n/README.es.md +20 -134
  187. package/docs/i18n/README.fr.md +20 -134
  188. package/docs/i18n/README.ja.md +20 -134
  189. package/docs/i18n/README.ko.md +20 -133
  190. package/docs/i18n/README.ru.md +20 -134
  191. package/docs/i18n/README.zh.md +20 -133
  192. package/docs/i18n/RELEASE.es.md +26 -1
  193. package/docs/i18n/RELEASE.fr.md +26 -1
  194. package/docs/i18n/RELEASE.ja.md +26 -1
  195. package/docs/i18n/RELEASE.ko.md +26 -1
  196. package/docs/i18n/RELEASE.ru.md +26 -1
  197. package/docs/i18n/RELEASE.zh.md +26 -1
  198. package/docs/i18n/TROUBLESHOOTING.es.md +39 -0
  199. package/docs/i18n/TROUBLESHOOTING.fr.md +39 -0
  200. package/docs/i18n/TROUBLESHOOTING.ja.md +39 -0
  201. package/docs/i18n/TROUBLESHOOTING.ko.md +39 -0
  202. package/docs/i18n/TROUBLESHOOTING.ru.md +39 -0
  203. package/docs/i18n/TROUBLESHOOTING.zh.md +39 -0
  204. package/docs/i18n/USAGE.es.md +25 -0
  205. package/docs/i18n/USAGE.fr.md +25 -0
  206. package/docs/i18n/USAGE.ja.md +25 -0
  207. package/docs/i18n/USAGE.ko.md +25 -0
  208. package/docs/i18n/USAGE.ru.md +25 -0
  209. package/docs/i18n/USAGE.zh.md +25 -0
  210. package/docs/superpowers/plans/2026-05-13-phase1-streaming-pipeline.md +122 -0
  211. package/docs/superpowers/plans/2026-05-13-phase10-push-notifications.md +152 -0
  212. package/docs/superpowers/plans/2026-05-13-phase2-agent-adapters.md +242 -0
  213. package/docs/superpowers/plans/2026-05-13-phase6-smart-progress.md +172 -0
  214. package/docs/superpowers/plans/2026-05-13-phase7-voice-plan-mode.md +108 -0
  215. package/docs/superpowers/plans/2026-05-14-cross-agent-voice-transfer.md +625 -0
  216. package/docs/superpowers/plans/2026-05-21-audio-overview-narrated-diffs.md +95 -0
  217. package/docs/superpowers/plans/2026-05-21-autoresearch-ontology.md +83 -0
  218. package/docs/superpowers/plans/2026-05-21-phase11-push-to-talk-wakeword-v2.md +77 -0
  219. package/docs/superpowers/plans/2026-05-21-phase12-multi-user-voice.md +147 -0
  220. package/docs/superpowers/plans/2026-05-21-phase14-verbalbench.md +136 -0
  221. package/docs/superpowers/plans/2026-05-21-phase15-phone-companion.md +72 -0
  222. package/integrations/fireredtts2/mlx_llm.py +183 -0
  223. package/integrations/fireredtts2/synth.py +156 -0
  224. package/integrations/fireredtts2/synth_mlx.py +196 -0
  225. package/integrations/mlxaudio/synth.py +74 -0
  226. package/integrations/neuttsair/synth.py +104 -0
  227. package/integrations/omnivoice/synth.py +110 -0
  228. package/package.json +7 -1
  229. package/scripts/cli.mjs +88 -3
  230. package/scripts/doctor.mjs +115 -4
  231. package/scripts/install.mjs +20 -2
  232. package/scripts/install_fireredtts2.sh +109 -0
  233. package/scripts/install_mlxaudio.sh +34 -0
  234. package/scripts/install_mossttsnano.sh +46 -0
  235. package/scripts/postinstall.mjs +34 -0
package/README.ko.md ADDED
@@ -0,0 +1,134 @@
1
+ # VerbalCoding
2
+
3
+ <p align="center"><strong>Discord 음성으로 CLI 코딩 에이전트와 통화하듯 작업하세요.</strong></p>
4
+
5
+ <p align="center"><a href="./README.md">English</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.zh.md">中文</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a> · <a href="./README.ru.md">Русский</a></p>
6
+
7
+ <p align="center">
8
+ <img alt="npm" src="https://img.shields.io/npm/v/verbalcoding?color=CB3837&logo=npm&logoColor=white">
9
+ <img alt="Node.js" src="https://img.shields.io/badge/Node.js-20%2B-339933?logo=node.js&logoColor=white">
10
+ <img alt="Discord" src="https://img.shields.io/badge/Discord-voice%20bridge-5865F2?logo=discord&logoColor=white">
11
+ <img alt="STT" src="https://img.shields.io/badge/STT-whisper.cpp-7C3AED">
12
+ <img alt="TTS" src="https://img.shields.io/badge/TTS-Edge%20%7C%20OpenVoice%20%7C%20SpeechSwift-0EA5E9">
13
+ <img alt="License" src="https://img.shields.io/github/license/ca1773130n/VerbalCoding">
14
+ </p>
15
+
16
+ <p align="center">
17
+ <img src="docs/assets/figures/verbalcoding-flow.svg" alt="VerbalCoding voice-to-agent flow" width="860">
18
+ </p>
19
+
20
+ ## 존재 이유
21
+
22
+ VerbalCoding은 Discord 음성 방을 코딩 에이전트용 핸즈프리 조종석으로 바꿉니다. 말로 요청하고, CLI 에이전트가 작업하게 두고, 간결한 음성 답변과 텍스트 기록을 받습니다. diff와 로그는 TTS로 길게 읽지 않도록 보호합니다.
23
+
24
+ > **Hermes Agent를 이미 쓰고 있나요?** Hermes 자체도 `/voice join` / `/voice channel`로 Discord 음성 채널에 들어가 Whisper STT와 TTS 답변을 처리할 수 있습니다. 그 기본 루프만 필요하다면 VerbalCoding은 필수가 아닙니다. VerbalCoding은 그 위에 프로젝트/세션 라우팅, 음성+텍스트 공유 컨텍스트, 바지인 규칙, 진행 음성 안내, 언어 프리셋, 지연 시간 지표, Hermes 외 CLI 백엔드 전환을 얹는 워크플로 레이어입니다.
25
+
26
+ ## 무엇이 다른가
27
+
28
+ | 기능 | 왜 중요한가 |
29
+ |---|---|
30
+ | 통화 같은 작업 흐름 | 한 Discord 음성 채널에서 말하고, 듣고, 끼어들고, 이어서 작업합니다. |
31
+ | 안내형 사람용 설정 | `vc setup`이 prerequisites, Discord token/client ID, voice channel, transcript target, backend, TTS 설정을 한 흐름으로 묻습니다. |
32
+ | 로컬 음성 루프 | Discord audio → local `whisper-cli` → selected CLI agent → TTS 답변. |
33
+ | 에이전트 선택 | Hermes Agent, Claude Code, Codex, Gemini CLI, OpenCode, OpenClaw, Aider, Cursor CLI 또는 custom command를 지원합니다. `vc setup`이 설치된 것을 자동 감지해요. |
34
+ | 음성으로 에이전트 라우팅 | `"코덱스한테 물어봐"`로 한 턴만 보내거나 `"aider로 전환"`으로 sticky 전환. `"기본으로 돌아가"`로 복귀. 없는 바이너리는 감지해서 기본 에이전트로 fallback할지 물어봐. |
35
+ | Hermes 기본 음성 너머 | 같은 VC 음성 루프를 기반으로 프로젝트 방, `!ask` 공유 컨텍스트, 세밀한 끼어들기 처리, 진행/상태 음성 안내, 다중 에이전트 백엔드 제어를 더합니다. |
36
+ | 운영 친화 기능 | doctor auto-fix, Docker UDP 안내, latency metrics, multi-instance rooms, redacted config checks가 포함됩니다. |
37
+
38
+ ## 빠른 시작
39
+
40
+ ```bash
41
+ npm install -g verbalcoding@latest
42
+ vc setup
43
+ vc doctor
44
+ vc start
45
+ ```
46
+
47
+ `vc setup`이 일반 사용자 경로입니다. Discord Developer Portal을 열어 둔 상태에서 bot token, application/client ID, transcript target, voice channel names를 입력하세요.
48
+
49
+ 자동화에서는 프롬프트를 건너뛴 뒤 Discord 값을 나중에 넣을 수 있습니다.
50
+
51
+ ```bash
52
+ vc setup --yes
53
+ vc setup token <bot-token> --client-id <discord-client-id>
54
+ vc setup channels "General,Team Voice"
55
+ vc doctor
56
+ ```
57
+
58
+ ## Discord 설정 1분 요약
59
+
60
+ 1. Discord Developer Portal에서 application과 bot을 만듭니다.
61
+ 2. Message Content privileged intent를 켭니다.
62
+ 3. `vc setup`을 실행하고 bot token과 application/client ID를 붙여넣습니다.
63
+ 4. 자동 입장할 voice channel 이름을 정확히 입력합니다.
64
+ 5. 아래 명령으로 bot을 초대합니다.
65
+
66
+ ```bash
67
+ vc bot invite <discord-client-id>
68
+ vc bot invite <discord-client-id> --guild <guild-id>
69
+ ```
70
+
71
+ ## 작은 명령 지도
72
+
73
+ ```bash
74
+ vc setup # 안내형 설정: prerequisites, Discord, backend, voice
75
+ vc setup --yes # 비대화형 bootstrap/starter config
76
+ vc setup token # 나중에 Discord bot token과 client ID 회전/추가
77
+ vc setup channels "General,Team Voice" # auto-join voice channel names 업데이트
78
+ vc bot invite CLIENT_ID # Discord bot invite URL 생성
79
+ vc status # 현재 설정 표시
80
+ vc language ko|en|auto # language preset 전환
81
+ vc doctor # redacted health check와 auto-fix
82
+ vc start # 기본 bridge 시작
83
+ vc instance setup NAME # 격리된 project voice bot 생성
84
+ vc instance start NAME # 해당 bot을 background로 실행
85
+ ```
86
+
87
+ ## 더 보기
88
+
89
+ | 가이드 | 내용 |
90
+ |---|---|
91
+ | [문서 허브](docs/i18n/README.ko.md) | 현지화된 가이드 색인. |
92
+ | [Fresh Install](docs/i18n/FRESH_INSTALL.ko.md) | npm/global setup, Discord 설정, 첫 실행. |
93
+ | [Usage](docs/i18n/USAGE.ko.md) | CLI 명령, Discord 명령, 실행 모드, latency. |
94
+ | [하니스 사용법](docs/i18n/HARNESSES.ko.md) | Claude Code, Codex, Aider 등 백엔드별 설치·설정·음성 라우팅. |
95
+ | [Hermes 기본 음성 vs VerbalCoding](docs/i18n/HERMES_VOICE.ko.md) | Hermes가 이미 지원하는 Discord 음성과 VerbalCoding의 차이. |
96
+ | [Configuration](docs/i18n/CONFIGURATION.ko.md) | .env, agent backends, MCP, TTS, 운영. |
97
+ | [Troubleshooting](docs/i18n/TROUBLESHOOTING.ko.md) | Docker UDP, token/channel 누락 점검. |
98
+ | [Multi-Instance](docs/i18n/MULTI_INSTANCE.ko.md) | 프로젝트마다 하나의 고정 음성 방. |
99
+
100
+ ## 요구 사항
101
+
102
+ | 계층 | 기본값 |
103
+ |---|---|
104
+ | Runtime | Node.js 20+와 npm. |
105
+ | Audio | `ffmpeg`와 local `whisper-cli`. |
106
+ | TTS | 기본 Edge TTS, 선택 OpenVoice, SpeechSwift/CosyVoice, Supertonic, OmniVoice, Qwen3 TTS CLI. |
107
+ | Discord | Bot token, Message Content intent, voice permissions, 일치하는 channel names. |
108
+ | Agent | 인증된 CLI harness 하나 이상, 기본은 Hermes Agent. |
109
+
110
+ ## Docker / 컨테이너 참고
111
+
112
+ 로그에 `Cannot perform IP discovery - socket closed`가 보이면 Discord voice UDP가 막힌 것입니다. Linux Docker Compose에서는 다음을 사용하세요:
113
+
114
+ ```yaml
115
+ services:
116
+ verbalcoding:
117
+ network_mode: "host"
118
+ ```
119
+
120
+ `network_mode: "host"`와 `ports:`를 함께 쓰지 마세요.
121
+
122
+ ## 기여
123
+
124
+ ```bash
125
+ node --check app-node/main.mjs
126
+ npm test
127
+ bash -n run.sh scripts/install.sh scripts/bootstrap_prereqs.sh
128
+ npm pack --dry-run
129
+ vc doctor
130
+ ```
131
+
132
+ ## 상태
133
+
134
+ VerbalCoding은 공개 릴리스를 지향하지만 아직 초기 단계입니다. 데모 영상/GIF, 더 넓은 Linux 검증, CI, 보안 리뷰는 TODO입니다.
package/README.md CHANGED
@@ -1,148 +1,192 @@
1
1
  # VerbalCoding
2
2
 
3
3
  <p align="center">
4
- <strong>Talk to your CLI coding agents through Discord voice like a phone call for software work.</strong>
4
+ <strong>The voice layer for any coding agent real barge-in, streaming latency, and the agents you already use.</strong>
5
5
  </p>
6
6
 
7
7
  <p align="center">
8
- <a href="docs/i18n/README.ko.md">한국어</a> ·
9
- <a href="docs/i18n/README.ja.md">日本語</a> ·
10
- <a href="docs/i18n/README.zh.md">中文</a> ·
11
- <a href="docs/i18n/README.es.md">Español</a> ·
12
- <a href="docs/i18n/README.fr.md">Français</a> ·
13
- <a href="docs/i18n/README.ru.md">Русский</a>
8
+ <a href="./README.ko.md">한국어</a> ·
9
+ <a href="./README.ja.md">日本語</a> ·
10
+ <a href="./README.zh.md">中文</a> ·
11
+ <a href="./README.es.md">Español</a> ·
12
+ <a href="./README.fr.md">Français</a> ·
13
+ <a href="./README.ru.md">Русский</a>
14
14
  </p>
15
15
 
16
16
  <p align="center">
17
+ <img alt="npm" src="https://img.shields.io/npm/v/verbalcoding?color=CB3837&logo=npm&logoColor=white">
17
18
  <img alt="Node.js" src="https://img.shields.io/badge/Node.js-20%2B-339933?logo=node.js&logoColor=white">
18
19
  <img alt="Discord" src="https://img.shields.io/badge/Discord-voice%20bridge-5865F2?logo=discord&logoColor=white">
19
20
  <img alt="STT" src="https://img.shields.io/badge/STT-whisper.cpp-7C3AED">
20
- <img alt="TTS" src="https://img.shields.io/badge/TTS-Edge%20%7C%20OpenVoice%20%7C%20Supertonic%20%7C%20SpeechSwift-0EA5E9">
21
- <img alt="Agents" src="https://img.shields.io/badge/Agents-Hermes%20%7C%20Claude%20%7C%20Codex%20%7C%20Gemini%20%7C%20OpenCode-111827">
21
+ <img alt="TTS" src="https://img.shields.io/badge/TTS-Edge%20%7C%20OpenVoice%20%7C%20SpeechSwift-0EA5E9">
22
+ <img alt="License" src="https://img.shields.io/github/license/ca1773130n/VerbalCoding">
22
23
  </p>
23
24
 
24
25
  <p align="center">
25
26
  <img src="docs/assets/figures/verbalcoding-flow.svg" alt="VerbalCoding voice-to-agent flow" width="860">
26
27
  </p>
27
28
 
28
- ## Why
29
+ ## Why it exists
29
30
 
30
- VerbalCoding turns a Discord voice channel into a hands-free control surface for coding agents. Speak a request, let your CLI agent work, and hear a concise answer back — with text transcripts, progress events, and guardrails for noisy code/log output.
31
+ VerbalCoding turns a Discord voice channel into a hands-free cockpit for **any** CLI coding agent. Hermes ships its own `/voice join` for Hermes; VerbalCoding is a thin, agent-agnostic layer that puts the same loop on top of Hermes, Claude Code, Codex, Gemini, OpenCode, OpenClaw, Aider, Cursor CLI, or any non-interactive shell command — with the rough edges other voice frontends still have on their roadmap:
31
32
 
32
- ## Highlights
33
+ - **True audio barge-in** — interrupt the agent mid-sentence; Hermes' built-in voice pauses its listener during TTS.
34
+ - **Streaming pipeline** — first sentence plays while the agent is still writing (Hermes lists this as a future Phase-4 item).
35
+ - **Smart progress narration** — describes intent ("wiring the new login route"), not file lists.
36
+ - **Voice plan mode** — say "plan it first", edit by voice ("skip step 3"), say "approve" to execute.
37
+ - **Cross-agent routing by voice** — "ask Codex what it thinks" for a single turn, "switch to Aider" to make it sticky, "back to default" to restore. The plan can also emit a `which_agent` slot so the agent itself picks the next backend.
38
+ - **Phone-down mode** — push notification with a voice summary when a long task completes and the room is empty.
33
39
 
34
- | What you get | Why it feels good |
40
+ ## What feels different
41
+
42
+ | Capability | Why it matters |
35
43
  |---|---|
36
- | Voice-first agent control | Talk to Hermes Agent, Claude Code, Codex, Gemini CLI, OpenCode, OpenClaw, or any custom CLI harness. |
37
- | On-device speech loop | Discord voice capture local `whisper-cli` transcription agent chunked TTS playback. |
38
- | Shared voice + text context | Voice turns and `!ask` text commands can reuse the same supported agent session. |
39
- | Barge-in and sensitivity modes | Interrupt playback naturally and switch between normal and conservative/noisy environments. |
40
- | Multilingual voice presets | Switch STT, progress language, and TTS voice together with `vc language ko/en/auto`. |
41
- | Multi-room project isolation | Run one bot per project room with isolated Hermes profiles, sessions, memory, and logs. |
44
+ | Agent choice, first-class | Hermes Agent, Claude Code, Codex, Gemini CLI, OpenCode, OpenClaw, Aider, Cursor CLI, or any custom command. `vc setup` auto-detects what's installed. |
45
+ | Cross-agent voice routing | Say "ask Codex …" (single turn), "switch to Aider" (sticky), or "back to default". Missing binaries are detected and the bridge offers to fall back to the default agent. Handoff prompts carry recent utterances + last plan decisions to the new agent. |
46
+ | Real barge-in | VAD thresholds tuned for indoor and noisy rooms; cut in mid-utterance and resume the conversation. |
47
+ | Streaming end-to-end | Sentence-by-sentence playback while the agent is still writing; first audio in well under a second on a warm cache. On by default set `STREAMING_TTS=0` to fall back to whole-reply playback. |
48
+ | Smart progress | Optional LLM summarizer collapses raw events into one human sentence; falls back to the existing regex labels when no key is set. |
49
+ | Plan-mode by voice | Narrated, editable, voice-driven plans without touching the keyboard. |
50
+ | Phone-down handoff | Long task + empty VC = push notification (`ntfy`/`pushover`) with a redacted one-line summary and tap-to-rejoin link. |
51
+ | Local speech loop | Discord audio is transcribed by local `whisper-cli`; TTS via Edge, OpenVoice, SpeechSwift/CosyVoice, or Supertonic. |
52
+ | Real operations support | Doctor auto-fixes, Docker UDP guidance, latency metrics, multi-instance project rooms, redacted config checks. |
53
+
54
+ > **Already using Hermes Agent?** Hermes itself has a working Discord voice loop via `/voice join` / `/voice channel`. Use VerbalCoding when you want it agent-agnostic, want barge-in and streaming today, or want plan-mode, push handoff, and smart narration on top of the same loop. The two coexist — VerbalCoding can drive Hermes as its backend.
42
55
 
43
56
  ## Quick Start
44
57
 
45
- Fastest path with npm:
46
-
47
58
  ```bash
48
- npm install -g verbalcoding
49
- vc setup --yes
59
+ npm install -g verbalcoding@latest
60
+ vc setup # detects installed agents and lets you pick
50
61
  vc doctor
51
62
  vc start
52
63
  ```
53
64
 
54
- Or run directly without a permanent global install:
65
+ `vc setup` is the normal human path. Keep Discord Developer Portal open while it asks for your bot token, application/client ID, transcript target, and voice channel names.
66
+
67
+ Automation can skip prompts, then fill Discord details later:
55
68
 
56
69
  ```bash
57
- npx verbalcoding setup --yes
70
+ vc setup --yes
71
+ vc setup token <bot-token> --client-id <discord-client-id>
72
+ vc setup channels "General,Team Voice"
58
73
  vc doctor
59
- vc start
60
74
  ```
61
75
 
62
- GitHub clone path for contributors:
76
+ Contributor clone path:
63
77
 
64
78
  ```bash
65
79
  git clone https://github.com/ca1773130n/VerbalCoding.git
66
80
  cd VerbalCoding
67
- ./scripts/install.sh --yes
81
+ ./scripts/install.sh
68
82
  vc doctor
69
83
  ./run.sh
70
84
  ```
71
85
 
72
- `vc setup --yes` bootstraps local prerequisites from the npm package. `./scripts/install.sh --yes` does the same for GitHub clone installs. Both cover Node/npm dependencies, `ffmpeg`, `whisper-cli`, the default whisper.cpp model, a local `.venv-tts` Edge TTS helper, and setup wizard configuration where possible. They support macOS/Homebrew plus common Linux package managers (`apt`, `dnf`, `pacman`); rerun with `--no-wizard` for dependency-only setup or `--skip-system` if you want to install OS packages yourself.
86
+ ## Discord setup in one minute
73
87
 
74
- Need a clean install walkthrough? Start with [Fresh Install](docs/FRESH_INSTALL.md).
88
+ 1. Create a Discord application and bot in <https://discord.com/developers/applications>.
89
+ 2. Enable the Message Content privileged intent.
90
+ 3. Run `vc setup` and paste the bot token plus application/client ID when prompted.
91
+ 4. Enter exact voice channel names for auto-join.
92
+ 5. Invite the bot with:
75
93
 
76
- ## Supported Agent Backends
77
-
78
- | Backend | Default command | Session support |
79
- |---|---:|---|
80
- | Hermes Agent | `hermes chat -Q -q` | Resume, verbose progress, cancellation, final-answer recovery |
81
- | Claude Code | `claude -p` | CLI session file support through adapter defaults |
82
- | Codex CLI | `codex exec` | CLI session file support through adapter defaults |
83
- | Gemini CLI | `gemini -p` | CLI session file support through adapter defaults |
84
- | OpenCode | `opencode run` | CLI session file support through adapter defaults |
85
- | OpenClaw | `openclaw run` | CLI session file support through adapter defaults |
86
- | Custom | `AGENT_COMMAND` | Bring your own non-interactive command |
94
+ ```bash
95
+ vc bot invite <discord-client-id>
96
+ vc bot invite <discord-client-id> --guild <guild-id>
97
+ ```
87
98
 
88
- ## Learn More
99
+ Secrets are stored in ignored local env files with mode `0600` and are not printed back by `vc doctor`.
89
100
 
90
- | Guide | What you get |
91
- |---|---|
92
- | [Fresh Install](docs/FRESH_INSTALL.md) | Clean clone setup, model download, first run |
93
- | [Usage Guide](docs/USAGE.md) | CLI commands, Discord commands, progress mode, latency metrics |
94
- | [Configuration](docs/CONFIGURATION.md) | `.env`, agent backends, MCP, TTS backends, operational notes |
95
- | [Multi-Instance](docs/MULTI_INSTANCE.md) | One permanent Discord voice room per project |
96
- | [Release Notes](docs/RELEASE.md) | Current capabilities and pre-release checklist |
97
-
98
- ## Tiny Command Map
101
+ ## Tiny command map
99
102
 
100
103
  ```bash
101
- vc status # current language, TTS, and bridge settings
102
- vc language ko|en|auto # switch STT/progress/TTS language preset
103
- vc bot invite CLIENT_ID # generate the Discord bot invite URL
104
- vc instance setup NAME # create an isolated project voice bot
105
- vc instance start NAME # run that bot in the background
106
- vc doctor # redacted health check
107
- vc start # start the default bridge
104
+ vc setup # guided setup with agent auto-detection
105
+ vc setup --yes # non-interactive bootstrap/starter config
106
+ vc setup token # rotate or add Discord bot token/client ID later
107
+ vc setup channels "General,Team Voice" # update auto-join voice channel names
108
+ vc bot invite CLIENT_ID # generate a Discord bot invite URL
109
+ vc status # show active language, TTS, bridge settings, and resolved backend
110
+ vc language ko|en|auto # switch STT/progress/TTS language preset
111
+ vc doctor # redacted health check with auto-fix suggestions
112
+ vc start # start the default bridge
113
+ vc instance setup NAME # create an isolated project voice bot
114
+ vc instance start NAME # run that bot in the background
108
115
  ```
109
116
 
110
117
  In Discord:
111
118
 
112
119
  | Command | What it does |
113
120
  |---|---|
114
- | `!join` | Join your current voice channel. |
115
- | `!ask <prompt>` | Send text to the same agent backend. |
116
- | `!verbose on\|off` | Show/speak short progress updates. |
117
- | `!latency` | Summarize recent voice/STT/agent/TTS latency. |
118
- | `!sensitivity normal` | Use normal indoor barge-in sensitivity. |
119
- | `!sensitivity conservative` | Use stricter noisy/outdoor sensitivity. |
121
+ | `!join` / `!leave` | Join or leave your current voice channel. |
122
+ | `!ask <prompt>` | Send text to the same selected agent backend. |
123
+ | `!verbose on\|off` | Toggle short progress updates. |
124
+ | `!latency` / `!metrics` | Summarize recent STT/agent/TTS latency. |
125
+ | `!sensitivity normal\|conservative` | Tune barge-in for indoor or noisy environments. |
120
126
  | `!session new <name> <workdir> [context] --voice <voice-channel>` | Bind a project session to a voice room. |
121
127
 
128
+ ## Roadmap
129
+
130
+ The differentiation push is tracked in [docs/ROADMAP.md](./docs/ROADMAP.md). Five phases land the claims above:
131
+
132
+ | # | Phase | What it adds |
133
+ |---|---|---|
134
+ | 1 | Streaming pipeline | Sentence-by-sentence TTS while the agent is still writing. |
135
+ | 2 | Agent-agnostic adapters | First-class Aider + Cursor CLI; `vc setup` auto-detects. |
136
+ | 6 | Smart progress | LLM-summarized narration. Falls back to today's regex labels. |
137
+ | 7 | Voice plan mode | Narrate plan, voice-edit, approve to execute. |
138
+ | 10 | Push notification handoff | ntfy/Pushover when a long task ends and the room is empty. |
139
+
140
+ ## Learn more
141
+
142
+ | Guide | What you get |
143
+ |---|---|
144
+ | [Docs hub](docs/README.md) | One page linking every guide and localized doc set. |
145
+ | [Roadmap](docs/ROADMAP.md) | Differentiation plan and per-phase implementation plans. |
146
+ | [Fresh Install](docs/FRESH_INSTALL.md) | npm/global setup, Discord app setup, token/channel commands, first run. |
147
+ | [Usage Guide](docs/USAGE.md) | CLI commands, Discord commands, run modes, voice changes, latency metrics. |
148
+ | [Hermes Built-in Voice vs VerbalCoding](docs/HERMES_VOICE.md) | What Hermes already supports and when VerbalCoding is worth adding. |
149
+ | [Configuration](docs/CONFIGURATION.md) | `.env`, agent backends, MCP server, TTS backends, operational notes. |
150
+ | [Troubleshooting](docs/TROUBLESHOOTING.md) | Docker host networking, UDP voice failures, missing token/channel diagnostics. |
151
+ | [Multi-Instance](docs/MULTI_INSTANCE.md) | One permanent Discord voice room per project. |
152
+ | [Release Notes](docs/RELEASE.md) | Current capabilities, checks, and public-release gaps. |
153
+
122
154
  ## Requirements
123
155
 
124
156
  | Layer | Default |
125
157
  |---|---|
126
- | Runtime | Node.js 20+, npm; install script can install via Homebrew/apt/dnf/pacman |
127
- | Audio | `ffmpeg`; install script can install it |
128
- | Speech recognition | Local `whisper-cli` from whisper.cpp; install script uses Homebrew on macOS or local Linux build fallback |
129
- | TTS | Edge TTS CLI; install script creates `.venv-tts` if needed |
130
- | Discord | Bot token, Message Content intent, voice permissions |
131
- | Agent | At least one authenticated CLI harness, Hermes Agent by default |
132
- | Platform focus | macOS / Apple Silicon most tested; Linux bootstrap is best-effort and documented |
158
+ | Runtime | Node.js 20+ and npm; setup can install via Homebrew/apt/dnf/pacman where supported. |
159
+ | Audio | `ffmpeg`; setup/doctor can install it on supported OSes. |
160
+ | Speech recognition | Local `whisper-cli` from whisper.cpp plus `models/ggml-small-q5_1.bin`. |
161
+ | TTS | Edge TTS by default; optional OpenVoice, SpeechSwift/CosyVoice, Supertonic, OmniVoice, and Qwen3 TTS CLI paths. |
162
+ | Discord | Bot token, Message Content intent, voice permissions, matching auto-join channel names. |
163
+ | Agent | At least one CLI harness installed; `vc setup` auto-detects Hermes, Claude Code, Codex, Gemini, OpenCode, OpenClaw, Aider, Cursor CLI. |
164
+ | Platform focus | macOS / Apple Silicon most tested; Linux bootstrap is best-effort; Windows unsupported for now. |
165
+
166
+ ## Docker / container note
167
+
168
+ Discord text login can work while voice join fails if outbound UDP is blocked. If logs show `Cannot perform IP discovery - socket closed`, use Linux host networking for the service that runs `vc start`:
169
+
170
+ ```yaml
171
+ services:
172
+ verbalcoding:
173
+ network_mode: "host"
174
+ ```
175
+
176
+ Do not combine `network_mode: "host"` with `ports:`. Docker Desktop for macOS/Windows behaves differently; if UDP still fails there, run VerbalCoding directly on the host or a Linux VM.
133
177
 
134
178
  ## Contributing
135
179
 
136
- Run the lightweight checks before sending changes:
180
+ Run lightweight checks before sending changes:
137
181
 
138
182
  ```bash
139
183
  node --check app-node/main.mjs
140
184
  npm test
141
- bash -n run.sh scripts/install.sh
185
+ bash -n run.sh scripts/install.sh scripts/bootstrap_prereqs.sh
142
186
  npm pack --dry-run
143
187
  vc doctor
144
188
  ```
145
189
 
146
190
  ## Status
147
191
 
148
- VerbalCoding is public-release oriented but still early. Demo video/GIF, broader Linux validation, CI, and deeper security review are still TODOs.
192
+ Public-release oriented but still early. The roadmap above tracks live differentiation work. Demo video/GIF, broader Linux validation, CI, and deeper security review are still TODOs.
package/README.ru.md ADDED
@@ -0,0 +1,134 @@
1
+ # VerbalCoding
2
+
3
+ <p align="center"><strong>Общайтесь с CLI-агентами для разработки голосом в Discord, как по телефону.</strong></p>
4
+
5
+ <p align="center"><a href="./README.md">English</a> · <a href="./README.ko.md">한국어</a> · <a href="./README.ja.md">日本語</a> · <a href="./README.zh.md">中文</a> · <a href="./README.es.md">Español</a> · <a href="./README.fr.md">Français</a></p>
6
+
7
+ <p align="center">
8
+ <img alt="npm" src="https://img.shields.io/npm/v/verbalcoding?color=CB3837&logo=npm&logoColor=white">
9
+ <img alt="Node.js" src="https://img.shields.io/badge/Node.js-20%2B-339933?logo=node.js&logoColor=white">
10
+ <img alt="Discord" src="https://img.shields.io/badge/Discord-voice%20bridge-5865F2?logo=discord&logoColor=white">
11
+ <img alt="STT" src="https://img.shields.io/badge/STT-whisper.cpp-7C3AED">
12
+ <img alt="TTS" src="https://img.shields.io/badge/TTS-Edge%20%7C%20OpenVoice%20%7C%20SpeechSwift-0EA5E9">
13
+ <img alt="License" src="https://img.shields.io/github/license/ca1773130n/VerbalCoding">
14
+ </p>
15
+
16
+ <p align="center">
17
+ <img src="docs/assets/figures/verbalcoding-flow.svg" alt="VerbalCoding voice-to-agent flow" width="860">
18
+ </p>
19
+
20
+ ## Зачем это нужно
21
+
22
+ VerbalCoding превращает голосовую комнату Discord в hands-free кабину для coding agents. Вы произносите задачу, CLI-агент работает, а в ответ получаете короткую озвучку, текстовую расшифровку и события прогресса. Diffs и logs не зачитываются длинным TTS.
23
+
24
+ > **Уже используете Hermes Agent?** В Hermes уже есть встроенная поддержка голосовых каналов Discord через `/voice join` / `/voice channel`: бот может зайти в текущий VC, распознать речь через Whisper и ответить TTS. Для этого базового цикла VerbalCoding не обязателен. VerbalCoding добавляет workflow-слой: маршрутизацию проектов/сессий, общий контекст голоса+текста, правила прерывания, голосовой прогресс, языковые пресеты, метрики задержки и переключение CLI-бэкендов помимо Hermes.
25
+
26
+ ## Что ощущается иначе
27
+
28
+ | Возможность | Зачем это важно |
29
+ |---|---|
30
+ | Работа как звонок | Говорите, слушайте, перебивайте и продолжайте в одном голосовом канале Discord. |
31
+ | Пошаговая настройка | `vc setup` проводит через prerequisites, Discord token/client ID, voice channel, transcript target, backend и TTS settings за один проход. |
32
+ | Локальный голосовой цикл | Discord audio → local `whisper-cli` → selected CLI agent → TTS reply. |
33
+ | Выбор агента | Hermes Agent, Claude Code, Codex, Gemini CLI, OpenCode, OpenClaw, Aider, Cursor CLI или custom command. `vc setup` автоматически находит установленные. |
34
+ | Голосовая маршрутизация агента | `"ask Codex what it thinks"` — на один turn, `"switch to Aider"` — sticky, `"back to default"` — возврат. Отсутствующие бинарники определяются и мост предлагает fallback к агенту по умолчанию. |
35
+ | Больше, чем встроенный голос Hermes | Сохраняет тот же VC-голосовой цикл и добавляет проектные комнаты, общий контекст `!ask`, тонкую обработку прерываний, голос прогресса/статуса и управление multi-agent бэкендами. |
36
+ | Готовность к эксплуатации | doctor auto-fix, Docker UDP guide, latency metrics, multi-instance rooms и redacted config checks встроены. |
37
+
38
+ ## Быстрый старт
39
+
40
+ ```bash
41
+ npm install -g verbalcoding@latest
42
+ vc setup
43
+ vc doctor
44
+ vc start
45
+ ```
46
+
47
+ `vc setup` — обычный путь для человека. Держите Discord Developer Portal открытым и введите bot token, application/client ID, transcript target и voice channel names.
48
+
49
+ Для автоматизации можно пропустить prompts и добавить Discord-данные позже.
50
+
51
+ ```bash
52
+ vc setup --yes
53
+ vc setup token <bot-token> --client-id <discord-client-id>
54
+ vc setup channels "General,Team Voice"
55
+ vc doctor
56
+ ```
57
+
58
+ ## Discord за одну минуту
59
+
60
+ 1. Создайте application и bot в Discord Developer Portal.
61
+ 2. Включите Message Content privileged intent.
62
+ 3. Запустите `vc setup` и вставьте bot token и application/client ID.
63
+ 4. Введите точные имена voice channels для auto-join.
64
+ 5. Пригласите bot этими командами.
65
+
66
+ ```bash
67
+ vc bot invite <discord-client-id>
68
+ vc bot invite <discord-client-id> --guild <guild-id>
69
+ ```
70
+
71
+ ## Краткая карта команд
72
+
73
+ ```bash
74
+ vc setup # пошаговая настройка: prerequisites, Discord, backend, voice
75
+ vc setup --yes # неинтерактивный bootstrap/starter config
76
+ vc setup token # позже обновить или добавить Discord bot token/client ID
77
+ vc setup channels "General,Team Voice" # обновить auto-join voice channel names
78
+ vc bot invite CLIENT_ID # сгенерировать Discord bot invite URL
79
+ vc status # показать текущие настройки
80
+ vc language ko|en|auto # переключить language preset
81
+ vc doctor # redacted health check и auto-fixes
82
+ vc start # запустить bridge по умолчанию
83
+ vc instance setup NAME # создать изолированный project voice bot
84
+ vc instance start NAME # запустить этот bot в background
85
+ ```
86
+
87
+ ## Подробнее
88
+
89
+ | Гайд | Что внутри |
90
+ |---|---|
91
+ | [Центр документации](docs/i18n/README.ru.md) | Индекс локализованных гайдов. |
92
+ | [Fresh Install](docs/i18n/FRESH_INSTALL.ru.md) | npm/global setup, настройка Discord и первый запуск. |
93
+ | [Usage](docs/i18n/USAGE.ru.md) | CLI-команды, Discord-команды, режимы запуска и latency. |
94
+ | [Использование по harness](docs/i18n/HARNESSES.ru.md) | Установка, настройка и голосовая маршрутизация для Claude Code, Codex, Aider и других. |
95
+ | [Встроенный голос Hermes vs VerbalCoding](docs/i18n/HERMES_VOICE.ru.md) | Что Hermes уже умеет в Discord voice и чем отличается VerbalCoding. |
96
+ | [Configuration](docs/i18n/CONFIGURATION.ru.md) | .env, agent backends, MCP, TTS и эксплуатация. |
97
+ | [Troubleshooting](docs/i18n/TROUBLESHOOTING.ru.md) | Docker UDP и проверки token/channel. |
98
+ | [Multi-Instance](docs/i18n/MULTI_INSTANCE.ru.md) | Одна постоянная voice room на проект. |
99
+
100
+ ## Требования
101
+
102
+ | Слой | По умолчанию |
103
+ |---|---|
104
+ | Runtime | Node.js 20+ и npm. |
105
+ | Audio | `ffmpeg` и local `whisper-cli`. |
106
+ | TTS | По умолчанию Edge TTS; опционально OpenVoice, SpeechSwift/CosyVoice, Supertonic. |
107
+ | Discord | Bot token, Message Content intent, voice permissions и совпадающие channel names. |
108
+ | Agent | Минимум один аутентифицированный CLI harness; по умолчанию Hermes Agent. |
109
+
110
+ ## Docker / контейнеры
111
+
112
+ Если в logs видно `Cannot perform IP discovery - socket closed`, Discord voice UDP заблокирован. В Linux Docker Compose используйте:
113
+
114
+ ```yaml
115
+ services:
116
+ verbalcoding:
117
+ network_mode: "host"
118
+ ```
119
+
120
+ Не совмещайте `network_mode: "host"` с `ports:`.
121
+
122
+ ## Участие
123
+
124
+ ```bash
125
+ node --check app-node/main.mjs
126
+ npm test
127
+ bash -n run.sh scripts/install.sh scripts/bootstrap_prereqs.sh
128
+ npm pack --dry-run
129
+ vc doctor
130
+ ```
131
+
132
+ ## Статус
133
+
134
+ VerbalCoding ориентирован на публичный релиз, но проект ещё ранний. Demo video/GIF, более широкая Linux validation, CI и security review остаются TODO.