From 82bcc38c5e953093fffd97998a5189688082cd94 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Apr 2026 04:16:33 +0000 Subject: [PATCH 1/8] feat: add zh-HK cantonese Apple STT locale support Agent-Logs-Url: https://github.com/dr-data/claude-code-voice/sessions/5e20a66c-3c6f-4aa8-acc8-18be1d616635 Co-authored-by: dr-data <9060623+dr-data@users.noreply.github.com> --- CLAUDE.md | 2 +- README.md | 1 + scripts/server.swift | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 14e54a3..2620656 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,4 +20,4 @@ curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main ## Supported languages -en, he, es, fr, de, ja, ko, pt, it, ru, zh, ar, hi, tr, nl, pl, uk, el, cs, da, sv, no — and any other language Apple's SFSpeechRecognizer supports. +en, he, es, fr, de, ja, ko, pt, it, ru, zh, zh-hk, ar, hi, tr, nl, pl, uk, el, cs, da, sv, no — and any other language Apple's SFSpeechRecognizer supports. diff --git a/README.md b/README.md index d430585..edb5882 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Type `/config` in Claude Code to change the language. The voice server picks it | **Hebrew** | `he` | Apple STT | | **Arabic** | `ar` | Apple STT | | **Chinese** | `zh` | Apple STT | +| **Cantonese (Hong Kong)** | `zh-hk` | Apple STT | Any language supported by Apple's `SFSpeechRecognizer` works — the 20 natively supported languages are proxied to Anthropic's server for best quality. diff --git a/scripts/server.swift b/scripts/server.swift index 95a777c..8f65507 100644 --- a/scripts/server.swift +++ b/scripts/server.swift @@ -25,6 +25,7 @@ let localeMap: [String: String] = [ "it": "it-IT", "italian": "it-IT", "italiano": "it-IT", "ru": "ru-RU", "russian": "ru-RU", "русский": "ru-RU", "zh": "zh-CN", "chinese": "zh-CN", + "zh-hk": "zh-HK", "cantonese": "zh-HK", "粵語": "zh-HK", "广东话": "zh-HK", "ar": "ar-SA", "arabic": "ar-SA", "hi": "hi-IN", "hindi": "hi-IN", "id": "id-ID", "indonesian": "id-ID", From 736a54ecefaed14cb26a0fb9cd9b9ae3f0b49b0a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Apr 2026 04:35:56 +0000 Subject: [PATCH 2/8] Update README install URLs, token/local explanation, and ASCII diagram Agent-Logs-Url: https://github.com/dr-data/claude-code-voice/sessions/f84746a7-3030-4e9b-92dd-fa9162d46f43 Co-authored-by: dr-data <9060623+dr-data@users.noreply.github.com> --- README.md | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index edb5882..334c594 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ # Claude Code Voice (macOS) -Adds native on-device speech-to-text to Claude Code's `/voice` command using Apple's `SFSpeechRecognizer`. Natively supported languages proxy to Anthropic's server; unsupported languages (Hebrew, Arabic, etc.) transcribe locally via Apple STT. No API keys, no binary patching — survives Claude Code updates. +Adds native speech-to-text to Claude Code's `/voice` command using Apple's `SFSpeechRecognizer`. Claude-native languages are proxied to Anthropic's voice server, while unsupported languages (Hebrew, Arabic, etc.) are transcribed locally with Apple STT. No API keys, no binary patching — survives Claude Code updates. ## Quick install ```bash -curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main/setup.sh | bash +curl -fsSL https://raw.githubusercontent.com/dr-data/claude-code-voice/main/setup.sh | bash ``` ## Requirements @@ -70,6 +70,12 @@ Type `/config` in Claude Code to change the language. The voice server picks it Any language supported by Apple's `SFSpeechRecognizer` works — the 20 natively supported languages are proxied to Anthropic's server for best quality. +## Token usage and local processing + +- **Claude-native languages** (shown as `Anthropic` in the table): audio is proxied to Anthropic for transcription, so this path uses Claude's voice backend and may consume tokens/usage. +- **Apple STT languages** (shown as `Apple STT`): transcription is done on your Mac with `SFSpeechRecognizer`, so speech-to-text itself is local. +- In both cases, once text is inserted into Claude Code, your normal chat usage still applies. + ## How it works Claude Code has an undocumented `VOICE_STREAM_BASE_URL` env var that redirects its voice WebSocket. This project runs a native macOS app on `localhost:19876` that acts as a smart router: @@ -77,13 +83,18 @@ Claude Code has an undocumented `VOICE_STREAM_BASE_URL` env var that redirects i - **Native languages** (20) → proxied to Anthropic's voice server with OAuth token from Keychain - **Other languages** → transcribed locally via Apple's on-device `SFSpeechRecognizer` -``` - ┌─ native lang ──▶ Anthropic server -┌─────────────┐ audio │ (streaming STT) -│ Claude Code │──chunks──▶│ voice-server -│ /voice + ␣ │◀──text───│ -└─────────────┘ └─ other lang ──▶ Apple STT - (on-device) +```text +┌──────────────┐ audio chunks ┌──────────────┐ +│ Claude Code │ ────────────────────▶ │ voice-server │ +│ /voice + ␣ │ ◀──────────────────── │ (local) │ +└──────────────┘ transcript └──────┬───────┘ + │ + ┌─────────────┴─────────────┐ + │ │ + native Claude language other language + │ │ + ▼ ▼ + Anthropic voice STT Apple on-device STT ``` Everything is a single Swift binary — WebSocket server, proxy, and speech recognition combined. No external runtimes needed. @@ -91,7 +102,7 @@ Everything is a single Swift binary — WebSocket server, proxy, and speech reco ## Uninstall ```bash -curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main/uninstall.sh | bash +curl -fsSL https://raw.githubusercontent.com/dr-data/claude-code-voice/main/uninstall.sh | bash ``` ## Project structure From abf513f4c88569c23d657c57e8e8fa3d6342fe09 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:26:17 +0000 Subject: [PATCH 3/8] Plan: add supported languages to setup completion output Agent-Logs-Url: https://github.com/dr-data/claude-code-voice/sessions/d6d2558a-42b9-46cf-9919-ea0c1bb7d55e Co-authored-by: dr-data <9060623+dr-data@users.noreply.github.com> --- scripts/VoiceServer.app/Contents/Info.plist | 13 -- .../Contents/MacOS/voice-server | Bin 147872 -> 0 bytes .../Contents/_CodeSignature/CodeResources | 115 ------------------ 3 files changed, 128 deletions(-) delete mode 100644 scripts/VoiceServer.app/Contents/Info.plist delete mode 100755 scripts/VoiceServer.app/Contents/MacOS/voice-server delete mode 100644 scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources diff --git a/scripts/VoiceServer.app/Contents/Info.plist b/scripts/VoiceServer.app/Contents/Info.plist deleted file mode 100644 index fa283d8..0000000 --- a/scripts/VoiceServer.app/Contents/Info.plist +++ /dev/null @@ -1,13 +0,0 @@ - - - - CFBundleIdentifiercom.claude-code-voice - CFBundleNameClaudeCodeVoice - CFBundleExecutablevoice-server - CFBundleVersion1.0 - CFBundlePackageTypeAPPL - NSSpeechRecognitionUsageDescription - Voice transcription for Claude Code - NSMicrophoneUsageDescription - Audio input for speech recognition - diff --git a/scripts/VoiceServer.app/Contents/MacOS/voice-server b/scripts/VoiceServer.app/Contents/MacOS/voice-server deleted file mode 100755 index a55439158c0f3f7b309cdc4221ec5aeb633bd239..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147872 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
_NKC)z=t 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 LNWhUmZVCK9q31Bc diff --git a/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources b/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index d5d0fd7..0000000 --- a/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,115 +0,0 @@ - - - - - files - - files2 - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - From 7610def3a552fb3e7dcfbc1cefe1e43304072bec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:27:14 +0000 Subject: [PATCH 4/8] List supported language codes after install completion Agent-Logs-Url: https://github.com/dr-data/claude-code-voice/sessions/d6d2558a-42b9-46cf-9919-ea0c1bb7d55e Co-authored-by: dr-data <9060623+dr-data@users.noreply.github.com> --- scripts/VoiceServer.app/Contents/Info.plist | 13 ++ .../Contents/MacOS/voice-server | Bin 0 -> 147872 bytes .../Contents/_CodeSignature/CodeResources | 115 ++++++++++++++++++ setup.sh | 3 + 4 files changed, 131 insertions(+) create mode 100644 scripts/VoiceServer.app/Contents/Info.plist create mode 100755 scripts/VoiceServer.app/Contents/MacOS/voice-server create mode 100644 scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources diff --git a/scripts/VoiceServer.app/Contents/Info.plist b/scripts/VoiceServer.app/Contents/Info.plist new file mode 100644 index 0000000..fa283d8 --- /dev/null +++ b/scripts/VoiceServer.app/Contents/Info.plist @@ -0,0 +1,13 @@ + + + + CFBundleIdentifiercom.claude-code-voice + CFBundleNameClaudeCodeVoice + CFBundleExecutablevoice-server + CFBundleVersion1.0 + CFBundlePackageTypeAPPL + NSSpeechRecognitionUsageDescription + Voice transcription for Claude Code + NSMicrophoneUsageDescription + Audio input for speech recognition + diff --git a/scripts/VoiceServer.app/Contents/MacOS/voice-server b/scripts/VoiceServer.app/Contents/MacOS/voice-server new file mode 100755 index 0000000000000000000000000000000000000000..a55439158c0f3f7b309cdc4221ec5aeb633bd239 GIT binary patch literal 147872 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
_NKC)z=t zD6>}ra%HWCY(=5kD4pjYOr|jO2#r%L%)>nqy`62Zh)xF`M^#t#Q6ngw2l*NM1YC%Q zbc`q~F?h2jEL%9EBG|aA4#XnSz*>X1LIe#b+2$di zu*JZYET6ZqZi&{pq`gjStJi9q{GCm0t-g*WT31tBv#+yG)f#mT*V{P=3bh7Vs4o5T2g4UY%e1g{&ztf``qG>xaryu+K% znv*%}%@_y_6d}*u5q^3}p?%&(#Cr(4(U}`GQPqG5m_XU=e4Bp*)apzVB!_ ziAh+v&~~6d5@6~N6bNi-7!i`2J(r<$G%yej`U7lpn&KF}#p5yVV|=jZP-l-PrL6Vo zsk$f|*OPh+w9IgOARUPXpkj!);fz6^O{|^iIG&P<2h$c;j-yHX$4gM%slrb)o7^>{V@-UBoX zPc6?d`y!sNhHu-VE2|I07t0!-nIwDNus~Ce zWE}4m;w883r{JG9(63QVX#MCimoW!HD%4@9f!Se z_?`*FyC)VG*VcN5J@H42CtOkR&g7Z1r7BFIZFHS>SO^@q{AV3f3R8wqV(of<1_HOTqTSy@hX17;b*Ga9v^T+Cq1A^@1x3 zX1c2LN&hcL5)z}&AT%frWpD++QZVXb!pKH9O`WBh2hbF#LJK zn+QKlnAt~Q?(Y(2b`lu&K+Y^ZW-o!^K46yLrG&ph?#l@8BFyY6F#mrb%aOC-9x*pV-}OJCc>8hGx>Z#_%3p9UN6EI)(ijF5P&z7QXr`!vD48zL@ZY2H~C} zTn5bY`zYZi!aE6Tgm)1hr0{zQ-y-3i|n^{K+I_oA6Z3Gc3MYgv$tf2zPTV>`$`v*AZs+CK-N)Ftg*x zu&bHHhwokpR}hX9Udl1X8^RY8-bna1!kY*`PIxQf_X%$&>}e7C-$D37!aE7yKzKLd z2MF&a{AfBfORHX2RPD|A6qrgkK}Pld$_7k^U2e+X?R_d?Df23ExflZNmRU_yfY;4iVqv zJ4JomMtC~morF&&{4U`+glDTFd==rvglh?3K)99g=LvTZUeEAk%qRCy`Wy?pWUPNY zNcc8#FY09e6=e(IM#9?&Uq$!({PS{0wE#YZ|zeCtf_$9)# z2v1om;`b1)BwR(fhj2CFwZKgNjf8I|yq@qqgk4XI{Qi`}R}p@n;c1v(2%mbMz?%r4 z4LtRDG(5CE*8Y-&nZ09%zf5=?;kyYlJAcgm7lfIeV20l(dY3eW(ShtD+x3Ec?{o6nAyc+_)Wsh&K$$V8s#5$<{0)cd?MOE>_0NxO1KJk6dCRV zo(}hR!fPdb8^hB_l&$2xmGE}L4-(!%cqieVg!d5MO}KEGh;J|9QwYCIxP|aO!g0d; z39scC`yqtC4m@?bqPSs4k(Fl$xmOW>jxe*c$lU(~%>3^sd{}_x2Xce`Oy+(vVP;R0 z;Wmy(xLs$4hX_|6D%|fN+(`Hd!tI3LC%l;O^d3?EWrQ0D_Y)o@94EY)@G#+b2#*jx zA}Hd!f^Y@lb%f6&yq@rdgf|ktf$%26KPJ4D@GA^|9D3UnQQr3nPa}M6NVv};Tu#_S z_#DDjga-*%6TY5sBjNjir@GM|2^T`wN2~j637;q7uSobl34aV3#4R(u(3IANeg$QX4Un=4AC48lXw@CO&2_H4V z9{)lKe^$a!M5?&+WA4vG9N%r^_Ncf8qepiL&A?s_zek9Iouv! ztAsC;@PiV5L&C>mXtK(~FX0O%e7}VEN%)i_?C~v^@OlY9AmN`0j8cp1Z3!Q9B#+;8 zuaoc!312KQTCupkB;gw+e7l6dDKJJQaqW}b{~)=4T8!(a|EnbYq=f%2;ggT%*o?nc!krRcA>j)oe6@sc7T8RGo4{uN9+&X%Bs}R8_WVxgxEflQxatIkRwJ&k zz|dO6^(BF!g^24OfuVJX>p6j;HHhnf1vbYM_Y9VPwON040%H~zmo6}7VR2n1FlJ40 z-7YX@DRDg}FlHTb{Xt;N3gU8qlBb7JTwG@gj8RfteF9^Y6W1DnF^Y-nR*n_3J~vDF zUI{-W;hh4T_4R^;-;nU%Bz)LRUSDST<0U*x!p#Dk?Lm`pQo?H`{NED3Pr`d7ykEi- zPqMc!9L;1KUpx}_NqCWjQxg7?guf->Jre%N$@cW!60VeRzl6Um;aep99SQ$H!h0qB zwuBEq#h$+z5-yc+ql8Z{P?S%D7J$wGoe4S%R1NZhYCwKaEvODu4{884f|@`JLCv5R zP%Een)DAia)B)-QEdq6cx1S_)$8^8ly^6aT?WFDY07_rt^j==bS3BupsPXGfUX5y z54r)g9>n$xZUlW5v;p)r&`qHK25ki047vq$E9f@R?VxXf?gZThx*K#4=w8rv(EXtA zgB}Du1lj@m0q7CXqo5yxegyh4Xea0=pk1IRKu?060zD1-8E6ma4bcC9eh)gN5XvR! zBcREkLqStOhk>So4hOkFM}Uq59R)fXbPVWN&__YjKx`l6IMDH+6F?_|rh`5Xa)Ukr zngRMGXeQ_+(8-`vK(j!nf=&Z{3N#y30-6Jw3-W-BdhSJ@^VM|}?s9!6aW4fj>U{|R zbJhKYaJvY^+Q7viqaCcl|6Fb1HMqSFI@rE(HsV+a%GWlXND?U1#-?}6?Eu{QVs$Y_Tz;Qx!Dmq0Ireg%33^lQ-bpkIJq1sQGaP5l2I zh_$&tfDWYHT?hZ;=|f+KKh}>nf$jip2C+W%O%Ur--vMm{eHUcyM-Kz%>r0Qpo%N^3 zK}Mh2jsJ4L`Z?}B19}#;7xWzHEzlo9e**nG`_C7U{#wvgpsPV_+%m=(rg^yW=4s|@ zocQ{UeTC+ntin#55l6|i@H6(T-{DH%XgVjWI47&%L>cE~6*`WOp9SHZtilc#5l5(G z3?Rga8chuthX4^N{;uB?jVto*2=Z&70WI0UDIYQ5Vq~JgM z2tDVlD*M4&|3PO}*)~UWoz`g_X*GIOf^-nV_>NH!Cop`tlNSHYr)iCK=EcALgbdWc z_|H^y4x{8|N!rA`dH{kmPs9{j_ko1`KX4c&PD^nPg>w#t<44tv_fWVzr|aZCdCWO6 z?mzCtxC1>7_MdpxZPrtgTGfC25xBNvm@>}ClFoWMSc@pO#Im0GlyP>HdDhc7kCpn@ zoyVKyU@UQj*FW;e!CZ%e(IIj5Z5{qPt+~xt3wt&E+&Ev?=o->EQ%uYB=Euo=zQIr! z2MXtmiuoCLWK9D&)p?A_TAFH`#`2YP~qCF`oot`O-*+2mXILky_LuKfu=*Sm~B?aHn%{Ck`dl@}BhhpLTF3 zU&wpCIDfkqht2lkd{n>BpC;oq!m$*GdWV{E{OTZvb>rlA?o<`QT|X@GrEy3wKU`St z$H~<&R}+pVahUgTJ9npmi5;Kr+st6}r`KhQzQiy=gXcr#JSU%ct z)O>$uY=w@4nbp2rR(oKhWtbi7z1lc3+c?~tPW85)wGQ3GW69!tafW$!V3o}ff_Uq} zSI0{!@>8CI4IXw*bdL`4MRctK$N$4pi_Q9{b-zi(0ka}FM4fD1{9|H*HQUm1Ng)&F z=hz9-Fs7oJb{@EG*F_pX=W~oemM~3vUmvqss>Waugxl*tq)mFdCY{zgJ6L4AATSRX z4Kd>l>9qN@#cmr@Q)^kZH;5CZMd?dnt8zF^h8X-fXgnIt5n7yMo-I_>U>qkd>w$s% zTNE%;7Viz4`Sse99)BeK;QNEi2e(s9QSkm?2%sVui7^uiJ*!#{KBGCK(8^ffEl;tY zOdmlMg+2n%v(uYMa-a{KN4o<#zem!zwazv6^%Yesj?g1Z89HE zp^Gf(3HFLk^6$=r)jkf-6%I`?x|`H|vkUT{BbtnC<<8Z7OZ6_IUYf6hbNIJdu*u)Y ztt0NJp&@fHYsg=>z0hT8G?T>JTWfKVdTc)q*k(q1t!azVzCjvr4j`a)kU4;0c?Onz z*|d%n2asCJ99VW39MI=@a!bb;&+J35l!)OePpJ(rxl0(~6EHK`kTW;Ji_L&q)=}8* z&pLY9GHwiBIcGeJ!ccmEA+t0mjB37y>;qU`-T};(wAa%gh=wA1Co`X%bE?j4%(hwk z9~2|gg?bm+Mm1Z^whn1`v2;i;Y#t<1uo(qY7q-Dga>!L!`*42%fnX!du(xiTF>D%j z>3pX4l0n(paHt+O29o{F0oax8#|i#+6Y((oYc)S>X+QtCIH54ktCSQ*n3Q6=HB7t+ zn_KLV`N3qDAsMKE8q@el-y44f2$heZWhO! zVa0eq{&K2IRDYJk_3O>U^}AUnKXiQj2{elgNAdHRk}xOBjPF?NmcV2SGZ(N)2l-!aQ)xV2YU-;kJd-!^7&3FcF;eR&dix z7z1E0gPY&!!gx4pJq*@d!zrU;G7}wRnH%)^Gqa_3FRr7JN*(f6vOKovurmR(COxb{ zz*wrb(xVLzuwNLR8g5vrEkSlujFA@Ap>>3{)gX_S@M@8IW0j3%rZ6@%zJhh8ykg;P zEg5WD*}l=rCC1Wlw49Bq>0z>aE2Nr&<>m3Eo?EP$Li3i7)}>jAWal}}DrjZ7$6GFa zCs9*Y)|JCzuVJg#=ZC2?su8Fp+< zu`;LuWBcR+ji=iZEzAsA6vhj=nX;f^pRSadCnLjf*wGTDlcI%bxKXQar7!^oJBM}L z$aG5}#V2^f3hk)zJlaUgl>Jy;y2=FL0Ho3 zFZD8$MWYX;nqe(55s0Y$%z7QOv&YTAuuVI*C)U|p)+gE_-e{~0nRb4SP__KY`mnZA zONESps%i^rJbb`@AdFI_!fbz$tYEUI7;MRJG3?X@+f0}u$C;RD2KI~!Ro*tuiW>6f~O*Jo`&d}o-n4DuK!}9u-1{h{{ z93zZuCA_;0hQ|zb=wLS~4}5E}(+B&c5yKEFjP68WX3)50l+w7HtwbJ7ijiXSt`M-H+Dj(d?!i`=r*fWA z_xAPXhgkGAc)eY0f)Xn>d6OGc;_wU|#W6d~w znY{m+9V%M}YzyD9_Z$v-=RhRRjEz~;4`U{8PuAtoYrGyjL}Er%lWo0*j-!UTmDQ9Q z$+WWCz@Ep{Gs~ASA=)*%IM1RsG-&YV@y8+&WA+1QKcu%m*{i##}o-ZN$e+QU`)5rj^9_I~+87&8g@dunZ2izWE_W zSw4-A4zo-Sw&bjd9qjDzVWxADzS%9Zeiu~H77yY%aGToK-PXfoV;XbiDYmMkrq<0* z)tE_ke6BY7j!w4SdZ=F_{dAng-7kPOlvuNTNWEEBlSL!6M$bCDVe^+S{WPeAyogp` z2bGC2m3NV=@oycmuAQNR&6%I=rWY%NOs}OCtPag8w?D(B{Z8!b^+z>UDO}ym;hFjB z8}&s)l&#DBOQy3qrO>s_`P`Pi<$-IqhZ#0~X8ezctq(?ofbF{P950@jWOsn@vpSSk zvLa+QyUZm3s};VM$@FYGiK_T_3@CF-(de|MR<+aDidPn49<;HoR@K-`pqaBHeDW7T zXKL*oZJllYw&u)`qc4Vz?YFJHQ{yl9n)~te-phCr5`m5P#;{aW@is@Qg}(v8-fU3Q z@dkm|a3%iXweehL!_%e_d(8-!&$k(QUQdf7lm)X#dRn{dqM>*UhQ8a%+F??*%g9?c zjUn#~81e2^IUkUYzi&vfNWC%NQ_B1yjR%BzeMO9Cgodv%6bPzCZ#Gl%X|)YoQ6%qt zwIUjdTrp!zrDM0B%E7EeZ8$s7{K+d@Va zV5bd6*y$+;dK)>6e_~|MXqfqELlMM&4lO4%JUC2ZSpl2Z>4BaY1_!sOGwTiN;g(yh zn_D0v*0ePLMUQspX%TL->$hiwM?cRORQB(-)&j2{iw{-B3=Bg$qs0<=WX<+K5>fjW z54p1q7jn#oCtIh^@MMlncGW`mr}nu`pP8eW?Au7%He*{n<$rI)R*@JJxSSen!WCMc zHAX0cmiA%=F`Nh_CJMjhHjk9@XqyqtpHV@gfc#hdu&!l{jY;to%cHGMMC#o6TZc83(RGTO9*AZ1 zVKiK82)S2MUTl6chQ^FYH4HWf7=*uUIsTf3aJ;rb)>0uV-kUVrI#iz}ras-W*!uF2 zt@nxVMzf6@3LIiw?#kxNRq;~{lVp=C3hqT@+zc1cQo1G;mhMc$6ll@gl#Cc z)rifdBA8F}ve&`^1hh;300P>jEd?}Gy}a2nJmt-T;VEBo5w0_uFOB7v?$~SD++jcb z){!+%+pJ=(Y@5SD?eU4^)EM>q@y}EuI~8hN*Mt4}Mh(kLPtvBP#l=>j7VdBWS*c;e z*ZBQ&%@I3u?9k!PRT>^>iGO%NZjOWAtY0Vy-{$ybYsVkH%8iFI|D4!GtmY;JzHx{{ z>xSN(>l?W2U#8(hL~%%S&Tylfe`EW#f37yRf1!Pa@$SOde(m2kj_u$0_Hb;U_ylik zPy7?avAwZR?Z);MOOEYl^mD_p{qpZ0$M(iQgB;r%lQjQ8bZoEI?^nn6%_44LpNx*r zEC1qkd|uhNs-{o5Q_S&VV=?n4w(2r&mR23unA6g0>`68IYU-LtH^64*-@(e_+t{*V zn{7USvkz*^1p!zcQ7dz_e)%>+#*|-!tom%IT_PX%|YS)^ZRJL1b)}Fi*Dn)4elZ0k3 zs4*2;@A_F=%lIT;Xv2_Xo|*P>%R!sJJiQt!ZZd^DOG@8>2jA zKHqF(bZk#-qmKK^v!#H|D3Qb%dsDx_l&;Gr?Ff(V{N7i>5lV}t!O4W_65bx>zLJU?7Z4* zKJPAs(FpQ2IqT|P>^c}t(AZr#*qv9NVQVtR&TEE4#?FBj7p>SDI*TW>oH-=Sc3y>i z?VAF8=aoB*Uw>{vU5XZJYj?(oMLndfy{)4&S+S@on(|h3t%_T^j<2<|v7@cM$**+`_gkkQjO5p@{1OE$J!54$z4>mdr{yG9%N2cvL+{<(AFx(1) zv4J_kNMJCem#_!?C97iLpspOg?e72Wy8rCouDEh~>*JrTS$gq;tN%Fi%nkRnR-VyU zeOz+T2%d|-a`G1*+s44$2$71oO5!ycX#ZEfB*ce`&;MM zeo)eK^A%4_yMI=s?v2-nPOJU&iWgoCY#@yf@azy6-Lx|SY( zk{N|Hi^xkpPuKk0jSBBqmFFO4+-|MxfeQ=BNlhb<7zxc_grm3yPfBn%t z8*aXC&$%b|-SX7Czi9sM`Q?XhJ>~fCUUO-iSG~9Pv1fn%scUY%?U^&4LTh5}id!;# z@1>P1@&9iN&Ke$wxal#;88f_dJTu&Q0X7!G*9&LNSkzfxQZ?hOGbbTtob1N6V1=GOlQmuuT~ZGY zCc>%ooRGc>4R{V3bU0QLj>ZR53+6Jf3sQ+eeJ1Uc?;78|=FDT4?_YZIr|y}!?{jxNIqhpd`Tgxr zZ&aW8)YIKR`14Bt{ZG_+UwrIa$L>4kndRTR|R7;U-N+dlI4w;$i|X6f?Y z)Sou>zJC2%Ba_#x{>9?AHvZ3!zo@-~fB*c&?_cNn^P?Ai<;vmjAN&4E*S`3(;X7~A zc0AWqeeE~zesjgG$gOiZ5^yBoNWhVRBLPPOjszSDI1+Fq;7GucfFl7%0*(Y62{;mP zB;ZKEk$@usM*@xn90@oQa3tVJz>$C>0Y?Ik1RM!C5^yBoNWhVRBLPPOjszSDI1+Fq z;7GucfFl7%0*(Y62{;mPB;ZKEk$@usM*@xn90@oQa3tVJz>$C>0Y?Ik1RM!C5^yBo LNWhUmZVCK9q31Bc literal 0 HcmV?d00001 diff --git a/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources b/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/scripts/VoiceServer.app/Contents/_CodeSignature/CodeResources @@ -0,0 +1,115 @@ + + + + + files + + files2 + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/setup.sh b/setup.sh index bd71f83..632020c 100755 --- a/setup.sh +++ b/setup.sh @@ -116,5 +116,8 @@ echo "" echo "=== Done ===" echo "Restart Claude Code, enable /voice, and speak." echo "Switch language with /config." +echo "Supported /config language codes:" +echo " en, es, fr, de, ja, ko, pt, it, ru, hi, id, pl, tr, nl, uk, el, cs, da, sv, no" +echo " he, ar, zh, zh-hk (plus any language supported by Apple SFSpeechRecognizer)" echo "" echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main/uninstall.sh | bash" From 5b3919ff54dcd34e2c6722b51def2abd964a3657 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:27:45 +0000 Subject: [PATCH 5/8] Refine supported language output formatting Agent-Logs-Url: https://github.com/dr-data/claude-code-voice/sessions/d6d2558a-42b9-46cf-9919-ea0c1bb7d55e Co-authored-by: dr-data <9060623+dr-data@users.noreply.github.com> --- setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.sh b/setup.sh index 632020c..2d8b771 100755 --- a/setup.sh +++ b/setup.sh @@ -117,7 +117,7 @@ echo "=== Done ===" echo "Restart Claude Code, enable /voice, and speak." echo "Switch language with /config." echo "Supported /config language codes:" -echo " en, es, fr, de, ja, ko, pt, it, ru, hi, id, pl, tr, nl, uk, el, cs, da, sv, no" -echo " he, ar, zh, zh-hk (plus any language supported by Apple SFSpeechRecognizer)" +echo " en, es, fr, de, ja, ko, pt, it, ru, hi, id, pl, tr, nl, uk, el, cs, da, sv, no, he, ar, zh, zh-hk" +echo " plus any language supported by Apple SFSpeechRecognizer" echo "" echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main/uninstall.sh | bash" From 4f16b8800a8704ee34f519968ece54394766b699 Mon Sep 17 00:00:00 2001 From: dr-data Date: Thu, 9 Apr 2026 22:49:22 +0800 Subject: [PATCH 6/8] feat: add Cantonese (yue/zh-HK) support + update repo URLs to dr-data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add yue, cantonese, 廣東話, 粵語, zh-hk locale mappings → zh-HK Apple STT - Update all install/uninstall URLs from eladcandroid to dr-data Co-Authored-By: Claude Sonnet 4.6 --- scripts/server.swift | 3 ++- setup.sh | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/server.swift b/scripts/server.swift index 8f65507..7af131a 100644 --- a/scripts/server.swift +++ b/scripts/server.swift @@ -25,7 +25,8 @@ let localeMap: [String: String] = [ "it": "it-IT", "italian": "it-IT", "italiano": "it-IT", "ru": "ru-RU", "russian": "ru-RU", "русский": "ru-RU", "zh": "zh-CN", "chinese": "zh-CN", - "zh-hk": "zh-HK", "cantonese": "zh-HK", "粵語": "zh-HK", "广东话": "zh-HK", + "yue": "zh-HK", "cantonese": "zh-HK", "廣東話": "zh-HK", "广东话": "zh-HK", "粵語": "zh-HK", + "zh-hk": "zh-HK", "ar": "ar-SA", "arabic": "ar-SA", "hi": "hi-IN", "hindi": "hi-IN", "id": "id-ID", "indonesian": "id-ID", diff --git a/setup.sh b/setup.sh index 2d8b771..dbdfc68 100755 --- a/setup.sh +++ b/setup.sh @@ -10,7 +10,7 @@ INSTALL_DIR="$HOME/.local/share/claude-code-voice" if [ ! -f "scripts/server.swift" ]; then echo "Downloading claude-code-voice..." rm -rf "$INSTALL_DIR" - git clone --depth 1 https://github.com/eladcandroid/claude-code-voice.git "$INSTALL_DIR" 2>/dev/null + git clone --depth 1 https://github.com/dr-data/claude-code-voice.git "$INSTALL_DIR" 2>/dev/null cd "$INSTALL_DIR" fi @@ -120,4 +120,4 @@ echo "Supported /config language codes:" echo " en, es, fr, de, ja, ko, pt, it, ru, hi, id, pl, tr, nl, uk, el, cs, da, sv, no, he, ar, zh, zh-hk" echo " plus any language supported by Apple SFSpeechRecognizer" echo "" -echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/eladcandroid/claude-code-voice/main/uninstall.sh | bash" +echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/dr-data/claude-code-voice/main/uninstall.sh | bash" From 59d4203e0cd22cdadfc85cbf5f4721b3ef9b47db Mon Sep 17 00:00:00 2001 From: dr-data Date: Thu, 9 Apr 2026 22:51:47 +0800 Subject: [PATCH 7/8] feat: dynamic GitHub username detection in install/uninstall scripts Detect repo owner from git remote URL so forked copies automatically display correct install/uninstall URLs without hardcoded usernames. Co-Authored-By: Claude Sonnet 4.6 --- setup.sh | 7 ++++++- uninstall.sh | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/setup.sh b/setup.sh index dbdfc68..c9eb7e3 100755 --- a/setup.sh +++ b/setup.sh @@ -15,6 +15,11 @@ if [ ! -f "scripts/server.swift" ]; then fi SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +# Detect GitHub username from this repo's git remote so forked copies display correct URLs +_REMOTE_URL=$(git -C "$SCRIPT_DIR" remote get-url origin 2>/dev/null || echo "") +_GITHUB_USER=$(echo "$_REMOTE_URL" | sed -E 's|.*github\.com[:/]([^/]+)/.*|\1|') +_GITHUB_USER="${_GITHUB_USER:-dr-data}" SCRIPTS="$SCRIPT_DIR/scripts" APP="$SCRIPTS/VoiceServer.app" @@ -120,4 +125,4 @@ echo "Supported /config language codes:" echo " en, es, fr, de, ja, ko, pt, it, ru, hi, id, pl, tr, nl, uk, el, cs, da, sv, no, he, ar, zh, zh-hk" echo " plus any language supported by Apple SFSpeechRecognizer" echo "" -echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/dr-data/claude-code-voice/main/uninstall.sh | bash" +echo "Uninstall: curl -fsSL https://raw.githubusercontent.com/$_GITHUB_USER/claude-code-voice/main/uninstall.sh | bash" diff --git a/uninstall.sh b/uninstall.sh index 5a6422a..ae085e1 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -4,6 +4,12 @@ set -euo pipefail echo "=== Uninstalling Claude Code Voice ===" echo "" +# Detect GitHub username from the installed repo before we remove it +_INSTALL_DIR="$HOME/.local/share/claude-code-voice" +_REMOTE_URL=$(git -C "$_INSTALL_DIR" remote get-url origin 2>/dev/null || echo "") +_GITHUB_USER=$(echo "$_REMOTE_URL" | sed -E 's|.*github\.com[:/]([^/]+)/.*|\1|') +_GITHUB_USER="${_GITHUB_USER:-dr-data}" + # 1. Stop and remove launch agents (current + legacy names) for name in com.claude-code-voice com.claude-code-voice.server com.hebrew-voice.server; do PLIST="$HOME/Library/LaunchAgents/$name.plist" @@ -52,3 +58,4 @@ done echo "" echo "=== Uninstall complete ===" echo "Restart Claude Code for changes to take effect." +echo "Reinstall: curl -fsSL https://raw.githubusercontent.com/$_GITHUB_USER/claude-code-voice/main/setup.sh | bash" From 11c887c339cfc774ef96f03df8b77fc045675d5d Mon Sep 17 00:00:00 2001 From: dr-data Date: Thu, 9 Apr 2026 22:55:53 +0800 Subject: [PATCH 8/8] docs: add Cantonese setup instructions and macOS language pack download MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Show yue/zh-hk as accepted /config values for Cantonese - Add step-by-step guide for downloading zh-HK speech model via System Settings → Keyboard → Dictation Co-Authored-By: Claude Sonnet 4.6 --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 334c594..247dfcf 100644 --- a/README.md +++ b/README.md @@ -65,11 +65,21 @@ Type `/config` in Claude Code to change the language. The voice server picks it | Norwegian | `no` | Anthropic | | **Hebrew** | `he` | Apple STT | | **Arabic** | `ar` | Apple STT | -| **Chinese** | `zh` | Apple STT | -| **Cantonese (Hong Kong)** | `zh-hk` | Apple STT | +| **Chinese (Mandarin)** | `zh` | Apple STT | +| **Cantonese (Hong Kong)** | `yue` or `zh-hk` | Apple STT | Any language supported by Apple's `SFSpeechRecognizer` works — the 20 natively supported languages are proxied to Anthropic's server for best quality. +### Cantonese setup + +1. In Claude Code, run `/config` and set the language to `yue` (or `zh-hk`, `cantonese`, `廣東話`, `粵語` — all work). +2. Download the Cantonese speech model on macOS so Apple STT can work offline: + - **System Settings → Keyboard → Dictation** + - Enable **Dictation**, then open the **Language** dropdown + - Click **Add Language…** and select **Chinese (Cantonese)** + - macOS will download the on-device model (~100–200 MB) +3. Once downloaded, restart Claude Code and hold **Space** to speak in Cantonese — transcription runs fully on-device. + ## Token usage and local processing - **Claude-native languages** (shown as `Anthropic` in the table): audio is proxied to Anthropic for transcription, so this path uses Claude's voice backend and may consume tokens/usage.