Applied AI School
v0 · 規劃中
Anthropic

Custom commands

.claude/commands/、$ARGUMENTS、什麼時候該抽出來。

TL;DR

  • .claude/commands/<name>.md 放一個 markdown 檔,自動變成 /<name> slash command
  • 內容就是 prompt 本身,可以用 $ARGUMENTS 接參數
  • 重複工作做超過 3 次就該抽出來——不然每次都在重打同一段 prompt

一個情境:每次寫完功能都要重打那三段

寫完一個 feature,你大概會跟 Claude Code 講三句話:

「跑 lint,把可以自動修的修一修。」 「幫我為剛改的檔案生 unit test。」 「最後檢查 deps 有沒有過時或 CVE。」

第一次打沒事,第十次打就開始懷疑人生——而且每次措辭略微不同,Claude 的反應也跟著飄。這三個都是該抽成 custom command 的明顯訊號

Command 是什麼

就一個 markdown 檔。把它丟進 .claude/commands/ 底下:

.claude/
└── commands/
    ├── audit-deps.md
    ├── lint-fix.md
    └── write-tests.md

檔名就是 command 名字——audit-deps.md 自動變成 /audit-deps。檔案內容就是會被送進去的 prompt body,沒有什麼 magic syntax。Claude Code 會自己掃這個資料夾,新增不用 restart

三個可以直接抄的範本

/audit-deps — 檢查過時或有 CVE 的 dependency

`npm audit` 找出有資安問題的套件,
再跑 `npm outdated` 看哪些版本落後超過一個 major。

請輸出表格:套件名 / 目前版本 / 建議版本 / 風險等級。
不要直接升級——先讓我看清單。

/write-tests <file> — 為指定檔生 unit test

幫 $ARGUMENTS 寫 unit test。

慣例:
- Vitest + React Testing Library
- test 檔放在同層的 __tests__/
- 命名為 [filename].test.ts(x)
- happy path、edge case、error state 各一組

呼叫:/write-tests src/hooks/use-auth.ts——$ARGUMENTS 會被替換成 src/hooks/use-auth.ts參數也不一定要是路徑,任何字串都行(「auth 那個 hook」也可以,Claude 會自己找)。

/lint-fix — 跑 linter 並修自動修得了的部分

1.`pnpm lint --fix`
2. 把無法自動修的 error 列出來,每個附一句該怎麼改
3. 不要動 warning,只處理 error

何時該抽

訊號該抽嗎
同一段 prompt 重打超過 3 次
想跨 session / 跨機器帶過去
團隊裡別人也會用到抽(放 project 層)
一次性的探索不用,直接打

抽出來的 cost 很低(一個 markdown 檔),但下次開新 session 不用再回想「上次那段 prompt 我怎麼寫的」。

接下來

Custom command 是 prompt 層的擴充——把你常打的指令封裝起來。下一篇看 tool 層的擴充:在 Claude Code 接 MCP server,讓 Claude Code 能呼叫外部系統的 API、查資料庫、操作 SaaS 工具。