🎤 実機デモ Runbook — 2026-06-18 08:00 (講義デモ)
目的: 明日朝のデモを 安定動作最優先 で立ち上げるための手順・検証・フォールバック集約。 2026-06-17 夜の作業 (不満点対応スプリント) の成果を反映した状態で起動する。
0. このスプリントで何が変わったか (PR 一覧)
| PR | リポ | 不満点 | 反映方法 | 状態 |
|---|---|---|---|---|
| AIEO_JCARVIS #188 | JCARVIS | ⑤音声が長い / ⑦ペルソナ / ④Discord | JCARVIS 再起動 | 音声を簡潔化(100字)+人格注入+Discord詳細スレッド |
| AIEO_JCARVIS #189 | JCARVIS | ⑥天気エラー | JCARVIS 再起動 | 天気スキル(Open-Meteo, APIキー不要, IP位置推定+場所指定) |
| aieo-stack-chan #93 | bridge | ①喋り出し遅い | bridge 再起動 (既定OFF) | 文境界逐次TTS。TTS_STREAMING=1 で有効化(実機検証後) |
| aieo-stack-chan #94 | firmware | ⑧複数WiFi/テザリング | 要フラッシュ | 複数Wi-Fi+優先度。primary=iPhoneテザリング |
優先度ダウン (issue 化のみ・デモ非対象): ②IrodoriTTS評価 #95 / ⑨OTA #96 / ⑩設定メニュー #97 / ③X情報源 JCARVIS#36。
1. 起動順序 (Mac Studio)
⚠️ 順序が重要: JCARVIS → bridge → 本体電源。 発話は Module-LLM 単体オンデバイス melotts(UART) で行う設計 (#72)。bridge は思考のみ=
TTS_ENGINE=none。VOICEVOX は不要(起動しなくてよい)。
1-1. (VOICEVOX は不要)
発話は CoreS3 firmware が Module-LLM の on-device melotts で行う。bridge は PCM を送らない (TTS_ENGINE=none)。VOICEVOX 経路 (TTS_ENGINE=voicevox) はデバッグ用の代替であり、通常運用では使わない。
1-2. JCARVIS Brain (:8185) — ★ #188/#189 を反映
cd /Volumes/AIWorkSSD/AIWorkSpace/github/aieo-product/AIEO_JCARVIS
# 本スプリントの2本を取り込む (どちらか: main にマージ済みなら main を pull)
# git checkout main && git pull # ← PR マージ済みの場合
# または検証のためブランチ単体で:
# git checkout feat/donack-voice-concise-94 (音声簡潔+Discord)
# git checkout feat/donack-weather-skill (天気)
# ※ 2本を同時に試すなら main にマージして pull が確実。
# 必須 env (★ DONACK_ENGINE=claude でないと echo になり「JCARVISっぽくない」返答になる = 不満⑦の主因)
export DONACK_ENGINE=claude # ← これが無いと EchoEngine (オウム返し)!
export AGENT_PROFILE=donack
# Discord ミラー (どなっくチャンネル) — 不満④
export DISCORD_LOG_WEBHOOK_URL=$(security find-generic-password -s "DISCORD_LOG_WEBHOOK_URL" -w)
# 任意: 実スレッド化したい場合のみ (無ければ webhook フォローアップで詳細投稿)
export DISCORD_BOT_TOKEN=$(security find-generic-password -s "DISCORD_BOT_TOKEN" -w 2>/dev/null)
# 任意: 天気の現在地が取れない時のフォールバック地名
export DONACK_DEFAULT_LOCATION=東京
# ★ ポート: :8181 は別プロジェクト evan-live-translate の whisper-server が占有しているため、
# JCARVIS は :8185 で運用する (2026-06-17 確定)。bridge .env は既に 8185 を指すよう設定済み。
export STACKCHAN_HTTP_PORT=8185
lsof -nP -iTCP:8185 -sTCP:LISTEN # 既に node が居れば起動済み。空ならこれから起動
node connectors/stackchan/server.js
# 起動ログに `listening on http://127.0.0.1:8185/agent` が出れば成功
# (もし :8185 も塞がっていたら別の空きポートにして bridge .env の JCARVIS_ENDPOINT も合わせる)補足 (2026-06-17 実証済み): 上記構成で JCARVIS を :8185 起動し、
source=stackchanの実クエリで 「東京は今雨で20度… 傘をお忘れなく。」(47字・簡潔・天気スキル使用・ドナック口調) を確認。 Discord ミラーもどなっくチャンネルへ実投稿成功。bridge.envのJCARVIS_ENDPOINT=http://127.0.0.1:8185/agent設定済み。
1-3. bridge (:7780 WSS) — ★ #93
cd /Volumes/AIWorkSSD/AIWorkSpace/github/aieo-product/stackchan/mac-studio/bridge
# ★★ .env の必須2項目 (2026-06-18 修正・設定済) ★★
# DEFAULT_BACKEND=jcarvis ← これが claude だと bridge内蔵Haikuに行き JCARVIS(天気/Discord/簡潔)を素通り!
# TTS_ENGINE=none ← on-device melotts で発話 (VOICEVOX不要)。voicevox だと二重発話/VOICEVOX依存
# JCARVIS_ENDPOINT=http://127.0.0.1:8185/agent ← :8185 運用に合わせ済
# TTS_STREAMING は ★既定 OFF のまま (デモは安全側)。
grep -E "^(DEFAULT_BACKEND|TTS_ENGINE|JCARVIS_ENDPOINT)=" .env # 確認
npm start # または launchd: com.aieo.stackchan-bridge.plist1-4. Tailscale Funnel (公開 WSS)
tailscale funnel status # /stackchan/ws が公開されているか確認 (#48)1-5. 本体 (CoreS3) 電源 ON
起動 → Wi-Fi 接続 → WSS 接続 → 顔アニメ表示を確認。
2. ⑦ JCARVIS 経路の検証 (返答がJCARVIS由来か) — ★デモ前 必須チェック
- エンジン確認 (echo でなく Claude か):bash
curl -s http://127.0.0.1:8181/healthz # → {"ok":true,"agent":"donack","engine":"ClaudeEngine"} ← ★ "EchoEngine" だったら DONACK_ENGINE=claude が未設定! - /agent 直接疎通 (音声を介さず確認):bash
curl -N -X POST http://127.0.0.1:8181/agent \ -H 'content-type: application/json' \ -d '{"prompt":"自己紹介して","source":"stackchan","stream":true}' # → data: {"text":"..."} が文ごとに届き、100字程度で簡潔・ドナック口調なら OK (不満⑤⑦) - 天気 (不満⑥):bash
curl -N -X POST http://127.0.0.1:8181/agent -H 'content-type: application/json' \ -d '{"prompt":"今日の天気は?","source":"stackchan","stream":true}' # → 現在地(IP推定)の天気が簡潔に。 "大阪の天気は?" で指定地も確認。 - bridge ログ: 本体に話しかけて bridge コンソールに
[wake] forwarding: ...が出る → JCARVIS へ転送されている。 - Discord (不満④): どなっくチャンネルに「マスター🎤(文字起こし)」「Donack🤖(応答)」が出る。
DONACK_DISCORD_DETAIL(既定ON)なら詳細スレッド/フォローアップも。- webhook+チャンネル単体の疎通確認 (JCARVIS を介さず、実投稿で検証):bash
cd /Volumes/AIWorkSSD/AIWorkSpace/github/aieo-product/AIEO_JCARVIS DISCORD_LOG_WEBHOOK_URL=$(security find-generic-password -s "DISCORD_LOG_WEBHOOK_URL" -w) \ node connectors/discord/mirror.live-check.mjs # → [OK] が出てチャンネルに会話+詳細が投稿されれば webhook/コードは正常。 # それでも実会話で出ない場合は §1-2 のポート競合 (JCARVIS 未起動) が原因。 - ⚠️ 2026-06-17 検証メモ: webhook・mirror コードは正常 (実投稿成功)。「ポストが出ない」のは JCARVIS アダプタが :8181 競合で起動できておらず、そもそも会話が JCARVIS に届いていなかったため。 §1-2 のポート競合解消 + webhook env を JCARVIS プロセスに export することが必須。
- webhook+チャンネル単体の疎通確認 (JCARVIS を介さず、実投稿で検証):
3. 会場 Wi-Fi 設定 (不満⑧) — フラッシュ不要の最短路
#94 (複数Wi-Fi) をフラッシュしなくても、既存のシリアルコマンドで iPhone テザリングに繋げる:
# 115200bps でシリアル接続し入力 (cores3-serial.py 等)
wifi:iPhone_15Pro:<テザリングのパスワード>:tether- これで再起動 → primary として接続。
- #94 をフラッシュ済みなら、自宅Wi-Fiも fallback 登録可能:
wifi:iPhone_15Pro:<psk>:tether # primary(優先1) wifi-add:<自宅SSID>:<psk>:home:2 # fallback wifi-list # 確認
iPhone 側: 「インターネット共有」ON / 「互換性を優先(2.4GHz)」ON / SSID は半角推奨。
4. デモ進行シナリオ (推奨)
- 「ねえドナック、自己紹介して」→ 簡潔な自己紹介 (簡潔化の見せ場)。
- 「ねえドナック、今日の天気は?」→ 現在地の天気 (新機能⑥)。
- 「ねえドナック、大阪の天気は?」→ 場所指定。
- 何か技術質問 → 音声は簡潔、Discordのどなっくチャンネルに詳細解説が出るのを画面で見せる (エージェント開発のアピール: 音声=要点 / テキスト=深掘り)。
- Debug HUD (画面右上タップ) で内部状態を見せる (開発の可視化アピール)。
5. フォールバック / トラブルシュート (安定性優先)
| 症状 | 対処 |
|---|---|
| 天気/Discord/簡潔化が全く効かない | bridge .env の DEFAULT_BACKEND=jcarvis を確認 (claude だと JCARVIS を素通りし bridge内蔵Haikuが応答)。直して bridge 再起動 |
| 返答がオウム返し・素っ気ない | JCARVIS 側 DONACK_ENGINE=claude 未設定 → 設定して JCARVIS 再起動 (§2-1) |
| 天気がエラー | ネット未到達 or API 一時失敗。DONACK_DEFAULT_LOCATION 設定。再度質問でリトライ |
| 音が二重に鳴る / 音が出ない | bridge .env の TTS_ENGINE=none を確認 (on-device melotts 発話)。voicevox だと VOICEVOX 依存+二重発話。VOICEVOX は通常不要 |
| 喋り出しが詰まる | TTS_STREAMING は OFF のまま (既定)。ONにしていたら 0 に戻して bridge 再起動 |
| Discord に出ない | まず §1-2 の :8181 ポート競合を確認 (JCARVIS が起動していないのが最頻原因)。次に JCARVIS プロセスに DISCORD_LOG_WEBHOOK_URL が export されているか。webhook単体は mirror.live-check.mjs で実投稿確認。詳細だけ不要なら DONACK_DISCORD_DETAIL=0 |
| WSS が数分で切れる (#91) | 既知。自動再接続で会話は継続。応答中に切れたらもう一度話しかける |
| Wi-Fi 繋がらない | wifi-status 確認 → wifi: で再設定。iPhoneテザリングの 2.4GHz/互換モード確認 |
| 全部不調 | 最低構成にフォールバック: 今夜の変更を入れず main の従来動作で起動 (各サービスを安定版ブランチで) |
緊急フォールバック (デモ直前に新機能が不調なら)
- JCARVIS: 旧
mainで起動すれば従来の応答に戻る (音声は長いが動く)。 - bridge:
TTS_STREAMING=0(既定) なら従来挙動。 - firmware: #94 を焼かなければ従来単一Wi-Fiのまま。
原則: デモ核心 (会話が成立する) を最優先。新機能 (簡潔化/天気/Discord詳細) は段階的に有効化し、不調なら個別に OFF にできる設計にしてある。
6. 参考
- アーキテクチャ: docs/architecture.md
- JCARVIS 連携: docs/integrations/jcarvis.md
- 関連 PR: JCARVIS #188 #189 / stack-chan #93 #94
- 関連 issue: ②#95 ⑨#96 ⑩#97 / JCARVIS #36(X) #185 #186 #187