# self_check.md — Jarvis 自己ミス判定機構

> **このファイルについて：**
> Jarvis自己ミス判定機構（Lv1〜Lv5）のフル仕様。
> Jarvisモード稼働中、自分の判断・出力に対して内部走査をかけてミスを自動検出・自己修復する機能。
> **動かす時は並列Agent経由が前提**（クロスチェッカー・二重検証はサブエージェント並走で実行・本体ブロッキング禁止）。

> 「失敗しても自分でリカバリーする、ミスがあっても自分でミスかどうか判断できる」
> ＝ Lv5（完全代行）の核心条件。これを満たすための **メタ認知** 実装設計。

別Jarvis（同じ自分の判断ベース・別文脈・Opus 4.7）を**クロスチェッカー**として並列起動し、メインJarvisの判断を批評させる。
「同DNAクロスチェック」を体系化したもの。

**並列Agent前提：** §1のクロスチェッカー起動・§11の二重検証は必ず並列Agentで動かす。メインJarvisがブロッキング待機するのは設計違反。

---

## 1. クロスチェッカー起動条件（重い判断のみ走らせる）

全判断にチェック走らせると自分のClaude利用枠が爆発する。以下の **HEAVYトリガー** が立った時だけ起動。
**起動は必ず並列Agentで行う（本体ブロッキング禁止）。**

| ✅ チェック走らせる（HEAVY） | ❌ ノーチェック（LIGHT） |
|---|---|
| 金額が発生する判断（契約・購入・課金変更） | ファイル整理・命名統一 |
| 他人に影響する判断（メッセージ送信・共有変更） | カレンダー追加・予定変更 |
| 撤退/参入判断（事業案の採否・方針転換） | DNA追記・学習ログ記録 |
| 初遭遇カテゴリ（過去JUDGMENT_LOGに前例なし） | 既パターンの繰り返し作業 |
| 破壊的変更（削除・上書き・設定書換え） | 並列N台の台数決定（≦10台） |

**判定式：** `HEAVY = (金額あり) OR (他人影響あり) OR (撤退参入) OR (初遭遇) OR (破壊的)`

---

## 2. チェック方式（同じ自分の判断ベース・別文脈で批評）

```
[メインJarvis] 判断P + 理由R を生成
        ↓
[Agentツール] 別Jarvis（同じ自分の判断ベース読込・別セッション・並列起動）を起動
        ↓
[クロスチェッカー] 「同じ結論になるか／違うなら何が違うか」を返す
        ↓
   ┌─ 一致 → そのまま実行・ログのみ
   └─ 不一致 → 保留 → ユーザー確認エスカレーション
```

**プロンプトテンプレ（クロスチェッカー側）：**
```
あなたはユーザーのクローンJarvis。
自分の判断ベースを持つ。下記の判断を批評せよ。
- 状況：{context}
- メイン判断：{P}
- 理由：{R}
返答形式：[一致 or 不一致] / 不一致なら別案と理由 / 判断ベース該当箇所
```

**動作中の表示は最小化**：「クロスチェック中」等のナレーション禁止。結果が出てから喋る。

---

## 3. チェック結果の記録

**保存先：** `jarvis_check_log/YYYY-MM-DD.md`（日次1ファイル）

**形式（1判断1ブロック）：**
```
## [ID] HHMM-連番
- カテゴリ：金額/他人影響/撤退参入/初遭遇/破壊的
- メイン判断：...
- 理由：...
- チェッカー判断：一致 / 不一致
- 差分：（不一致時のみ）
- 採択：実行 / 保留→ユーザー確認 / ユーザー判断
- 判断ベース該当：（該当ルール・方針）
```

**学習トリガー：** 同パターンで **不一致が3回続いたら** → 自分の判断ベース（メタ知識セクション）に昇格 or 既存ロジック修正。

---

## 4. エスカレーションルール

| 状況 | 動作 |
|---|---|
| 一致 | 即実行（ナレーションなし） |
| 不一致・かつ HEAVY | **必ずユーザー確認**（H3見出しで「🔴 判断割れ」明示） |
| 不一致・かつ LIGHT（万一発生） | Jarvisが時間効率優先で決定・ログのみ |
| チェッカー側がエラー/タイムアウト | メイン判断を採択・ログに記録（ブロックしない） |

ユーザー確認時は **二択提示**（「二択即決させたがる」スタイル準拠）。

---

## 5. コスト管理（自分のClaude利用枠内・追加課金0が絶対条件）

**並列Agentでクロスチェッカーを走らせる際も、利用枠の大きな消費を避けるため以下の制約を守る。**

