先說結論(直接看示範)

看這個 30 秒影片,你就懂了:

  • AI 會用語音報告進度
  • 我在旁邊喝咖啡滑手機
  • 「主人,搞定了!」聽到就可以回去驗收
  • 影片封面是我的魔犬秋口,很可愛吧

這就是我現在的日常


一個月燒了 37 萬元的 API 費用

上個月我分享了Claude Code Max 5x / 20x 方案使用心得,經過了一個月的使用,我共用了 8,297,053,205 個 token(我知道你一定在數,不用數了是 82 億),共價值美金 $12,685 的 API 費用!相當台幣約 38 萬元的 API 使用量

ccuseage 使用量

Damn!!!!! 這輩子還沒想過我可以消耗這宇宙的哪個東西,單位可以到 80 億個

訂閱 Claude Code Max 20x 方案,一個月付 6,000 台幣訂閱費,投報率爆表,token 富翁就是我!

接下來我會寫一系列的使用技巧和心得分享

目前規劃的內容:

  1. 語音通知:成為 Claude Code 奴隸主第一步(本文)
  2. Claude Code Status Line:專業奴隸主,要有一套自己的監控系統
  3. 我的 Claude Code 自訂指令-視覺化
  4. 為什麼你的 AI 比較笨?可能犯了這三大上下文錯誤
  5. 我的 Claude Code 自訂指令-並行開發工作樹
  6. 工程師最愛的非同步:並行執行任務
  7. 讓 Claude 變成你的形狀,持續改善你的 CLAUDE.md
  8. Claude Code 有一堆很實用的功能,但你不知道
  9. 規格驅動開發 SDD
  10. Claude Code 不只是寫程式,我用來營運公司

這一個月來,我幾乎把 Claude Code 當成我的奴隸在用

從早到晚都在命令他

寫程式、寫文件、問問題、查資料、整理我的資料夾 XD,真的沒得嫌!

我多了好多時間滑脆看廢文,看 YT 上 Claude Code 的影片


為什麼你需要語音通知?

不管用哪家 AI 寫程式,你一定遇過:

  • 下完 prompt 去看 YouTube,就忘記回來 XD
  • 同時開 3 個視窗,熊熊忘記哪個在幹嘛
  • AI 在等你確認,你還在滑廢文

為什麼會這樣?

因為你在 “等” AI 生成回覆

這時候如果可以像真實世界那樣,你交辦一件事情讓別人去做,完成後他來跟你回報

那你就不用等,你可以去做別的事,等他回報再來接手處理


兩種情境,兩種通知

經過一個月的實際使用,我認為實際上就兩種情況需要通知:

情境一:AI 需要你確認(阻塞型通知,要馬上處理)

  1. AI 需要你同意他的操作:通常是要求權限的通知,而你通常都會同意
  2. 另外 Claude Code 的 Plan Mode,會需要你確認他的計畫,同意後他才會繼續

這兩種情境,其實只要隨便發出一個推播聲音就可以了,你聽到就知道要切回去看

情境二:AI 做完了(完成型)

在你發出指令後, AI 一頓操作猛如虎,最後結束後,用說的跟你報告結果

不管是完成、失敗、還是遇到問題,一聽就能知道,也能先有心理準備XD

你聽完可以判斷:

  • 重要的話馬上看
  • 要不要細看過程紀錄

有什麼好處,爽度指標

  • 聽到「主人,搞定了」爽
  • 可以安心去耍廢 爽
  • 如果你正在忙,也可以選擇充耳不聞,也不會不禮貌
  • 同事會覺得你很潮、很認真工作,AI 一直在回報進度 (誤,我沒同事這是我的想像)

有什麼壞處

  • 大概就是開太多時,剛好同時回報會很吵,也聽不清楚
  • 很恥,但可以調整恥度

設定教學

核心知識

其實很簡單,MAC電腦系統有一個指令 say -r 180 "你好",數字是語速

你可以直接在終端機輸入,電腦就會唸出來了,聲音就是 SIRI 的聲音

