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 you need to quickly restore a complex multi-service AI desktop environment after a system reboot.
If you are setting up services for the first time; this skill assumes prior installation and configuration.
Security analysis
SafeThe 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.
- •Kills existing tmux sessions without confirmation, which may disrupt other processes if run unexpectedly.
Examples
再起動後の起動手順をやって常駐プロセスを全部立ち上げて音声待受とカメラ監視を復旧して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 管理のプロセスを中心に、起動順・確認手順・ログ確認をまとめています。
対象プロセス(このスキルの範囲)
VOICEVOXAPI(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-bgtmux / port 8765)
前提
- KDE Plasma デスクトップにログイン済み
- 実際に有効な
DISPLAYを確認して GUI 操作できる(再起動後に:0/:1が変わることがある) tmux,curl,jq,python3利用可能Ollamaサーバー起動済み(http://127.0.0.1:11434)qwen3-vl:*モデル導入済み(既定はqwen3-vl:4b)
重要ルール
- 音声待受は
listenerとagentを同時起動しない(マイク競合) - 再起動後はまず
VOICEVOXとVacuumTubeの土台を復旧してから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)
VOICEVOX も tmux で常駐化しておくと、作業セッション終了時に巻き込まれて落ちにくい。
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.sh が caption-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-agentがtauri-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 バックエンドは音声キャプチャに
ffmpeg(parec不要)を使用します 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.sh を tmux セッション 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-bgvacuumtube-bgtauri-overlay(字幕・ロック画面オーバーレイ / IPC :47832)whisper-server-ja(STT_BACKEND=whisper のときのみ)whisper-agent-jacaption-overlay-poc(tmux_listen_only.shが tauri-overlay と 別に 起動する場合 — ポート競合に注意)webcam-vision-daemongod-mode-bg(起動スクリプト完了後は idle、GOD_MODE プロセス自体は nohup で稼働中)
注意:
whisper-listen-jaはagent運用中はSTOPPEDが正常god-mode-bgの tmux は起動コマンド実行後に idle になるのが正常(exec bashで待機している)
最小の手動確認(UX)
システム 状況報告と話しかける- 字幕オーバーレイ + VOICEVOX 応答が出ることを確認
YouTubeを小さくしてなど簡単なコマンドを試す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/tagstmp/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カメラ画像確認)
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.