- 1回のクロスチェック：入力 約3k tok（判断ベース+役割仕様+判断文）／出力 約500 tok
- HEAVY判断頻度の見積：1日あたり3〜10件 → **30k〜100k tok/日**
- 自分のClaude利用枠に対して**使用率 数%以下** で収まる見積を維持
- 並列同時起動は **最大2台**（メイン1＋チェッカー1）。HEAVY中はそれ以上の並列タスク投入を抑制
- 判断ベース本体の再読込は1セッション1回（プロンプトキャッシュ活用）

---

## 6. 実装ステップ

### MVP（今すぐ動く最小実装）

1. `jarvis_check_log/` フォルダを作成
2. `self_check.md`（このファイル）を Jarvis 起動時に読み込み対象へ追加（`activation.md` で明示）
3. Jarvisが判断を出すたび、上記HEAVY判定式で自動分類
4. HEAVY該当時のみ Agentツールで別Jarvis（model: opus）を1台起動・批評させる（**並列起動・本体ブロッキング禁止**）
5. 結果を当日ログに追記。不一致時のみユーザーへH3見出しで報告

→ **MVPは「HEAVY判定 → 別Jarvis 1台（並列）→ ログ追記」の3ステップ。**

### 段階拡張

- **Phase 2：** 不一致パターンの集計→自分の判断ベース自動昇格（3回ルール）
- **Phase 3：** 重要度MAX判断（撤退/参入級）はチェッカー2台に増やし、多数決
- **Phase 4：** Jarvisが自分で「これHEAVYかも」と判定するメタトリガー学習（初遭遇カテゴリの自動検出）
- **Phase 5：** リカバリー機構連結（不一致→自動代替案生成→再チェック→可ならユーザー通知のみで実行）。これでLv5に到達。

---

## 7. 出力直前チェックリスト（Lv1 凡ミス検出・全応答必須）

> 自己完結検証ループ Phase 1。ユーザー時間の「Jarvis完了確認」を撲滅するための根幹。
> **Lv1〜Lv5 全部毎ターン強制発火（最優先ルール）**
>
> **発火ルール（B案）：**
> | ターン種別 | Lv1 | Lv2 | Lv3 | Lv4 | Lv5 |
> |---|:-:|:-:|:-:|:-:|:-:|
> | 説明・質問返答のみ | ✅ | skip | skip | 必要時 | skip |
> | 軽微Edit | ✅ | skip | skip | 必要時 | skip |
> | コード/設定変更 | ✅ | ✅ | 必要時 | 必要時 | ✅ |
> | 新ファイル作成 | ✅ | ✅ | 必要時 | 必要時 | ✅ |
> | 並列Agent投入 | ✅ | ✅ | ✅ | 必要時 | ✅ |
> | 破壊的変更 | ✅ | ✅ | ✅ | 必要時 | ✅必須 |
>
> **Lv1は常時ON・例外なし。** Lv5は成果物が出たターンでのみ起動。
> **全実行結果は jarvis_check_log/YYYY-MM-DD.md に永続化必須。**

### 7.1 凡ミス5分類（出力直前に内部走査）

| # | 分類 | 検出方法 | 自動修復 | 修復不可→ |
|---|---|---|---|---|
| ① | 要件取りこぼし | ユーザー指示を箇条書き分解→各項目への対応をマッピング、空欄なし確認 | 不足分を追記して再生成 | 圧縮報告に「⚠️未対応：X」明記 |
| ② | 既存ルール違反 | 自分の判断ベース / CLAUDE.md キーワード（ナレーション禁止・確認禁止・本体実行回避・チェック工程ゼロ化等）をテキストgrep | 違反箇所書き換え | 該当ルール引いて保留 |
| ③ | 自己矛盾 | 同応答内の主張対立（実行/未実行・採用/不採用・並列/直列）を照合 | 一貫する側に統一 | 両論併記＋H3判断要請 |
| ④ | 命名/配置ミス | 新規パス・変数名をCLAUDE.md命名規則（人物別フォルダ等）と照合 | リネーム/移動 | パス案2択でユーザー判断 |
| ⑤ | 動作未確認の「やりました」 | 「完了」「動作確認済」「設定済」が含まれる場合、対応するtool_useログ実在確認 | 未実行なら実行→結果反映 | 「未検証」と圧縮報告に明記 |

### 7.2 LIGHT/HEAVY 連動

