Skip to content

🎤 実機デモ Runbook — 2026-06-18 08:00 (講義デモ)

目的: 明日朝のデモを 安定動作最優先 で立ち上げるための手順・検証・フォールバック集約。 2026-06-17 夜の作業 (不満点対応スプリント) の成果を反映した状態で起動する。


0. このスプリントで何が変わったか (PR 一覧)

PRリポ不満点反映方法状態
AIEO_JCARVIS #188JCARVIS⑤音声が長い / ⑦ペルソナ / ④DiscordJCARVIS 再起動音声を簡潔化(100字)+人格注入+Discord詳細スレッド
AIEO_JCARVIS #189JCARVIS⑥天気エラーJCARVIS 再起動天気スキル(Open-Meteo, APIキー不要, IP位置推定+場所指定)
aieo-stack-chan #93bridge①喋り出し遅いbridge 再起動 (既定OFF)文境界逐次TTS。TTS_STREAMING=1 で有効化(実機検証後)
aieo-stack-chan #94firmware⑧複数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=noneVOICEVOX は不要(起動しなくてよい)。

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 を反映

bash
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 .envJCARVIS_ENDPOINT=http://127.0.0.1:8185/agent 設定済み。

1-3. bridge (:7780 WSS) — ★ #93

bash
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.plist

1-4. Tailscale Funnel (公開 WSS)

bash
tailscale funnel status     # /stackchan/ws が公開されているか確認 (#48)

1-5. 本体 (CoreS3) 電源 ON

起動 → Wi-Fi 接続 → WSS 接続 → 顔アニメ表示を確認。


2. ⑦ JCARVIS 経路の検証 (返答がJCARVIS由来か) — ★デモ前 必須チェック

  1. エンジン確認 (echo でなく Claude か):
    bash
    curl -s http://127.0.0.1:8181/healthz
    # → {"ok":true,"agent":"donack","engine":"ClaudeEngine"}   ← ★ "EchoEngine" だったら DONACK_ENGINE=claude が未設定!
  2. /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 (不満⑤⑦)
  3. 天気 (不満⑥):
    bash
    curl -N -X POST http://127.0.0.1:8181/agent -H 'content-type: application/json' \
      -d '{"prompt":"今日の天気は?","source":"stackchan","stream":true}'
    # → 現在地(IP推定)の天気が簡潔に。 "大阪の天気は?" で指定地も確認。
  4. bridge ログ: 本体に話しかけて bridge コンソールに [wake] forwarding: ... が出る → JCARVIS へ転送されている。
  5. 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 することが必須。

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. デモ進行シナリオ (推奨)

  1. 「ねえドナック、自己紹介して」→ 簡潔な自己紹介 (簡潔化の見せ場)。
  2. 「ねえドナック、今日の天気は?」→ 現在地の天気 (新機能⑥)。
  3. 「ねえドナック、大阪の天気は?」→ 場所指定。
  4. 何か技術質問 → 音声は簡潔、Discordのどなっくチャンネルに詳細解説が出るのを画面で見せる (エージェント開発のアピール: 音声=要点 / テキスト=深掘り)。
  5. Debug HUD (画面右上タップ) で内部状態を見せる (開発の可視化アピール)。

5. フォールバック / トラブルシュート (安定性優先)

症状対処
天気/Discord/簡潔化が全く効かないbridge .envDEFAULT_BACKEND=jcarvis を確認 (claude だと JCARVIS を素通りし bridge内蔵Haikuが応答)。直して bridge 再起動
返答がオウム返し・素っ気ないJCARVIS 側 DONACK_ENGINE=claude 未設定 → 設定して JCARVIS 再起動 (§2-1)
天気がエラーネット未到達 or API 一時失敗。DONACK_DEFAULT_LOCATION 設定。再度質問でリトライ
音が二重に鳴る / 音が出ないbridge .envTTS_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. 参考

aieo-product / stack-chan project