System Reboot Bringup

VerifiedSafe

Restores all resident processes (VOICEVOX, VacuumTube, whisper.cpp, Tauri overlay, webcam daemons) after a system reboot on an Ubuntu/KDE desktop. Provides a step-by-step runbook with startup order, display verification, and health checks. Use when the user asks for post-reboot startup or full process recovery.

Sby Skills Guide Bot
DevelopmentAdvanced
806/2/2026
Claude Code
#system-reboot#bringup#desktop-automation#voice-assistant#process-management

Recommended for

Our review

This skill provides a runbook to automatically restore all persistent services (VOICEVOX, VacuumTube, whisper.cpp, Tauri overlay, webcam vision daemon, GOD MODE overlay) after an Ubuntu/KDE desktop reboot.

Strengths

  • Defines a clear boot order to avoid resource conflicts (e.g., microphone contention)
  • Handles dynamic DISPLAY detection after reboot
  • Uses tmux sessions for process isolation and easy monitoring
  • Includes verification steps for each service

Limitations

  • Assumes Ollama server is already running and qwen3-vl model is installed
  • Requires manual account selection for VacuumTube
  • Does not cover network failures or X11 authentication issues
When to use it

When you need to quickly restore a complex multi-service AI desktop environment after a system reboot.

When not to use it

If you are setting up services for the first time; this skill assumes prior installation and configuration.

Security analysis

Safe
Quality score88/100

The skill provides commands to restart local services after reboot. All actions are local and intended for the user’s own environment. No exfiltration, remote execution, or destructive operations. The only risk is that it forcibly kills existing tmux sessions, which could be disruptive, but this is a known behavior in a reboot scenario.

Findings
  • Kills existing tmux sessions without confirmation, which may disrupt other processes if run unexpectedly.

Examples

Reboot bringup
再起動後の起動手順をやって
Start all persistent processes
常駐プロセスを全部立ち上げて
Restore voice and camera monitoring
音声待受とカメラ監視を復旧して

name: system-reboot-bringup description: "Ubuntu/KDE デスクトップを再起動したあとに、この環境の常駐プロセス群(VOICEVOX API、VacuumTube、whisper.cpp 音声コマンド待受、Tauri 字幕オーバーレイ、Webカメラ qwen3-vl キャプション daemon、GOD MODE ウェブカメラオーバーレイ)を順序よく復旧する。ユーザーが『再起動後の起動手順をやって』『常駐プロセスを全部立ち上げて』『音声待受とカメラ監視を復旧して』など依頼したときに使う。"

system-reboot-bringup Skill

この環境を再起動した後に、日常運用で使っている常駐プロセス群を復旧するための runbook です。
tmux 管理のプロセスを中心に、起動順・確認手順・ログ確認をまとめています。