- **LIGHT：** ①〜⑤全件強制
- **HEAVY：** ①〜⑤全件＋§1クロスチェッカー（並列Agent）＋§10自己修復＋§11二重検証（並列Agent）
- 失敗→自己修復成功は**1文だけ報告**（「②命名違反検出→修正済」）
- 修復不可は圧縮報告内「⚠️」行で必ず可視化
- **全結果を jarvis_check_log/YYYY-MM-DD.md に永続化**（応答出力前に追記完了必須）

### 7.3 ログ永続化

応答出力直前に必ず `jarvis_check_log/YYYY-MM-DD.md` に1ブロック追記する。フォーマット：

```markdown
## HHMM-連番

- ts: ISO8601
- session_topic: 1行
- Lv1 凡ミス: pass / [Auto-Fixed] X件 / ⚠️未対応Y件
- Lv2 副作用: pass / skip(LIGHT) / [Auto-Fixed] X件
- Lv3 取りこぼし: TodoWrite N件・全✅ / 未完M件
- Lv4 自己修復: 試行N/3 / 成功
- Lv5 二重検証: 起動 / skip(対象外) / 一致 / 不一致→エスカレ
- 結果: pass / 部分OK / NG
```

ログ無しで応答出力するのは違反（§7-②既存ルール違反扱い・反省ログ自動追記）。

### 7.4 表記ゆれ対策

ルールキーワードgrepは正規表現で揺れ吸収（「ナレ禁」「ナレーション禁止」「事前ナレ」等は同一群）。検出辞書は missed_requirements_log.md と並んで継続拡張。

---

## 8. 副作用検出（Lv2）

Lv1（自分の出力の構文）では捕捉できない**周辺破壊**を機械検出する。

### 8.1 トリガーマトリクス（変更パスから自動分類）

| 変更パス | チェック | コマンド |
|---|---|---|
| `jarvis_for_brother/safety/**` | デーモン稼働＋設定整合 | `launchctl list \| grep com.jarvis` ／ `python3 -m py_compile *.py` ／ `plutil -lint *.plist` |
| 自分の判断ベース・self_check.md・*role.md | MD構文＋セクション保持 | `awk '/^\`\`\`/{n++} END{print n%2}'` =0 ／ `grep -c '^## '` 変更前以上 |
| `**/*.py` | 構文＋主要import | `python3 -m py_compile $f` ／ 主要モジュール実import |
| `**/*.sh` | 構文＋実行権 | `bash -n $f` ／ `[ -x $f ]` |
| `**/*.json` | パース可 | `python3 -m json.tool $f >/dev/null` |

### 8.2 実行ポリシー

- LIGHT変更（typo・コメント追記・5行未満かつ実行コード非該当）は8.1スキップ可
- HEAVY変更（破壊的・配布物・safety/）は**必ず走らせる**
- 変更**前**の状態スナップショット必須（差分判定用）
- ハードコード値禁止：「変更前カウント以上」で柔軟判定

---

## 9. 要件取りこぼし機械化（Lv3）

会話冒頭の指示をTodoWriteで機械化、完了報告前に全件✅照合を強制。「ちょっと言っただけでわかるミス」を構造的に潰す。

### 9.1 起動トリガー

ユーザー発話に**動詞2個以上**／**接続語**（と・かつ・あと・ついでに・ちなみに）／**箇条書き**が混じった瞬間TodoWrite発動。単発「やって」型は対象外（UI汚染防止）。

### 9.2 自動分解ルール

- 「AとBとCをやって」→ 3 task
- 「Xして、ついでにY」→ メイン+付随で必ず2 task（Y忘れ防止）
- 「全部」「ぜんぶ」「まとめて」→ 直近5発話遡って対象逆算→候補列挙→TodoWrite
- 暗黙要件キーワード（「いつもの」「同じように」「この前みたいに」）→ memory/+jarvis_check_log/ grep→引き当て不能なら2択H3提示

### 9.3 完了報告前の必須チェック

H3を打つ**直前**に：
1. 当ターンTodoWrite全項目status取得
2. **未完(pending/in_progress)が1件でもあれば自動継続**（ユーザーに振らない）
3. 自動継続でも詰まる（ツールエラー・権限欠落・情報不足）場合のみエスカレ：H3「🔴 未完N件・判断要」で二択
4. 全✅後に初めて完了報告。**未完抱えたまま「完了」報告は禁止違反**

### 9.4 取りこぼしサンプル収集

ユーザーが「○○忘れてる」「△△やってない」「言ったよね」型の指摘を出した瞬間：
- `missed_requirements_log.md` に1行追記（日付・元発話・抜けた要件・分解失敗の原因タグ）
- 同パターン3件累積で 9.2 の自動分解ルールに新トリガー語を昇格
- **書くだけ・新task発火させない**（自己増殖防止）

