Communitygithub.com

Mnemoclaw/免疫系统

Claude Code 的混合自适应记忆系统——Cheatsheet(积极模式)+ Immune(消极模式)

免疫系统 是什么?

Mnemoclaw/immune 是一个针对 Claude Code 的混合自适应记忆技能,旨在通过两种互补的记忆机制提升 AI 输出的质量与可靠性。它结合了 Cheatsheet(积极模式),在生成前注入领域特定策略以优化输出;以及 Immune(消极模式),在生成后扫描并修正已知错误、发现新威胁。该技能通过热/冷分层机制保持上下文精简,并利用适配器 CLI(`node ~/.claude/skills/immune/immune-adapter.js`)管理记忆数据。它支持 fitness、code、writing、research、strategy、webdesign 等多个领域,并具备自动领域检测、历史会话感知、重复检测、冷抗体重新激活以及有效性评分等功能。通过持续学习和记忆更新,该技能能有效减少重复错误,提升开发效率与代码质量。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add Mnemoclaw/immune

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

免疫系统 v5.1 — 混合 Cheatsheet + 免疫

您操作一个具有两种互补记忆的混合自适应系统:

  • Cheatsheet(积极模式):在生成前注入的领域特定策略,用于提高输出质量
  • 免疫系统(消极模式):能够检测已知错误并在生成后发现新威胁的抗体

两种记忆都使用热/冷分层机制以保持上下文精简。 所有数据访问均通过 适配器 CLI(node ~/.claude/skills/immune/immune-adapter.js)进行。

输入解析

用户通过提供内容进行扫描来调用。解析以下参数:

  • input:要扫描的文本/代码/内容(必需——可以是内联或从上下文中获取)
  • domain:以下之一:fitness、code、writing、research、strategy、webdesign、_global(默认:自动检测)
  • domains:域数组(覆盖单个域)。示例: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

如果找到结果,则记录该域的重复模式或过去问题。这通过历史感知丰富了扫描——扫描器将知道之前是否标记过类似内容。

日志:[免疫系统] 上下文:找到 {count} 个相关历史会话

步骤 0 — Cheatsheet 注入(积极模式)

如果 mode == "scan-only",则跳过此步骤。

0a. 通过适配器加载热策略:

运行:

node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier hot --limit 15

解析 JSON 输出。适配器返回按域预过滤、分类为 HOT、按有效性降序排列且上限为 15 的策略。

0b. 加载冷策略摘要:

运行:

node ~/.claude/skills/immune/immune-adapter.js get-strategies --domains '{domains_json}' --tier cold

从每个 COLD 策略的 pattern 字段中提取简短关键词。连接为逗号分隔列表。

0c. 构建 cheatsheet 块: 将热策略格式化为 XML:

<cheatsheet domain="{domains}">
  <strategy id="{id}" effectiveness="{effectiveness}">
    {pattern}
    示例:{example}
  </strategy>
  ...
</cheatsheet>

如果有冷策略,则添加一行:

<cheatsheet_cold>另外考虑:{逗号分隔的冷策略模式关键词}</cheatsheet_cold>

如果 mode == "cheatsheet-only",则输出 cheatsheet 块并在此停止。

日志:

[免疫系统] Cheatsheet:{n_hot} 个热策略 + {n_cold} 个冷策略(域:{domains})

0d. 向用户展示 cheatsheet: 如果独立运行(/immune),则显示 cheatsheet 作为用户应应用于下一次生成的上下文。如果由 Chimera 调用,则返回 XML 块以注入到 PRISM 提示中。

步骤 1 — 加载和分类抗体(热/冷)

1a. 通过适配器加载热抗体:

运行:

node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier hot --limit 15

适配器返回按域预过滤、分类为 HOT(严重性=critical 或 seen_count>=3 或 last_seen<30d)、按严重性然后 seen_count 排序、上限为 15 的抗体。

1b. 加载冷抗体摘要:

运行:

node ~/.claude/skills/immune/immune-adapter.js get-antibodies --domains '{domains_json}' --tier cold

对于每个冷抗体,从其 pattern 字段中提取一个简短关键词。 连接为逗号分隔列表。

日志:

[免疫系统] 层级拆分:{n_hot} 个热 + {n_cold} 个冷 / {n_hot + n_cold} 总数(域:{domains})

步骤 2 — 扫描

生成 immune-scan 代理(Haiku),使用以下 XML 结构化提示:

<scan_request>
  <domains>{检测到的域作为 JSON 数组}</domains>
  <task>{任务描述或 "扫描以下内容以查找错误和威胁"}</task>
  <constraints>{约束条件或 "none"}</constraints>

  <content>
{要扫描的输入文本/代码/内容}
  </content>

  <hot_antibodies>
{热抗体对象的 JSON 数组——包含 id、domains、pattern、severity、correction}
  </hot_antibodies>

  <cold_summary>
休眠模式(不详细,仅供了解):{逗号分隔的冷关键词}
  </cold_summary>

  <cheatsheet_applied>
{步骤 0 中注入的策略 ID 和模式列表,如果是 scan-only 模式则为 "none"}
  </cheatsheet_applied>
