Communitygithub.com

Mnemoclaw/immune

Claude Code向けハイブリッド適応型メモリシステム — チートシート(肯定的パターン)+ イミューン(否定的パターン)

immune とは?

このスキルは、Claude Code上で動作するハイブリッド適応型メモリシステムです。2つの相補的な記憶領域を持ちます。「チートシート」はドメイン固有の戦略を生成前に注入し、出力品質を向上させます。「イミューン」は生成後に既知のエラーを検出し、新たな脅威を発見する抗体として機能します。両方のメモリはホット/コールド階層化(Hot/Cold tiering)によってコンテキストを効率的に保ち、すべてのデータアクセスは専用のアダプターCLI(`node ~/.claude/skills/immune/immune-adapter.js`)を通じて行われます。主なドメインとしてfitness、code、writing、research、strategy、webdesign、_globalをサポートし、マルチドメイン入力や自動ドメイン検出にも対応します。ユーザーは`/immune`コマンドで任意のテキストやコードをスキャンでき、その結果はスコアリングされ、メモリに自動学習されます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add Mnemoclaw/immune

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

イミューンシステム v5.1 — ハイブリッドチートシート+イミューン

あなたは2つの相補的な記憶を持つハイブリッド適応型システムを運用します:

  • チートシート(肯定的パターン):生成前に注入され、出力品質を向上させるドメイン固有の戦略
  • イミューン(否定的パターン):生成後に既知のエラーを検出し、新たな脅威を発見する抗体

両メモリはホット/コールド階層化(Hot/Cold tiering)によりコンテキストを効率的に保ちます。 すべてのデータアクセスはアダプターCLI(node ~/.claude/skills/immune/immune-adapter.js)を通じて行われます。

入力解析

ユーザーはスキャンするコンテンツとともに呼び出します。以下のパラメータを解析します:

  • input:スキャンするテキスト/コード/コンテンツ(必須 — インラインまたはコンテキストから)
  • domain:次のいずれか:fitness、code、writing、research、strategy、webdesign、_global(デフォルト:自動検出)
  • domains:ドメインの配列(単一ドメインを上書き)。例:domains=fitness,code
  • constraints:出力が満たすべき特定の要件(オプション)
  • mode:full(チートシート+スキャン、デフォルト)| scan-only(チートシートをスキップ)| cheatsheet-only(チートシートを返し、スキャンは行わない)

インラインテキストが提供されない場合は、会話内の最後の実質的な出力をスキャンします。

ドメイン自動検出: ~/.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] コンテキスト: {count}件の関連過去セッションが見つかりました

ステップ 0 — チートシート注入(肯定的パターン)

mode == "scan-only"の場合はこのステップをスキップします。

0a. アダプターを介してHOT戦略を読み込みます:

以下を実行:

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

JSON出力を解析します。アダプターはドメインで事前フィルタリングされ、HOTに分類され、有効性の降順でソートされ、15に制限された戦略を返します。

0b. COLD戦略の概要を読み込みます:

以下を実行:

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

各COLD戦略のpatternフィールドから短いキーワードを抽出します。カンマ区切りのリストとして結合します。

0c. チートシートブロックを構築します: HOT戦略をXMLとしてフォーマット:

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

COLD戦略がある場合は、ワンライナーを追加します:

<cheatsheet_cold>次の点も検討してください:{カンマ区切りのCOLDパターンキーワード}</cheatsheet_cold>

mode == "cheatsheet-only"の場合は、チートシートブロックを出力してここで停止します。

ログ:

[IMMUNE] チートシート: {n_hot} HOT + {n_cold} COLD 戦略 (ドメイン: {domains})

0d. チートシートをユーザーに提示します: スタンドアロンで実行中(/immune)の場合は、ユーザーが次の生成に適用すべきコンテキストとしてチートシートを表示します。Chimeraから呼び出された場合は、PRISMプロンプトに注入するためのXMLブロックを返します。

ステップ 1 — 抗体の読み込みと分類(Hot/Cold)

1a. アダプターを介してHOT抗体を読み込みます:

以下を実行:

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

アダプターはドメインで事前フィルタリングされ、HOTに分類され(severity=critical または seen_count>=3 または last_seen<30日)、重要度、次に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 — スキャン

immune-scanエージェント(Haiku)を、以下のXML構造化プロンプトで起動します:

<scan_request>
  <domains>{検出されたドメイン(JSON配列)}</domains>
  <task>{タスクの説明または「以下のコンテンツをエラーと脅威についてスキャンします」}</task>
  <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 — イミューンメモリの更新(COLD重複排除付き)

3a. 一致したHOT抗体: スキャナーが一致した各抗体について、アダプター経由で更新:

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}
    • ログ:[IMMUNE] COLD抗体 {id}: {pattern} を再アクティブ化
    • 新しい抗体は作成しない(重複防止)
  2. 一致なし かつ auto_add_threats がtrueの場合 → 新しい抗体を作成:
node ~/.claude/skills/immune/immune-adapter.js add-antibody --json '{"id":"AB-{次の番号}","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} ホット, {n_cold} コールド) | +{new} 追加 | 再アクティブ化: {reactivated}

ステップ 3b — チートシートメモリの更新(肯定的パターン)

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}
    • ログ:[IMMUNE] 戦略 {id}: {pattern} を強化 (eff: {old}→{new})
  2. 一致なし かつ auto_add_strategies がtrueの場合 → 新しい戦略を作成:
node ~/.claude/skills/immune/immune-adapter.js add-strategy --json '{"id":"{プレフィックス}-{次の番号}","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] チートシート: {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 — 出力

クリーンの場合:

───
IMMUNE v5.1 | domains={domains} | Score: {score}/100 ({PASS|FAIL}) | z={z}
   ベースライン ({domain}): mean={mean} std={std} threshold={threshold}
   チートシート: {n_strategies} 戦略適用 | 抗体: {n_hot}/{max} HOT, {n_cold} COLD
   問題は検出されませんでした
───

修正や脅威が見つかった場合:

───
IMMUNE v5.1 | domains={domains} | Score: {score}/100 ({PASS|FAIL}) | z={z}
   ベースライン ({domain}): mean={mean} std={std} threshold={threshold}

適用された修正:
  [AB-XXX] {pattern} → {correction}

検出された新たな脅威:
  [{severity}] {pattern} — {suggested_correction}

再アクティブ化:
  [AB-XXX] {pattern} (was COLD, now 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":[...]}'

品質ゲート検証:

  • パターンは20文字以上である必要があります
  • 抗体には必須項目:id、pattern、severity、correction
  • 戦略には必須項目:id、pattern
  • FTS4重複チェックにより、既存パターンの再作成を防止
  • フラッシュされたレコードはquality_gate=1でフラグ付けされます

ログ:[IMMUNE] 事前圧縮フラッシュ: +{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を返した場合:1回再試行します。それでも無効な場合は、警告とともに生の出力を報告します。
  • 入力が提供されず、最近の出力も存在しない場合:スキャンするものをユーザーに尋ねます。
  • すべての抗体がCOLDであり(HOTとして適格なものがない場合):それでも空のhot_antibodies配列と完全なcold_summaryを指定してスキャンを送信します。Haikuはフェーズ2を介して新しい脅威を検出できます。

関連スキル