基於本能的學習系統,透過鉤子觀察對話,建立帶有信心評分的原子化本能,並將其演化為技能/指令/代理。v2.1 新增專案範圍的本能,防止跨專案污染。
Continuous Learning v2.1 - 本能架構
一個進階的學習系統,將你的 Claude Code 對話轉化為可重複使用的知識,透過原子化的「本能」——帶有信心評分的小型學習行為。
v2.1 新增了專案範圍的本能——React 模式留在你的 React 專案中,Python 慣例留在你的 Python 專案中,而通用模式(如「始終驗證輸入」)則全域共享。
何時啟用
- 設定從 Claude Code 對話自動學習
- 透過鉤子設定基於本能的行為提取
- 調整學習行為的信心門檻
- 檢視、匯出或匯入本能庫
- 將本能演化為完整的技能、指令或代理
- 管理專案範圍與全域本能
- 將本能從專案提升至全域範圍
v2.1 新功能
| 功能 | v2.0 | v2.1 |
|---|---|---|
| 儲存 | 全域 (~/.claude/homunculus/) |
專案範圍 (${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/projects/<hash>/) |
| 範圍 | 所有本能適用於所有地方 | 專案範圍 + 全域 |
| 偵測 | 無 | git remote URL / 儲存庫路徑 |
| 提升 | 不適用 | 專案 → 全域(當在 2 個以上專案中出現) |
| 指令 | 4 個 (status/evolve/export/import) | 6 個 (+promote/projects) |
| 跨專案 | 有污染風險 | 預設隔離 |
v2 新功能(相較於 v1)
| 功能 | v1 | v2 |
|---|---|---|
| 觀察 | 停止鉤子(對話結束) | PreToolUse/PostToolUse(100% 可靠) |
| 分析 | 主要上下文 | 背景代理 (Haiku) |
| 粒度 | 完整技能 | 原子化「本能」 |
| 信心 | 無 | 0.3-0.9 加權 |
| 演化 | 直接到技能 | 本能 -> 叢集 -> 技能/指令/代理 |
| 分享 | 無 | 匯出/匯入本能 |
本能模型
本能是一個小型學習行為:
---
id: prefer-functional-style
trigger: "when writing new functions"
confidence: 0.7
domain: "code-style"
source: "session-observation"
scope: project
project_id: "a1b2c3d4e5f6"
project_name: "my-react-app"
---
# Prefer Functional Style
## Action
Use functional patterns over classes when appropriate.
## Evidence
- Observed 5 instances of functional pattern preference
- User corrected class-based approach to functional on 2025-01-15
屬性:
- 原子化——一個觸發條件,一個動作
- 信心加權——0.3 = 暫定,0.9 = 幾乎確定
- 領域標記——code-style, testing, git, debugging, workflow 等
- 證據支持——追蹤哪些觀察建立了它
- 範圍感知——
project(預設)或global
運作方式
對話活動(在 git 儲存庫中)
|
| 鉤子捕捉提示 + 工具使用(100% 可靠)
| + 偵測專案上下文(git remote / 儲存庫路徑)
v
+---------------------------------------------+
| projects/<project-hash>/observations.jsonl |
| (提示、工具呼叫、結果、專案) |
+---------------------------------------------+
|
| 觀察者代理讀取(背景,Haiku)
v
+---------------------------------------------+
| 模式偵測 |
| * 使用者修正 -> 本能 |
| * 錯誤解決 -> 本能 |
| * 重複工作流程 -> 本能 |
| * 範圍決定:專案或全域? |
+---------------------------------------------+
|
| 建立/更新
v
+---------------------------------------------+
| projects/<project-hash>/instincts/personal/ |
| * prefer-functional.yaml (0.7) [project] |
| * use-react-hooks.yaml (0.9) [project] |
+---------------------------------------------+
| instincts/personal/ (全域) |
| * always-validate-input.yaml (0.85) [global]|
| * grep-before-edit.yaml (0.6) [global] |
+---------------------------------------------+
|
| /evolve 叢集 + /promote
v
+---------------------------------------------+
| projects/<hash>/evolved/ (專案範圍) |
| evolved/ (全域) |
| * commands/new-feature.md |
| * skills/testing-workflow.md |
| * agents/refactor-specialist.md |
+---------------------------------------------+
專案偵測
系統會自動偵測你目前的專案:
CLAUDE_PROJECT_DIR環境變數(最高優先順序)git remote get-url origin——雜湊後產生可攜帶的專案 ID(同一儲存庫在不同機器上得到相同 ID)git rev-parse --show-toplevel——使用儲存庫路徑作為備用(機器特定)- 全域備用——若未偵測到專案,本能歸入全域範圍
每個專案會得到一個 12 字元的雜湊 ID(例如 a1b2c3d4e5f6)。註冊檔位於 ${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/projects.json,將 ID 對應到人類可讀的名稱。
資料目錄
Continuous-learning-v2 將觀察者資料儲存在 ~/.claude 之外,以避免 Claude Code 的敏感路徑防護阻擋背景本能寫入:
- 當
CLV2_HOMUNCULUS_DIR設為絕對路徑時使用 $XDG_DATA_HOME/ecc-homunculus$HOME/.local/share/ecc-homunculus
現有用戶若資料在 ~/.claude/homunculus,可遷移一次:
bash skills/continuous-learning-v2/scripts/migrate-homunculus.sh
快速開始
1. 啟用觀察鉤子
若以外掛安裝(建議):
無需額外的 settings.json 鉤子區塊。Claude Code v2.1+ 會自動載入外掛的 hooks/hooks.json,且 observe.sh 已註冊在其中。
若你之前已將 observe.sh 複製到 ~/.claude/settings.json,請移除重複的 PreToolUse / PostToolUse 區塊。重複的外掛鉤子會導致雙重執行,並因 ${CLAUDE_PLUGIN_ROOT} 變數僅在外掛管理的 hooks/hooks.json 項目中可用而產生解析錯誤。
若手動安裝到 ~/.claude/skills,請在 ~/.claude/settings.json 中加入:
{
"hooks": {
"PreToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
}]
}],
"PostToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh"
}]
}]
}
}
2. 初始化目錄結構
系統會在首次使用時自動建立目錄,但你也可以手動建立:
# 全域目錄
mkdir -p "${XDG_DATA_HOME:-$HOME/.local/share}/ecc-homunculus"/{instincts/{personal,inherited},evolved/{agents,skills,commands},projects}
# 專案目錄會在鉤子首次於 git 儲存庫中執行時自動建立
3. 使用本能指令
/instinct-status # 顯示已學習的本能(專案 + 全域)
/evolve # 將相關本能叢集為技能/指令
/instinct-export # 匯出本能到檔案
/instinct-import # 從他人匯入本能
/promote # 將專案本能提升至全域範圍
/projects # 列出所有已知專案及其本能數量
指令
| 指令 | 說明 |
|---|---|
/instinct-status |
顯示所有本能(專案範圍 + 全域)及信心值 |
/evolve |
將相關本能叢集為技能/指令,建議提升 |
/instinct-export |
匯出本能(可按範圍/領域篩選) |
/instinct-import <file> |
匯入本能並控制範圍 |
/promote [id] |
將專案本能提升至全域範圍 |
/projects |
列出所有已知專案及其本能數量 |
設定
編輯 config.json 以控制背景觀察者:
{
"version": "2.1",
"observer": {
"enabled": false,
"run_interval_minutes": 5,
"min_observations_to_analyze": 20
}
}
| 鍵 | 預設值 | 說明 |
|---|---|---|
observer.enabled |
false |
啟用背景觀察者代理 |
observer.run_interval_minutes |
5 |
觀察者分析觀察結果的頻率 |
observer.min_observations_to_analyze |
20 |
執行分析前的最小觀察數 |
其他行為(觀察捕捉、本能門檻、專案範圍、提升條件)透過 instinct-cli.py 和 observe.sh 中的程式碼預設值設定。
檔案結構
${XDG_DATA_HOME:-~/.local/share}/ecc-homunculus/
+-- identity.json # 你的個人檔案、技術等級
+-- projects.json # 註冊檔:專案雜湊 -> 名稱/路徑/遠端
+-- observations.jsonl # 全域觀察(備用)
+-- instincts/
| +-- personal/ # 全域自動學習的本能
| +-- inherited/ # 全域匯入的本能
+-- evolved/
| +-- agents/ # 全域產生的代理
| +-- skills/ # 全域產生的技能
| +-- commands/ # 全域產生的指令
+-- projects/
+-- a1b2c3d4e5f6/ # 專案雜湊(來自 git remote URL)
| +-- project.json # 每個專案的中繼資料鏡像(id/name/root/remote)
| +-- observations.jsonl
| +-- observations.archive/
| +-- instincts/
| | +-- personal/ # 專案特定的自動學習
| | +-- inherited/ # 專案特定的匯入
| +-- evolved/
| +-- skills/
| +-- commands/
| +-- agents/
+-- f6e5d4c3b2a1/ # 另一個專案
+-- ...
範圍決定指南
| 模式類型 | 範圍 | 範例 |
|---|---|---|
| 語言/框架慣例 | project | 「使用 React hooks」、「遵循 Django REST 模式」 |
| 檔案結構偏好 | project | 「測試放在 __tests__/」、「元件放在 src/components/」 |
| 程式碼風格 | project | 「使用函數式風格」、「偏好 dataclasses」 |
| 錯誤處理策略 | project | 「使用 Result 型別處理錯誤」 |
| 安全實務 | global | 「驗證使用者輸入」、「清理 SQL」 |
| 一般最佳實務 | global | 「先寫測試」、「始終處理錯誤」 |
| 工具工作流程偏好 | global | 「先 Grep 再 Edit」、「先 Read 再 Write」 |
| Git 實務 | global | 「慣例式提交」、「小型聚焦提交」 |
本能提升(專案 -> 全域)
當同一個本能以高信心值出現在多個專案中時,它就有資格提升至全域範圍。
自動提升條件:
- 相同本能 ID 出現在 2 個以上專案
- 平均信心值 >= 0.8
如何提升:
# 提升特定本能
python3 instinct-cli.py promote prefer-explicit-errors
# 自動提升所有符合條件的本能
python3 instinct-cli.py promote
# 預覽但不實際變更
python3 instinct-cli.py promote --dry-run
/evolve 指令也會建議提升候選項目。
信心評分
信心會隨時間演化:
| 分數 | 意義 | 行為 |
|---|---|---|
| 0.3 | 暫定 | 建議但不強制 |
| 0.5 | 中等 | 相關時套用 |
| 0.7 | 強烈 | 自動核准套用 |
| 0.9 | 幾乎確定 | 核心行為 |
信心增加當:
- 模式被重複觀察到
- 使用者未修正建議的行為
- 來自其他來源的相似本能一致
信心減少當:
- 使用者明確修正該行為
- 模式長時間未被觀察到
- 出現矛盾的證據
為何使用鉤子而非技能進行觀察?
「v1 依賴技能來觀察。技能是機率性的——它們根據 Claude 的判斷,約 50-80% 的時間會觸發。」
鉤子100% 的時間會觸發,確定性地執行。這表示:
- 每個工具呼叫都被觀察到
- 沒有模式被遺漏
- 學習是全面的
向後相容性
v2.1 完全相容於 v2.0 和 v1:
- 現有的全域本能可透過
scripts/migrate-homunculus.sh從~/.claude/homunculus/instincts/遷移 - v1 的現有
~/.claude/skills/learned/技能仍可運作 - 停止鉤子仍會執行(但現在也會饋入 v2)
- 逐步遷移:兩者並行執行
隱私
- 觀察結果保留在本機機器上
- 專案範圍的本能按專案隔離
- 只有本能(模式)可以匯出——而非原始觀察結果
- 不會分享任何實際程式碼或對話內容
- 你可以控制匯出和提升的內容
相關資源
- ECC-Tools GitHub App - 從儲存庫歷史產生本能
- Homunculus - 啟發 v2 本能架構的社群專案(原子化觀察、信心評分、本能演化管線)
- 長篇指南 - 持續學習章節
基於本能的學習:一次一個專案,教會 Claude 你的模式。






