跳到主要內容
maxstudioNews
AI 自動化DEV Community (Codex)約 6 分鐘

讓 Claude Code 開口說話:透過文字轉語音 Stop Hook 實現語音回饋

本文介紹如何為 Claude Code 和 Codex 等 AI 編碼代理啟用語音回饋功能,讓使用者能聽到 AI 完成任務的通知。透過設定 Stop hook 或 notify 選項,可以將 AI 的最終回覆轉換為語音輸出。文章也比較了 Aloud、VoiceMode 和 Heard 等進階工具,以應對多個 AI 工作階段的語音管理需求。

讓 Claude Code 開口說話:透過文字轉語音 Stop Hook 實現語音回饋
圖片來源:DEV Community (Codex)

聲明:我是 Kelly,我在 Heard (heard.dev) 工作,這是一個為編碼代理提供語音層的服務。這篇文章的大部分內容是免費的 DIY 方法,因為對於單一工作階段來說,這就是您所需要的。Heard 會在文章接近尾聲時作為一個選項出現。

Claude Code 的命令列介面 (CLI) 只能聽取輸入,但不會說話。它的 /voice 指令是語音聽寫:您說話,它會將您的提示詞打字出來。CLI 沒有語音輸出,所以如果您想在任務完成時聽到通知,需要自己設定。

這只需要一個掛鉤 (hook)。當 Claude 完成回應時,會觸發 Stop 事件。其標準輸入 (stdin) 的 JSON 內容包含 last_assistant_message,也就是 Claude 最終回覆的文字。將其導向 macOS 的 say 指令即可。

將以下內容加入 ~/.claude/settings.json:

```json

{

"hooks": {

"Stop": [

{

"type": "command",

"command": "jq -r '.last_assistant_message // empty' | head -c 600 | say",

"async": true

}

]

}

}

```

您需要安裝 jq (brew install jq)。欄位名稱和掛鉤結構已根據 Claude Code 掛鉤參考資料的 Stop 部分(2026 年 10 月版)進行檢查。有兩個細節很重要:head -c 600 會限制長度,因為最終回覆可能是很長的報告,而 say 會讀出每一個字。"async": true 會在背景執行掛鉤,這樣 Claude Code 就能在語音仍在播放時繼續執行。

在 Linux 上,將 say 替換為 speech-dispatcher 套件中的 spd-say -e。如果您只想要聲音,而不是文字,則可以使用 afplay /System/Library/Sounds/Glass.aiff 作為指令。

三個小升級:首先,讓它說出哪個工作階段完成了。每個掛鉤輸入都包含 cwd,所以 jq -r .cwd | xargs basename | say 會說出資料夾名稱。其次,聽取失敗訊息。當 API 錯誤導致回合結束時,Stop 不會觸發。Claude Code 會改為觸發 StopFailure,因此請在那裡添加相同的指令。

第三,偵錯無聲的掛鉤。在 Claude Code 內部執行 /hooks 以查看載入了哪些內容。settings.json 中的 JSON 語法錯誤是常見原因。

Codex 中的相同概念:Codex 在 ~/.codex/config.toml 中有一個 notify 設定。當一個回合完成時,它會執行一個帶有一個 JSON 參數的指令,其中 type 設定為 agent-turn-complete,回覆內容在 last-assistant-message 中:

```python

#!/usr/bin/env python3

import json, subprocess, sys

event = json.loads(sys.argv[1])

if event.get("type") == "agent-turn-complete":

text = (event.get("last-assistant-message") or "Codex finished.")[:300]

subprocess.Popen(["say", text])

```

將其儲存為 ~/.codex/speak.py,然後使用其絕對路徑指向 Codex:notify = ["python3", "/Users/you/.codex/speak.py"]。subprocess.Popen 會立即返回,因此 Codex 在語音播放時不會被阻塞。

當多個工作階段變得嘈雜時:對於單一工作階段,到此為止即可。這個掛鉤是免費且本機執行的。但當有三四個終端機時,問題就開始了:它會直接朗讀,而不會總結。say 會完全按照寫好的內容朗讀 Markdown、檔案路徑和程式碼。充滿路徑的回覆很難用耳朵聽懂。每個事件聽起來都一樣。「完成」、「測試失敗」和「等待批准」都以相同的語音朗讀文字呈現。工作階段會互相干擾,「完成」並不會告訴您哪個工作階段需要您的關注。

有一些工具做得更好。每個描述都來自專案本身的 README,本週閱讀:Aloud (softcane/aloud, MIT) 會在您的 Mac 上,使用本機 Kokoro 語音,說出每個 Claude Code 和 Codex 回覆的簡短摘要(預設約 240 個字元),而 aloud full 則會朗讀整個回覆。

您可以使用 aloud on 為每個工作階段開啟它;問題會優先於完成訊息,例行工具呼叫則保持靜默。如果您想要免費、本機且每個工作階段獨立的解決方案,它會是贏家。它需要 Python 3.11 或 3.12 以及 Homebrew。

VoiceMode (mbailey/voicemode, MIT) 適用於與 Claude Code 進行語音對話。它可以在本機使用 Whisper 和 Kokoro 執行,也可以使用 OpenAI 的雲端服務,並且支援 Linux、macOS 和 Windows。

如果您想與單一工作階段對話,或者您不是 Mac 用戶,它會是贏家。Heard (heard.dev) 是我參與開發的產品,一個適用於 Claude Code 和 Codex 的 Mac 應用程式 (macOS 14 或更高版本)。它會說出一兩句話,說明發生了什麼變化,而不是直接朗讀回覆本身。

問題、阻礙和失敗會優先傳達,來自平行工作階段的例行進度會被批次處理成簡短的摘要,並以專案名稱開頭。焦點模式會保持例行進度靜默,只在有問題、阻礙和失敗時發出語音。在 Power 方案中,您可以透過語音回覆。

該引擎是開源的,採用 Apache 2.0 授權,使用本機 Kokoro 語音,無需帳戶;可下載的應用程式是託管版本,註冊時提供 14 天的 Power 試用期,無需信用卡。其他工具的優勢:Heard 僅限 Mac,且 14 天試用期後應用程式需要付費方案 (Pro 或 Power,請參閱 heard.dev/pricing);免費選項是從原始碼建置開源引擎。

在 heard.dev 上有所有 Claude Code 文字轉語音選項的更詳細並排比較,以及帶有掛鉤變體的逐步完成音效指南。

選擇哪一個?如果您只有一個工作階段,只想知道它完成了:使用上述的 Stop hook 或 Codex notify 腳本。如果您想在您選擇的工作階段中獲得免費的本機語音,並且是在 Mac 上:選擇 Aloud。如果您想與 Claude 進行語音對話,並且適用於任何作業系統:選擇 VoiceMode。

如果您有多個 Claude Code 和 Codex 工作階段,需要簡短摘要和語音回覆:選擇 Heard。如果您開發了自己的掛鉤變體,我很樂意在評論中看到它。

Share

覺得值得一看?分享給朋友。

以上為 AI 自動翻譯導讀。原文版權歸 DEV Community (Codex) 所有, 建議透過「閱讀原文」前往原始網站,以取得最完整資訊並支持原作者。

Newsletter

不用每天追,AI 重點每週寄給你

43 個來源、每 2 小時更新,太多看不完。電子報每週挑最值得看的幾則,附上 Max 的看法。

每週一封。Email 只用來寄電子報,每封信都能一鍵退訂。