対象プロセス(このスキルの範囲)

  • VOICEVOX API(http://127.0.0.1:50021
  • VacuumTube(remote debugging :9992、通常 tmux セッション vacuumtube-bg
  • whisper.cpp 音声コマンド待受一式(whisper-server-ja, whisper-agent-ja
  • Tauri 字幕オーバーレイ(caption-overlay-poc または tauri-overlay
  • Webカメラ + qwen3-vl 常駐キャプション daemon(webcam-vision-daemon
  • GOD MODE ウェブカメラ + 顔認識オーバーレイ(god-mode-bg tmux / port 8765)

前提

  • KDE Plasma デスクトップにログイン済み
  • 実際に有効な DISPLAY を確認して GUI 操作できる(再起動後に :0 / :1 が変わることがある)
  • tmux, curl, jq, python3 利用可能
  • Ollama サーバー起動済み(http://127.0.0.1:11434
  • qwen3-vl:* モデル導入済み(既定は qwen3-vl:4b

重要ルール

  • 音声待受は listeneragent を同時起動しない(マイク競合)
  • 再起動後はまず VOICEVOXVacuumTube の土台を復旧してから whisper-agent を起動する
  • UX(音声・字幕・VacuumTube 操作)は自動テストだけで保証できないため、最後に必ず手動確認する

推奨の起動順(再起動後)

0) 有効な DISPLAY を確認(重要)

再起動後は DISPLAY:0 になることがあるため、固定値 :1 を前提にしない。

for d in :0 :1 :2; do
  echo "== $d =="
  DISPLAY="$d" XAUTHORITY="$HOME/.Xauthority" xdpyinfo >/dev/null 2>&1 && echo ok || echo ng
done

ok になった値を以降のコマンドで使う(例: :0)。

export DESKTOP_DISPLAY=:0
export XAUTHORITY="$HOME/.Xauthority"

1) VOICEVOX (VOICEBOX) を起動(tmux 推奨, API :50021)

VOICEVOXtmux で常駐化しておくと、作業セッション終了時に巻き込まれて落ちにくい。

tmux has-session -t voicevox-bg 2>/dev/null && tmux kill-session -t voicevox-bg || true
tmux new-session -d -s voicevox-bg \
  "bash -lc 'export DISPLAY=${DESKTOP_DISPLAY}; export XAUTHORITY=\"$HOME/.Xauthority\"; exec \"$HOME/.voicevox/VOICEVOX.AppImage\"'"

確認:

curl -fsS http://127.0.0.1:50021/version
tmux capture-pane -pt voicevox-bg -S -40 | tail -n 20

補足:

  • VOICEVOX が起動していないと、whisper-agent は音声応答できない(字幕だけになる/フォールバックになる)

2) VacuumTube を起動(tmux 推奨)

tmux new-session -d -s vacuumtube-bg \
  "bash -lc 'export VACUUMTUBE_DISPLAY=${DESKTOP_DISPLAY}; export XAUTHORITY=\"$HOME/.Xauthority\"; exec ~/vacuumtube.sh'"

確認:

pgrep -af '^/opt/VacuumTube/vacuumtube( |$)'
curl -fsS http://127.0.0.1:9992/json/version

起動直後の手動操作(必要な場合):

  • アカウント選択画面で YuisekinTV を選択
  • 右上にタイル配置(desktop-windows-layout / vacuumtube スキル手順)

3) Tauri 字幕オーバーレイを起動(tauri-overlay tmux セッション)

字幕・ロック画面オーバーレイを 音声待受とは独立して 起動します。 tmux_listen_only.sh(step 3-b)と重複しても問題ありません(tmux_listen_only.shcaption-overlay-poc セッションで同じバイナリを管理します)。 ロック画面単体をテストしたいときや、音声待受なしで字幕 IPC だけ使いたいときに便利です。

# 既存セッションがあれば殺してから起動
tmux has-session -t tauri-overlay 2>/dev/null && tmux kill-session -t tauri-overlay || true
tmux new-session -d -s tauri-overlay \
  "bash -lc 'cd ~/Workspaces/tmp/tauri-caption-overlay-poc/src-tauri && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig DISPLAY=${DESKTOP_DISPLAY} XAUTHORITY=\"$HOME/.Xauthority\" ./target/debug/caption-overlay-poc 2>&1 | tee /tmp/tauri-overlay.log'"

起動確認(IPC ポート 47832):

sleep 3 && tail -5 /tmp/tauri-overlay.log
# 期待: "caption overlay IPC listening on 127.0.0.1:47832"

ロック画面の表示テスト:

echo '{"type":"lock_screen_show","text":"SYSTEM LOCKED"}' | nc -q1 127.0.0.1 47832
# 解除テスト
echo '{"type":"lock_screen_hide"}' | nc -q1 127.0.0.1 47832

補足:

  • バイナリは feature/biometric-lock-screen ブランチで管理(HUD デザイン+生体認証ロック画面)
  • リビルドが必要な場合: cd ~/Workspaces/tmp/tauri-caption-overlay-poc/src-tauri && PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig asdf exec cargo build
  • whisper-agenttauri-overlay とは別に caption-overlay-poc セッション経由でオーバーレイを使う場合は、ポート競合に注意(47832 は1プロセスのみ)

3.5) Chromium ロック画面ブリッジを起動(lock-screen-bridge tmux セッション)

Tauri の代わりに Chromium でロック画面を表示するためのブリッジサーバーです(4K 環境で滑らか)。 ポート 47833 (TCP) + 18766 (WebSocket) + 18765 (HTTP static) を使用します。

# ブリッジ起動
tmux has-session -t lock-screen-bridge 2>/dev/null && tmux kill-session -t lock-screen-bridge || true
tmux new-session -d -s lock-screen-bridge \
  "bash -lc 'cd ~/Workspaces/tmp/tauri-caption-overlay-poc && DISPLAY=${DESKTOP_DISPLAY} python3 lock_screen_bridge.py 2>&1 | tee /tmp/lock-screen-bridge.log'"
sleep 2

# Chromium ロック画面ウィンドウを起動
DISPLAY=${DESKTOP_DISPLAY} chromium \
  --app="http://127.0.0.1:18765/" \
  --disable-background-timer-throttling \
  --disable-renderer-backgrounding \
  --no-first-run --no-default-browser-check \
  2>/dev/null &

起動確認:

# ブリッジログ確認
tail -5 /tmp/lock-screen-bridge.log
# 期待: "Lock screen bridge ready."

# ロック画面テスト
python3 -c "
import socket, json
payload = json.dumps({'type': 'lock_screen_show', 'text': 'SYSTEM LOCKED'}) + '\n'
with socket.create_connection(('127.0.0.1', 47833), timeout=3) as s:
    s.sendall(payload.encode()); s.shutdown(socket.SHUT_WR)
    print(s.recv(4096).decode().strip())
"
# 期待: {"ok": true}

# 解除テスト
python3 -c "
import socket, json
payload = json.dumps({'type': 'lock_screen_hide'}) + '\n'
with socket.create_connection(('127.0.0.1', 47833), timeout=3) as s:
    s.sendall(payload.encode()); s.shutdown(socket.SHUT_WR)
    print(s.recv(4096).decode().strip())
"

音声待受起動時は WHISPER_AGENT_LOCK_SCREEN_IPC_PORT=47833 を指定:

WHISPER_AGENT_LOCK_SCREEN_IPC_PORT=47833 \
STT_BACKEND=moonshine \
... (通常の tmux_listen_only.sh start-agent コマンド)

4) 音声待受(tmux 管理)

tmp/whispercpp-listen/tmux_listen_only.sh が以下をまとめて管理します。

STT バックエンドは STT_BACKEND 環境変数で切り替えます(デフォルト: whisper):

| STT_BACKEND | 起動するセッション | レイテンシ | 精度 | |---------------|-------------------|------------|------| | whisper(既定)| whisper-server-ja + whisper-agent-ja + caption-overlay-poc | ~4500ms | 100% | | moonshine | whisper-agent-ja + caption-overlay-poc(server不要) | ~270ms | 96.6% |

whisper バックエンド(既定)

CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
tmp/whispercpp-listen/tmux_listen_only.sh start-agent

moonshine バックエンド + 声紋認証(推奨構成)

STT_BACKEND=moonshine \
WHISPER_AGENT_SPEAKER_ID=1 \
CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
tmp/whispercpp-listen/tmux_listen_only.sh start-agent

moonshine バックエンド(声紋認証なし)

STT_BACKEND=moonshine \
CAPTION_OVERLAY_DISPLAY="${DESKTOP_DISPLAY}" \
CAPTION_OVERLAY_XAUTHORITY="$HOME/.Xauthority" \
tmp/whispercpp-listen/tmux_listen_only.sh start-agent

moonshine は whisper-server-ja セッションを起動しません。モデルは voice_command_loop.py プロセス内にロードされます。

モデルサイズ変更(既定: base):

STT_BACKEND=moonshine MOONSHINE_MODEL_SIZE=tiny \
WHISPER_AGENT_SPEAKER_ID=1 \
tmp/whispercpp-listen/tmux_listen_only.sh start-agent

状態確認:

tmp/whispercpp-listen/tmux_listen_only.sh status

よく使うログ:

tmp/whispercpp-listen/tmux_listen_only.sh logs-agent
tmp/whispercpp-listen/tmux_listen_only.sh logs-agent-tail
tmp/whispercpp-listen/tmux_listen_only.sh logs-overlay

補足:

  • whisper 既定モデルは ggml-small.bin
  • DJI マイクを明示したいときは WHISPER_MIC_SOURCE=... tmp/whispercpp-listen/tmux_listen_only.sh restart-agent
  • moonshine バックエンドは音声キャプチャに ffmpegparec 不要)を使用します
  • WHISPER_AGENT_SPEAKER_ID=1 で ECAPA-TDNN 声紋認証を有効化(お嬢様のみコマンド実行可能)
    • マスターボイスプリント: tmp/whispercpp-listen/tests/fixtures/master_voiceprint.npy
    • 閾値: WHISPER_AGENT_SPEAKER_THRESHOLD(既定 0.60、ライブマイク実測値 0.63〜0.78)
    • 認証失敗時: 「声紋認証に失敗しました。もう一度お試しください。」と返答してコマンドをブロック
    • マスター再生成: cd tmp/whispercpp-listen && python3 prototype_speaker_id.py

