用 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 日)

注意!Claude Code Windows 路徑大搬家,3 月 12 日前務必完成設定

Anthropic 最近發出了一封重要通知:Windows 版的 Claude Code 正在進行一項「設定檔路徑遷移」,而且有明確的截止日期——2026 年 3 月 12 日。如果你的公司或 IT 部門有在幫員工統一部署 Claude Code 的設定,那這件事你非得知道不可。

這次更新到底在改什麼?

簡單來說,就是 Claude Code 在 Windows 上存放「企業管理設定檔」的資料夾位置換了。 這個設定檔叫做 managed-settings.json,是企業 IT 團隊用來統一管理、控制 Claude Code 行為的重要檔案。

  • 舊路徑(即將停用): C:\\ProgramData\\ClaudeCode\\
  • 新路徑(請更新到這裡): C:\\Program Files\\ClaudeCode\\managed-settings.json 3 月 12 日之後,系統就不會再去讀取舊路徑的檔案了。也就是說,如果你的 IT 部門沒有在期限前更新部署位置,之前設定的企業管理規則就會全部失效!

誰需要採取行動?

並不是所有人都需要動作。 這件事主要影響的是:

  • 公司有 IT 部門負責集中管理 Claude Code 設定的企業用戶
  • 使用 MDM(行動裝置管理)或端點管理工具(例如 Intune、Jamf 等)來部署 managed-settings.json 的組織 如果你只是個人用戶,或是公司根本沒有部署這個設定檔,那這次更新對你沒有任何影響,不用緊張。

IT 同仁需要怎麼做?

步驟其實很簡單,就一件事:

在 2026 年 3 月 12 日之前,將你的 MDM 或端點管理工具的部署路徑,更新為新的路徑: C:\\Program Files\\ClaudeCode\\managed-settings.json 如果你已經完成了這個更新,那就什麼都不用再做了,大功告成!


小結

這次的改動說複雜不複雜,說簡單也要注意別錯過截止日期。如果你負責公司的 IT 管理,記得趕快去確認部署設定有沒有更新;如果你只是一般使用者,把這篇文章轉給你的 IT 同事就對了! 總之,3 月 12 日這個日期記起來,別讓企業設定白白失效了。

資料來源:Anthropic 官方通知信件

洞悉未來教育與科技脈動:直擊中臺科大第18屆 IETAC 2025!

今天,我非常榮幸能夠親身參與在中臺科技大學盛大舉行的第18屆資訊教育與科技應用研討會 (IETAC 2025)。這不僅是一場學術交流的盛會,更是一扇窺見未來資訊教育與科技應用趨勢的窗戶。

這次是下午場的評審,與大台灣旅遊網的楊總一起當評審~雖然學術與理論依舊還有點差距,但畢竟是決賽,學生也是很努力的拿出實作出來 🙂

會後也認識了僑光科技大學(我的母校)以及修平科技大學的老師~

中臺科技大學資訊管理系第21屆畢業專題成果展

能夠與中臺科技大學結緣,主是因為國泰電腦的李信宏總經理的關係,因為李總在DELPHI的造詣以及醫療系統、檢驗系統開發的成就,因為李總沒空的原因,再加上一直習慣透過部落格記錄問題解決方式,在十多年前就與李桂春老師、王國安老師持續合作,從還沒重新到公司就職,就以個人開發工作室的名義擔任產業學院的講師,因此有了五年左右的講師經驗~後來因為工作的關係,就逐漸減少上課的時間,專心在系統開發架構以及人工智慧相關技術的學習以及鑽研。

最近因為王國安老師接下系主任的原因,身為老朋友的關係,當然就是意氣相挺 🙂 也趁著特休假稍微放鬆一下,且持續與年輕人有一定的互動與瞭解,也讓自己在管理上可以有更多瞭解。於是今天又擔任了評審~  🙂  這次有VR、NO-CODE、AI等元素,也是挺不錯的體驗。

Hugging Face推出SLM SmolVLM2讓影像理解模型進入到設備


隨著人工智慧技術的快速發展,視訊理解模型正變得越來越重要。Hugging Face 推出的 SmolVLM2 系列,憑藉其高效能與小型化設計,為視訊理解樹立了新標杆。本文將帶你快速了解 SmolVLM2 的核心技術、應用場景及其在視訊理解領域的突破。


