跳至主要內容
EMil Wu
EN

從外洩原始碼拆解 Claude Code /insights — 安裝與使用指南

Claude Code 的 /insights 是一個非常實用的內建指令 — 它會分析你過去 30 天的對話記錄,產生一份互動式 HTML 報告,告訴你使用模式、摩擦點、甚至幫你寫好 CLAUDE.md 建議。

問題是,它是一個封裝在 CLI 內部的黑箱。你沒辦法自訂分析維度、指定專案範圍、或調整時間區間。

現在原始碼外洩了,我拿到完整的 3,200 行 TypeScript,把它拆出來重新設計,包裝成兩個版本。這篇記錄拆解的思路與最終的安裝方式。

關於這次外洩事件的完整報導,請看新聞:Claude Code 原始碼全面外洩


/insights 到底做了什麼?

先理解原版的運作流程,才知道我們在拆什麼。原始碼揭露了四個階段:

Phase 1 — Lite Scan: 掃描 ~/.claude/projects/ 下所有 .jsonl session 檔案,只讀 filesystem metadata,快速篩選。

Phase 2 — 建立 SessionMeta: 對每個 session 提取量化統計 — duration、tool 使用次數、程式語言、token 用量、git activity、response times、甚至 multi-clauding timestamps(同時跑多個 Claude 的行為)。

Phase 3 — Facet Extraction: 用 LLM 對每個 session 做語意分析,提取 goals、friction、satisfaction 等結構化 JSON。原版用的是 Opus,每次完整執行要 50-60 次 API 呼叫

Phase 4 — Insights Generation: 並行呼叫 LLM 產生 6-9 個 insight 區段,最後組裝成互動式 HTML 報告,輸出到 ~/.claude/usage-data/report.html

報告包含的區塊:

區塊內容
At a Glance哪些做得好、哪些卡住了、快速改善建議
Session 統計總 session 數、訊息數、時數、commit 數,附圖表
工作內容各專案的 session 分佈和摘要
摩擦點分析所有摩擦點分類排序,附實際對話範例
CLAUDE.md 建議可直接複製貼上的規則,基於你重複給過的指示
Skill & Hook 建議把重複性多步驟操作轉成自訂 Skill 或 Hook

拆解的思路

Step 1 — 取得完整原始碼

GitHub 上的外洩原始碼用 WebFetch 直接抓會被截斷或摘要,最後用 curl 下載完整的 insights.ts(3,200 行),再分段讀取分析。

Step 2 — 分析依賴與可複用度

不是所有程式碼都需要動。分析後發現:

  • ~60% 可直接複用 — 純邏輯函式:extractToolStatsaggregateDatadetectMultiClaudinggenerateHtmlReport
  • ~40% 需替換 — 內部依賴:queryWithModel(LLM 呼叫封裝)、session file 讀取、各種 internal utility

Step 3 — 關鍵架構決策:誰來當 LLM?

這是整個拆解最重要的一步。原版的 Phase 3 和 Phase 4 大量呼叫 LLM API,如果寫成獨立腳本,每次執行要自己付 API 費用(50-60 次 Opus 呼叫,不便宜)。

解法:包裝成 Skill + Sub-agent,讓 Claude Code 本身當 LLM。

獨立腳本Skill + Sub-agent
誰是 LLM你自己呼叫 APIClaude Code 本身
API Key需要額外設定不需要
額外費用有(50-60 次 API call)

最終架構:

  • 純計算(掃描、統計、HTML 渲染)→ Node.js 腳本,用 Bash tool 執行
  • 語意分析(facet extraction、insight generation)→ Claude Code Sub-agent 處理

Step 4 — 加入兩個維度

原版只能分析「所有專案、最近 30 天」。我加了兩個篩選維度:

  • 專案維度--project <name> 模糊匹配目錄名稱
  • 時間維度--days <N> 指定天數

這讓報告可以聚焦在特定專案的特定時段,而不是被所有對話的噪音淹沒。

Step 5 — 拆成兩個版本

根據使用情境拆成兩個版本:

Command 版Skill 版
安裝位置全域(~/.claude/commands/專案內(.claude/skills/
專案維度有(可跨專案指定)無(自動偵測當前專案)
時間維度
用法/insights emilwu-tw-site 7d/insights 7d

安裝方式

這兩個版本已經打包成 Claude Code Plugin,發布在統一的 Plugin Marketplace。

第一步:加入 Marketplace(每台電腦只需一次)

/plugin marketplace add emilwu/emilwu-plugins

第二步:安裝你要的版本

# Command 版 — 跨專案分析
/plugin install claude-insights-command@emilwu-plugins

# Skill 版 — 當前專案分析
/plugin install claude-insights-skill@emilwu-plugins

第三步:使用

# Command 版:指定專案 + 天數
/claude-insights-command:insights emilwu-tw-site 7d

# Skill 版:當前專案,指定天數
/claude-insights-skill:insights 7d

第一次執行時,SessionStart hook 會自動執行 npm installtsc 編譯 TypeScript,之後就不需要了。

關於打包成 Plugin 的過程和踩坑紀錄,我寫了另一篇實戰文章詳細說明,包含 Plugin 結構設計、驗證流程、以及統一 Marketplace 的建立。請看:實戰 Tips 2:把 Skill 打包成 Plugin 發布


為什麼要用拆解版?

原版 /insights 很好,但它是一個封閉系統。拆解版的價值在於:

  1. 專案聚焦 — 可以只看某個專案的分析,不被其他專案的噪音干擾
  2. 時間控制 — 7 天、14 天、30 天,你決定
  3. 零額外費用 — 語意分析由 Claude Code 本身處理,不需要額外 API 呼叫
  4. 可學習 — 看到完整的實作,理解 Anthropic 怎麼設計 session 分析 pipeline

或許最有價值的不是工具本身,而是拆解過程中學到的東西 — 看到一個頂級 AI 團隊怎麼設計分析系統,然後用 Skill + Sub-agent 架構把它變成零成本版本,這本身就是一次很好的 Context Engineering 實踐。


相關資源:

支持這個系列

如果這系列文章對你有幫助,考慮請我喝杯咖啡