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
@@ -0,0 +1,58 @@
1
+ # コーディングエージェントハーネス
2
+
3
+ <p align="center">
4
+ <a href="../../README.ja.md">README</a> ·
5
+ <a href="README.ja.md">ドキュメントハブ</a> ·
6
+ <a href="USAGE.ja.md">使い方</a> ·
7
+ <a href="CONFIGURATION.ja.md">設定</a> ·
8
+ <a href="TROUBLESHOOTING.ja.md">トラブルシュート</a>
9
+ </p>
10
+
11
+ VerbalCoding はエージェント非依存です。インストール済みの CLI コーディングエージェントを音声ターンごとに 1 回起動し、STT した発話を prompt として渡し、応答を音声で返します。**1 つ**を既定として選び、音声ルーティングで他のエージェントへ一時的に切り替えます。
12
+
13
+ | ハーネス | 既定コマンド | セッション再開 | ハーネス別ドキュメント |
14
+ |---|---|---|---|
15
+ | Hermes Agent | `hermes chat -Q -q` | ✅ (`--resume <id>`) | [HERMES_VOICE.ja.md](./HERMES_VOICE.ja.md) · [HARNESS_HERMES.ja.md](./HARNESS_HERMES.ja.md) |
16
+ | Claude Code | `claude -p` | ❌ | [HARNESS_CLAUDE.ja.md](./HARNESS_CLAUDE.ja.md) |
17
+ | Codex | `codex exec` | ❌ (最終メッセージファイル取得) | [HARNESS_CODEX.ja.md](./HARNESS_CODEX.ja.md) |
18
+ | Gemini CLI | `gemini -p` | ❌ | [HARNESS_GEMINI.ja.md](./HARNESS_GEMINI.ja.md) |
19
+ | OpenCode | `opencode run` | ❌ | [HARNESS_OPENCODE.ja.md](./HARNESS_OPENCODE.ja.md) |
20
+ | OpenClaw | `openclaw run` | ❌ | [HARNESS_OPENCLAW.ja.md](./HARNESS_OPENCLAW.ja.md) |
21
+ | Aider | `aider --no-pretty --yes-always --message` | ❌ | [HARNESS_AIDER.ja.md](./HARNESS_AIDER.ja.md) |
22
+ | Cursor CLI | `cursor-agent --print --prompt` | ❌ | [HARNESS_CURSOR.ja.md](./HARNESS_CURSOR.ja.md) |
23
+
24
+ ## 既定エージェントの選択
25
+
26
+ `vc setup` がインストール済みバイナリを自動検出して選択肢を提示します。非対話設定:
27
+
28
+ ```bash
29
+ # .env または instance .env
30
+ AGENT_BACKEND=claude # hermes | claude | codex | gemini | opencode | openclaw | aider | cursor | custom
31
+ ```
32
+
33
+ 各ハーネスは自分のコマンドを同名の env (`HERMES_COMMAND`, `CLAUDE_COMMAND` など) から読みます。共通 env (`AGENT_LABEL`, `AGENT_COMMAND`, `AGENT_SESSION_FILE`, `AGENT_WORKDIR`, `AGENT_PROJECT_CONTEXT`, `AGENT_TASK_TIMEOUT_MS`, `AGENT_CHAT_TIMEOUT_MS`, `AGENT_VERBOSE_PROGRESS`) は当該ハーネス既定値を上書きします。
34
+
35
+ ## 音声でのルーティング
36
+
37
+ 設定後は再起動なしで**インストール済み**の任意ハーネスへ届きます:
38
+
39
+ - `"ask Codex what it thinks"` — 単一ターンのみ Codex、次ターンは既定へ復帰。
40
+ - `"switch to Aider"` — sticky ルート、`"back to default"`まで持続。
41
+ - プランモードの `which_agent` スロット — エージェント自身が次のプランの実行先を提案。
42
+
43
+ ルーティング層はバイナリの `PATH` 存在を確認し(プロジェクトセッションの workdir からの相対パスも解決)、未インストールなら `"既定エージェントで代わりに進める?"` と尋ねます。`"yes"` で既定に fallback、`"no"` でキャンセル。
44
+
45
+ パーサが認識するエイリアス: `claude` / `claude code`, `codex` / `コーデックス`, `gemini` / `gemini cli` / `ジェミニ`, `opencode`, `openclaw`, `aider`, `cursor` / `cursor cli`, `hermes`.
46
+
47
+ ## 共通動作
48
+
49
+ 全ハーネスアダプタが共通で扱うもの:
50
+
51
+ - **音声プランモード** — `"plan it first"` でプランを narrate、音声で編集、`"approve"` で選択ハーネスへ実行。
52
+ - **割り込み** — barge-in は現在の TTS を切り、エージェントタスクを abort。sticky ルートは割り込み後も維持、単一ターンルートのみクリア。
53
+ - **詳細進捗** — `AGENT_VERBOSE_PROGRESS=1` (または `"verbose progress on"`) でハーネスが emit する進捗イベントを表示。`SMART_PROGRESS_API_KEY` 設定で LLM 要約器がバッチごとに 1 文に。
54
+ - **プッシュ通知ハンドオフ** — `NOTIFY_PROVIDER=ntfy|pushover` + `NOTIFY_MIN_TASK_MS` を満たし、音声チャンネルが空のときに push。body + `NOTIFY_DEBOUNCE_MS` で debounce。
55
+ - **チャンネル別状態** — Discord 音声チャンネルごとにルーティング・プラン状態・発話リングバッファを保持。
56
+ - **プロジェクトセッション** — `!session new <name> <workdir>` でチャンネルとプロジェクトを束ねる。(ハーネス, セッション) 別アダプタはキャッシュされ rebind 時に無効化。
57
+
58
+ ハーネス別の install パス、認証、罠は各ドキュメント参照。env リファレンスは `docs/CONFIGURATION.ja.md`。
@@ -0,0 +1,58 @@
1
+ # 코딩 에이전트 하니스
2
+
3
+ <p align="center">
4
+ <a href="../../README.ko.md">README</a> ·
5
+ <a href="README.ko.md">문서 허브</a> ·
6
+ <a href="USAGE.ko.md">사용법</a> ·
7
+ <a href="CONFIGURATION.ko.md">설정</a> ·
8
+ <a href="TROUBLESHOOTING.ko.md">문제 해결</a>
9
+ </p>
10
+
11
+ VerbalCoding은 에이전트 종속이 아니야. 설치돼 있는 CLI 코딩 에이전트를 voice turn 하나당 한 번씩 실행하고, STT 결과를 prompt로 넘긴 다음 응답을 음성으로 돌려줘. **하나**를 기본 에이전트로 정하고, 음성 라우팅으로 다른 에이전트에 잠깐씩 전환할 수 있어.
12
+
13
+ | 하니스 | 기본 명령 | 세션 재개 | 하니스별 문서 |
14
+ |---|---|---|---|
15
+ | Hermes Agent | `hermes chat -Q -q` | ✅ (`--resume <id>`) | [HERMES_VOICE.ko.md](./HERMES_VOICE.ko.md) · [HARNESS_HERMES.ko.md](./HARNESS_HERMES.ko.md) |
16
+ | Claude Code | `claude -p` | ❌ | [HARNESS_CLAUDE.ko.md](./HARNESS_CLAUDE.ko.md) |
17
+ | Codex | `codex exec` | ❌ (마지막 메시지 파일 캡처) | [HARNESS_CODEX.ko.md](./HARNESS_CODEX.ko.md) |
18
+ | Gemini CLI | `gemini -p` | ❌ | [HARNESS_GEMINI.ko.md](./HARNESS_GEMINI.ko.md) |
19
+ | OpenCode | `opencode run` | ❌ | [HARNESS_OPENCODE.ko.md](./HARNESS_OPENCODE.ko.md) |
20
+ | OpenClaw | `openclaw run` | ❌ | [HARNESS_OPENCLAW.ko.md](./HARNESS_OPENCLAW.ko.md) |
21
+ | Aider | `aider --no-pretty --yes-always --message` | ❌ | [HARNESS_AIDER.ko.md](./HARNESS_AIDER.ko.md) |
22
+ | Cursor CLI | `cursor-agent --print --prompt` | ❌ | [HARNESS_CURSOR.ko.md](./HARNESS_CURSOR.ko.md) |
23
+
24
+ ## 기본 에이전트 고르기
25
+
26
+ `vc setup`이 설치된 바이너리를 자동 감지해서 선택지를 보여줘. 비대화형 설정은:
27
+
28
+ ```bash
29
+ # .env 또는 instance .env
30
+ AGENT_BACKEND=claude # hermes | claude | codex | gemini | opencode | openclaw | aider | cursor | custom
31
+ ```
32
+
33
+ 각 하니스는 자기 명령을 같은 이름의 env 변수(`HERMES_COMMAND`, `CLAUDE_COMMAND` 등)에서 읽어. 공통 env (`AGENT_LABEL`, `AGENT_COMMAND`, `AGENT_SESSION_FILE`, `AGENT_WORKDIR`, `AGENT_PROJECT_CONTEXT`, `AGENT_TASK_TIMEOUT_MS`, `AGENT_CHAT_TIMEOUT_MS`, `AGENT_VERBOSE_PROGRESS`)는 해당 하니스의 기본값을 덮어써.
34
+
35
+ ## 음성으로 하니스 사이 라우팅
36
+
37
+ 설정이 끝나면 재시작 없이 **설치돼 있는** 어떤 하니스로든 옮길 수 있어:
38
+
39
+ - `"코덱스한테 물어봐"` — 이번 턴만 Codex, 다음 턴은 기본 에이전트로 복귀.
40
+ - `"aider로 전환"` — sticky 라우팅, `"기본으로 돌아가"`라고 할 때까지 유지.
41
+ - 플랜 모드의 `which_agent` 슬롯 — 에이전트가 다음 플랜을 어느 백엔드로 돌릴지 직접 제안.
42
+
43
+ 라우팅 레이어는 바이너리가 `PATH`에 있는지 확인하고 (활성 프로젝트 세션의 workdir 기준 상대 경로도 처리), 없으면 `"기본 에이전트로 대신 진행할까?"`라고 물어봐. `"예"`로 답하면 기본 에이전트로 fallback, `"아니오"`로 취소.
44
+
45
+ 파서가 인식하는 별칭: `claude` / `claude code`, `codex` / `코덱스`, `gemini` / `gemini cli` / `제미나이`, `opencode`, `openclaw`, `aider` / `에이더`, `cursor` / `cursor cli`, `hermes` / `헤르메스`.
46
+
47
+ ## 공통 동작
48
+
49
+ 모든 하니스 어댑터가 똑같이 처리하는 것들:
50
+
51
+ - **음성 플랜 모드** — `"먼저 계획 짜줘"`로 플랜을 만들고, 음성으로 편집한 다음 `"실행"`이라고 하면 선택된 하니스로 실행돼.
52
+ - **Barge-in** — 끼어들기는 현재 TTS를 끊고 에이전트 작업을 abort 시켜. Sticky 라우팅은 interrupt 후에도 유지, 단일 턴 라우팅만 초기화돼.
53
+ - **상세 진행** — `AGENT_VERBOSE_PROGRESS=1` (또는 `"상세 진행 켜"`)로 하니스가 emit하는 진행 이벤트를 출력해. `SMART_PROGRESS_API_KEY`가 있으면 LLM 요약기가 묶음당 한 문장으로 정리.
54
+ - **푸시 알림 핸드오프** — `NOTIFY_PROVIDER=ntfy|pushover` + `NOTIFY_MIN_TASK_MS` 조건 충족 시 긴 작업이 끝나고 음성채널이 비어 있으면 푸시. body + `NOTIFY_DEBOUNCE_MS`로 debounce.
55
+ - **채널별 상태** — 디스코드 음성 채널마다 별도의 라우팅·플랜 상태·발화 링 버퍼.
56
+ - **프로젝트 세션** — `!session new <name> <workdir>`로 채널과 프로젝트를 묶음. (하니스, 세션)별 어댑터는 캐시되고 rebind 시 무효화.
57
+
58
+ 설치 경로, 인증, 함정은 하니스별 문서 참고. env 변수 전체 레퍼런스는 `docs/CONFIGURATION.ko.md`.
@@ -0,0 +1,58 @@
1
+ # Harness-ы для кодинг-агентов
2
+
3
+ <p align="center">
4
+ <a href="../../README.ru.md">README</a> ·
5
+ <a href="README.ru.md">Хаб документации</a> ·
6
+ <a href="USAGE.ru.md">Использование</a> ·
7
+ <a href="CONFIGURATION.ru.md">Настройка</a> ·
8
+ <a href="TROUBLESHOOTING.ru.md">Решение проблем</a>
9
+ </p>
10
+
11
+ VerbalCoding не привязан к конкретному агенту: он вызывает установленный CLI кодинг-агент один раз на voice turn, передаёт STT-расшифровку как prompt и проигрывает ответ голосом. Выберите **один** агент по умолчанию; голосовая маршрутизация позволит дотянуться до остальных в течение сессии.
12
+
13
+ | Harness | Команда по умолчанию | Возобновление сессии | Документ |
14
+ |---|---|---|---|
15
+ | Hermes Agent | `hermes chat -Q -q` | ✅ (`--resume <id>`) | [HERMES_VOICE.ru.md](./HERMES_VOICE.ru.md) · [HARNESS_HERMES.ru.md](./HARNESS_HERMES.ru.md) |
16
+ | Claude Code | `claude -p` | ❌ | [HARNESS_CLAUDE.ru.md](./HARNESS_CLAUDE.ru.md) |
17
+ | Codex | `codex exec` | ❌ (захват последнего сообщения в файл) | [HARNESS_CODEX.ru.md](./HARNESS_CODEX.ru.md) |
18
+ | Gemini CLI | `gemini -p` | ❌ | [HARNESS_GEMINI.ru.md](./HARNESS_GEMINI.ru.md) |
19
+ | OpenCode | `opencode run` | ❌ | [HARNESS_OPENCODE.ru.md](./HARNESS_OPENCODE.ru.md) |
20
+ | OpenClaw | `openclaw run` | ❌ | [HARNESS_OPENCLAW.ru.md](./HARNESS_OPENCLAW.ru.md) |
21
+ | Aider | `aider --no-pretty --yes-always --message` | ❌ | [HARNESS_AIDER.ru.md](./HARNESS_AIDER.ru.md) |
22
+ | Cursor CLI | `cursor-agent --print --prompt` | ❌ | [HARNESS_CURSOR.ru.md](./HARNESS_CURSOR.ru.md) |
23
+
24
+ ## Выбор агента по умолчанию
25
+
26
+ `vc setup` автоматически находит установленные бинарники и предлагает выбор. Без интерактива:
27
+
28
+ ```bash
29
+ # .env или instance .env
30
+ AGENT_BACKEND=claude # hermes | claude | codex | gemini | opencode | openclaw | aider | cursor | custom
31
+ ```
32
+
33
+ Каждый harness читает свою команду из одноимённой env (`HERMES_COMMAND`, `CLAUDE_COMMAND` и т. д.). Общие env (`AGENT_LABEL`, `AGENT_COMMAND`, `AGENT_SESSION_FILE`, `AGENT_WORKDIR`, `AGENT_PROJECT_CONTEXT`, `AGENT_TASK_TIMEOUT_MS`, `AGENT_CHAT_TIMEOUT_MS`, `AGENT_VERBOSE_PROGRESS`) перекрывают значения по умолчанию.
34
+
35
+ ## Голосовая маршрутизация между harness
36
+
37
+ После настройки можно дотянуться до любого **установленного** harness без перезапуска:
38
+
39
+ - `"ask Codex what it thinks"` — маршрут на один turn, следующий turn возвращается к умолчанию.
40
+ - `"switch to Aider"` — sticky-маршрут до `"back to default"`.
41
+ - Слот `which_agent` в plan-mode — агент сам предлагает, какой backend выполнит план.
42
+
43
+ Маршрутизатор проверяет наличие бинарника в `PATH` (относительные пути резолвятся относительно workdir активной проектной сессии). Если не установлено — мост спрашивает `"Использовать агент по умолчанию?"` — ответьте `"yes"` для fallback или `"no"` для отмены.
44
+
45
+ Распознаваемые алиасы: `claude` / `claude code`, `codex`, `gemini` / `gemini cli`, `opencode`, `openclaw`, `aider`, `cursor` / `cursor cli`, `hermes`.
46
+
47
+ ## Общая семантика
48
+
49
+ Все адаптеры соблюдают:
50
+
51
+ - **Голосовой plan-mode** — `"plan it first"` озвучивает план, голосом правим, `"approve"` запускает на выбранном harness.
52
+ - **Barge-in** — прерывание срезает текущий TTS и abort задачу агента. Sticky-маршрут переживает прерывания; сбрасываются только маршруты на один turn.
53
+ - **Подробный прогресс** — `AGENT_VERBOSE_PROGRESS=1` выводит события прогресса. С `SMART_PROGRESS_API_KEY` LLM-сводщик собирает их в одну фразу на батч.
54
+ - **Push-уведомления** — `NOTIFY_PROVIDER=ntfy|pushover` + `NOTIFY_MIN_TASK_MS` отправляет push, когда длинная задача завершается и голосовой канал пуст. Debounce по телу + `NOTIFY_DEBOUNCE_MS`.
55
+ - **Состояние на канал** — каждый голосовой канал Discord ведёт свою маршрутизацию, состояние плана и буфер последних реплик.
56
+ - **Проектные сессии** — `!session new <name> <workdir>` привязывает канал к проекту; (harness, session) адаптеры кэшируются и инвалидируются при rebind.
57
+
58
+ Детали установки, авторизации и подводные камни — в документах по каждому harness. Полная справка по env: `docs/CONFIGURATION.ru.md`.
@@ -0,0 +1,58 @@
1
+ # 编码代理 Harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.zh.md">README</a> ·
5
+ <a href="README.zh.md">文档中心</a> ·
6
+ <a href="USAGE.zh.md">使用</a> ·
7
+ <a href="CONFIGURATION.zh.md">配置</a> ·
8
+ <a href="TROUBLESHOOTING.zh.md">排错</a>
9
+ </p>
10
+
11
+ VerbalCoding 与代理无关。它会驱动你安装的任意 CLI 编码代理:每次语音 turn 启动它一次,把 STT 后的发言作为 prompt 传入,再把回答念回来。选**一个**作为默认,跨代理语音路由让你临时切换到其它代理。
12
+
13
+ | Harness | 默认命令 | 会话续接 | Harness 专用文档 |
14
+ |---|---|---|---|
15
+ | Hermes Agent | `hermes chat -Q -q` | ✅ (`--resume <id>`) | [HERMES_VOICE.zh.md](./HERMES_VOICE.zh.md) · [HARNESS_HERMES.zh.md](./HARNESS_HERMES.zh.md) |
16
+ | Claude Code | `claude -p` | ❌ | [HARNESS_CLAUDE.zh.md](./HARNESS_CLAUDE.zh.md) |
17
+ | Codex | `codex exec` | ❌ (末条消息文件抓取) | [HARNESS_CODEX.zh.md](./HARNESS_CODEX.zh.md) |
18
+ | Gemini CLI | `gemini -p` | ❌ | [HARNESS_GEMINI.zh.md](./HARNESS_GEMINI.zh.md) |
19
+ | OpenCode | `opencode run` | ❌ | [HARNESS_OPENCODE.zh.md](./HARNESS_OPENCODE.zh.md) |
20
+ | OpenClaw | `openclaw run` | ❌ | [HARNESS_OPENCLAW.zh.md](./HARNESS_OPENCLAW.zh.md) |
21
+ | Aider | `aider --no-pretty --yes-always --message` | ❌ | [HARNESS_AIDER.zh.md](./HARNESS_AIDER.zh.md) |
22
+ | Cursor CLI | `cursor-agent --print --prompt` | ❌ | [HARNESS_CURSOR.zh.md](./HARNESS_CURSOR.zh.md) |
23
+
24
+ ## 选择默认代理
25
+
26
+ `vc setup` 会自动检测已安装的二进制并让你选择。非交互方式:
27
+
28
+ ```bash
29
+ # .env 或 instance .env
30
+ AGENT_BACKEND=claude # hermes | claude | codex | gemini | opencode | openclaw | aider | cursor | custom
31
+ ```
32
+
33
+ 每个 harness 从对应同名 env (`HERMES_COMMAND`、`CLAUDE_COMMAND` 等) 读取自己的命令。共享 env (`AGENT_LABEL`、`AGENT_COMMAND`、`AGENT_SESSION_FILE`、`AGENT_WORKDIR`、`AGENT_PROJECT_CONTEXT`、`AGENT_TASK_TIMEOUT_MS`、`AGENT_CHAT_TIMEOUT_MS`、`AGENT_VERBOSE_PROGRESS`) 会覆盖各 harness 默认值。
34
+
35
+ ## 通过语音在 harness 之间路由
36
+
37
+ 配置好后无需重启即可路由到任意**已安装**的 harness:
38
+
39
+ - `"ask Codex what it thinks"` — 单 turn 路由,下一个 turn 自动回默认。
40
+ - `"switch to Aider"` — 粘性路由,直到说 `"back to default"`。
41
+ - 计划模式 `which_agent` 槽 — 代理自身建议下一个计划由哪个后端执行。
42
+
43
+ 路由层会检测二进制是否在 `PATH` (相对路径按活动项目会话的 workdir 解析);若未安装,bridge 会问 `"用默认代理代替进行?"` — 回答 `"yes"` 转默认,`"no"` 取消。
44
+
45
+ 解析器识别的别名: `claude` / `claude code`、`codex` / `科德克斯`、`gemini` / `gemini cli`、`opencode`、`openclaw`、`aider`、`cursor` / `cursor cli`、`hermes`。
46
+
47
+ ## 共享语义
48
+
49
+ 所有 harness 适配器一致遵守的:
50
+
51
+ - **语音计划模式** — `"plan it first"` 生成计划,语音编辑,`"approve"` 用选定的 harness 执行。
52
+ - **打断** — barge-in 立即切断当前 TTS 并 abort 代理任务。粘性路由在打断后保留,只清除单 turn 路由。
53
+ - **详细进度** — `AGENT_VERBOSE_PROGRESS=1` (或语音命令) 输出 harness 发出的进度事件。配置 `SMART_PROGRESS_API_KEY` 后,LLM 摘要器每批合成一句。
54
+ - **推送通知** — `NOTIFY_PROVIDER=ntfy|pushover` + `NOTIFY_MIN_TASK_MS` 条件成立且语音频道为空时推送。按 body + `NOTIFY_DEBOUNCE_MS` 去抖。
55
+ - **按频道状态** — 每个 Discord 语音频道单独维护路由、计划状态、发言环形缓冲。
56
+ - **项目会话** — `!session new <name> <workdir>` 将频道绑定到项目。(harness, session) 适配器缓存,rebind 时失效。
57
+
58
+ 各 harness 安装路径、认证、坑请见各自文档。env 完整参考: `docs/CONFIGURATION.zh.md`。
@@ -0,0 +1,48 @@
1
+ # Aider — Notas del Harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.es.md">README</a> ·
5
+ <a href="HARNESSES.es.md">Harnesses</a> ·
6
+ <a href="USAGE.es.md">Uso</a> ·
7
+ <a href="CONFIGURATION.es.md">Configuración</a>
8
+ </p>
9
+
10
+ Aider es un CLI de pair-programming centrado en edits directos. VerbalCoding lo invoca con `aider --no-pretty --yes-always --message`, pasando el prompt como valor de `--message`. Cada turno de voz se vuelve una corrida no interactiva de Aider que puede modificar archivos en `AGENT_WORKDIR`.
11
+
12
+ ## Instalación
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ aider --no-pretty --yes-always --message "list the top-level files"
18
+ ```
19
+
20
+ Aider necesita una API key para el modelo elegido (OpenAI / Anthropic / servidor local). Ver <https://aider.chat>.
21
+
22
+ ## Configuración
23
+
24
+ ```bash
25
+ # .env
26
+ AGENT_BACKEND=aider
27
+ AIDER_COMMAND="aider --no-pretty --yes-always --message"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_PROJECT_CONTEXT="..."
30
+ AGENT_CHAT_TIMEOUT_MS=120000
31
+ AGENT_TASK_TIMEOUT_MS=0
32
+ ```
33
+
34
+ `--no-pretty` quita caracteres de caja de Rich. `--yes-always` mantiene la corrida no interactiva.
35
+
36
+ ## Frases de voz para cambiar a Aider
37
+
38
+ - en: `"switch to Aider"`, `"ask Aider to ..."`
39
+ - es: `"cambia a Aider"`, `"pásalo a Aider"`
40
+
41
+ Alias: `aider`.
42
+
43
+ ## Trampas
44
+
45
+ - **Aider edita ficheros.** A diferencia de Claude / Codex / Gemini bajo `-p`, Aider modifica el árbol de trabajo al responder. Ajusta `AGENT_WORKDIR` con cuidado.
46
+ - **Diffs en salida.** Si se interrumpe el turno, el puente no lee diffs; consulta el canal de texto y `git status`.
47
+ - **Auth.** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` deben estar en el entorno de Aider; suelen vivir en `instances/<project>.env`.
48
+ - **Estado por canal.** El enrutamiento es por canal de Discord; cambiar a Aider en una sala no afecta a las otras.
@@ -0,0 +1,48 @@
1
+ # Aider — Notes Harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.fr.md">README</a> ·
5
+ <a href="HARNESSES.fr.md">Harnesses</a> ·
6
+ <a href="USAGE.fr.md">Utilisation</a> ·
7
+ <a href="CONFIGURATION.fr.md">Configuration</a>
8
+ </p>
9
+
10
+ Aider est un CLI de pair-programming centré sur les edits directs. VerbalCoding l'invoque via `aider --no-pretty --yes-always --message`, en passant le prompt comme valeur de `--message`. Chaque tour vocal devient un run Aider non interactif susceptible de modifier des fichiers dans `AGENT_WORKDIR`.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ aider --no-pretty --yes-always --message "list the top-level files"
18
+ ```
19
+
20
+ Aider requiert la clé API du modèle utilisé (OpenAI / Anthropic / serveur local). Voir <https://aider.chat>.
21
+
22
+ ## Configuration
23
+
24
+ ```bash
25
+ # .env
26
+ AGENT_BACKEND=aider
27
+ AIDER_COMMAND="aider --no-pretty --yes-always --message"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_PROJECT_CONTEXT="..."
30
+ AGENT_CHAT_TIMEOUT_MS=120000
31
+ AGENT_TASK_TIMEOUT_MS=0
32
+ ```
33
+
34
+ `--no-pretty` retire les caractères de cadre Rich. `--yes-always` garde la run non interactive.
35
+
36
+ ## Phrases vocales pour basculer vers Aider
37
+
38
+ - en: `"switch to Aider"`, `"ask Aider to ..."`
39
+ - fr: `"passe à Aider"`
40
+
41
+ Alias : `aider`.
42
+
43
+ ## Pièges
44
+
45
+ - **Aider modifie les fichiers.** Contrairement à Claude/Codex/Gemini en `-p`, Aider touche directement à l'arbre de travail. `AGENT_WORKDIR` doit être bien choisi (généralement le `workdir` d'une session projet).
46
+ - **Diffs dans la sortie.** Si le tour est interrompu, le bridge ne lit pas le diff — utilisez le canal texte et `git status`.
47
+ - **Auth.** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` doivent être dans l'env d'Aider ; en isolation, mettez-les dans `instances/<project>.env`.
48
+ - **État par canal.** Le routage inter-agents est par canal Discord ; passer à Aider dans un salon n'affecte pas les autres.
@@ -0,0 +1,50 @@
1
+ # Aider — ハーネスノート
2
+
3
+ <p align="center">
4
+ <a href="../../README.ja.md">README</a> ·
5
+ <a href="HARNESSES.ja.md">ハーネス</a> ·
6
+ <a href="USAGE.ja.md">使い方</a> ·
7
+ <a href="CONFIGURATION.ja.md">設定</a>
8
+ </p>
9
+
10
+ Aider はファイルを直接編集するペアプログラミング AI CLI。VerbalCoding は `aider --no-pretty --yes-always --message` で呼び出し、prompt は `--message` 値として渡されます。音声ターン 1 つが `AGENT_WORKDIR` のファイルを直接書き換え得る非対話 Aider 実行 1 つになります。
11
+
12
+ ## インストール
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ # 単一メッセージ実行を確認:
18
+ aider --no-pretty --yes-always --message "list the top-level files"
19
+ ```
20
+
21
+ Aider は使用モデルの API キーが必要 (OpenAI / Anthropic / ローカルサーバ)。<https://aider.chat> 参照。
22
+
23
+ ## VerbalCoding 設定
24
+
25
+ ```bash
26
+ # .env
27
+ AGENT_BACKEND=aider
28
+ # 任意
29
+ AIDER_COMMAND="aider --no-pretty --yes-always --message" # 既定
30
+ AGENT_WORKDIR=/Users/you/code/your-project # Aider が編集するディレクトリ
31
+ AGENT_PROJECT_CONTEXT="..."
32
+ AGENT_CHAT_TIMEOUT_MS=120000 # Aider は時間がかかることが多い
33
+ AGENT_TASK_TIMEOUT_MS=0
34
+ ```
35
+
36
+ `--no-pretty` は Rich のボックス文字を抑え、ストリーム sentencer が詰まらないようにします。`--yes-always` は非対話実行を維持 (Aider が "この diff を適用?" で止まらない)。
37
+
38
+ ## Aider へ切り替える音声表現
39
+
40
+ - en: `"switch to Aider"`, `"ask Aider to ..."`
41
+ - ja: `"Aider に切り替えて"`, `"Aider に頼んで"`
42
+
43
+ エイリアス: `aider`。
44
+
45
+ ## 罠
46
+
47
+ - **Aider はファイルを編集します。** `-p` モードの Claude / Codex / Gemini と異なり、Aider は応答時にワーキングツリーを直接変更。`AGENT_WORKDIR` を慎重に指定 — 通常はプロジェクトセッションの `workdir`。
48
+ - **出力に diff。** Aider はしばしば diff 形式のテキストを出力。ターン中断時は "中断" 通知のみ発話し diff は読み上げません — テキストチャンネルと `git status` で確認。
49
+ - **認証。** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` を Aider の環境に。インスタンス分離は通常 `instances/<project>.env` を使用。
50
+ - **チャンネル別状態。** クロスエージェントルーティングは Discord チャンネル単位。あるプロジェクトルームで Aider に切り替えても他ルームには影響しません。
@@ -0,0 +1,50 @@
1
+ # Aider — 하니스 노트
2
+
3
+ <p align="center">
4
+ <a href="../../README.ko.md">README</a> ·
5
+ <a href="HARNESSES.ko.md">하니스</a> ·
6
+ <a href="USAGE.ko.md">사용법</a> ·
7
+ <a href="CONFIGURATION.ko.md">설정</a>
8
+ </p>
9
+
10
+ Aider는 직접 파일 수정에 집중한 페어 프로그래밍 AI CLI야. VerbalCoding은 `aider --no-pretty --yes-always --message`로 호출해 — prompt는 `--message` 값으로 들어가고, voice turn 하나가 `AGENT_WORKDIR`의 파일을 직접 수정할 수 있는 non-interactive Aider 실행 하나가 돼.
11
+
12
+ ## 설치
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ # 단일 메시지 실행 확인:
18
+ aider --no-pretty --yes-always --message "list the top-level files"
19
+ ```
20
+
21
+ Aider는 사용하는 모델용 API 키가 필요해 (OpenAI / Anthropic / 로컬 서버). <https://aider.chat> 참고.
22
+
23
+ ## VerbalCoding 설정
24
+
25
+ ```bash
26
+ # .env
27
+ AGENT_BACKEND=aider
28
+ # 선택
29
+ AIDER_COMMAND="aider --no-pretty --yes-always --message" # 기본값
30
+ AGENT_WORKDIR=/Users/you/code/your-project # Aider가 편집할 디렉터리
31
+ AGENT_PROJECT_CONTEXT="..."
32
+ AGENT_CHAT_TIMEOUT_MS=120000 # Aider는 더 오래 걸릴 수 있음
33
+ AGENT_TASK_TIMEOUT_MS=0
34
+ ```
35
+
36
+ `--no-pretty`는 Rich 박스 문자를 제거해서 스트림 sentencer가 안 막혀. `--yes-always`는 실행을 non-interactive로 유지 (Aider가 "이 diff 적용할까요?" 같은 대화 없이 진행).
37
+
38
+ ## Aider로 전환하는 음성 표현
39
+
40
+ - en: `"switch to Aider"`, `"ask Aider to ..."`
41
+ - ko: `"aider로 전환해줘"`, `"에이더로 전환"`
42
+
43
+ 매처가 받는 별칭: `aider`, `에이더`.
44
+
45
+ ## 함정
46
+
47
+ - **Aider는 파일을 수정해.** `-p` 모드의 Claude / Codex / Gemini와 달리 Aider는 답변하면서 작업 트리를 직접 바꿔. `AGENT_WORKDIR` 설정을 신중히 — 보통 프로젝트 세션의 `workdir`이 적당.
48
+ - **출력에 diff.** Aider는 diff 모양 텍스트를 자주 emit해. 턴이 interrupt되면 bridge는 "중단됨" 안내만 하고 diff는 음성으로 안 읽어 — 텍스트 채널과 `git status`로 확인해.
49
+ - **인증.** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY`가 Aider 환경에 있어야 해. 인스턴스 격리 설치는 보통 `instances/<project>.env` 사용.
50
+ - **채널별 상태.** 크로스 에이전트 라우팅은 디스코드 채널 기준이라, 한 프로젝트 룸에서 Aider로 전환해도 다른 룸엔 영향 없어.
@@ -0,0 +1,48 @@
1
+ # Aider — Заметки по harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.ru.md">README</a> ·
5
+ <a href="HARNESSES.ru.md">Harness-ы</a> ·
6
+ <a href="USAGE.ru.md">Использование</a> ·
7
+ <a href="CONFIGURATION.ru.md">Настройка</a>
8
+ </p>
9
+
10
+ Aider — CLI для парного программирования с прямыми правками. VerbalCoding вызывает его через `aider --no-pretty --yes-always --message`, передавая prompt значением `--message`. Каждый voice turn — это один не интерактивный запуск Aider, который может изменять файлы в `AGENT_WORKDIR`.
11
+
12
+ ## Установка
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ aider --no-pretty --yes-always --message "list the top-level files"
18
+ ```
19
+
20
+ Aider требует API-ключ выбранной модели (OpenAI / Anthropic / локальный сервер). См. <https://aider.chat>.
21
+
22
+ ## Настройка
23
+
24
+ ```bash
25
+ # .env
26
+ AGENT_BACKEND=aider
27
+ AIDER_COMMAND="aider --no-pretty --yes-always --message"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_PROJECT_CONTEXT="..."
30
+ AGENT_CHAT_TIMEOUT_MS=120000
31
+ AGENT_TASK_TIMEOUT_MS=0
32
+ ```
33
+
34
+ `--no-pretty` убирает рамки Rich, чтобы sentencer не подвисал. `--yes-always` держит запуск не интерактивным.
35
+
36
+ ## Голосовые фразы для переключения на Aider
37
+
38
+ - en: `"switch to Aider"`, `"ask Aider to ..."`
39
+ - ru: `"переключись на Aider"`
40
+
41
+ Алиасы: `aider`.
42
+
43
+ ## Подводные камни
44
+
45
+ - **Aider правит файлы.** В отличие от Claude/Codex/Gemini в `-p`, Aider трогает рабочее дерево в момент ответа. Аккуратно выбирайте `AGENT_WORKDIR` (обычно — `workdir` проектной сессии).
46
+ - **Diff в выводе.** При прерывании turn-а мост не зачитывает diff; смотрите текстовый канал и `git status`.
47
+ - **Auth.** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` должны быть в env Aider; обычно — в `instances/<project>.env`.
48
+ - **Состояние на канал.** Маршрутизация cross-agent — на канал Discord; переключение на Aider в одной комнате не влияет на другие.
@@ -0,0 +1,48 @@
1
+ # Aider — Harness 说明
2
+
3
+ <p align="center">
4
+ <a href="../../README.zh.md">README</a> ·
5
+ <a href="HARNESSES.zh.md">Harness</a> ·
6
+ <a href="USAGE.zh.md">使用</a> ·
7
+ <a href="CONFIGURATION.zh.md">配置</a>
8
+ </p>
9
+
10
+ Aider 是专注于直接编辑文件的结对编程 AI CLI。VerbalCoding 通过 `aider --no-pretty --yes-always --message` 驱动 — prompt 作为 `--message` 的值传入,每个语音 turn 都是一次可能直接修改 `AGENT_WORKDIR` 中文件的非交互 Aider 运行。
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ pip install aider-chat
16
+ aider --version
17
+ aider --no-pretty --yes-always --message "list the top-level files"
18
+ ```
19
+
20
+ Aider 需要所用模型对应的 API key (OpenAI / Anthropic / 本地服务器)。详见 <https://aider.chat>。
21
+
22
+ ## VerbalCoding 配置
23
+
24
+ ```bash
25
+ # .env
26
+ AGENT_BACKEND=aider
27
+ AIDER_COMMAND="aider --no-pretty --yes-always --message" # 默认
28
+ AGENT_WORKDIR=/Users/you/code/your-project # Aider 编辑的目录
29
+ AGENT_PROJECT_CONTEXT="..."
30
+ AGENT_CHAT_TIMEOUT_MS=120000 # Aider 通常更久
31
+ AGENT_TASK_TIMEOUT_MS=0
32
+ ```
33
+
34
+ `--no-pretty` 去掉 Rich 框字符以免卡住流式 sentencer。`--yes-always` 保持非交互 (Aider 不再因 "应用此 diff?" 提示停下)。
35
+
36
+ ## 切到 Aider 的语音表述
37
+
38
+ - en: `"switch to Aider"`、`"ask Aider to ..."`
39
+ - zh: `"切到 Aider"`、`"让 Aider 处理"`
40
+
41
+ 别名: `aider`。
42
+
43
+ ## 坑
44
+
45
+ - **Aider 会改文件。** 与 `-p` 模式下的 Claude / Codex / Gemini 不同,Aider 在回答时直接修改工作树。慎选 `AGENT_WORKDIR` — 通常用项目会话的 `workdir`。
46
+ - **输出含 diff。** Aider 经常输出 diff 形态文本。turn 被中断时 bridge 只播报 "已中断",不朗读 diff — 用文本频道与 `git status` 确认。
47
+ - **认证。** `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` 必须在 Aider 环境中;实例隔离常用 `instances/<project>.env`。
48
+ - **按频道状态。** 跨代理路由按 Discord 频道隔离,在某个项目房间切到 Aider 不影响其它房间。
@@ -0,0 +1,55 @@
1
+ # Claude Code — Notas del Harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.es.md">README</a> ·
5
+ <a href="HARNESSES.es.md">Harnesses</a> ·
6
+ <a href="USAGE.es.md">Uso</a> ·
7
+ <a href="CONFIGURATION.es.md">Configuración</a>
8
+ </p>
9
+
10
+ Claude Code es el agente de codificación oficial de Anthropic en terminal. VerbalCoding lo invoca con `claude -p`: cada turno de voz es una invocación. `-p` no expone un contrato estable de reanudación entre llamadas, así que cada turno empieza con contexto fresco — usa `AGENT_PROJECT_CONTEXT` y el bloque de handoff entre agentes para mantener continuidad.
11
+
12
+ ## Instalación
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello"
18
+ ```
19
+
20
+ ## Configuración
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude
25
+ CLAUDE_COMMAND="claude -p"
26
+ AGENT_PROJECT_CONTEXT="Trabajando en el módulo de auth; decisiones previas: oauth=github."
27
+ AGENT_WORKDIR=/Users/you/code/your-project
28
+ AGENT_CHAT_TIMEOUT_MS=45000
29
+ AGENT_TASK_TIMEOUT_MS=0
30
+ AGENT_VERBOSE_PROGRESS=0
31
+ ```
32
+
33
+ `AGENT_SESSION_FILE` no se usa en este harness (Claude Code `-p` es stateless).
34
+
35
+ ## Lo que recibe Claude por turno
36
+
37
+ Cada turno el adaptador antepone: el preamble Discord (en/es según `VOICE_LANGUAGE`), el contexto del proyecto, el contexto reciente del canal de texto y por último la transcripción. En un handoff entre agentes, también se incluye un bloque "Recent user voice" (hasta 4 elocuciones) y las decisiones de plan más recientes, para que Claude no parta de frío.
38
+
39
+ ## Progreso detallado
40
+
41
+ Claude Code no emite un stream estándar bajo `-p`. Con `AGENT_VERBOSE_PROGRESS=1` el adaptador extrae menciones de herramientas/archivos/web de stdout/stderr, pero más groseramente que Hermes.
42
+
43
+ ## Frases de voz para cambiar a Claude Code
44
+
45
+ - en: `"switch to Claude Code"`, `"ask Claude ..."`, `"let Claude finish this"`
46
+ - es: `"cambia a Claude"`, `"pregunta a Claude"`
47
+
48
+ El matcher acepta `claude` y `claude code`. El modo strict para enrutamiento puro exige coincidencia exacta.
49
+
50
+ ## Trampas
51
+
52
+ - **Sin reanudación de sesión.** Las sesiones largas dependen del bloque de handoff para arrastrar decisiones; dentro del mismo backend, pon `AGENT_PROJECT_CONTEXT` con un resumen corto.
53
+ - **Comandos entrecomillados.** Si `CLAUDE_COMMAND` tiene una ruta absoluta con espacios (p. ej. `"/Applications/Claude Code/claude" -p`), la sonda de instalación usa `shellSplit` y respeta las comillas.
54
+ - **Refresco de auth.** La caducidad de `claude login` se ve como salida no cero; el puente reporta el fallo y, si no era el backend por defecto, ofrece fallback.
55
+ - **Salida tipo patch.** Si se interrumpe el turno mientras Claude devuelve un diff, el puente no lee el diff en voz alta; dice "interrumpido; revisa el canal de texto".
@@ -0,0 +1,55 @@
1
+ # Claude Code — Notes Harness
2
+
3
+ <p align="center">
4
+ <a href="../../README.fr.md">README</a> ·
5
+ <a href="HARNESSES.fr.md">Harnesses</a> ·
6
+ <a href="USAGE.fr.md">Utilisation</a> ·
7
+ <a href="CONFIGURATION.fr.md">Configuration</a>
8
+ </p>
9
+
10
+ Claude Code est l'agent de codage de terminal officiel d'Anthropic. VerbalCoding l'invoque via `claude -p` : un tour vocal = une invocation. `-p` n'expose pas de contrat stable de reprise — chaque tour repart sur un contexte vierge. Utilisez `AGENT_PROJECT_CONTEXT` et le bloc de handoff inter-agents pour la continuité.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello"
18
+ ```
19
+
20
+ ## Configuration
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude
25
+ CLAUDE_COMMAND="claude -p"
26
+ AGENT_PROJECT_CONTEXT="Module auth en cours ; décisions : oauth=github."
27
+ AGENT_WORKDIR=/Users/you/code/your-project
28
+ AGENT_CHAT_TIMEOUT_MS=45000
29
+ AGENT_TASK_TIMEOUT_MS=0
30
+ AGENT_VERBOSE_PROGRESS=0
31
+ ```
32
+
33
+ `AGENT_SESSION_FILE` n'est pas utilisé pour ce harness (Claude `-p` est stateless).
34
+
35
+ ## Ce que reçoit Claude par tour
36
+
37
+ À chaque tour, l'adaptateur préfixe : préambule Discord (en/fr selon `VOICE_LANGUAGE`), contexte projet, contexte texte récent, puis la transcription. Lors d'un handoff inter-agents, on ajoute une ligne "Recent user voice" (jusqu'à 4 énoncés) et les décisions de plan résolues les plus récentes, pour éviter le démarrage à froid.
38
+
39
+ ## Progression verbeuse
40
+
41
+ Claude Code n'émet pas de stream standard via `-p`. Avec `AGENT_VERBOSE_PROGRESS=1`, l'adaptateur extrait les mentions d'outils/fichiers/web de stdout/stderr — granularité plus grossière qu'Hermes.
42
+
43
+ ## Phrases vocales pour basculer vers Claude Code
44
+
45
+ - en: `"switch to Claude Code"`, `"ask Claude ..."`, `"let Claude finish this"`
46
+ - fr: `"passe à Claude"`, `"demande à Claude"`
47
+
48
+ Le matcher accepte `claude` et `claude code`. Le mode strict du routage exige une correspondance exacte.
49
+
50
+ ## Pièges
51
+
52
+ - **Pas de reprise.** Les sessions longues s'appuient sur le bloc de handoff ; à l'intérieur d'un même backend, fournissez un résumé via `AGENT_PROJECT_CONTEXT`.
53
+ - **Chemins entre guillemets.** Si `CLAUDE_COMMAND` contient un chemin absolu avec espaces (ex. `"/Applications/Claude Code/claude" -p`), la sonde d'installation utilise `shellSplit` et respecte les guillemets.
54
+ - **Expiration d'auth.** L'expiration `claude login` ressort en exit non-nul ; le bridge signale et propose un fallback si Claude n'était pas le défaut.
55
+ - **Sortie type patch.** Si Claude est interrompu en plein diff, le bridge ne lit pas le diff — il annonce "interrompu, vérifiez le canal texte".