SmolVLM2 的願景與目標

SmolVLM2 的使命是將視訊理解的能力帶到每一台設備,無論是手機還是伺服器。與傳統需要大量計算資源的大型模型不同,SmolVLM2 將高效模型與小型化設計結合,實現了低資源環境下的高效視訊處理。

目前,SmolVLM2 提供三種不同規模的模型:

  • 2.2B 模型:專為高效視訊和圖像理解而設計,是整個系列的旗艦。
  • 500M 模型:在小型化與效能之間取得良好平衡。
  • 256M 模型:實驗性質的極小型模型,探索小型模型的極限。

這些模型均可通過 Python 和 Swift API 使用,並且支持 Hugging Face 的 Transformers 框架。


核心技術與性能

SmolVLM2 2.2B:視覺與視訊的領先模型

2.2B 模型在多項基準測試中表現卓越,特別是在 Video-MME 基準上超越了所有現有的 2B 模型。該模型能夠:

  • 解決圖像中的數學問題。
  • 讀取照片中的文字。
  • 理解複雜圖表及科學視覺問題。

其記憶體效率極高,甚至可以在免費的 Google Colab 環境中運行。

更小巧的 500M 和 256M 模型

  • 500M 模型 提供了接近 2.2B 的視訊理解能力,但參數量僅為後者的四分之一。
  • 256M 模型 則是一個實驗性版本,旨在探索小型模型的應用潛力,適合創新應用和專門的微調項目。

應用場景:SmolVLM2 的多功能演示套件

為了展示 SmolVLM2 的多樣化應用,Hugging Face 開發了多個演示應用程式:

1. iPhone 影片理解

SmolVLM2 的 500M 模型已被整合到 iPhone 應用中,用戶可以直接在本地設備上分析視訊內容,無需依賴雲端運算。

2. VLC 媒體播放器集成

與 VLC 媒體播放器的合作,實現了智慧視訊片段描述和語義搜尋功能,用戶可以根據自然語言描述直接跳轉到影片中的相關部分。

3. 影片精彩片段產生器

這個應用程式可以從長達數小時的影片中自動提取最重要的時刻,適用於足球比賽等長時間的活動摘要。


與 Transformers 和 MLX 的結合

SmolVLM2 與 Hugging Face 的 Transformers 框架無縫集成,支持多種推理場景:

  • 影片推理:用戶可以通過簡單的聊天模板,讓模型生成對影片的詳細描述。
  • 多幅圖像推理:支援對多張圖片進行對比分析。
  • MLX 支持:在 Apple Silicon 裝置上運行 SmolVLM2 的高效推理,適合 Swift 開發者。

此外,SmolVL

SmolVLM2:將視訊理解帶入每台設備

隨著人工智慧技術的快速發展,視訊理解模型正變得越來越重要。Hugging Face 推出的 SmolVLM2 系列,憑藉其高效能與小型化設計,為視訊理解樹立了新標杆。本文將帶你快速了解 SmolVLM2 的核心技術、應用場景及其在視訊理解領域的突破。


SmolVLM2 的願景與目標

SmolVLM2 的使命是將視訊理解的能力帶到每一台設備,無論是手機還是伺服器。與傳統需要大量計算資源的大型模型不同,SmolVLM2 將高效模型與小型化設計結合,實現了低資源環境下的高效視訊處理。

目前,SmolVLM2 提供三種不同規模的模型:

  • 2.2B 模型:專為高效視訊和圖像理解而設計,是整個系列的旗艦。
  • 500M 模型:在小型化與效能之間取得良好平衡。
  • 256M 模型:實驗性質的極小型模型,探索小型模型的極限。

這些模型均可通過 Python 和 Swift API 使用,並且支持 Hugging Face 的 Transformers 框架。


核心技術與性能

SmolVLM2 2.2B:視覺與視訊的領先模型

2.2B 模型在多項基準測試中表現卓越,特別是在 Video-MME 基準上超越了所有現有的 2B 模型。該模型能夠:

  • 解決圖像中的數學問題。
  • 讀取照片中的文字。
  • 理解複雜圖表及科學視覺問題。

其記憶體效率極高,甚至可以在免費的 Google Colab 環境中運行。

更小巧的 500M 和 256M 模型

  • 500M 模型 提供了接近 2.2B 的視訊理解能力,但參數量僅為後者的四分之一。
  • 256M 模型 則是一個實驗性版本,旨在探索小型模型的應用潛力,適合創新應用和專門的微調項目。