</scan_request>

日志:[免疫系统] 扫描中...({n_hot} 个活跃抗体) 等待结果。

如果应用了修正: 日志:[免疫系统] 匹配 {antibody_id}:{original} → {corrected} 如果检测到新威胁: 日志:[免疫系统] 新威胁:{pattern} 如果检测到新策略: 日志:[免疫系统] 新策略:{pattern}

步骤 3 — 更新免疫记忆(带冷去重)

3a. 匹配的热抗体: 对于扫描器匹配的每个抗体,通过适配器更新:

node ~/.claude/skills/immune/immune-adapter.js update-antibody --id {antibody_id} --increment_seen true --last_seen {today}

3b. 新威胁——通过相似度评分去重: 对于 new_threats_detected 中的每个新威胁:

  1. 使用多标准相似度(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 }

  1. 如果重复为 true(分数 >= 0.7,相同域 + 相似模式)→ 重新激活:
    • 更新匹配的抗体:update-antibody --id {matched_id} --increment_seen true --last_seen {today}
    • 日志:[免疫系统] 重新激活冷抗体 {id}:{pattern}
    • 不要创建新抗体(防止重复)
  2. 如果无匹配 且 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}"}'
  • 日志:[免疫系统] + 新抗体 {id}:{pattern}

3c. 获取更新后的统计信息:

node ~/.claude/skills/immune/immune-adapter.js stats

日志:[免疫系统] 记忆:{total} 个抗体({n_hot} 个热,{n_cold} 个冷) | +{new} 新增 | 已重新激活:{reactivated}

步骤 3b — 更新 Cheatsheet 记忆(积极模式)

如果 mode == "scan-only" 或扫描结果中没有 new_strategies_detected,则跳过。

3b-i. 通过相似度评分去重: 对于 new_strategies_detected 中的每个新策略:

  1. 使用多标准相似度检查重复:
node ~/.claude/skills/immune/immune-adapter.js check-duplicate --pattern "{pattern}" --domains '{domains_json}' --type strategy
  1. 如果重复为 true(分数 >= 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}
    • 日志:[免疫系统] 加强策略 {id}:{pattern}(有效性:{old}→{new})
  2. 如果无匹配 且 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}"}'
  • 日志:[免疫系统] + 新策略 {id}:{pattern}

3b-ii. 修剪低有效性策略: 如果任何策略的 effectiveness < 0.2 且 seen_count >= 5,则将其标记为需要人工审查。

日志:[免疫系统] Cheatsheet:{total} 个策略 | +{new} 新增 | 已加强:{reinforced}

步骤 4 — 评分

通过适配器计算通用评分:

node ~/.claude/skills/immune/immune-adapter.js score --domains '{domains_json}' --severities '[{"severity":"critical","count":N},{"severity":"warning","count":N},{"severity":"info","count":N}]'

适配器返回:score(0-100)、pass(布尔值)、z(相对于域基线的 z 分数)、baseline(均值、标准差、阈值、n)、deductions。

步骤 5 — 输出

如果无异常:

───
免疫系统 v5.1 | domains={domains} | 分数:{score}/100({PASS|FAIL}) | z={z}
   基线({domain}):mean={mean} std={std} threshold={threshold}
   Cheatsheet:已应用 {n_strategies} 个策略 | 抗体:{n_hot}/{max} 个热,{n_cold} 个冷
   未检测到问题
───

如果发现修正或威胁:

───
免疫系统 v5.1 | domains={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}(之前为冷,现在为热)

已学习的新策略:
  [CS-XXX] {pattern}(有效性:{effectiveness})

───
修正后的输出:
{修正后的内容,按域格式化}
───
记忆:{total_ab} 个抗体 + {total_cs} 个策略 | +{new_ab} 个抗体 | +{new_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":[...]}'

质量门验证:

  • 模式必须 >= 20 个字符
  • 抗体需要:id、pattern、severity、correction
  • 策略需要:id、pattern
  • FTS4 重复检查防止重新创建现有模式
  • 刷新记录被标记为 quality_gate=1

日志:[免疫系统] 预压缩刷新:+{n} 个抗体,+{n} 个策略(quality_gate=true)

错误处理

  • 如果适配器 CLI 失败:直接回退到读取 JSON 文件(immune_memory.json、cheatsheet_memory.json)——它们通过双重写入保持同步。
  • 如果 immune_memory.json 不存在:适配器自动创建带有空抗体的文件。
  • 如果 cheatsheet_memory.json 不存在:适配器自动创建带有空策略的文件。
  • 如果 immune_memory.json 中 "version": 2:适配器自动将 "domain" 迁移为 "domains": ["domain_value"]。
  • 如果代理返回无效的 JSON:重试一次。如果仍然无效,则报告原始输出并发出警告。
  • 如果未提供输入且没有最近的输出:询问用户要扫描什么。
  • 如果所有抗体都是冷的(没有符合热条件的):仍然发送扫描,但使用空的 hot_antibodies 数组和完整的 cold_summary。Haiku 仍然可以通过阶段 2 检测新威胁。

相关技能