Immune System v5.1 — 混合 Cheatsheet + Immune
你操作一個混合適應性系統,包含兩種互補記憶:
- Cheatsheet(正面模式):領域特定策略,在生成前注入以改善輸出品質
- Immune(負面模式):抗體,用於在生成後檢測已知錯誤並發現新威脅
兩種記憶皆使用熱/冷分層(Hot/Cold tiering)來保持上下文精簡。
所有資料存取皆透過 adapter CLI (node ~/.claude/skills/immune/immune-adapter.js)。
輸入解析
使用者會提供要掃描的內容。請解析以下參數:
- input:要掃描的文字/程式碼/內容(必要——可以是內聯或來自上下文)
- domain:下列其中之一:fitness, code, writing, research, strategy, webdesign, _global(預設:自動檢測)
- domains:領域陣列(覆蓋單一 domain)。範例:
domains=fitness,code - constraints:輸出應滿足的任何特定要求(選用)
- mode:
full(cheatsheet + 掃描,預設)|scan-only(跳過 cheatsheet)|cheatsheet-only(僅回傳 cheatsheet,不掃描)
如果沒有提供內聯文字,則掃描對話中最近的主要輸出。
領域自動檢測: 讀取 ~/.claude/skills/immune/config.yaml 並將內容與 domain_keywords 比對。若無強烈比對,則使用 ["_global"]。如果提供了單一 domain 字串,則包裹成陣列:domains = [domain]。
執行
步驟 -1 — 上下文搜尋(過去會話感知)
搜尋相關的過去會話以輔助當前的掃描:
node ~/.claude/skills/immune/immune-adapter.js get-context --query "{任務關鍵字或領域}" --days 90 --limit 5
如果有找到結果,請記下該領域的常見模式或過去問題。這能為掃描增添歷史感知——掃描器會知道類似的內容是否曾經被標記過。
記錄:[IMMUNE] Context: {count} 個相關過去會話已找到
步驟 0 — Cheatsheet 注入(正面模式)
如果 mode == "scan-only",則跳過此步驟。
0a. 透過 adapter 載入 HOT 策略:
執行:
node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier hot --limit 15
解析 JSON 輸出。adapter 會回傳已按領域預先篩選、分類為 HOT、按效果遞減排序,且上限為 15 個的策略。
0b. 載入 COLD 策略摘要:
執行:
node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier cold
從每個 COLD 策略的 pattern 欄位中提取一個簡短關鍵字。以逗號分隔列表形式連接。
0c. 建構 cheatsheet 區塊:
將 HOT 策略格式化為 XML:
<cheatsheet domain="{domains}">
<strategy id="{id}" effectiveness="{effectiveness}">
{pattern}
範例:{example}
</strategy>
...
</cheatsheet>
如果有 COLD 策略,則新增一行:
<cheatsheet_cold>也請考慮:{以逗號分隔的 COLD 模式關鍵字}</cheatsheet_cold>
如果 mode == "cheatsheet-only",則輸出 cheatsheet 區塊並在此停止。
記錄:
[IMMUNE] Cheatsheet:{n_hot} 個 HOT + {n_cold} 個 COLD 策略(領域:{domains})
0d. 向使用者呈現 cheatsheet:
如果是獨立執行(/immune),將 cheatsheet 顯示為使用者應在其下次生成中套用的上下文。如果由 Chimera 呼叫,則回傳 XML 區塊以注入 PRISM 提示中。
步驟 1 — 載入與分類抗體(Hot/Cold)
1a. 透過 adapter 載入 HOT 抗體:
執行:
node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier hot --limit 15
adapter 會回傳已按領域預先篩選、分類為 HOT(severity=critical 或 seen_count>=3 或 last_seen<30d)、按 severity 後按 seen_count 排序,且上限為 15 個的抗體。
1b. 載入 COLD 抗體摘要:
執行:
node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier cold
對於每個 COLD 抗體,從其 pattern 欄位中提取一個簡短關鍵字。
以逗號分隔列表形式連接。
記錄:
[IMMUNE] 分層:{n_hot} 個 HOT + {n_cold} 個 COLD / {n_hot + n_cold} 總計(領域:{domains})
步驟 2 — 掃描
使用以下 XML 結構化的提示來生成 immune-scan 代理(Haiku):
<scan_request>
<domains>{detected_domains 為 JSON 陣列}</domains>
<task>{任務描述或「掃描以下內容中的錯誤與威脅」}</task>
<constraints>{constraints 或「無」}</constraints>
<content>
{要掃描的輸入文字/程式碼/內容}
</content>
<hot_antibodies>
{JSON 陣列形式的 HOT 抗體 — 包含 id、domains、pattern、severity、correction 的完整物件}
</hot_antibodies>
<cold_summary>
休眠模式(未詳細列出,僅供知悉):{以逗號分隔的 COLD 關鍵字}
</cold_summary>
<cheatsheet_applied>
{已在步驟 0 中注入的策略 ID 和模式列表,或「無」(若為 scan-only 模式)}
</cheatsheet_applied>
</scan_request>
記錄:[IMMUNE] 正在掃描...({n_hot} 個活躍抗體)
等待結果。
如果有套用修正:
記錄:[IMMUNE] 比對 {antibody_id}:{original} → {corrected}
如果檢測到新威脅:
記錄:[IMMUNE] 新威脅:{pattern}
如果檢測到新策略:
記錄:[IMMUNE] 新策略:{pattern}
步驟 3 — 更新 Immune 記憶(含 COLD 重複檢測)
3a. 已比對的 HOT 抗體:
對於掃描器比對到的每個抗體,透過 adapter 更新:
node ~/.claude/skills/immune/immune-adapter.js update-antibody --id {antibody_id} --increment_seen true --last_seen {today}
3b. 新威脅 — 透過相似度評分進行重複檢測:
對於 new_threats_detected 中的每個新威脅:
- 使用多重標準相似度(Jaccard + 子字串 + 領域)檢查重複:
node ~/.claude/skills/immune/immune-adapter.js check-duplicate --pattern "{pattern}" --domains '{domains_json}' --type antibody
回傳 { duplicate: true/false, best_match: { id, score, pattern }, threshold: 0.7 }
- 如果重複為 true(score >= 0.7,相同領域 + 相似模式)→ 重新啟用:
- 更新比對到的抗體:
update-antibody --id {matched_id} --increment_seen true --last_seen {today} - 記錄:
[IMMUNE] 重新啟用 COLD 抗體 {id}:{pattern} - 請勿建立新抗體(防止重複)
- 更新比對到的抗體:
- 如果無比對 且
auto_add_threats為 true → 建立新抗體:
node ~/.claude/skills/immune/immune-adapter.js add-antibody --json '{"id":"AB-{next_number}","domains":{domains},"pattern":"{pattern}","severity":"{severity}","correction":"{correction}","seen_count":1,"first_seen":"{today}","last_seen":"{today}"}'
- 記錄:
[IMMUNE] + 新抗體 {id}:{pattern}
3c. 取得更新後的統計資料:
node ~/.claude/skills/immune/immune-adapter.js stats
記錄:[IMMUNE] 記憶:{total} 個抗體({n_hot} 個 hot,{n_cold} 個 cold)| +{new} 新增 | 重新啟用:{reactivated}
步驟 3b — 更新 Cheatsheet 記憶(正面模式)
如果 mode == "scan-only" 或掃描結果中沒有 new_strategies_detected,則跳過。
3b-i. 透過相似度評分進行重複檢測:
對於 new_strategies_detected 中的每個新策略:
- 使用多重標準相似度檢查重複:
node ~/.claude/skills/immune/immune-adapter.js check-duplicate --pattern "{pattern}" --domains '{domains_json}' --type strategy
- 如果重複為 true(score >= 0.7,重疊領域 + 相似模式)→ 強化:
- 計算新的有效性:
new_eff = old_eff * 0.8 + reported_eff * 0.2(指數移動平均) - 更新:
update-strategy --id {matched_id} --increment_seen true --last_seen {today} --effectiveness {new_eff} - 記錄:
[IMMUNE] 強化策略 {id}:{pattern}(eff:{old}→{new})
- 計算新的有效性:
- 如果無比對 且
auto_add_strategies為 true → 建立新策略:
node ~/.claude/skills/immune/immune-adapter.js add-strategy --json '{"id":"{prefix}-{next_number}","domains":{domains},"pattern":"{pattern}","example":"{example}","effectiveness":{eff},"seen_count":1,"first_seen":"{today}","last_seen":"{today}"}'
- 記錄:
[IMMUNE] + 新策略 {id}:{pattern}
3b-ii. 修剪低有效性策略:
如果任何策略的 effectiveness < 0.2 且 seen_count >= 5,則記下以供人工審查。
記錄:[IMMUNE] Cheatsheet:{total} 個策略 | +{new} 新增 | 強化:{reinforced}
步驟 4 — 評分
透過 adapter 計算通用分數:
node ~/.claude/skills/immune/immune-adapter.js score --domains '{domains_json}' --severities '[{"severity":"critical","count":N},{"severity":"warning","count":N},{"severity":"info","count":N}]'
adapter 會回傳:score(0-100)、pass(布林值)、z(相對於領域基準的 z 分數)、baseline(mean、std、threshold、n)、deductions。
步驟 5 — 輸出
如果內容乾淨:
───
IMMUNE v5.1 | 領域={domains} | 分數:{score}/100 ({PASS|FAIL}) | z={z}
基準線({domain}):mean={mean} std={std} threshold={threshold}
Cheatsheet:已套用 {n_strategies} 個策略 | 抗體:{n_hot}/{max} 個 HOT,{n_cold} 個 COLD
未檢測到問題
───
如果找到修正或威脅:
───
IMMUNE v5.1 | 領域={domains} | 分數:{score}/100 ({PASS|FAIL}) | z={z}
基準線({domain}):mean={mean} std={std} threshold={threshold}
已套用的修正:
[AB-XXX] {pattern} → {correction}
檢測到的新威脅:
[{severity}] {pattern} — {suggested_correction}
重新啟用:
[AB-XXX] {pattern}(原為 COLD,現為 HOT)
學到的新策略:
[CS-XXX] {pattern}(eff:{effectiveness})
───
修正後的輸出:
{修正後的內容,根據領域格式化}
───
記憶:{total_ab} 個抗體 + {total_cs} 個策略 | +{new_ab} AB | +{new_cs} CS
───
然後以適合該領域的人類可讀格式呈現修正後的輸出。
步驟 6 — 會話記錄
記錄會話結果以供未來上下文使用:
node ~/.claude/skills/immune/immune-adapter.js log-session --date {today} --domains '{domains_json}' --result {clean|corrected|flagged} --summary "{所掃描內容及發現的簡短摘要}" --score {score}
這會寫入到 context/YYYY-MM-DD.md + SQLite session_logs + FTS4 索引,以供未來的 get-context 搜尋使用。
步驟 7 — 壓縮前快取(選用)
如果對話上下文即將壓縮,請儲存任何尚未提交的待處理抗體/策略:
node ~/.claude/skills/immune/immune-adapter.js flush-pending --json '{"antibodies":[...],"strategies":[...]}'
品質檢查驗證:
- Pattern 長度必須 >= 20 個字元
- 抗體需要:id、pattern、severity、correction
- 策略需要:id、pattern
- FTS4 重複檢查防止重新建立現有模式
- 快取的記錄會標記為
quality_gate=1
記錄:[IMMUNE] 壓縮前快取:+{n} 個抗體,+{n} 個策略(quality_gate=true)
錯誤處理
- 如果 adapter CLI 失敗:直接回退到讀取 JSON 檔案(
immune_memory.json、cheatsheet_memory.json)——它們會透過雙重寫入保持同步。 - 如果
immune_memory.json不存在:adapter 會自動以空的抗體陣列建立它。 - 如果
cheatsheet_memory.json不存在:adapter 會自動以空的策略陣列建立它。 - 如果
immune_memory.json中有"version": 2:adapter 會自動將"domain"遷移為"domains": ["domain_value"]。 - 如果代理回傳無效的 JSON:重試一次。如果仍然無效,則回傳原始輸出並附上警告。
- 如果未提供輸入且沒有最近的輸出:詢問使用者要掃描什麼。
- 如果所有抗體都是 COLD(沒有任何抗體符合 HOT 資格):仍以空的
hot_antibodies陣列和完整的cold_summary發送掃描請求。Haiku 仍然可以透過第二階段檢測新威脅。