應用場景:SmolVLM2 的多功能演示套件

為了展示 SmolVLM2 的多樣化應用,Hugging Face 開發了多個演示應用程式:

1. iPhone 影片理解

SmolVLM2 的 500M 模型已被整合到 iPhone 應用中,用戶可以直接在本地設備上分析視訊內容,無需依賴雲端運算。

2. VLC 媒體播放器集成

與 VLC 媒體播放器的合作,實現了智慧視訊片段描述和語義搜尋功能,用戶可以根據自然語言描述直接跳轉到影片中的相關部分。

3. 影片精彩片段產生器

這個應用程式可以從長達數小時的影片中自動提取最重要的時刻,適用於足球比賽等長時間的活動摘要。


與 Transformers 和 MLX 的結合

SmolVLM2 與 Hugging Face 的 Transformers 框架無縫集成,支持多種推理場景:

  • 影片推理:用戶可以通過簡單的聊天模板,讓模型生成對影片的詳細描述。
  • 多幅圖像推理:支援對多張圖片進行對比分析。
  • MLX 支持:在 Apple Silicon 裝置上運行 SmolVLM2 的高效推理,適合 Swift 開發者。

此外,SmolVLM2 還支持在視訊數據上的微調,用戶可以根據自己的需求進一步優化模型。


為未來創造更多可能

SmolVLM2 的推出標誌著視訊理解模型進入了一個新時代。它不僅在效能上實現了突破,還通過小型化設計使模型更加普及,適用於更多場景和設備。

如果你對 SmolVLM2 感興趣,歡迎探索以下資源:

M2 還支持在視訊數據上的微調,用戶可以根據自己的需求進一步優化模型。


為未來創造更多可能

SmolVLM2 的推出標誌著視訊理解模型進入了一個新時代。它不僅在效能上實現了突破,還通過小型化設計使模型更加普及,適用於更多場景和設備。

如果你對 SmolVLM2 感興趣,歡迎探索以下資源:

地震警報批次檔通知到line notify或官方推播方式

最近地震頻傳,但因為工作關係不見得都在電腦旁~於是思考另一種方式。把程式另存成ansi的bat檔案

一、使用line notify

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Notify
set LINE_TOKEN=你的line notify token

:: 準備訊息內容
set "message=地震警報! 震度: %magnitude%, 預計抵達時間: %seconds%秒"

:: 使用 curl 發送 LINE Notify
curl -X POST https://notify-api.line.me/api/notify ^
-H "Authorization: Bearer %LINE_TOKEN%" ^
-F "message=%message%"

if %ERRORLEVEL% EQU 0 (
echo LINE通知發送成功!
) else (
echo LINE通知發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)
goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

二、官方帳號推播給個人

@echo off
:: 檢查是否提供了兩個參數
if "%1"=="" goto usage
if "%2"=="" goto usage

:: 將參數存入變數
set magnitude=%1
set seconds=%2

:: 檢查震度是否大於 2
if %magnitude% LSS 2.0 (
echo 震度小於2.0,不發送通知
goto end
)

:: LINE Messaging API 設定
set CHANNEL_TOKEN=你的chaneel token
set USER_ID=你的id

:: 使用 curl 發送訊息 (使用單引號並直接寫入JSON)
curl -v -X POST https://api.line.me/v2/bot/message/push ^
-H "Content-Type: application/json" ^
-H "Authorization: Bearer %CHANNEL_TOKEN%" ^
-d "{\"to\":\"%USER_ID%\",\"messages\":[{\"type\":\"text\",\"text\":\"地震警報!震度:%magnitude%,預計抵達時間:%seconds%秒\"}]}"

if %ERRORLEVEL% EQU 0 (
echo LINE訊息發送成功!
) else (
echo LINE訊息發送失敗...
echo 錯誤代碼: %ERRORLEVEL%
)

goto end

:usage
echo 使用方式: %0 震度 秒數
echo 範例: %0 6.0 30

:end

25 個 JavaScript 新特性,讓你的程式碼更簡潔、更強大!

JavaScript 作為最受歡迎的程式語言之一,隨著 ECMAScript 標準的持續更新,為開發者帶來了許多實用又強大的新功能。不管你是新手還是老手,這些新特性都能幫助你寫出更簡潔、更高效的程式碼!以下精選了 25 個超實用的 ES 新特性,一起來看看吧!


