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,56 @@
1
+ # Claude Code — ハーネスノート
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
+ Claude Code は Anthropic 公式のターミナル常駐コーディングエージェントです。VerbalCoding は `claude -p` で呼び出し、音声ターン 1 つにつき 1 invocation。`-p` は呼び出し間の安定なセッション再開契約を持たないため毎回新規コンテキスト — 連続性は `AGENT_PROJECT_CONTEXT` とクロスエージェントハンドオフブロックで維持してください。
11
+
12
+ ## インストール
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello" # 応答確認
18
+ ```
19
+
20
+ ## VerbalCoding 設定
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude # 'claude-code' エイリアスも可
25
+ # 任意
26
+ CLAUDE_COMMAND="claude -p" # 既定。--model, --debug 追加可
27
+ AGENT_PROJECT_CONTEXT="auth モジュール作業中。既決定: oauth=github。"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ AGENT_VERBOSE_PROGRESS=0
32
+ ```
33
+
34
+ `AGENT_SESSION_FILE` は既定 `<repo>/.agent-sessions/claude` ですが、このハーネスでは**未使用** — Claude Code の `-p` は stateless。設定したままでも no-op。
35
+
36
+ ## 各ターン Claude が受け取るもの
37
+
38
+ 各ターン、アダプタは Discord 音声対応の preamble (`VOICE_LANGUAGE` に応じ英語または日本語)、プロジェクトコンテキスト、最近の Discord テキストコンテキスト、最後に STT 結果を順に prepend します。クロスエージェントハンドオフ時 (前ターンが `"ask Codex ..."` で今回が初復帰など) は "最近のユーザー音声" 行 (最大 4 件) と直近解決済みプラン決定も含み、Claude が cold start しないようにします。
39
+
40
+ ## 詳細進捗
41
+
42
+ Claude Code は `-p` で標準 progress stream を emit しません。`AGENT_VERBOSE_PROGRESS=1` 時はアダプタが stdout/stderr のツール/ファイル/Web 言及をキーワードで拾いますが、Hermes より粗い情報量。
43
+
44
+ ## Claude Code へ切り替える音声表現
45
+
46
+ - en: `"switch to Claude Code"`, `"ask Claude ..."`, `"let Claude finish this"`
47
+ - ja: `"Claude に切り替えて"`, `"Claude に聞いて"`
48
+
49
+ マッチャは `claude` と `claude code` 双方をエイリアスとして受けます。ルーティング専用発話で使う strict モードは完全一致のみ。
50
+
51
+ ## 罠
52
+
53
+ - **セッション再開なし。** 長期ペアプロは、クロスエージェントハンドオフコンテキストブロックに依存して決定を引き継ぎます。バックエンド切替時は自動付与、同一バックエンド内では `AGENT_PROJECT_CONTEXT` に要約を入れておく。
54
+ - **引用付きコマンドパス。** `CLAUDE_COMMAND` に空白を含む絶対パス (例: `"/Applications/Claude Code/claude" -p`) がある場合、VerbalCoding のインストール検査は `shellSplit` を使い引用符を正しく扱います。
55
+ - **認証更新。** `claude login` トークン失効は非零 exit。bridge が失敗を報告し、既定でなければ fallback プロンプトで既定エージェントへの retry を提案。
56
+ - **patch 形式出力。** Claude が diff 返却中に turn が割り込まれた場合、bridge は diff を読み上げず "中断: テキストチャンネルでファイルとテスト状況を確認してください" のみ発話。
@@ -0,0 +1,56 @@
1
+ # Claude Code — 하니스 노트
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
+ Claude Code는 Anthropic의 공식 터미널 코딩 에이전트야. VerbalCoding은 `claude -p`로 호출하고, voice turn 하나가 invocation 한 번. `-p`는 호출 간 세션 재개 계약이 없어서 매번 fresh context — 연속성을 유지하려면 `AGENT_PROJECT_CONTEXT`와 크로스 에이전트 핸드오프 블록을 활용해.
11
+
12
+ ## 설치
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello" # 응답 오는지 확인
18
+ ```
19
+
20
+ ## VerbalCoding 설정
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude # 'claude-code' 별칭도 허용
25
+ # 선택
26
+ CLAUDE_COMMAND="claude -p" # 기본값. --model, --debug 같은 플래그 추가 가능
27
+ AGENT_PROJECT_CONTEXT="auth 모듈 작업 중; 이전 결정: oauth=github."
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ AGENT_VERBOSE_PROGRESS=0
32
+ ```
33
+
34
+ `AGENT_SESSION_FILE`은 기본 `<repo>/.agent-sessions/claude`이지만 이 하니스에서는 **사용되지 않아** — Claude Code의 `-p`는 stateless. 그대로 둬도 no-op.
35
+
36
+ ## 매 턴 Claude가 받는 것
37
+
38
+ 매 턴 어댑터는 디스코드 음성 대응 preamble(`VOICE_LANGUAGE`에 따라 영어 또는 한국어), 프로젝트 컨텍스트, 최근 디스코드 텍스트 컨텍스트, 마지막으로 STT 결과를 순서대로 prepend해. 크로스 에이전트 핸드오프인 경우(예: 이전 턴에 `"코덱스한테 물어봐"`였고 이번 턴이 첫 복귀) "최근 사용자 음성" 라인(최대 4개)과 가장 최근 해결된 플랜 결정도 같이 붙어서 Claude가 cold start하지 않아.
39
+
40
+ ## 상세 진행
41
+
42
+ Claude Code는 `-p`에서 표준 progress stream을 emit하지 않아. `AGENT_VERBOSE_PROGRESS=1`을 켜면 어댑터가 stdout/stderr에서 tool/file/web 멘션을 키워드로 파싱하긴 하지만, Hermes보다 거친 진행 정보만 잡혀.
43
+
44
+ ## Claude Code로 전환하는 음성 표현
45
+
46
+ - en: `"switch to Claude Code"`, `"ask Claude ..."`, `"let Claude finish this"`
47
+ - ko: `"클로드로 전환"`, `"claude한테 물어봐"`
48
+
49
+ 매처는 `claude`와 `claude code` 둘 다 별칭으로 받아. 라우팅-온리 발화에서 쓰는 strict 모드는 정확히 일치해야 매치돼.
50
+
51
+ ## 함정
52
+
53
+ - **세션 재개 없음.** 긴 페어 프로그래밍 세션은 크로스 에이전트 핸드오프 컨텍스트 블록에 의존해서 결정사항을 이어가야 해. 백엔드 전환 시 자동으로 들어가고, 같은 백엔드 안에서는 `AGENT_PROJECT_CONTEXT`에 짧은 요약을 넣어둬.
54
+ - **인용된 명령 경로.** `CLAUDE_COMMAND`에 공백이 든 절대 경로가 있으면(예: `"/Applications/Claude Code/claude" -p`) VerbalCoding의 설치 검사가 `shellSplit`을 써서 따옴표를 올바르게 처리해.
55
+ - **인증 갱신.** `claude login` 토큰 만료는 non-zero exit로 surfacing돼. bridge가 실패를 보고하고, 기본 백엔드가 아니면 fallback 프롬프트가 기본 에이전트로 재시도를 제안.
56
+ - **Patch 형식 출력.** Claude가 diff를 반환 중에 턴이 interrupt되면 bridge는 diff를 음성으로 읽지 않고 `"에이전트 작업이 중단됐어. 파일 변경과 테스트 상태는 텍스트 채널을 확인해줘"`라고만 말해.
@@ -0,0 +1,55 @@
1
+ # Claude Code — Заметки по 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
+ Claude Code — официальный терминальный кодинг-агент Anthropic. VerbalCoding вызывает его через `claude -p`: один turn — один вызов. У `-p` нет стабильного контракта возобновления, поэтому каждый turn начинается с чистого контекста — используйте `AGENT_PROJECT_CONTEXT` и блок hand-off между агентами для непрерывности.
11
+
12
+ ## Установка
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello"
18
+ ```
19
+
20
+ ## Настройка
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude
25
+ CLAUDE_COMMAND="claude -p"
26
+ AGENT_PROJECT_CONTEXT="Работаем над auth-модулем; решения: 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` для этого harness не используется (Claude `-p` stateless).
34
+
35
+ ## Что получает Claude каждый turn
36
+
37
+ Каждый turn адаптер добавляет в начало: Discord-преамбулу (en/ru по `VOICE_LANGUAGE`), контекст проекта, недавний контекст текстового канала и саму расшифровку. При cross-agent handoff к этому добавляется блок "Recent user voice" (до 4 реплик) и последние резолвнутые решения плана, чтобы Claude не стартовал «вхолодную».
38
+
39
+ ## Подробный прогресс
40
+
41
+ Под `-p` Claude не выдаёт стандартный stream. С `AGENT_VERBOSE_PROGRESS=1` адаптер парсит из stdout/stderr упоминания инструментов/файлов/веба — грубее, чем Hermes.
42
+
43
+ ## Голосовые фразы для переключения на Claude Code
44
+
45
+ - en: `"switch to Claude Code"`, `"ask Claude ..."`, `"let Claude finish this"`
46
+ - ru: `"переключись на Claude"`, `"спроси Claude"`
47
+
48
+ Матчер принимает `claude` и `claude code`. Strict-режим маршрутизации требует точного совпадения.
49
+
50
+ ## Подводные камни
51
+
52
+ - **Нет возобновления.** Длинные сессии опираются на блок hand-off для переноса решений; внутри одного backend держите краткое резюме в `AGENT_PROJECT_CONTEXT`.
53
+ - **Кавычки в путях.** Если `CLAUDE_COMMAND` — абсолютный путь с пробелами (`"/Applications/Claude Code/claude" -p`), проверка установки использует `shellSplit` и обрабатывает кавычки корректно.
54
+ - **Истечение auth.** Просрочка `claude login` ловится как non-zero exit; мост сообщает и предлагает fallback, если Claude не был дефолтом.
55
+ - **Patch-вывод.** Если turn прерван во время diff, мост не зачитывает diff: говорит "прервано; проверьте текстовый канал".
@@ -0,0 +1,56 @@
1
+ # Claude Code — 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
+ Claude Code 是 Anthropic 官方的终端编码代理。VerbalCoding 通过 `claude -p` 驱动,每个语音 turn 一次调用。`-p` 没有稳定的跨调用会话续接,因此每次都是全新上下文 — 通过 `AGENT_PROJECT_CONTEXT` 和跨代理 handoff 块保持连续性。
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ npm install -g @anthropic-ai/claude-code
16
+ claude login
17
+ claude -p "hello" # 确认能回应
18
+ ```
19
+
20
+ ## VerbalCoding 配置
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=claude # 也接受 'claude-code' 别名
25
+ # 可选
26
+ CLAUDE_COMMAND="claude -p" # 默认,可加 --model、--debug
27
+ AGENT_PROJECT_CONTEXT="auth 模块工作中;既定:oauth=github。"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ AGENT_VERBOSE_PROGRESS=0
32
+ ```
33
+
34
+ `AGENT_SESSION_FILE` 默认 `<repo>/.agent-sessions/claude`,但此 harness **未使用** — Claude Code 的 `-p` 是无状态的。
35
+
36
+ ## 每个 turn Claude 收到的内容
37
+
38
+ 每个 turn,适配器按顺序前置: Discord 语音前言 (按 `VOICE_LANGUAGE` 英文或中文)、项目上下文、最近 Discord 文本上下文,最后是用户的 STT 发言。跨代理 handoff 时 (例如上 turn 说了 `"ask Codex ..."`),还会加入 "最近用户语音" 行 (最多 4 条) 和最近已解决的计划决定,避免 Claude 冷启。
39
+
40
+ ## 详细进度
41
+
42
+ Claude Code 在 `-p` 下不发出标准 progress stream。开启 `AGENT_VERBOSE_PROGRESS=1` 时,适配器会从 stdout/stderr 关键字解析工具/文件/网页提及,但粒度比 Hermes 粗。
43
+
44
+ ## 切到 Claude Code 的语音表述
45
+
46
+ - en: `"switch to Claude Code"`、`"ask Claude ..."`、`"let Claude finish this"`
47
+ - zh: `"切到 Claude"`、`"问 Claude"`
48
+
49
+ 匹配器接受 `claude` 和 `claude code`。路由专用发言使用 strict 模式,需精确匹配。
50
+
51
+ ## 坑
52
+
53
+ - **无会话续接。** 长配对编程依赖跨代理 handoff 上下文块来传递决定;同一后端内,设 `AGENT_PROJECT_CONTEXT` 为简短摘要。
54
+ - **带引号的命令路径。** 若 `CLAUDE_COMMAND` 含带空格的绝对路径 (如 `"/Applications/Claude Code/claude" -p`),VerbalCoding 的安装检测会用 `shellSplit` 正确处理引号。
55
+ - **认证刷新。** `claude login` 令牌失效会以非零退出;bridge 报告失败,如果不是默认后端,fallback 会建议改用默认代理。
56
+ - **patch 形输出。** 如果 Claude 在返回 diff 时被中断,bridge 不会朗读 diff,而是说 "代理被中断;请在文本频道确认文件与测试状态"。
@@ -0,0 +1,55 @@
1
+ # Codex — 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
+ Codex CLI es el agente de codificación de terminal de OpenAI. VerbalCoding lo invoca con `codex exec`. Como `codex exec` escribe el texto final del asistente a un fichero temporal cuando recibe `--output-last-message <path>`, el adaptador inserta ese flag automáticamente y lee la respuesta desde el fichero incluso si stdout está ruidoso.
11
+
12
+ ## Instalación
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # o OPENAI_API_KEY headless
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## Configuración
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ CODEX_COMMAND="codex exec"
26
+ AGENT_PROJECT_CONTEXT="Qué estamos haciendo, qué ya está decidido."
27
+ AGENT_WORKDIR=/Users/you/code/your-project
28
+ AGENT_CHAT_TIMEOUT_MS=45000
29
+ AGENT_TASK_TIMEOUT_MS=0
30
+ ```
31
+
32
+ `AGENT_SESSION_FILE` no se usa (Codex `exec` es stateless entre llamadas).
33
+
34
+ ## Captura de salida
35
+
36
+ El adaptador para Codex:
37
+
38
+ 1. Genera una ruta temporal `verbalcoding-codex-last-<pid>-<ts>.txt` en `os.tmpdir()`.
39
+ 2. Inserta `--output-last-message <path>` justo antes del argumento posicional final.
40
+ 3. Tras la ejecución, lee ese fichero como respuesta autoritativa (preferida sobre stdout).
41
+ 4. Borra el temporal.
42
+
43
+ Aunque Codex pinte tool-use en stdout, la respuesta hablada viene siempre del fichero capturado.
44
+
45
+ ## Frases de voz para cambiar a Codex
46
+
47
+ - en: `"switch to Codex"`, `"ask Codex what it thinks"`
48
+ - es: `"cambia a Codex"`, `"pregunta a Codex"`
49
+
50
+ ## Trampas
51
+
52
+ - **Tareas largas.** Pon `AGENT_TASK_TIMEOUT_MS=0` para generación que tarde minutos. El adaptador respeta `signal.aborted`, así que el barge-in corta limpio.
53
+ - **Sin reanudación.** Pasa contexto vía `AGENT_PROJECT_CONTEXT` y deja el bloque de handoff hacer el resto.
54
+ - **Seguridad ante patches.** Si el turno se interrumpe con Codex a medio diff, el puente no lee el diff: anuncia "interrumpido" y te manda al canal de texto.
55
+ - **Autenticación.** Un 401 sale como exit no cero; si no eras el backend por defecto, fallback ofrece el por defecto.
@@ -0,0 +1,55 @@
1
+ # Codex — 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
+ Codex CLI est l'agent terminal d'OpenAI. VerbalCoding l'invoque via `codex exec`. Comme `codex exec` écrit le texte final assistant dans un fichier temp si on lui passe `--output-last-message <path>`, l'adaptateur insère ce flag automatiquement et lit la réponse depuis le fichier même si stdout est bruyant.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # ou OPENAI_API_KEY headless
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## Configuration
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ CODEX_COMMAND="codex exec"
26
+ AGENT_PROJECT_CONTEXT="Ce qu'on fait, ce qui est déjà tranché."
27
+ AGENT_WORKDIR=/Users/you/code/your-project
28
+ AGENT_CHAT_TIMEOUT_MS=45000
29
+ AGENT_TASK_TIMEOUT_MS=0
30
+ ```
31
+
32
+ `AGENT_SESSION_FILE` est inutilisé (Codex `exec` est stateless).
33
+
34
+ ## Capture de sortie
35
+
36
+ Pour Codex, l'adaptateur :
37
+
38
+ 1. Génère `verbalcoding-codex-last-<pid>-<ts>.txt` dans `os.tmpdir()`.
39
+ 2. Insère `--output-last-message <path>` juste avant l'argument final.
40
+ 3. Après exécution, lit ce fichier comme réponse de référence (prioritaire sur stdout).
41
+ 4. Supprime le fichier temp.
42
+
43
+ Même si Codex pollue stdout, la voix joue toujours la réponse capturée.
44
+
45
+ ## Phrases vocales pour basculer vers Codex
46
+
47
+ - en: `"switch to Codex"`, `"ask Codex what it thinks"`
48
+ - fr: `"passe à Codex"`, `"demande à Codex"`
49
+
50
+ ## Pièges
51
+
52
+ - **Tâches longues.** Mettez `AGENT_TASK_TIMEOUT_MS=0` pour la génération sur plusieurs minutes ; `signal.aborted` est respecté, le barge-in coupe net.
53
+ - **Pas de reprise.** Continuité via `AGENT_PROJECT_CONTEXT` et bloc de handoff.
54
+ - **Sortie type patch.** En cas d'interruption durant un diff, on annonce "interrompu" sans lire le diff.
55
+ - **Auth.** Un 401 ressort en exit non-nul ; fallback vers le défaut si Codex n'était pas le défaut.
@@ -0,0 +1,56 @@
1
+ # Codex — ハーネスノート
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
+ Codex CLI は OpenAI のターミナルコーディングエージェント。VerbalCoding は `codex exec` で呼び出します。`codex exec` は `--output-last-message <path>` 付与時に最終応答を一時ファイルへ書くため、アダプタが自動でこのフラグを差し込み、stdout が騒がしくても確実にファイルから読み取ります。
11
+
12
+ ## インストール
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # ヘッドレスなら OPENAI_API_KEY
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## VerbalCoding 設定
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ # 任意
26
+ CODEX_COMMAND="codex exec" # 既定
27
+ AGENT_PROJECT_CONTEXT="作業内容と既決定事項。"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ ```
32
+
33
+ `AGENT_SESSION_FILE` は未使用 (Codex `exec` は呼び出し間 stateless)。
34
+
35
+ ## 出力キャプチャ
36
+
37
+ Codex 用にアダプタは:
38
+
39
+ 1. `os.tmpdir()` 配下に `verbalcoding-codex-last-<pid>-<ts>.txt` を作成。
40
+ 2. 最終 prompt 引数の直前に `--output-last-message <path>` を挿入。
41
+ 3. 実行後そのファイルを応答として読み取り (stdout より優先)。
42
+ 4. 一時ファイルを削除。
43
+
44
+ Codex が stdout にツール使用ログを出しても、音声化される答えは常にキャプチャ済ファイル基準。
45
+
46
+ ## Codex へ切り替える音声表現
47
+
48
+ - en: `"switch to Codex"`, `"ask Codex what it thinks"`
49
+ - ja: `"Codex に切り替えて"`, `"Codex に聞いて"`
50
+
51
+ ## 罠
52
+
53
+ - **長時間タスク。** 分単位のコード生成には `AGENT_TASK_TIMEOUT_MS=0`。アダプタが `signal.aborted` を尊重するので barge-in は綺麗に切れます。
54
+ - **セッション再開なし。** `AGENT_PROJECT_CONTEXT` で文脈を渡し、ルート変更後の連続性はクロスエージェントハンドオフブロックに任せる。
55
+ - **patch 出力安全策。** ターン中断時に Codex が diff 途中だった場合、bridge は diff を読み上げず "中断" 通知のみ、テキストチャンネル確認を促す。
56
+ - **認証。** OpenAI 401 は非零 exit。既定外なら fallback プロンプトが既定エージェントへの retry 提案。
@@ -0,0 +1,56 @@
1
+ # Codex — 하니스 노트
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
+ Codex CLI는 OpenAI의 터미널 코딩 에이전트. VerbalCoding은 `codex exec`로 호출해. `codex exec`는 `--output-last-message <path>`를 주면 최종 어시스턴트 텍스트를 임시 파일에 써주는데, 어댑터가 이 플래그를 자동으로 끼워 넣고 stdout이 시끄러워도 파일에서 답변을 읽어와.
11
+
12
+ ## 설치
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # 또는 헤드리스용으로 OPENAI_API_KEY 설정
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## VerbalCoding 설정
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ # 선택
26
+ CODEX_COMMAND="codex exec" # 기본값
27
+ AGENT_PROJECT_CONTEXT="작업 중인 내용과 이미 결정된 사항."
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ ```
32
+
33
+ `AGENT_SESSION_FILE`은 미사용 (Codex `exec`는 호출 간 stateless).
34
+
35
+ ## 출력 캡처
36
+
37
+ Codex 어댑터는:
38
+
39
+ 1. `os.tmpdir()` 아래 `verbalcoding-codex-last-<pid>-<ts>.txt` 같은 임시 경로를 만들고
40
+ 2. 최종 prompt 인자 바로 앞에 `--output-last-message <path>`를 끼우고
41
+ 3. 실행 후 그 파일을 정답 답변으로 읽고 (stdout보다 우선)
42
+ 4. 임시 파일을 지워.
43
+
44
+ Codex가 stdout에 tool-use chatter를 뿌려도 음성으로 나가는 답변은 항상 캡처된 파일 기준.
45
+
46
+ ## Codex로 전환하는 음성 표현
47
+
48
+ - en: `"switch to Codex"`, `"ask Codex what it thinks"`
49
+ - ko: `"코덱스로 전환"`, `"코덱스한테 물어봐"`
50
+
51
+ ## 함정
52
+
53
+ - **긴 작업.** 분 단위 코드 생성을 위해 `AGENT_TASK_TIMEOUT_MS=0` 설정 권장. 어댑터가 `signal.aborted`를 존중하므로 barge-in은 깨끗하게 끊겨.
54
+ - **세션 재개 없음.** `AGENT_PROJECT_CONTEXT`로 컨텍스트를 전달하고, 라우트 변경 후 연속성은 크로스 에이전트 핸드오프 블록에 맡겨.
55
+ - **Patch 형식 출력 안전장치.** 턴이 interrupt됐고 Codex가 diff 중이었으면 bridge는 diff를 음성으로 읽지 **않고** "중단됨" 안내만 한 다음 텍스트 채널 확인을 권유해.
56
+ - **인증.** OpenAI 백엔드의 401은 non-zero exit로 표면화. 기본 에이전트가 아니면 크로스 에이전트 fallback 프롬프트가 기본 에이전트로 재시도 제안.
@@ -0,0 +1,55 @@
1
+ # Codex — Заметки по 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
+ Codex CLI — терминальный кодинг-агент OpenAI. VerbalCoding вызывает его через `codex exec`. Поскольку `codex exec` пишет финальный текст ассистента во временный файл при `--output-last-message <path>`, адаптер вставляет этот флаг автоматически и читает ответ из файла, даже если stdout шумный.
11
+
12
+ ## Установка
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # либо OPENAI_API_KEY для headless
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## Настройка
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ CODEX_COMMAND="codex exec"
26
+ AGENT_PROJECT_CONTEXT="Что делаем, что уже решено."
27
+ AGENT_WORKDIR=/Users/you/code/your-project
28
+ AGENT_CHAT_TIMEOUT_MS=45000
29
+ AGENT_TASK_TIMEOUT_MS=0
30
+ ```
31
+
32
+ `AGENT_SESSION_FILE` не используется (Codex `exec` stateless).
33
+
34
+ ## Захват вывода
35
+
36
+ Для Codex адаптер:
37
+
38
+ 1. Создаёт временный путь `verbalcoding-codex-last-<pid>-<ts>.txt` в `os.tmpdir()`.
39
+ 2. Вставляет `--output-last-message <path>` прямо перед последним позиционным аргументом.
40
+ 3. После запуска читает этот файл как авторитетный ответ (приоритетнее stdout).
41
+ 4. Удаляет временный файл.
42
+
43
+ Даже если Codex льёт tool-use в stdout, в голос идёт ответ из захваченного файла.
44
+
45
+ ## Голосовые фразы для переключения на Codex
46
+
47
+ - en: `"switch to Codex"`, `"ask Codex what it thinks"`
48
+ - ru: `"переключись на Codex"`, `"спроси Codex"`
49
+
50
+ ## Подводные камни
51
+
52
+ - **Долгие задачи.** Ставьте `AGENT_TASK_TIMEOUT_MS=0` под кодогенерацию на минуты. `signal.aborted` уважается — barge-in режет чисто.
53
+ - **Нет возобновления.** Передавайте контекст через `AGENT_PROJECT_CONTEXT`, после смены маршрута — блок hand-off.
54
+ - **Защита от patch-вывода.** Если turn прерван во время diff, мост не зачитывает diff и отправляет в текстовый канал.
55
+ - **Авторизация.** 401 идёт как non-zero exit; fallback на дефолт, если Codex не был дефолтом.
@@ -0,0 +1,56 @@
1
+ # Codex — 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
+ Codex CLI 是 OpenAI 的终端编码代理。VerbalCoding 通过 `codex exec` 驱动。`codex exec` 在带 `--output-last-message <path>` 时会把最终助手文本写到临时文件,适配器会自动插入此标志,并从文件可靠读取答案,即便 stdout 嘈杂。
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ npm install -g @openai/codex
16
+ codex login # 或 headless 设 OPENAI_API_KEY
17
+ codex exec "hello"
18
+ ```
19
+
20
+ ## VerbalCoding 配置
21
+
22
+ ```bash
23
+ # .env
24
+ AGENT_BACKEND=codex
25
+ # 可选
26
+ CODEX_COMMAND="codex exec" # 默认
27
+ AGENT_PROJECT_CONTEXT="工作内容与已定事项。"
28
+ AGENT_WORKDIR=/Users/you/code/your-project
29
+ AGENT_CHAT_TIMEOUT_MS=45000
30
+ AGENT_TASK_TIMEOUT_MS=0
31
+ ```
32
+
33
+ `AGENT_SESSION_FILE` 未使用 (Codex `exec` 跨调用无状态)。
34
+
35
+ ## 输出抓取
36
+
37
+ 针对 Codex,适配器:
38
+
39
+ 1. 在 `os.tmpdir()` 下生成临时路径 `verbalcoding-codex-last-<pid>-<ts>.txt`。
40
+ 2. 在最终 prompt 实参前插入 `--output-last-message <path>`。
41
+ 3. 运行后读取该文件作为权威答案 (优先于 stdout)。
42
+ 4. 删除临时文件。
43
+
44
+ 即使 Codex 在 stdout 输出工具使用记录,语音回答仍来自抓取文件。
45
+
46
+ ## 切到 Codex 的语音表述
47
+
48
+ - en: `"switch to Codex"`、`"ask Codex what it thinks"`
49
+ - zh: `"切到 Codex"`、`"问 Codex"`
50
+
51
+ ## 坑
52
+
53
+ - **长任务。** 长达分钟级的代码生成需要 `AGENT_TASK_TIMEOUT_MS=0`。适配器尊重 `signal.aborted`,barge-in 切得干净。
54
+ - **无会话续接。** 用 `AGENT_PROJECT_CONTEXT` 传递上下文,路由变化后的连续性靠跨代理 handoff 块。
55
+ - **patch 输出安全。** 中断时若 Codex 正发 diff,bridge 不会朗读 diff,只播报 "已中断" 并提示查看文本频道。
56
+ - **认证。** OpenAI 后端 401 以非零退出;非默认后端时 fallback 提示改用默认代理。
@@ -0,0 +1,42 @@
1
+ # Cursor CLI — 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
+ Cursor CLI (`cursor-agent`) es el agente de terminal de Cursor. VerbalCoding lo invoca con `cursor-agent --print --prompt`, pasando la transcripción como valor de `--prompt`. `--print` mantiene la corrida no interactiva.
11
+
12
+ ## Instalación
13
+
14
+ ```bash
15
+ cursor-agent --print --prompt "hello"
16
+ ```
17
+
18
+ ## Configuración
19
+
20
+ ```bash
21
+ # .env
22
+ AGENT_BACKEND=cursor # alias 'cursor-cli' aceptado
23
+ CURSOR_COMMAND="cursor-agent --print --prompt"
24
+ AGENT_PROJECT_CONTEXT="..."
25
+ AGENT_WORKDIR=/Users/you/code/your-project
26
+ AGENT_CHAT_TIMEOUT_MS=45000
27
+ AGENT_TASK_TIMEOUT_MS=0
28
+ ```
29
+
30
+ ## Frases de voz para cambiar a Cursor
31
+
32
+ - en: `"switch to Cursor"`, `"switch to cursor cli"`, `"switch to cursor agent"`
33
+ - es: `"cambia a Cursor"`
34
+
35
+ Alias: `cursor`, `cursor cli`, `cursor-cli`, `cursor agent`, `cursor-agent`.
36
+
37
+ ## Trampas
38
+
39
+ - **Posición del prompt.** `--prompt` espera el valor a continuación; el constructor de argv coloca la transcripción al final, así que `CURSOR_COMMAND` debe terminar en `--prompt`.
40
+ - **Efectos colaterales del editor.** Cursor CLI puede tocar ficheros de estado en el cwd; aísla con `AGENT_WORKDIR`.
41
+ - **Sin reanudación.** `AGENT_PROJECT_CONTEXT` + bloque de handoff para continuidad.
42
+ - **Patch safety.** Si se interrumpe en medio de un diff, no se lee en voz.
@@ -0,0 +1,42 @@
1
+ # Cursor CLI — 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
+ Cursor CLI (`cursor-agent`) est l'agent terminal de Cursor. VerbalCoding l'invoque via `cursor-agent --print --prompt`, en passant la transcription comme valeur de `--prompt`. `--print` maintient le run non interactif.
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ cursor-agent --print --prompt "hello"
16
+ ```
17
+
18
+ ## Configuration
19
+
20
+ ```bash
21
+ # .env
22
+ AGENT_BACKEND=cursor # alias 'cursor-cli' accepté
23
+ CURSOR_COMMAND="cursor-agent --print --prompt"
24
+ AGENT_PROJECT_CONTEXT="..."
25
+ AGENT_WORKDIR=/Users/you/code/your-project
26
+ AGENT_CHAT_TIMEOUT_MS=45000
27
+ AGENT_TASK_TIMEOUT_MS=0
28
+ ```
29
+
30
+ ## Phrases vocales pour basculer vers Cursor
31
+
32
+ - en: `"switch to Cursor"`, `"switch to cursor cli"`, `"switch to cursor agent"`
33
+ - fr: `"passe à Cursor"`
34
+
35
+ Alias : `cursor`, `cursor cli`, `cursor-cli`, `cursor agent`, `cursor-agent`.
36
+
37
+ ## Pièges
38
+
39
+ - **Position du prompt.** `--prompt` attend la valeur juste après ; le builder argv place la transcription en dernier, donc `CURSOR_COMMAND` doit se terminer par `--prompt`.
40
+ - **Effets de bord éditeur.** Cursor CLI peut toucher des fichiers d'état dans le cwd ; isolez via `AGENT_WORKDIR`.
41
+ - **Pas de reprise.** `AGENT_PROJECT_CONTEXT` + bloc de handoff pour la continuité.
42
+ - **Patch safety.** Aucune lecture vocale du diff en cas d'interruption.