4) Webカメラ qwen3-vl daemon(tmux 管理)

新規 tmux ラッパー:

  • tmp/webcam_ollama_vision/tmux_webcam_daemon.sh

起動(既定: qwen3-vl:4b, 60秒間隔, 複数カメラ+横結合+stitch-only優先):

tmp/webcam_ollama_vision/tmux_webcam_daemon.sh start

状態/ログ:

tmp/webcam_ollama_vision/tmux_webcam_daemon.sh status
tmp/webcam_ollama_vision/tmux_webcam_daemon.sh logs

保存先(既定):

  • ~/.cache/yuiclaw/camera/YYYY/MM/DD/HH/MM.png
  • ~/.cache/yuiclaw/camera/YYYY/MM/DD/HH/MM.txt

補足:

  • キャプションは前回結果を次回プロンプトへ渡し、「前回との差分」を優先して説明する
  • カメラが1台しか見つからない場合は --stitch-only を自動で無効化して起動する

5) GOD MODE(ウェブカメラ + 顔認識オーバーレイ)を起動(tmux 管理)

step 4 の webcam-vision-daemon(定期スナップショット → qwen3-vl AI分析)とは別システムです。 GOD MODE はリアルタイム映像をデスクトップ上にオーバーレイ表示する「映像表示系」です。

