這個單元解決什麼問題這四個機制把 Claude Code 從「會聊天的代理」變成「貼合你工作流的自動化系統」。它們常被混用:該保證一定發生的事寫成 Skill 求模型照做、該隔離的子任務塞進主上下文、該打包分發的設定靠手動複製。這個單元先給你「何時用哪一個」的判準,再逐一拆每個機制的格式、放置位置、優先序與安全邊界。深入製作留給 Part IV,這裡建立的是選型總覽。
學習目標
- 能說明 Skill / Hook / Subagent / Plugin 各自解決什麼問題,給一個任務能判斷該用哪一個。
- 能讀懂
SKILL.md與 subagent 的 frontmatter 主要欄位。 - 能列出主要 Hook 事件與 handler 類型,並說出一個確定性把關的實用範例。
- 能從官方與社群市集安全地安裝 plugin,並知道安裝前該掃描什麼。
1. 先決定用哪一個:四機制選型
四個機制不是平行的替代品,它們回答的是不同問題。先看這張選型表,再往下讀各自細節:
選型原則:要「保證發生」用 Hook,要「可重用流程」用 Skill,要「隔離上下文」用 Subagent,要「打包分發」用 Plugin。 它們正交但可組合,一個 plugin 可以同時帶 skill、hook 與 subagent。
互動選型工具
用下方工具回答幾個問題,直接給出機制建議:2. Skills:可重用的流程
Skill 是以SKILL.md(YAML frontmatter + Markdown 本體)定義的可重用流程。和 CLAUDE.md 開機即全文載入不同,Skill 走 progressive disclosure:session 啟動時只有它的 description 進 context,被觸發後 SKILL.md 全文才作為一條訊息載入 [1]。這讓你能裝幾十個 Skill 而不撐爆 context。
主要 frontmatter 欄位(全部 optional,只有 description 建議必填)[1]:
一個最小 SKILL.md放在
~/.claude/skills/tidy-refs/SKILL.md(個人)或 .claude/skills/tidy-refs/SKILL.md(專案)。觸發後 Claude 才讀到這套步驟。~/.claude/skills/ > 專案 .claude/skills/ > plugin(plugin skill 用 plugin-name:skill-name 命名空間,不與其他層衝突)[1]。
動態 context 注入:SKILL.md 內可放會在載入前先執行、並用輸出替換的指令,讓你把即時資訊(git 狀態、日期)注入流程 [1]。行首語法如下,另也支援以三個反引號加驚嘆號起始的多行區塊:
settings.json 的 disableSkillShellExecution: true 停用此行為。
與舊式 commands 的關係:.claude/commands/<name>.md 仍支援且生成同樣的 /name;與同名 Skill 衝突時 Skill 優先 [1]。Command 與 Skill 的取捨見 04-3、04-4。
3. Hooks:事件驅動的確定性把關
Hook 是掛在生命週期事件上的自訂指令。它和 Skill / CLAUDE.md 的根本差別是強制性:CLAUDE.md 是「請你遵守」,Hook 是「我來確保」。需要保證發生的事用 Hook,不要寫進指令祈禱模型照做。 事件:Claude Code 截至 2026-06 有 30 個 hook 事件 [2],總覽階段你會先用到這幾個:
完整事件清單(含
PermissionRequest、SubagentStart / SubagentStop、PreCompact 等)見官方與 04-6。
handler 類型:command(執行 shell 指令 / 腳本)、http(POST 事件 JSON 到 URL)、mcp_tool(呼叫 MCP 工具)、prompt(以 LLM 評估)、agent(帶工具的 agentic verifier)[2]。
協定:hook 從 stdin 收一段 JSON(含 session_id、tool_name、tool_input 等);exit code 2 是阻擋性錯誤(stderr 顯示給 Claude、動作被擋);exit 0 時解析 stdout 的 JSON 取得決策 [2]。PreToolUse 要擋一個工具呼叫,回傳:
存檔後自動格式化的 PostToolUse hook在 hook 腳本從 stdin 的 JSON 取得被改動的檔案路徑(
settings.json 的 hooks 鍵掛一個指向腳本的 PostToolUse,matcher 用 Edit|Write:tool_input.file_path),對它執行 formatter。注意 Claude Code 並未提供 $CLAUDE_FILE_PATHS 這類環境變數帶路徑(截至 2026-05)[2],路徑要從 stdin JSON 讀。4. Subagents:隔離上下文的子代理
Subagent 是定義在.claude/agents/*.md(YAML frontmatter + 系統提示)的子代理,用 /agents 管理。它的核心價值是上下文隔離:把探索性或大量讀取的子任務丟給一個乾淨上下文的 subagent,主代理只收最終結論,既省主線 token 又避免無關內容稀釋(呼應 01-4)[3]。
主要 frontmatter 欄位(只有 name、description 必填)[3]:
放置與優先序(高到低):受管理 >
--agents CLI > 專案 .claude/agents/ > 使用者 ~/.claude/agents/ > plugin [3]。
內建 subagent:Explore(Haiku、唯讀、跳過 CLAUDE.md,用於搜尋分析)、Plan(唯讀規劃)、general-purpose(全工具、複雜多步任務)[3]。一個重要限制:subagent 不能再生成 subagent(無巢狀委派)。
5. Plugins 與 Marketplaces:打包與分發
Plugin 把 skills / agents / hooks / MCP server 打包成一個可安裝單位,讓團隊一次裝齊一致的設定。 市集與安裝(截至 2026-05)[4]:- 官方市集
claude-plugins-official啟動時自動可用:/plugin install <name>@claude-plugins-official,瀏覽於claude.com/plugins。 - 社群市集
anthropics/claude-plugins-community:先/plugin marketplace add anthropics/claude-plugins-community,再/plugin install <name>@claude-community。 - 任意市集:
/plugin marketplace add owner/repo(GitHub)、Git URL 或本地路徑(該 repo 需含.claude-plugin/marketplace.json)。
.claude-plugin/plugin.json 是 manifest(唯一放在此目錄的檔案),元件放在外層的 skills/、agents/、commands/、hooks/hooks.json、.mcp.json、.lsp.json、monitors/monitors.json、bin/,外加 plugin 自身的 settings.json(僅 agent 與 subagentStatusLine 兩個 key 生效)[4]。
官方明確警告:不要把 commands/、agents/、skills/、hooks/ 放進 .claude-plugin/ 目錄裡,只有 plugin.json 放那。
完整目錄結構:
my-plugin/
.claude-plugin/
plugin.json · 唯一放這裡的檔
skills/
agents/
hooks/
commands/
.mcp.json
settings.json · 僅 agent / subagentStatusLine 生效
工具對照
四機制在其他工具的對應參差不齊(截至 2026-05,精確機制以各官方文件為準,詳見 02-6):對照只給座標各家對機制的命名與成熟度差異大,精確細節以各官方文件為準。Claude Code 提供約 30 個 hook 事件與內建 subagent 上下文隔離 [2, 3];多數其他工具偏「指令 / 規則」層,無對等的確定性事件機制。深入對照見 02-6。
動手做
1
寫一個最小 Skill
照第 2 節範例,在
~/.claude/skills/ 下建一個 SKILL.md(例如「依本實驗室格式整理文獻」),只給 description 與步驟。觸發它,確認 Claude 真的按步驟做。2
加一個 PostToolUse Hook 在存檔後跑 lint / 格式化
照第 3 節範例,在
settings.json 掛 Edit|Write matcher 的 PostToolUse,指向一個從 stdin JSON 讀 tool_input.file_path 的腳本。改一個檔,確認 hook 真的執行。3
建一個唯讀 review subagent
照第 4 節範例,在
.claude/agents/ 建一個只給 Read / Grep 的審查 subagent,用 /agents 確認它載入,派它審查一段內容、只收結論。常見誤區
自我檢核
通過本單元的標準
- 給你一個重複任務(例如「每次提交前跑測試並擋掉失敗的提交」),你能判斷該用 Skill、Hook 還是 Subagent 嗎?依據是什麼?
disable-model-invocation: true與user-invocable: false兩個 Skill 欄位,效果差在哪?- 你要 Claude Code 在每次存檔後一定執行格式化,你會用哪個 hook 事件?為什麼不寫進 CLAUDE.md?
- 一個審查型 subagent 該給哪些工具權限?給了寫入工具會違反什麼原則?
- 從社群市集裝一個 plugin 前,你會掃描哪幾類風險訊號?
來源與延伸閱讀
事實主張依官方文件,快變動項標註截至 2026-05。-
[1] Anthropic, “Skills,” Claude Code Docs.(
SKILL.mdfrontmatter 欄位;progressive disclosure 隨需載入;放置優先序企業 > 個人 > 專案 > plugin;!`command`動態注入與disableSkillShellExecution;與.claude/commands/同名時 Skill 優先) https://code.claude.com/docs/en/skills (截至 2026-05) -
[2] Anthropic, “Hooks,” Claude Code Docs.(約 30 個 hook 事件;handler 類型 command / http / mcp_tool / prompt / agent;stdin JSON 協定、exit code 2 阻擋、exit 0 + JSON 決策;
PreToolUse的permissionDecision: deny;matcher 語法;未提供$CLAUDE_FILE_PATHS環境變數,路徑由 stdin JSONtool_input.file_path取得) https://code.claude.com/docs/en/hooks (截至 2026-05) -
[3] Anthropic, “Subagents,” Claude Code Docs.(
.claude/agents/*.mdfrontmatter;放置優先序受管理 >--agents> 專案 > 使用者 > plugin;內建 Explore / Plan / general-purpose;上下文隔離只回傳結論;subagent 不能巢狀;isolation: worktree) https://code.claude.com/docs/en/sub-agents (截至 2026-05) -
[4] Anthropic, “Plugins,” Claude Code Docs.(官方市集
claude-plugins-official自動可用、社群anthropics/claude-plugins-community;/plugin install、/plugin marketplace add;plugin 結構.claude-plugin/plugin.json+ 外層skills/agents/hooks/hooks.json.mcp.json;只有 plugin.json 放.claude-plugin/) https://code.claude.com/docs/en/plugins (截至 2026-05)