你想要的話可以到系統設定 → 輔助使用 → 語音內容,裡面換預設的系統聲音(我試過一輪最後還是換回 SIRI)

這就是最重要的核心知識了,用這個功能的好處是效能消耗很低

雖然語音沒有現在 AI 語音那麼自然,但免錢、速度快

還有情懷,會感覺 SIRI 變超屌(想起當初 SIRI 剛出時跟他在那邊對牛彈琴的夜晚)

Windows 系統就沒有這個指令了,我問了 ChatGPT,有變通的作法,但我無法實測,效能跟聲音品質我就不知道了,給使用 Windows 的人參考

備註:語速 180 是我有加快,預設值我忘記是多少了,你可以刪除或自行調整

設定步驟(情境一)

再來就要根據情境一和情境二來設定觸發語音指令

情境一的通知我們使用 Claude Code 的 hook 功能 (不想讀可以看最下面備注)

所有需要你確認的狀況,Claude Code 都會觸發 Notification Hook,你可以很簡單的直接設定:

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "say -r 180 '請確認'"
          }
        ]
      }
    ]
  }
}

這樣每次需要你確認時,電腦就會發出“請確認”的語音通知,是不是很酷~

當然這樣是不夠的,我們還需要一些情緒價值

不然一直叫我去確認,到底誰是老闆~

我怕他搞不清楚,因此我請 AI 幫我寫了一個腳本

建立一個 notification.sh 檔案

#!/bin/bash
# Claude Code Notification Hook
# 建立時間: 2025-07-10 08:55:52 (更新時間: 2025-08-18)
# 用途: 當 Claude Code 需要通知使用者時執行語音通知(無日誌記錄)
# 讀取來自 stdin 的 JSON 輸入 (標準格式)
INPUT_JSON=$(cat)
# 解析 JSON 資料
MESSAGE=$(echo "$INPUT_JSON" | jq -r '.message // "Claude Code 通知"')
TITLE=$(echo "$INPUT_JSON" | jq -r '.title // "Claude Code"')
# 輸出通知訊息到終端機
echo "📢 [Notification Hook] $(date '+%H:%M:%S'): $TITLE - $MESSAGE"
# 隨機語音訊息陣列
msgs=(
    '廢物,別廢了,該工作了'
    '嘿,醒醒啊'
    '泰呈,這裡有程式需要你的確認'
    '主人,這樣真的可以嗎,我不敢自己決定啦'
    '拜託你!快點選!'
    '泰呈,只有你能決定這段程式的命運'
    '求你了,看看他'
    '帥哥,看這裡'
)
# 條件語音播放 - 跳過等待輸入的通知
if [[ "$MESSAGE" == *"Claude is waiting for your input"* ]]; then
    echo "🔇 跳過語音播放 (等待使用者輸入)"
else
    # 播放隨機語音通知
    random_msg="${msgs[RANDOM % ${#msgs[@]}]}"
    echo "🔊 播放語音: $random_msg"
    say -r 180 "$random_msg"
fi
# 成功完成
exit 0

然後設定 settings.json

{
  "hooks": {
    "Notification": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "/Users/jackle/.claude/hooks/notification.sh"
          }
        ]
      }
    ],
  },
}

你可以自行修改

msgs=(
    '廢物,別廢了,該工作了'
    '嘿,醒醒啊'
    '泰呈,這裡有程式需要你的確認'
    '主人,這樣真的可以嗎,我不敢自己決定啦'
    '拜託你!快點選!'
    '泰呈,只有你能決定這段程式的命運'
    '求你了,看看他'
    '帥哥,看這裡'
)

這樣每次觸發通知時,就會從這裡面隨機選一個念出來

請看示範

你可以發揮你的創意、個人喜好,讓你的奴隸用你喜歡的方式通知你

設定步驟(情境二)

情境二本質是摘要任務結果,並把結果觸發 say 指令說出來

這肯定必須要用到 AI 的功能了,先說這部分我踩過的雷

