Synthèse automatique
Cette compétence fournit un runbook pour restaurer automatiquement tous les services persistants (VOICEVOX, VacuumTube, whisper.cpp, superposition Tauri, daemon de vision webcam, superposition GOD MODE) après un redémarrage du bureau Ubuntu/KDE.
Points forts
- Définit un ordre de démarrage clair pour éviter les conflits de ressources (ex. conflit microphone)
- Gère la détection dynamique de DISPLAY après redémarrage
- Utilise des sessions tmux pour l'isolation des processus et la surveillance facile
- Inclut des étapes de vérification pour chaque service
Limites
- Suppose qu'Ollama est déjà en cours d'exécution et que le modèle qwen3-vl est installé
- Nécessite une sélection manuelle du compte pour VacuumTube
- Ne couvre pas les pannes réseau ni les problèmes d'authentification X11
Lorsque vous devez restaurer rapidement un environnement de bureau AI multi-services complexe après un redémarrage.
Si vous configurez les services pour la première fois ; cette compétence suppose l'installation et la configuration préalables.
Analyse de sécurité
SûrThe 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.
Exemples
再起動後の起動手順をやって常駐プロセスを全部立ち上げて音声待受とカメラ監視を復旧して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カメラ画像確認)
Du fichier au premier essai
Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.
Consulter la source et ses fichiers annexesCe téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.
1. Télécharger le fichier
Télécharger SKILL.mdDepuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.
Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.
mkdir -p '.skill-downloads/system-reboot-bringup-mmbizj4r' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/system-reboot-bringup-mmbizj4r/download' --output '.skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md.part' && mv '.skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md.part' '.skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md'2. Vérifier les prérequis
Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.
Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.
Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.
3. Charger la skill
Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.
Claude Code
test -f '.skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md' && test -s '.skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/system-reboot-bringup' && cp -R '.skill-downloads/system-reboot-bringup-mmbizj4r' '.claude/skills/system-reboot-bringup'OpenSkills
OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.
Installation officielle d’OpenSkillsopenskills install './.skill-downloads/system-reboot-bringup-mmbizj4r'openskills read 'system-reboot-bringup-mmbizj4r'La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.
Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.
openskills syncMode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.
4. Faire un premier essai
Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :
Lis .skill-downloads/system-reboot-bringup-mmbizj4r/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.
Bonnes pratiques React Hook Form
Developpement
Maîtrisez React Hook Form : évitez les anti-patterns, gérez les abonnements, et traitez correctement reset, dirty state et entrées contrôlées.
Migration Emotion vers Mantine
Developpement
Migrer les styled-components Emotion vers des composants Mantine avec style props et modules CSS. Pour convertir .styled.tsx ou supprimer les imports @emotion.
Détecteur de dérive de périmètre
Developpement
Analyse les diffs git par rapport à une intention pour détecter la dérive de périmètre, fichiers non liés et PR trop larges, puis suggère de garder, diviser ou justifier.