# MARK Ⅶ — 能動型 Jarvis v3

> MARK Ⅶ 能動型 Jarvis（Phase 2）の v3 実装。
> 仕様書: `SPEC_v3.md`

---

## 概要

リアルタイム文字起こし + 自律介入判断 + 音声出力を統合した能動型 Jarvis。

**v2 との違い：**

```
v2: chunk方式（30秒区切り・遅延60秒）→ 撤退
v3: ストリーム方式・能動介入・音声化（遅延15秒以内・実用速度）
```

---

## 何ができるか

- **リアルタイム文字起こし** — whisper-stream でマイク音声を直接テキスト化（遅延約0.5秒）
- **自律介入** — 呼ばれてなくても判断して喋る（観察/積極モード時）
- **4モード切替** — 静か / 観察 / 積極 / 即答（発話で切替可）
- **音声出力** — macOS say -v Kyoko
- **dashboard 表示** — 介入内容をカードに書込・リアルタイム更新

---

## ディレクトリ構成

```
v3/
├── stream_transcriber.py     # whisper-stream 起動・live_transcript.txt 追記
├── intervention_filter.py    # 軽量フィルタ判定（A〜E）
├── intervention_judge.py     # claude -p 本格判定
├── mode_controller.py        # 4モード状態管理
├── voice_output.py           # macOS say 音声出力
├── output_dispatcher.py      # dashboard + 音声 + log 統合
├── jarvis_active_daemon.py   # 全部束ねるメインループ
├── live_run_v3.sh            # 統合起動
├── stop_v3.sh                # 停止
├── SPEC_v3.md                # 仕様書
├── README.md                 # このファイル
├── live_transcript.txt       # ストリーム文字起こし（追記専用）
├── intervention_log.jsonl    # 介入履歴
├── mode_state.json           # 現在モード
├── tokens_v3.jsonl           # トークン消費記録
├── daemon_state_v3.json      # daemon の永続 state
└── logs/                     # ログディレクトリ
    ├── stream_transcriber.log
    └── active_daemon.log
```

---

## 使い方

```bash
# dry-run（事前テスト・依存ツール確認）
bash live_run_v3.sh --dry-run

# 起動
bash live_run_v3.sh

# 停止
bash stop_v3.sh
```

---

## モード切替（発話で）

| 発話例 | 遷移先 |
|---|---|
| 「ジャービス静かに」「黙って」 | 🔇 SILENT（呼名のみ反応） |
| 「観察に戻して」 | 👁 OBSERVING（デフォルト） |
| 「ジャービス積極的に」「参加して」 | 💬 ACTIVE（気付き全部） |
| 「ジャービスどう思う？」型 | ⚡ IMMEDIATE（1応答後 OBSERVING に戻る） |

**暴走停止：** 「ジャービスうるさい」発話で即 SILENT 化

---

## コスト

- `claude -p` 1 fire 約 3〜5k tok
- OBSERVING で 1日 200万 tok 以下（Max 20x プラン枠の約 10%）
- 上限到達で自動 SILENT 降格 + dashboard 通知

---

## トラブルシュート

| 症状 | 対処 |
|---|---|
| `whisper-stream: command not found` | `brew install whisper-cpp` |
| `claude: command not found` | Claude Code インストール確認 |
| 音声が出ない | `say "テスト"` で macOS say 動作確認 |
| dashboard が古い | ブラウザ Cmd+Shift+R または `bash /Users/rk/.local/jarvis/mirror_to_dashboard.sh` |
| プロセスが即死する | `bash live_run_v3.sh --dry-run` でエラー確認 |
| 多重起動エラー | `bash stop_v3.sh` で既存プロセス停止後に再起動 |

---

## 過去事故からの設計反映

- **自己増殖バグ**（v2 chunk方式で発生）→ v3 は中間ファイル不要なので構造的にゼロ
- **MARK Ⅵ 早期昇格事故** → v3 は実用速度 + コスト要件を全部通してから昇格
- **stop 時の取りこぼし** → ストリーム方式なのでバッファ書込済み分は失われない
- **多重起動誤検知** → ps 厳格判定方式（PID ファイル + kill -0 確認）

---

*作成：2026-05-06 MARK Ⅶ 本実装*