tmp/GOD_MODE/god_mode_restart.shtmux セッション god-mode-bg から実行します。 内部では god_mode.sh restart が各プロセスを nohup で起動し PID を /tmp/god_mode_8765.pids に保存します。 その後 layout --full-screen → --backmost でウィンドウを全画面・最背面(壁紙代わり)に配置します。

tmux has-session -t god-mode-bg 2>/dev/null && tmux kill-session -t god-mode-bg || true
tmux new-session -d -s god-mode-bg \
  "bash -lc 'cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} XAUTHORITY=\"$HOME/.Xauthority\" bash god_mode_restart.sh; exec bash'"

god_mode_restart.sh の内容(参考):

./god_mode.sh restart --chromium --port 8765 --cameras 0,2,4
./god_mode.sh layout --full-screen
./god_mode.sh layout --backmost

起動確認(起動完了まで 10〜20 秒かかります):

# tmux セッションのログを確認
tmux capture-pane -pt god-mode-bg -S -40 | tail -n 20

# video server の HTTP 応答を確認
curl -fsS http://localhost:8765/status

手動でウィンドウレイアウトを変更したい場合:

cd ~/Workspaces/tmp/GOD_MODE

# 前面に出す(ウェブカメラが見たいとき)
DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --frontmost

# フルスクリーン
DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --full-screen

# 左下コンパクト配置
DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --left-bottom

# 最背面に戻す(壁紙モード)
DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --backmost

停止したい場合:

cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh stop

補足:

  • GOD MODE は --chromium モードで Chromium ウィンドウを使用(--chromium なし: Tauri モード)
  • --cameras 0,2,4 でカメラ 0・2・4 番を使用(実際のデバイス番号は環境依存)
  • 音声コマンド システム、ウェブカメラが見たい 等でも制御可能(whisper-agent 運用中の場合)

まとめて確認(復旧完了チェック)

