1 · Calcul local
Ubuntu → Ollama/ROCm → Qwen → Hermes.
Exécuter une recette complète du cœur Jarvis après les Modules 00 à 15. Le but n’est plus d’installer : il faut prouver que chaque composant fonctionne, persiste après redémarrage et peut être restauré. La méthode recommandée est désormais de lancer le prompt de validation directement dans Hermes.
SANTÉ: OK
Reboot complet
Options 01 → 03
SANTÉ: OK du cœur Jarvis.jarvis-bootstrap --rebuild-all sur une machine Jarvis opérationnelle.Ubuntu → Ollama/ROCm → Qwen → Hermes.
Gateway/API → Telegram → voix → Camofox → Open WebUI.
Scripts → NFS → backup → watchdog → hooks → bootstrap.
jarvis-health → reboot → contrôle rapide → freeze Golden.
Au lieu de lancer chaque contrôle manuellement, copiez ce prompt dans Hermes. Il réalise la recette en lecture seule, masque les secrets et produit un verdict structuré. Les étapes détaillées plus bas restent la référence pour diagnostiquer un échec.
VERDICT CŒUR JARVIS : VALIDÉ, effectuer ensuite le reboot manuellement puis lancer le second prompt.Tu es en phase de VALIDATION FINALE de Jarvis.
Objectif : auditer le cœur Jarvis installé sur cette machine et produire un verdict factuel.
RÈGLES DE SÉCURITÉ
- Commence uniquement par des contrôles en lecture seule.
- Ne lance aucune installation, mise à jour, suppression, prune, modification de configuration, restart/stop de service, montage/démontage ou reboot.
- Ne lance jamais `jarvis-bootstrap --rebuild-all`.
- Ne révèle jamais les valeurs de secrets, tokens, clés API ou mots de passe. Si tu lis ~/.hermes/.env ou ~/.config/jarvis/jarvis.env, affiche uniquement les noms des variables utiles et masque leurs valeurs.
- Si une anomalie est détectée, explique-la et propose la commande de correction, mais ne l’exécute pas sans mon accord explicite.
- Home Assistant, UniFi, Gmail et Google Calendar sont OPTIONNELS : leur absence ne doit pas dégrader le verdict du cœur Jarvis.
PÉRIMÈTRE OBLIGATOIRE À VALIDER
1. Ubuntu : version, kernel, synchronisation horaire et espace disque.
2. Docker : service opérationnel.
3. Ollama : service actif, API locale, paramètres Golden (context 65536, Flash Attention, KV cache q8_0, keep-alive), modèle principal disponible.
4. GPU/ROCm : confirmer que le modèle actif est placé sur GPU et signaler toute anomalie visible dans les logs récents.
5. Hermes CLI : `hermes config check`, `hermes doctor` et modèle configuré.
6. Hermes Gateway/API : service user actif, linger, port configuré et endpoint /health accessible. Ne jamais afficher API_SERVER_KEY.
7. Telegram : vérifier la configuration et l’état du Gateway. Ne lance un message de test que si je t’autorise explicitement.
8. Voix locale : vérifier la configuration STT/TTS, provider, modèle et dépendances. Ne change rien.
9. Camofox : service actif, écoute locale uniquement et endpoint /health.
10. Skills cœur : confirmer la présence des skills installés et signaler uniquement ceux qui sont obligatoires au cœur.
11. Open WebUI : conteneur actif, restart policy, port publié, endpoint /health et présence de /app/backend/data/webui.db. Ne lance pas `docker inspect` complet si cela risque d’afficher des secrets.
12. Scripts Jarvis : vérifier la présence et les permissions de `jarvis-health`, `jarvis-system-info`, `jarvis-bootstrap`, `jarvis-backup`, `jarvis-backup-extra`, `jarvis-backup-safe`, `jarvis-watchdog`; exécuter `python3 -m py_compile` sur les scripts Python et `bash -n` sur les scripts Bash.
13. NFS / sauvegarde : vérifier le point de montage configuré, son accessibilité, les derniers backups locaux/NFS, leurs fichiers .sha256 et l’état du timer. Ne déclenche pas un nouveau backup sans mon accord.
14. Watchdog : vérifier service, timer, dernier état enregistré et logs récents. Ne lance `--test-alert` qu’avec mon accord.
15. Hooks Hermes : `hermes hooks list` et `hermes hooks doctor`; confirmer que les actions système sensibles sont protégées.
16. Bootstrap : exécuter uniquement les modes sûrs disponibles, en priorité `jarvis-bootstrap --check` puis `jarvis-bootstrap --simulate-all`. Ne jamais lancer `--rebuild-all`.
17. Diagnostic final : exécuter `jarvis-system-info`, puis `jarvis-health`, récupérer son code retour et vérifier qu’il termine par `SANTÉ: OK`.
MÉTHODE
- Mesure l’état actuel au moment du test ; ne conclus pas à partir d’anciens logs seuls.
- Pour chaque contrôle, indique la commande réellement utilisée et résume le résultat sans exposer de secret.
- Si une commande n’existe pas sur cette version, indique-le et utilise une méthode de vérification équivalente sans modifier la machine.
- N’invente aucun résultat.
FORMAT DU RAPPORT FINAL
Présente un tableau : `Composant | Test | Résultat | Statut | Action requise`.
Utilise seulement les statuts : ✅ OK, ⚠️ À SURVEILLER, ❌ ÉCHEC, ⏭️ OPTIONNEL.
Puis termine par :
- `VERDICT CŒUR JARVIS : VALIDÉ` uniquement si tous les composants obligatoires sont OK ;
- sinon `VERDICT CŒUR JARVIS : NON VALIDÉ`.
Si le cœur est validé, NE REDÉMARRE PAS la machine. Termine par :
`PHASE 1 VALIDÉE — redémarrage complet à effectuer manuellement, puis relancer le prompt de contrôle post-reboot du Module 16.`VERDICT CŒUR JARVIS : VALIDÉ uniquement si toutes les briques obligatoires sont saines.Contrôle post-reboot Jarvis.
Ne modifie rien et ne redémarre aucun service. Vérifie l’état ACTUEL après le redémarrage :
1. `systemctl is-active ollama`
2. `hermes gateway status`
3. `systemctl --user is-active camofox.service`
4. conteneur Open WebUI actif et endpoint /health accessible
5. `systemctl --user is-active jarvis-backup.timer`
6. `systemctl --user is-active jarvis-watchdog.timer`
7. `systemctl --user list-timers` pour confirmer les prochaines échéances
8. `jarvis-system-info`
9. `jarvis-health` puis son code retour
Home Assistant, UniFi, Gmail et Google Calendar restent optionnels et ne doivent pas dégrader le verdict du cœur s’ils ne sont pas configurés.
N’affiche aucun secret. N’utilise pas d’anciens logs comme preuve unique : vérifie l’état courant.
Retourne un tableau `Composant | Résultat | Statut` puis termine exactement par l’un des deux verdicts :
- `VALIDATION POST-REBOOT : OK`
- `VALIDATION POST-REBOOT : ÉCHEC`
En cas d’échec, explique la cause probable et propose les commandes de diagnostic/correction, sans les exécuter sans mon accord.VALIDATION POST-REBOOT : OK et jarvis-health en SANTÉ: OK avec un code retour 0.Exécutez les étapes dans l’ordre. Les tests optionnels peuvent être omis sans invalider le cœur.
test -r "$HOME/.config/jarvis/jarvis.env" && echo "CONFIG_JARVIS=OK" || echo "CONFIG_JARVIS=ABSENTE"
printf '%s\n' "Cœur obligatoire : Ollama, Hermes, Telegram, voix, Camofox, Open WebUI, scripts, backup, watchdog"
printf '%s\n' "Options hors verdict : Gmail, Calendar, Home Assistant / réseau"hostnamectl --static
timedatectl status | sed -n '1,12p'
uname -r
free -h
df -h /systemctl is-active ollama
docker info >/dev/null && echo "DOCKER=OK"
ollama --version
docker --version
docker compose versionsystemctl show ollama -p Environment --value | tr ' ' '\n' | \
grep -E '^(OLLAMA_CONTEXT_LENGTH|OLLAMA_FLASH_ATTENTION|OLLAMA_KV_CACHE_TYPE|OLLAMA_KEEP_ALIVE)='set -a
[ -r "$HOME/.config/jarvis/jarvis.env" ] && . "$HOME/.config/jarvis/jarvis.env"
set +a
MODEL="${JARVIS_MODEL:-qwen3.6:35b-a3b}"
ollama run "$MODEL" "Réponds uniquement : JARVIS_OK"
ollama pshermes config check
hermes doctor
hermes config get modelhermes chathermes gateway status
JARVIS_IP="$(ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1); exit}}')"
printf 'IP_LAN=%s\n' "$JARVIS_IP"
ss -lntp | grep ':8642' || true
curl -fsS "http://$JARVIS_IP:8642/health" && echohermes send --to telegram "Validation finale Jarvis : Telegram texte OK"hermes config get stt
hermes config get tts | grep -E '^(provider|speed):|model|language' || truesystemctl --user is-active camofox.service
curl -fsS http://127.0.0.1:9377/health && echo
ss -lntp | grep ':9377' || truehermes skills list | grep -E 'strix-halo-local-ai|coding-automation|jarvis-maintenance|research-watch' || true
for d in \
"$HOME/.hermes/skills/local-ai/strix-halo-local-ai" \
"$HOME/.hermes/skills/coding/coding-automation" \
"$HOME/.hermes/skills/maintenance/jarvis-maintenance" \
"$HOME/.hermes/skills/research/research-watch"; do
test -f "$d/SKILL.md" && echo "OK $d" || echo "ABSENT $d"
doneJARVIS_IP="$(ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="src"){print $(i+1); exit}}')"
docker ps --filter name=open-webui
docker port open-webui 8080/tcp
curl -fsS "http://$JARVIS_IP:3000/health" && echo
docker exec open-webui test -f /app/backend/data/webui.db && echo "WEBUI_DB=OK"python3 -m py_compile "$HOME/.local/bin/jarvis-health" "$HOME/.local/bin/jarvis-system-info"
for f in jarvis-bootstrap jarvis-backup jarvis-backup-extra jarvis-backup-safe jarvis-watchdog; do
bash -n "$HOME/.local/bin/$f" || exit 1
done
stat -c '%a %n' "$HOME/.local/bin"/jarvis-*set -a
. "$HOME/.config/jarvis/jarvis.env"
set +a
findmnt -T "$JARVIS_NFS_MOUNT"
TEST_FILE="$JARVIS_NFS_MOUNT/.jarvis-validation-$$"
printf 'JARVIS_NFS_OK\n' > "$TEST_FILE"
grep -qx 'JARVIS_NFS_OK' "$TEST_FILE"
rm -f "$TEST_FILE"
echo "NFS_RW=OK"systemctl --user start jarvis-backup.service
systemctl --user status jarvis-backup.service --no-pager || true
journalctl --user -u jarvis-backup.service -n 80 --no-pagersystemctl --user is-enabled jarvis-backup.timer
systemctl --user is-active jarvis-backup.timer
systemctl --user is-enabled jarvis-watchdog.timer
systemctl --user is-active jarvis-watchdog.timer
systemctl --user list-timers --all | grep -E 'jarvis-(backup|watchdog)'
jarvis-watchdog --test-alerthermes hooks list
hermes hooks doctor
printf '%s\n' '{"tool_name":"terminal","tool_input":{"command":"systemctl --user restart hermes-gateway.service"}}' | \
"$HOME/.hermes/agent-hooks/protect-system-actions.py"jarvis-bootstrap --check
jarvis-bootstrap --simulate-alljarvis-bootstrap --check-model-seedjarvis-system-info
jarvis-health
RC=$?
printf 'JARVIS_HEALTH_RC=%s\n' "$RC"
exit "$RC"sudo rebootsystemctl is-active ollama
hermes gateway status
systemctl --user is-active camofox.service
docker ps --filter name=open-webui
systemctl --user is-active jarvis-backup.timer
systemctl --user is-active jarvis-watchdog.timer
jarvis-healthjarvis-bootstrap --freeze
# Si votre NAS Golden est configuré et que vous souhaitez publier les sources de reprise :
# jarvis-bootstrap --publish-seed
# jarvis-bootstrap --publish-model-seedLa validation finale n’est acquise que lorsque tous les éléments obligatoires ci-dessous sont cochés.
Si toutes les cases obligatoires sont validées, que le reboot est passé et que jarvis-health retourne SANTÉ: OK avec un code retour 0, l’installation principale de Jarvis est terminée. Vous pouvez maintenant ajouter uniquement les intégrations dont vous avez besoin.