用 Claude Code Mods 打造你的專屬小幫手

先從大同電鍋說起

家裡的大同電鍋,煮好飯會「啪」一聲跳起來。你不用一直盯著它,聽到聲音再去盛飯就好。

用 Claude Code 寫程式時,常常也是這種情境:丟一個大任務給 Claude,它要跑個一兩分鐘。你轉頭去回 LINE、倒杯咖啡,結果忘了回來看,它早就做完在等你了。

如果 Claude Code 也能像電鍋一樣「啪」一聲提醒你,是不是很棒?這篇文章就用 Claude Code 新推出的 mods(模組) 功能,親手幫它裝上這個「電鍋跳起來」提醒。

Mods 是什麼?把它想成「手機殼」

Mod 就是一個小小的 JavaScript 或 TypeScript 檔案,會在你的 Claude Code 工作階段裡執行。就像給手機套個殼、貼個指環支架:手機還是那支手機,但用起來更順手。

它能做的事情主要有三種:

動作生活比喻實際用途
觀察(Observe)管理員看監視器,只看不動手記錄每次檔案修改、每回合結束後讀數據
改寫(Rewrite)秘書幫你潤飾信件再寄出在指令傳下去之前先加工一下
直接回答(Answer)門口警衛說「這個不能進」擋下危險指令,或自己提供一個斜線指令

它的運作方式像工廠的輸送帶:事件(例如「Claude 要執行一個指令」、「一個回合結束了」)會依序經過你的 mod、其他外掛,最後才到 Claude Code 本身。你可以在自己那一站看一眼、改一下,或直接把件抓下來。

Mod 還能畫自己的介面,例如提示列上方的一條資訊帶、右側的面板、或一個彈出的小通知(toast)。需要 Claude Code 2.1.287 以上版本,預設就是開啟的。

動手做:「電鍋跳起來」提醒 mod

目標很簡單:Claude 做一件事超過 30 秒,做完時就彈出一個小通知。太短的任務不吵你,就像煩泡麵不需要開鐘一樣。

懶人做法:用說的就好

你不必先學 API。開啟 claude,貼上這段話:

幫我做一個 Claude Code mod,叫做 rice-cooker。
當主要回合花超過 30 秒才完成時,用 toast 彈出提醒:
「♨ 飯煮好了!Claude 忙了 N 秒」。
子代理(subagent)的回合不要提醒。

Claude 會問你是否開啟「熱重載(hot reload)」,按允許。這回合結束後 mod 就生效了。之後想改成 60 秒、想換文字,繼續用說的就好。

自己動手:看懂背後怎麼運作

想知道 Claude 幫你寫了什麼,或想自己寫,只要四步。

  1. 建立資料夾。一個 mod 就是一個普通的外掛(plugin)資料夾:
rice-cooker/
├── .claude-plugin/
│   └── plugin.json
└── hooks/
    ├── hooks.json
    └── rice-cooker.mjs

plugin.json 是外掛的身分證:

{
  "name": "rice-cooker",
  "version": "0.1.0",
  "description": "長任務完成時,像電鍋一樣提醒你。"
}

hooks.json 告訴 Claude Code 要載入哪個程式檔:

{ "modules": ["./rice-cooker.mjs"] }
  1. 寫主程式。只要監聽「回合結束」這個事件,看花了多久,時間夠長就「啪」一聲:
// hooks/rice-cooker.mjs
const LONG_MS = 30_000; // 超過 30 秒才提醒

export function register(on) {
  on("turn.complete", async ($, e, next) => {
    const result = await next(e);        // 先讓 Claude Code 照常收尾
    if (e.agentId) return result;        // 子代理的回合不理它
    if ((e.durationMs ?? 0) >= LONG_MS) {
      const sec = Math.round(e.durationMs / 1000);
      await $.ui.toast({ text: `♨ 飯煮好了!Claude 忙了 ${sec} 秒` });
    }
    return result;
  });
}

這就是前面說的「觀察」:先呼叫 next(e) 讓事情照常發生,再回頭看一眼結果,完全不干擾 Claude 做事。

  1. 載入測試。用這個外掛開一個工作階段:
claude --plugin-dir ./rice-cooker

資料夾會被監看,每次存檔就自動重載,不用重開。叫 Claude 跑個大一點的任務,例如「幫我整理整個專案的 README」,等它做完就會看到提醒。

  1. 檢查一下。claude plugin validate 會讀你的程式,列出它掛了哪些事件、呼叫了哪些 API:
claude plugin validate ./rice-cooker

小提醒:$.ui.toast 的參數格式可能隨版本調整。Claude Code 每次載入 mod,都會把你這個版本的型別宣告寫進 .claude-plugin/types/,以那裡的定義為準。

進階玩法與四個好習慣

電鍋提醒只是開胃菜。照著同樣的套路,你還可以做這些:

  • 油表「剩多少油」:用 $.session.usage() 讀出上下文用了多少,在提示列上方畫一條油表。官方範例 Token Weather 就是用「晴、陰、雨、暴風雨」來表示。
  • 牆上的「小心地滑」:用 tool.call 攔截 rm -rf、git reset --hard 這類危險指令,先問你一句再執行。
  • 團隊家規:用 prompt.submit 在每次提問自動附上團隊的程式風格規範。
  • 自訂斜線指令:用 $.command.register 加一個 /午餐 之類的小指令。

寫 mod 時,有四個習慣會讓你少踩坑:

  1. 資料放 $.state,不放一般變數。熱重載會重跑一次程式,普通變數會歸零,就像白板被擦掉。
  2. 元件屬性在 e.props 裡,例如可用寬度 bodyColumns。
  3. 以自動產生的型別為準,放在 .claude-plugin/types/,編輯器也能直接提示。
  4. 畫不出來就看 log:用 claude --debug 開啟,找錯誤訊息。

做好了想分享? mod 就是外掛,放到 GitHub 加上 marketplace 檔案,別人用三行指令就能安裝:

/plugin marketplace add your-name/my-mods
/plugin install rice-cooker@my-mods
/reload-plugins

反過來安裝別人的 mod 時要小心:mod 跟 Claude Code 有一樣的權限,安裝前先看過程式碼,只裝信任的來源。

結語:你想幫 Claude Code 加什麼?

官方的三個範例,各自來自一個問題:「我的上下文還剩多少?」「這個指令會刪掉什麼?」「Claude 剛剛改了哪裡?」我們的電鍋提醒也一樣,只是「做完了叫我一聲」。

下次用 Claude Code 覺得「要是能…就好了」,就是你的下一個 mod 題目。直接用中文跟 Claude 說,讓它幫你做出來。

參考資料:Getting started with Claude Code mods(claude.dev Blog,Addy Osmani,2026 年 10 月 1 日)