我一開始想要用 Stop hook 觸發,使用 claude -p 非互動功能指令,讓 Stop hook 幫我把整個對話內容送給 AI 請他摘要,回傳後再用 pipe 方式吐給 say 指令(這也是我問 AI 的,我本來根本不會這個指令)

邏輯和想法完美沒有問題,但是我一直無法成功,後來發現是 hook 的環境好像讀不到系統環境變數,導致 claude -p 沒辦法讀到 claude max 訂閱方案的權限,所以會沒有回應,我試老半天試不出來,突然靈機一動想到一個好方法

我何不直接要求 Claude Code 每次完成任務後,就把完成的摘要用語音通知我就好了

因此我在 CLAUDE.md 增加了以下規則

## 語音通知系統
### 核心規則
**當前模式:預設模式**(可透過「語音模式:[預設|精簡|安靜]」切換)
#### 執行公式
| 時機     | 預設模式           | 精簡模式       | 安靜模式      |
| -------- | ------------------ | -------------- | ------------- |
| 狀態變更 | `say` | 無  | 無 |
| 任務完成 | `say` 結束通知     | `say` 結束通知 | 無            |
#### 執行範例
# 狀態變更
bash指令 say -r 180 "我正在修登入"  # 語音使用完整口語句子
# 任務完成
bash指令 say -r 180 "主人!登入修好了,我就說小case~"
**語音規則**:使用「我正在...」的完整句子結構,避免技術術語
**任務完成通知**:
- 觸發:對話主要任務完成並輸出結果後
- 語氣:專業助理,充滿自信
- 稱謂:隨機選擇(主人/泰呈/帥哥/阿呈)
- 格式:`say -r 180 "{稱謂},{成就描述}"`
#### 執行時機
- 每個新任務開始時
- 切換工作焦點時
- 取得重大進展時
- 對話結束時(完成通知)
**注意**:語音內容限制 20 字內

預設他會一直跟你報告他現在在幹嘛,做到哪報到哪,有夠奴

一聽哪裡不對勁,可以馬上暫停,還能用說的罵他(按這個麥克風)

嫌他吵的話,可以輸入「語音模式:精簡」,他就只會完成時再通知

在開會或是想安靜,就叫他閉嘴,他就會嘴巴閉閉了

就這麼簡單,現在你的 AI 會說話了。


三種模式

整理一下,我設定三種模式,根據場合切換,你也可以自行調整 Prompt:

預設模式(完整通知)

# 開始和結束都有語音
say "我正在修 bug"
# ...工作中...
say "主人,bug 修好了!"

精簡模式(只有結束通知)

# 過程不講話
# ...工作中...
say "主人,bug 修好了!"  # 只有結束才講

安靜模式(開會用)

# 完全不出聲
# 不會有任何語音

切換方式:

  1. 預設模式下,整個過程都會通知,完成也會通知
  2. 「語音模式:精簡」:只有完成會通知
  3. 「安靜」:不會語音通知

備註:因為這是指令,AI 就有可能不會執行,通常是 Context Window 太大或是自動壓縮後,有可能 AI 會忘記,這也是一種判斷上下文視窗是不是太滿的方式

但現在我用狀態列判斷更準(這部分下篇講)


試了才知道有多爽

以上就是語音通知的做法。

我覺得這個功能完全改變我的開發體驗

這個互動感,我不確定適不適合在辦公室、咖啡廳使用 XD

目前只有 Claude Code 有 hook 功能,如果其他工具未來有支援,是可以通用的(據說 Codex 快要出了)

語音通知會成為每天在背後默默執行的功能,習慣之後就回不去了

有時候聽到他說「寶貝!我完成了」,情緒價值有夠高

我的多巴胺就是你的兩倍,搞得你每天都想要好好工作

但要小心真實世界的寶貝有可能會不爽

我已經可以想像,讓 AI 扮演 Linus,把你當北七開嘲諷,想像力就是你的超能力

是說不管聽到早餐店阿姨還是 AI 叫我「帥哥」,感覺好像都差不多


P.S. 我知道你很懶,你可以直接把這篇貼給 Claude Code 叫他讀一讀幫你設定