1. 可選鏈操作符(Optional Chaining)

告別繁瑣的空值檢查,只需用 ?. 就能輕鬆處理物件屬性訪問。

javascript

// 傳統寫法
const street = user && user.address && user.address.street;

// 新寫法
const street = user?.address?.street;


2. 空值合併運算符(Nullish Coalescing)

用 ?? 處理 null 或 undefined 的預設值設定。

javascript

const value = null;
const defaultValue = value ?? 'default'; // 結果為 'default'

3. 私有類字段(Private Class Fields)

用 # 宣告私有字段,讓封裝性更強。

javascript

class Person {
#name;
constructor(name) {
this.#name = name;
}

getName() {
return this.#name;
}
}


4. 動態匯入(Dynamic Import)

按需載入模組,提升應用效能。

javascript

button.addEventListener('click', async () => {
const module = await import('./feature.js');
module.doSomething();
});

5. Array.prototype.flat() 和 flatMap()

輕鬆展平嵌套陣列。

javascript

const nested = [1, [2, 3], [4, [5, 6]]];
const flattened = nested.flat(2); // 結果為 [1, 2, 3, 4, 5, 6]

6. 物件字面量增強

更簡潔的物件屬性與方法定義。

javascript

const name = 'Tom';
const age = 18;
const person = {
name,
age,
sayHi() {
console.log('Hi!');
}
};

7. Promise.allSettled()

等待所有 Promise 完成,不管成功或失敗。

javascript

const promises = [
fetch('/api/1'),
fetch('/api/2'),
fetch('/api/3')
];

const results = await Promise.allSettled(promises);


8. BigInt

處理超大整數。

javascript

const bigNumber = 9007199254740991n;
const result = bigNumber + 1n;

9. globalThis

統一的全域物件存取方式。

javascript

console.log(globalThis);

10. String.prototype.matchAll()

更強大的字串匹配功能。

javascript

const str = 'test1test2test3';
const regexp = /test(\d)/g;
const matches = [...str.matchAll(regexp)];

11. 邏輯賦值運算符

簡化條件賦值操作。

javascript

複製
x &&= y; // 等同於 x && (x = y)
x ||= y; // 等同於 x || (x = y)
x ??= y; // 等同於 x ?? (x = y)

12. Promise.any()

返回第一個成功的 Promise。

javascript

const promises = [
fetch('/api/1'),
fetch('/api/2'),
fetch('/api/3')
];

try {

const first = await Promise.any(promises);
console.log(first);
}
catch (error) {
console.log('All promises rejected');
}

13. 數字分隔符

提高大數字的可讀性。

javascript
const billion = 1_000_000_000;
const bytes = 0xFF_FF_FF_FF;

14. String.prototype.replaceAll()

一次替換字串中所有的匹配項。


15. WeakRef 和 FinalizationRegistry

更好的記憶體管理方式。


16. 頂層 await

在模組的頂層直接使用 await。


17. 類靜態初始化塊

更靈活的類靜態成員初始化。


18. at() 方法

更直觀的陣列索引訪問。

javascript
const arr = [1, 2, 3];
console.log(arr.at(-1)); // 結果為 3

19. Object.hasOwn()

更安全的屬性檢查方法。


20. 錯誤原因(Error Cause)

更好的錯誤追蹤。


21. Array.prototype.group()

方便的陣列分組操作。


22. 正則表達式命名捕獲組

更清晰的正則匹配結果。


23. Promise.withResolvers()

更優雅的 Promise 操控方式。


24. Array 複製方法

不修改原陣列的情況下進行操作。

javascript

const arr = [1, 2, 3];
const copy = arr.toReversed(); // 複製並反轉
const sorted = arr.toSorted(); // 複製並排序

25. 裝飾器

增強類與類成員的功能。

javascript

function logged(target, context) {
return class extends target {
exec(...args) {
console.log('Starting execution...');
const result = super.exec(...args);
console.log('Finished execution.');
return result;
}
};
}

@logged
class Example {
exec() {
// ...
}
}


這 25 個 JavaScript 新特性不僅讓程式碼更簡潔,也讓開發過程更加流暢!快把它們用到你的專案中,提升程式碼品質吧!