tmux ls | rg 'voicevox-bg|vacuumtube-bg|whisper-server-ja|whisper-agent-ja|caption-overlay-poc|tauri-overlay|webcam-vision-daemon|god-mode-bg'
curl -fsS http://127.0.0.1:50021/version
curl -fsS http://127.0.0.1:9992/json/version
curl -fsS http://127.0.0.1:11434/api/tags | jq -r '.models[].name' | rg '^qwen3-vl:' | head
curl -fsS http://localhost:8765/status
# Tauri オーバーレイ IPC 確認
echo '{"type":"notify","text":"bringup OK"}' | nc -q1 127.0.0.1 47832

期待される tmux セッション(通常運用):

  • voicevox-bg
  • vacuumtube-bg
  • tauri-overlay(字幕・ロック画面オーバーレイ / IPC :47832)
  • whisper-server-ja(STT_BACKEND=whisper のときのみ)
  • whisper-agent-ja
  • caption-overlay-poctmux_listen_only.sh が tauri-overlay と 別に 起動する場合 — ポート競合に注意)
  • webcam-vision-daemon
  • god-mode-bg(起動スクリプト完了後は idle、GOD_MODE プロセス自体は nohup で稼働中)

注意:

  • whisper-listen-jaagent 運用中は STOPPED が正常
  • god-mode-bg の tmux は起動コマンド実行後に idle になるのが正常(exec bash で待機している)

最小の手動確認(UX)

  1. システム 状況報告 と話しかける
  2. 字幕オーバーレイ + VOICEVOX 応答が出ることを確認
  3. YouTubeを小さくして など簡単なコマンドを試す
  4. tmp/webcam_ollama_vision/tmux_webcam_daemon.sh logs で最新キャプションが流れることを確認

トラブルシュート(再起動直後に多いもの)

1) whisper-agent は動いているのに喋らない

  • VOICEVOX が起動していないことが多い
  • 再起動後に DISPLAY を取り違えて VOICEVOX が即終了していることもある
  • 確認: curl -fsS http://127.0.0.1:50021/version

2) Webcam daemon がすぐ落ちる

  • Ollama 未起動 / qwen3-vl:* 未ロード
  • 確認:
    • curl -fsS http://127.0.0.1:11434/api/tags
    • tmp/webcam_ollama_vision/tmux_webcam_daemon.sh logs

3) VacuumTube の CDP が見えない

  • ~/vacuumtube.sh 起動漏れ or :9992 未設定
  • 確認: curl -fsS http://127.0.0.1:9992/json/version

4) Tauri オーバーレイ(IPC :47832)に繋がらない

  • tauri-overlay セッションが未起動、またはポート競合で落ちている
  • 確認: nc -zv 127.0.0.1 47832
  • ログ確認: tmux capture-pane -pt tauri-overlay -S -40 または tail -20 /tmp/tauri-overlay.log
  • 再起動手順は Step 3 を参照
  • 別プロセスがポートを使用中の場合: lsof -i :47832 で PID を特定して kill

5) GOD MODE の video server に繋がらない

  • god_mode.sh restart が失敗しているか、まだ起動中
  • tmux capture-pane -pt god-mode-bg -S -40 でログを確認
  • DISPLAY が合っていないと Chromium ウィンドウが開かない(step 0 で確認した値を使うこと)
  • 手動で再起動: cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode_restart.sh

5) GOD MODE ウィンドウが前面に出たまま戻らない

  • --backmost の KWin スクリプトが効いていない可能性
  • 手動で最背面に: cd ~/Workspaces/tmp/GOD_MODE && DISPLAY=${DESKTOP_DISPLAY} bash god_mode.sh layout --backmost

関連スキル

  • vacuumtube(VacuumTube の CDP 操作)
  • audio-stt-whisper(whisper-agent 運用)
  • audio-speak-voicebox(VOICEVOX + 字幕オーバーレイ)
  • webcam-vision-ollama(Webカメラ + qwen3-vl)
  • desktop-windows-layout(VacuumTube の右上配置など)
  • webcam-vision-ollama(GOD MODE の Webカメラ画像確認)
Related skills