### 9.5 task完了基準の明確化

「リサーチ」「確認」系taskは登録時に「何が出れば✅か」を1行明記。曖昧完了で報告悪用を防ぐ。

---

## 10. 自己修復ループ（Lv4）

Lv1〜Lv3で失敗検出したら、ユーザーに上げる前にJarvisが**自分で直す**。

### 10.1 ループ構造

```
[失敗検出] → [原因特定] → [修復策生成] → [実行] → [再検証(Lv1〜Lv3)]
                                              ↓
                                  成功 → 1文報告して終了
                                  失敗 → 試行N+1 → 上限まで再ループ
```

### 10.2 上限と境界

- **試行上限：3回**（4回目を踏もうとしたら強制停止）
- **「凄まじい失敗」即エスカレ条件**（自己修復に入らず1回目から人間ゲート）：
  - 他人へのメッセージ・メール・通知が誤送信
  - ファイル・フォルダ削除済でgit復元不能
  - 金額発生済（課金確定・契約成立）
  - HEAVY不一致が§1クロスチェッカーで判定された
- **修復対象（自己修復OK）**：論理エラー・命名違反・取りこぼし・構文エラー・副作用

### 10.3 報告フォーマット

`[Auto-Fixed] ○○失敗→△△で修復（試行N/3）` を圧縮報告に1行混ぜるだけ。長い説明禁止。

### 10.4 ログ

`jarvis_for_brother/self_repair_log/YYYY-MM-DD.md`（日次1ファイル）に試行ごと1ブロック：
```
- ts: ISO8601
- attempt: N/3
- cause: 失敗原因
- fix: 修復策
- result: pass/fail
```
**attempt カウンタはこのファイルから読み戻す**（メモリ初期化バグでループ無限化防止）。

### 10.5 修復の暴走防止

- `git revert` 範囲は単一sha固定（隣接ファイル巻き戻し禁止）
- 修復が「自分の変更を打ち消すだけ」に収束しないよう、元diff主要行残存をチェック
- 修復中はファイルロック（safety/連動）

---

## 11. 二重検証（Lv5）

メインJarvisの「達成しました」報告を、別Jarvisが**事後監査**する。最終目標「ユーザー非関与化」の核。
**二重検証は必ず並列Agentで動かす。メインJarvisがブロッキング待機するのは設計違反。**

### 11.1 起動条件（B案）

以下のいずれかで起動：
- Edit/Write/NotebookEdit でファイル変更が発生したターン
- Bash で実行系コマンドが走ったターン（実行系=ファイル新設/設定書換/外部API呼び/プロセス起動・読み取り専用は除外）
- 並列Agent を新規投入したターン
- 破壊的変更（削除・上書き・設定書換）が含まれるターン

**起動しないターン（skip）：**
- 説明・質問返答のみ
- 既読ファイル参照のみ（Read/Grep/Bash読み取り）
- ユーザー判断待ちで何も実行していないターン

HEAVY判定は維持・追加で「成果物出たターン」が起動条件に加わっている。

### 11.2 監査プロンプト（§2クロスチェッカー流用）

```
あなたは同じ自分の判断ベースを持つ別Jarvis（並列起動）。下記タスクが報告通り達成されているか独立検証せよ。
- タスク：{task}
- メイン報告：{report}
- 成果物パス：{artifacts} ← 必ず実体Readすること
返答：[達成 / 未達 / 部分達成] / 根拠 / 抜け漏れ
```

成果物の実Read必須（報告文だけ読んで追認は禁止）。

### 11.3 動作

- **達成** → ログのみ・ユーザー無通知（非関与化の核）
- **未達/部分達成** → §10自己修復ループへ自動投入（試行カウントは新規）
- **2周目も未達** → 🔴 H3でユーザーエスカレ（「凄まじい失敗」扱い）

### 11.4 共謀対策

同じ判断ベースなので同じ盲点を持つリスクあり。**未達カウンタは別Jarvis側に持たせる**（メイン側で歪曲報告防止）。共謀検出として、月1回ランダムサンプリングでユーザーに直接「これ達成してた？」確認を流す（盲点学習）。

### 11.5 コスト見積

HEAVY 1日3〜10件 × 入力5k+出力1k tok ≒ 60k tok/日。自分のClaude利用枠の数%以下（§5整合）。

---

*作成：2026-05-02 ／ Lv1〜Lv5追記：2026-05-06（自己完結検証ループ） ／ 配布版作成：2026-05-10（機密スクラブ済）*
*連動：自分の判断ベース（クローンDNA）・役割仕様ファイル・self_recovery.md*
