最後更新:2026-03-10 適用對象:接手維護或參與協作的工程師 前提假設:你懂軟體工程,但不一定用過 Claude Code CLI
Claude Code CLI + 自定義 agent/skill/hook/memory
層,建構在 ~/.claude/ 目錄下的一套「AI
驅動的策略分析工作站」。
白話說:這不是一個 web app,而是一台裝滿分析工具的工作台。Claude Code
是作業系統,agent 是員工,skill 是 SOP,hook 是品管流程,memory
是公司制度。整套系統透過終端機(CLI)操作,用 slash command(如
/brand-research、/marketing)觸發完整的多階段分析流程。
系統裡有 39 位 agent,每位有明確的職責、觸發詞、和思考力度設定(effort)。
比喻:這是一間有 39 人的顧問公司。但你不會每次開會都叫齊 39 人 -- 那不現實,也浪費時間。所以 agent 分成三層操作表面:
| 表面 | 說明 | 人數 | 類比 |
|---|---|---|---|
| Core | 日常高頻使用的核心團隊 | 12 | 常任委員會 |
| Conditional | 特定情境才叫的專家 | 13 | 特聘顧問 |
| Specialist | 高度專業、低頻使用 | 14 | 外部學者 |
Agent 又依職能分成 5 個層級:
決策層 (6) -- Jobs/Gates/Musk/Popovich/Hassabis/Creative Council
以真實思維模型命名,各代表不同決策視角
協調層 (1) -- Orchestrator,雙軌調度(單任務 vs 多視角協作)
產品層 (2) -- Designer + PM
執行層 (24) -- 研究院(4) / 策略組(4) / 數據組(3) / 開發組(3) / 品質組(3) / 資安組(3) / 其他(4)
驗證層 (5) -- Consumer/CFO/Lawyer/Marketer/Skeptic
+ Joker (1) -- 不屬於任何層級,動態介入打破共識陷阱
為什麼這樣設計? 想像你做一份品牌調研報告。如果只有一個 AI 去寫,它會自洽但可能有盲點。把不同「專家」拆開,讓 Strategist 做定位、Deep Researcher 做資料蒐集、Skeptic 做挑戰,最後再碰撞 -- 報告的品質和可信度會好很多。這就像 code review:你不會自己 review 自己的 PR。
技術實作:每位 agent 就是一個 markdown
檔(~/.claude/agents/*.md),定義了該 agent
的角色、視角、工具權限。Claude Code 的 subagent / Agent Teams
機制會載入對應定義,在獨立 context 中執行任務。
Skill 是結構化的工作流程定義,存在
~/.claude/skills/<name>/SKILL.md。
目前有 10 個 skill,其中 3 個是核心業務 skill:
| Skill | 用途 | 比喻 |
|---|---|---|
/brand-research |
品牌現況診斷(品牌「是什麼」) | 健康檢查報告 |
/marketing |
行銷策略處方(品牌「該怎麼做」) | 治療計畫 |
/research |
通用深度研究 | 研究院全面調研 |
/brainstorm |
創意發散 | 腦力激盪 |
/plan |
技術規劃 | 架構設計 |
/present |
簡報製作 | 提案簡報 |
/new-project |
建立新專案結構 | 工具 |
/ops |
系統維運 | 工具 |
/tool-research |
工具調研 | 工具 |
/yfbb-export |
資料匯出 | 工具 |
為什麼不直接寫在 prompt 裡? 因為一個完整的品牌調研流程涉及:需求釐清 -> 多 agent 並行研究 -> 來源品質閘門 -> 驗證 -> 洞察整合 -> 交叉辯論 -> 報告產出 -> 自檢。如果每次都手寫 prompt 來指揮這一切,你會瘋掉。Skill 把流程「程序化」了,就像 CI/CD pipeline 把部署程序化一樣。
核心 Skill 的共同機制:
Hook 是在 Claude Code 生命週期事件上掛載的 shell script,自動執行、不需人工觸發。
目前有 3 個自建 hook:
| Hook | 觸發時機 | 做什麼 | 模式 |
|---|---|---|---|
runtime-event-log.sh |
4 個 lifecycle 事件 | 記錄 session/agent/skill 的結構化 telemetry 到月誌 | async |
quality-gate.sh |
每次寫入 .md 檔 | 檢查認識論標記(L1-L5)、來源引用、CRF 格式 | sync, advisory |
debate-quality-judge.sh |
寫入辯論記錄時 | 統計辯論指標(字數、認識論標記數、來源數、輪次) | async |
為什麼不直接寫在 skill 裡? 因為品管應該是 cross-cutting concern,不是每個 skill 各自實作一份。Hook 就像 git hooks 或 middleware -- 你寫一次,所有流程自動套用。
重要細節:quality-gate.sh 目前是
advisory 模式(永遠 exit
0),只提醒不阻擋。要啟用阻擋模式,改 exit code 為 2。這是刻意的設計決策
-- 先觀察誤報率,確認穩定後再考慮強制。
Claude Code 有一套原生的指令階層機制,基於 CLAUDE.md
檔案的目錄位置:
Layer 1 ~/.claude/CLAUDE.md -- 總部規章(user-level,永遠載入)
Layer 1.5 ~/CLAUDE.md -- 工作區規則(project layer,永遠載入)
Layer 1.8 ~/.claude/projects/CLAUDE.md -- 部門規章(subtree rules,進入子樹時載入)
Layer 2 REGISTRY.md -- 調度手冊(首次調度時載入)
Layer 3 agents/*.md -- 個人職責說明書(按需載入)
Layer 4 skills/ + library/ -- 知識庫(JIT 檢索,從不預載)
為什麼分這麼多層? 兩個字:省 token。如果把 39 個 agent 定義全部預載,大約吃掉 15,000 tokens。但查 REGISTRY.md(約 1,000 tokens)再按需載入 1-5 個 agent(約 1,500 tokens),節省 85-90%。這就像 lazy loading -- 不要一開始就把所有 JS bundle 載完。
關鍵原則:
這套系統有 7 層記錄機制,各有明確分工:
Layer 0 git -- 合約(檔案變更的唯一事實來源)
Layer 0.5 logs/ -- 日誌(事件、audit、skill run 記錄)
Layer 0.8 DECISIONS.md -- 決策紀錄(專案決策、取捨、規則)
Layer 0.9 memory/MEMORY.md -- 里程碑摘要(高層脈絡,不重抄 diff)
Layer 1 CLAUDE.md hierarchy -- 制度手冊(Claude Code 原生指令)
Layer 1.5 claude-mem MCP plugin -- 自動觀察(補充型,非權威來源)
Layer 2 memory/*.md -- 經驗傳承(長期原則、偏好、反模式)
為什麼不用一個大資料庫? 因為不同類型的知識有不同的生命週期和信任等級。git diff 是事實,不可能錯;memory 裡的偏好是可能過時的經驗。把它們混在一起,你就分不清哪些是 ground truth,哪些是 heuristic。
已退役層:~/.claude/agent-memory/
是早期實驗,嘗試讓 agent 跨 session
累積知識。結論是原生能力已足夠,不需要平行系統。目錄保留但不再使用。
使用者 Claude Code CLI ~/.claude/
| | |
| /brand-research | |
|---------------------> | |
| | 1. 載入 CLAUDE.md 階層 |
| |------------------------->| CLAUDE.md (L1)
| | | ~/CLAUDE.md (L1.5)
| | 2. 查 REGISTRY.md |
| |------------------------->| agents/REGISTRY.md
| | |
| | 3. 載入 SKILL.md |
| |------------------------->| skills/brand-research/SKILL.md
| | |
| | 4. 按 Skill 調度 Agents |
| | |
| | +-----------------------+|
| | | Stage 1: 並行研究 ||
| | | Deep Researcher || -> stage1/deep-researcher.md
| | | Strategist || -> stage1/strategist.md
| | | Context Analyst || -> stage1/context-analyst.md
| | +-----------------------+|
| | | |
| | 5. Source Quality Gate |
| <来源品質報表摘要> | <------------------------|
| 確認繼續 | |
|---------------------> | |
| | +-----------------------+|
| | | Stage 2-3: 驗證+洞察 || -> stage2/*.md, stage3/*.md
| | +-----------------------+|
| | | |
| | 6. Agent Teams 辯論 |
| | +-----------------------+|
| | | Cross-Review || -> cross-review/*.md
| | | 正方 vs 反方 + Joker ||
| | +-----------------------+|
| | | |
| | 7. 報告產出 + 自檢 |
| | | |
| | 8. Hooks 自動觸發 |
| | quality-gate.sh ----->| (認識論/來源檢查)
| | debate-quality.sh --->| logs/YYYY-MM.jsonl
| | runtime-event.sh ---->| logs/YYYY-MM.jsonl
| | | |
| <最終報告> | <------------------------|
┌──────────────────────┐
│ ~/.claude/CLAUDE.md │ Layer 1: 永遠載入,最小常駐規則
└──────────┬───────────┘
|
┌──────────v───────────┐
│ ~/CLAUDE.md │ Layer 1.5: workspace project layer
└──────────┬───────────┘
|
┌───────────────────┼───────────────────┐
| | |
┌────────v─────────┐ ┌──────v───────┐ ┌────────v─────────┐
│ agents/ │ │ skills/ │ │ library/ │
│ REGISTRY.md │ │ SKILL.md │ │ reference/ │
│ 39 agent 定義 │ │ 10 個 skill │ │ frameworks/ │
│ 觸發詞 + effort │ │ 調度流程 │ │ checklists/ │
└────────┬─────────┘ └──────┬───────┘ │ templates/ │
| | │ sources/ │
| | └────────┬─────────┘
└───────────────────┼───────────────────┘
|
┌──────────v───────────┐
│ hooks/ │ PostToolUse / Lifecycle
│ quality-gate.sh │ 品質閘門
│ debate-quality.sh │ 辯論評分
│ runtime-event.sh │ telemetry
└──────────┬───────────┘
|
┌──────────v───────────┐
│ logs/YYYY-MM.jsonl │ 統一事件日誌
│ logs/eval-artifacts/ │ eval 產物
└──────────────────────┘
新增 agent:
~/.claude/agents/ 建立
agent-name.md,定義角色、視角、工具權限~/.claude/agents/REGISTRY.md 的 Full Agent Table
中新增一行(觸發詞、effort、檔案名)修改 agent:
agents/*.md 檔案注意:agent merge/deprecate
走數據驅動。不要憑感覺砍能力,先看 telemetry 和使用率(telemetry 在
logs/ 裡,由 runtime-event-log.sh
自動記錄)。
步驟:
~/.claude/skills/<skill-name>/SKILL.md要點:
參考:看 skills/brand-research/SKILL.md
和 skills/marketing/SKILL.md
作為範本。它們是系統中最完整的兩個 skill,涵蓋了所有慣例。
Hook
掛載位置:~/.claude/settings.json(不在版控中)
Hook 定義文件:~/.claude/hooks/*.sh
Hook
登記簿:~/.claude/hooks/REGISTRY.md
新增 hook:
~/.claude/hooks/settings.json 中加入掛載設定(event, path,
mode)hooks/REGISTRY.md重要設計約束:
logs/YYYY-MM.jsonl,不建立平行日誌系統jq 解析runtime-event-log.sh 使用 cache 機制避免重複解析
transcript目前 hook 列表:
| Script | Events | Mode |
|---|---|---|
runtime-event-log.sh |
InstructionsLoaded / SubagentStart / SubagentStop / ConfigChange | async |
quality-gate.sh |
PostToolUse:Write | sync, advisory |
debate-quality-judge.sh |
PostToolUse:Write | async |
最重要的原則:不要在 MEMORY.md 重抄 git
diff。
| 你想記錄什麼 | 寫在哪裡 |
|---|---|
| 檔案改了什麼 | 不用寫,git 已經記了 |
| 某次 skill run 的結果 | logs/YYYY-MM.jsonl |
| 專案的重要決策 | projects/<name>/DECISIONS.md |
| 專案的里程碑 | projects/<name>/memory/MEMORY.md(簡短) |
| 長期有效的偏好/原則 | memory/learnings.md 或相關主題檔 |
| CLAUDE.md 常駐規則 | 對應層級的 CLAUDE.md |
反模式警告:
MEMORY.md 變成流水帳claude-mem 注入的子目錄 CLAUDE.md 是
runtime artifact,不是設計的一部分系統有一套最小 eval 回路,定義在
~/.claude/library/reference/checklists/skill-eval.md。
何時需要跑 eval:
不需要跑的情況:純 typo、路徑修正、標題調整。
Benchmark 題組(3 組必跑):
| ID | Skill | Prompt |
|---|---|---|
| BR-001 | brand-research | /brand-research 星巴克 台灣咖啡連鎖 |
| MKT-001 | marketing | /marketing foodpanda 台灣外送服務 |
| RES-001 | research | /research AI Agent 最新發展 full |
評分維度(5 維度 x 0-2 分 = 總分 10):
硬性失敗條件(出現任一即判定失敗,不看總分):
結構級變更:同一 benchmark 至少跑 3 次,避免單次波動誤判。
工具:可搭配 skill-creator@anthropic
plugin 執行自動化 eval,但 accept/reject 決策仍依 skill-eval.md
的規則,不直接看 plugin 的 pass_rate。
| 項目 | 現況 | 影響 |
|---|---|---|
| eval baseline 深度不足 | 三組核心 skill 各只有 1 次 baseline run;protocol 要求結構級變更需 3-run window | 目前的 baseline 數據有統計波動風險 |
| Marketing skill token 成本偏高 | Marketing 的 token 成本是 brand-research 的 2 倍(4.6x vs 2.3x without_skill 比),因為多階段 agent dispatch | 需觀察是否值得做階段精簡 |
| Agent portfolio 未經使用率驗證 | Core/Conditional/Specialist 分層是設計判斷,還沒有 30 天使用數據支撐 | 可能有 agent 該從 Specialist 升到 Core,或反過來 |
| quality-gate.sh 永遠 advisory | 品質閘門不會真的阻擋寫入,只是提醒 | 如果忽略提醒,品質檢查形同虛設 |
| runtime telemetry 尚未完成 review | runtime-event-log.sh 掛上了 4 個 lifecycle
events,但還沒累積足夠 run 數來做噪音分析 |
不確定目前記錄的欄位是否都有用 |
| Hook wiring 不在版控中 | settings.json 被 .gitignore 排除,hook 掛載靠
hooks/REGISTRY.md 手動同步 |
換機器或新環境需手動重建 |
| agent-memory/ 已退役但未清除 | 目錄還在,只剩 1 筆歷史記錄 | 新人可能困惑這是什麼 |
| live web 漂移 | Eval 依賴即時搜尋,同一 benchmark 在不同時間跑可能因網路資料變化而得到不同結果 | benchmark 的 stddev 可能偏高 |
以下是歷史上嘗試過、最終決定不走的路 -- 了解這些可以避免重蹈覆轍:
| 嘗試 | 放棄原因 |
|---|---|
| 自建 agent-memory 跨 session 記憶 | 原生能力已足夠,自建層沒有穩定落地為 workflow |
| 引入 Gemini / Codex / claude-flow 做多 AI 協作 | 增加的複雜度遠大於收益,回歸純 Claude Code |
| 模擬式多輪辯論(主控扮演多個角色) | Agent Teams 的真實對話品質更好,且 Joker 可動態介入 |
| 預載全部 39 agent 定義 | 15K tokens 浪費,改為按需載入省 85-90% |
如果你是新來的工程師,建議的學習路徑:
~/.claude/CLAUDE.md --
最小常駐規則,只有 29 行,但定義了整個系統的哲學~/CLAUDE.md -- workspace
層規則,了解日常操作慣例~/.claude/agents/REGISTRY.md --
重點看架構圖和 Human Operating Surface~/.claude/skills/brand-research/SKILL.md --
最完整的 skill 範本,理解調度流程、CRF、來源閘門、認識論分層~/.claude/docs/memory.md -- 理解 7
層記錄分工,知道什麼該寫在哪裡/brand-research <品牌> quick --
親自體驗最簡流程,看看 agent 怎麼被調度、報告長什麼樣~/.claude/hooks/,理解自動品管機制~/.claude/library/reference/checklists/skill-eval.md
-- 理解 eval framework~/.claude/docs/roadmap.md --
理解目前的技術債和優先順序| 你想知道什麼 | 去哪裡找 |
|---|---|
| 現在有哪些 agent、怎麼調度 | agents/REGISTRY.md |
| 某項資訊該寫在哪裡 | docs/memory.md |
| 系統還有什麼待辦、歷史決策 | docs/roadmap.md |
| 認識論標記怎麼用(L1-L5) | library/reference/epistemic.md |
| InsightCard 怎麼寫 | library/reference/frameworks/data-to-insight.md |
| 報告自檢清單 | library/reference/checklists/fact-discipline.md |
| 專案清單與結構 | projects/INDEX.md |
| VPS 基礎設施 | ~/VPS-ALL.md |
本文件提及的關鍵檔案路徑:
| 檔案 | 路徑 |
|---|---|
| 系統憲法 | ~/.claude/CLAUDE.md |
| Workspace 規則 | ~/CLAUDE.md |
| Agent 註冊表 | ~/.claude/agents/REGISTRY.md |
| Agent 定義 | ~/.claude/agents/*.md |
| 記憶架構 | ~/.claude/docs/memory.md |
| 優化追蹤 | ~/.claude/docs/roadmap.md |
| Hook 定義 | ~/.claude/hooks/*.sh |
| Hook 登記簿 | ~/.claude/hooks/REGISTRY.md |
| Skill 定義 | ~/.claude/skills/<name>/SKILL.md |
| Eval 協議 | ~/.claude/library/reference/checklists/skill-eval.md |
| 事件日誌 | ~/.claude/logs/YYYY-MM.jsonl |
| Eval 產物 | ~/.claude/logs/eval-artifacts/ |
| 專案索引 | ~/.claude/projects/INDEX.md |
| 長期經驗 | ~/.claude/memory/*.md |
本文件由 Storyteller 撰寫。如有過時之處,以各 canonical doc 為準。