Documentation · version 0.7.0
Asgard Argos
L'intelligence artificielle au centre de votre infrastructure : elle surveille, diagnostique, anticipe et résout les problèmes — seule quand l'action est sans risque, avec votre validation sinon.
1 Présentation
Argos est un serveur que vous installez sur une VM Linux de votre réseau. Il se compose de :
- Serveur central (
asgard-argos-server) : interface web, API, base SQLite, alertes, veille, et la passerelle MCP par laquelle passe chaque appel d'outil des IA (niveau de risque, journal). - Agents sur les machines surveillées : Linux (service natif ou conteneur Docker) et Windows (service). Ils envoient les métriques et exécutent les commandes validées.
- Moteurs IA : Claude Code (conteneur dédié, en bac à sable), Ollama local (petites tâches), API Claude / OpenAI en repli.
- Intégrations : Proxmox, OPNsense, Synology, Traefik, Asgard Notes — exécutées dans le serveur, identifiants saisis dans Paramètres → Intégrations (chiffrés, jamais réaffichés).
- Disponibilité : sondes HTTP(S), port TCP, ping et DNS sur vos applications web, certificats surveillés, et une page de statut publique façon Uptime Kuma.
Navigateur ──HTTPS──▶ reverse proxy ──▶ VM Argos (docker compose)
│
├─ asgard-argos-server :8484 interface, API, passerelle MCP
│ ├─▶ engine-claude Claude Code (bac à sable)
│ ├─▶ ollama IA locale (processeur)
│ └─▶ intégrations proxmox · opnsense · synology · traefik · notes
│
└─◀─ agents (WebSocket /agent/ws) Linux natif · Linux Docker · Windows
Principe directeur : les IA ne voient jamais un secret. Elles appellent un outil, la passerelle authentifie. Les identifiants sont saisis dans l'interface, chiffrés en base, et ne sont jamais renvoyés au navigateur.
2 Prérequis
- VM Linux (Debian / Ubuntu) avec Docker et le plugin docker compose, amd64 ou arm64. Comptez 4 vCPU, 8 Go de RAM et une vingtaine de Go de disque si vous gardez Ollama (le modèle par défaut,
qwen2.5:3b, pèse ~2 Go et tourne sur processeur) ; 2 Go suffisent sans lui. - Un reverse proxy TLS (Traefik, Nginx, Caddy) et un nom de domaine (ex.
argos.mondomaine.fr) : la 2FA par clé physique et les notifications Web Push exigent HTTPS. - Réseau local ou VPN uniquement : Argos n'est pas fait pour être exposé sur Internet. Les agents doivent seulement pouvoir joindre son URL.
- Optionnel : un abonnement Claude (pour le moteur Claude Code, sans crédit d'API), un serveur ntfy ou un salon Discord, et le serveur Asgard Notes pour la liaison avec Notes et Remote.
3 Installation
Les images sont tirées du Docker Hub (anpms/asgard-argos-server, -engine-claude, et -agent pour les machines surveillées) — rien à construire, aucun .env.
-
1 Récupérer le
compose.ymlIl se trouve dans le dossier
server/du dépôtasgard-argos: trois conteneurs (serveur, Ollama, moteur Claude Code). Copiez-le dans un dossier de la VM, par exemple~/asgard-argos. -
2 Préparer les dossiers de données
Le serveur et le moteur Claude Code tournent sans privilèges (utilisateur
node, uid 1000) sur un système de fichiers en lecture seule : leurs dossiers doivent leur appartenir avant le premier démarrage.cd ~/asgard-argos mkdir -p asgard-argos-data asgard-argos-claude-home asgard-argos-ollama sudo chown 1000:1000 asgard-argos-data asgard-argos-claude-home -
3 Démarrer
docker compose up -d docker compose ps # tous les services « running / healthy » docker compose logs -f asgard-argos-serverLe serveur écoute sur le port
8484de la VM. Ollama et le moteur ne publient aucun port ; le moteur lit ses jetons internes dansasgard-argos-data/engine, écrit par le serveur.
4 Les paramètres
Tout se règle dans Paramètres, rangé par onglet et appliqué sans redémarrage. Les secrets sont chiffrés (AES-256-GCM, clé maître dans asgard-argos-data/secret.key) et ne sont jamais réaffichés.
| Onglet | Contenu |
|---|---|
| Compte et sécurité | Identifiant et mot de passe, double authentification (TOTP, clé physique). |
| Serveur | Adresse publique (commandes d'installation des agents, boutons des notifications), domaine des clés de sécurité, reverse proxy, cookies, délai « hors ligne », rétention, image de l'agent Docker. |
| Intelligence artificielle | Jeton d'abonnement Claude (claude setup-token, aucun crédit d'API) ou clé, clés API Claude / OpenAI de repli, Ollama, modèles et ordre des moteurs par tâche, remédiation IA. |
| Autonomie | Exécution automatique des actions sans risque, liste blanche des commandes. |
| Intégrations | Proxmox (plusieurs nœuds), OPNsense, Synology, Traefik, Asgard Notes : adresse, identifiants, certificat d'autorité collé en PEM. Bouton Enregistrer et tester. |
| Applications | Jetons des applications Asgard (notes, forge) et des moteurs IA externes autorisés sur /mcp. Chaque jeton n'est affiché qu'une fois et se révoque d'un clic. |
| Surveillance | Silence des notifications au démarrage (15 min par défaut : les VM redémarrent avec l'hôte, un seul récapitulatif à la fin), seuils d'alerte, disponibilité, certificats, page de statut, veille proactive. |
| Notifications | ntfy, Discord, Web Push, avec un bouton de test par canal. |
Mot de passe perdu : ajoutez ADMIN_RESET_PASSWORD: "…" au service serveur du compose, docker compose up -d, connectez-vous, puis retirez la ligne.
5 Reverse proxy
Routez le domaine vers http://<ip-vm>:8484 avec le TLS terminé par le proxy (Paramètres → Serveur → Derrière un reverse proxy). Le proxy doit transmettre X-Forwarded-Proto / X-Forwarded-Host et autoriser le WebSocket (temps réel de l'interface et connexion des agents). Exemple Traefik en configuration par fichier, limité au réseau local :
[http.routers.argos]
rule = "Host(`argos.mondomaine.fr`)"
entryPoints = ["websecure"]
service = "argos"
middlewares = ["lan-only"]
[http.routers.argos.tls]
certResolver = "letsencrypt"
[[http.services.argos.loadBalancer.servers]]
url = "http://192.168.40.10:8484"
[http.middlewares.lan-only.ipAllowList]
sourceRange = ["192.168.0.0/16", "10.0.0.0/8"]
Pour restreindre le port publié à une interface : "192.168.40.10:8484:8484" dans compose.yml.
6 Premier démarrage
1 Compte administrateur
Ouvrez
https://argos.mondomaine.fr: au premier accès, Argos propose de créer le compte administrateur.2 Serveur et double authentification
Paramètres → Serveur : adresse publique et reverse proxy. Puis Compte et sécurité : application TOTP et/ou clé physique. La validation d'une action sensible exige une session et la 2FA.
3 Moteurs IA
Paramètres → Intelligence artificielle : jeton d'abonnement Claude, état de chaque moteur, modèle Ollama (téléchargé automatiquement), URL d'un Ollama sur votre PC, ordre des moteurs par tâche.
4 Notifications
Paramètres → Notifications : ntfy, Discord (URL d'un webhook : Paramètres du salon → Intégrations → Webhooks), puis Web Push sur chaque appareil (HTTPS requis).
5 Intégrations, applications & surveillance
Paramètres → Intégrations pour vos équipements, Applications pour relier Notes et Forge, Surveillance pour le silence au démarrage et la disponibilité. L'Autonomie reste désactivée tant que vous ne l'activez pas.
7 Surveiller des machines
Tableau de bord → Ajouter une machine : nom, rôle, puis le type d'agent. Argos génère un jeton d'appairage à usage unique (affiché une seule fois) et la commande d'installation correspondante. La machine passe de en attente à en ligne dès la première connexion de l'agent.
Service systemd en root, sans Docker, mis à jour automatiquement (empreinte SHA-256 vérifiée).
curl -sSL https://argos…/get | sudo sh -s -- <jeton>
Mettre à jour à la main : la même commande sans jeton. Désinstaller : -s -- --uninstall. Journaux : journalctl -u asgard-argos-agent -f.
Argos fournit un compose.yml prêt à coller (image anpms/asgard-argos-agent, jeton inclus) :
mkdir -p ~/asgard-argos-agent && cd ~/asgard-argos-agent
nano compose.yml # coller le compose généré
docker compose up -d
Le socket Docker est monté pour les actions sur les conteneurs : retirez-le si vous n'en voulez pas.
Windows 10 / 11, Windows Server 2019+ (x64, domaine AD compris). Dans un PowerShell administrateur :
[Net.ServicePointManager]::SecurityProtocol = 'Tls12'; & ([scriptblock]::Create((Invoke-RestMethod 'https://argos…/get/windows'))) -Token <jeton>
Service « Asgard Argos Agent » (SYSTEM), mise à jour automatique. -Uninstall pour le retirer.
Clic droit sur une connexion → Déployer l'agent Argos… : Remote inscrit la machine et installe l'agent par SSH (natif ou Docker, mot de passe sudo demandé si besoin) ou affiche la commande Windows. Mettre à jour l'agent et le déploiement en masse se font depuis la même liste.
Chaque fiche machine montre les métriques, les conteneurs Docker (avec l'interrupteur « non critique » utilisé par l'autonomie), les alertes et les propositions. Supprimer une machine efface aussi son historique et son jeton.
8 Moteurs IA
| Moteur | Où | Configuration |
|---|---|---|
| Claude Code | conteneur asgard-argos-engine-claude, en bac à sable (aucun outil intégré : ni shell, ni fichiers, ni web — seulement les outils d'Argos) | jeton d'abonnement ou clé, Paramètres → IA |
| Ollama (VM) | conteneur asgard-argos-ollama, processeur | modèle dans Paramètres → Moteurs IA (défaut qwen2.5:3b) |
| Ollama (PC) | votre poste, s'il est allumé (sondé toutes les minutes) | URL + modèle dans Paramètres → Moteurs IA |
| API Claude | API Anthropic | clé API, Paramètres → IA |
| API OpenAI | OpenAI ou API compatible | clé et URL facultative, Paramètres → IA |
Chaque tâche a sa chaîne de moteurs : un moteur indisponible est sauté, un échec (délai, quota, refus, réponse vide) passe au suivant, et la réponse indique le repli utilisé. Par défaut :
- Chat (avec outils) : Claude Code → Ollama PC → API Claude → API OpenAI → Ollama VM.
- Tri des alertes (sans outils, court) : Ollama VM → Ollama PC → API Claude → API OpenAI → Claude Code.
Tous les appels d'outils passent par la passerelle, quel que soit le moteur : même politique de risque, même journal, nom du moteur inscrit sur chaque action.
9 Intégrations
Les lectures sont libres ; toute action d'une intégration part dans la file « À valider ». Tout se saisit dans Paramètres → Intégrations (bouton Enregistrer et tester). Certificat auto-signé : collez le certificat de l'autorité (PEM) dans le champ prévu, à préférer à « Ne pas vérifier le certificat ».
| Intégration | Lecture | Actions (validation) |
|---|---|---|
| Proxmox VE (plusieurs nœuds) | état des serveurs, VM / LXC, stockage, snapshots, tâches en erreur | démarrer / arrêter / redémarrer, snapshot |
| OPNsense | système, services, passerelles, interfaces, baux DHCP | redémarrer un service (jamais les règles de pare-feu) |
| Synology DSM | système, volumes et SMART, tâches Hyper Backup | lancer une sauvegarde |
| Traefik | routeurs, services en panne, expiration réelle des certificats | — (lecture seule) |
Proxmox — sur chaque nœud
pveum user add argos@pve --comment "Asgard Argos"
pveum role add ArgosOps -privs "VM.Audit VM.PowerMgmt VM.Snapshot VM.GuestAgent.Audit"
pveum acl modify / --users argos@pve --roles PVEAuditor
pveum acl modify /vms --users argos@pve --roles ArgosOps
pveum user token add argos@pve argos --privsep 0 # secret affiché une seule fois
Dans Argos : Ajouter un nœud → nom (pve1), adresse (https://192.168.10.11:8006), identifiant du jeton (argos@pve!argos), secret, et le contenu de /etc/pve/pve-root-ca.pem comme certificat d'autorité.
VM.GuestAgent.Audit (Proxmox 9 ; VM.Monitor en 8) permet de lire l'IP des VM par l'agent invité QEMU, utilisée pour proposer des connexions à Remote.
OPNsense
Système → Accès → Utilisateurs : créez argos avec les privilèges de lecture (tableau de bord, Status: Interfaces, System: Gateways, Services: ISC DHCPv4: Leases…) et la gestion des services, aucun privilège sur les règles ; générez une clé API et saisissez adresse, clé et secret dans Argos. Un privilège manquant apparaît comme une erreur HTTP 403 dans le Journal IA.
Synology DSM
Utilisateur argos sans double authentification (la Web API ne sait pas y répondre), membre du groupe administrators (exigé par DSM pour le stockage et Hyper Backup) ; refusez-lui les dossiers partagés inutiles. Adresse https://<nas>:5001, utilisateur et mot de passe dans Argos.
Traefik
Activez l'API en lecture ([api] dashboard = true) et n'ouvrez son port qu'à l'IP de la VM Argos. L'adresse de l'API est celle sans nom de domaine, IP et port (ex. http://192.168.10.20:8080) — attention au schéma : http:// sur un port HTTP. Utilisateur et mot de passe si l'API est protégée.
10 Liaison avec Asgard Notes & Remote
Notes (web / app) ─┐ /api/v1/argos/* ┌─▶ Argos lit vos notes (jeton de service)
├─▶ SERVEUR NOTES ── jeton « notes » ──▶ ARGOS ┤ et écrit ses rapports dans Argos/
Remote (app) ──────┘ (relais, le jeton reste sur le serveur) └─▶ inventaire, connexions proposées, badges
1 Notes → Argos
Dans Argos, Paramètres → Applications → créer un jeton nommé
notes. Dans Notes, Administration → Asgard Argos : adresse d'Argos et ce jeton.2 Argos → Notes
Dans Notes, Administration → Jetons de service → libellé « Asgard Argos » → copiez la valeur
svc_…. Dans Argos, Paramètres → Intégrations → Asgard Notes : adresse de Notes et ce jeton.3 C'est tout
Appliqué immédiatement, sans redémarrage. Dans Notes :
⇧⌘Jou le bouton Argos. Dans Remote : badge « ARGOS » sur les machines surveillées, et les menus de déploiement de l'agent.
- Rapports : chaque incident (exécuté, échec, rollback) donne une note dans
Argos/Incidents/AAAA-MM; « Enregistrer dans Notes » range une conversation dansArgos/Conversations; le rapport hebdomadaire va dansArgos/Rapports. - Remote : Argos peut proposer des connexions (machines découvertes par les agents ou Proxmox, rangées dans le dossier « homelab », même sans mot de passe) et ranger le coffre (doublons, étiquettes). Une connexion qui a des identifiants n'est jamais supprimée.
- Le relais est réservé aux administrateurs Notes (ou aux comptes autorisés dans l'administration de Notes). Aucune validation d'action ne passe par cette voie : valider se fait dans l'interface d'Argos, avec la 2FA.
11 Utilisation au quotidien
Une tuile par machine (CPU, RAM, disques, état). La fiche détaille l'historique, les conteneurs, les alertes et les propositions.
Posez une question en français : Argos appelle les outils nécessaires (machines, Proxmox, NAS…) et répond. Les outils utilisés et un éventuel repli de moteur sont affichés sous la réponse.
Seuils disque / RAM, CPU soutenu, machine hors ligne. Chaque alerte est triée par l'IA (gravité, piste) et notifiée. Cochez-en plusieurs puis Résoudre avec Argos : un diagnostic par machine, qui prépare les propositions de correctif.
Diagnostic + commandes proposées. Accepter (session + 2FA) les fait exécuter par l'agent ; le résultat et, au besoin, le rollback sont tracés. Plusieurs propositions en attente s'acceptent ou se refusent d'un coup, après un récapitulatif des commandes.
Points d'attention, prévisions de saturation (moins de 7 jours), sauvegardes, certificats (moins de 21 jours), mises à jour proposées, audit de sécurité. Rapport hebdomadaire le lundi à 8 h.
Chaque appel d'outil : moteur, niveau de risque, décision, résultat. C'est aussi là que se valident les actions d'intégration, une par une ou par lot.
Alertes, Propositions IA et Journal IA s'ouvrent sur ce qui reste à régler ; ce qui est déjà réglé reste consultable dans le filtre Historique.
Depuis une notification ntfy : Examiner ouvre la page de validation (connexion + 2FA demandées) ; Refuser est un lien signé en un clic, valable 24 h, qui ne peut jamais déclencher d'exécution. Sur Discord, le message contient un lien vers cette même page de validation (où l'on accepte ou refuse).
12 Disponibilité & page de statut
Page Disponibilité : Argos vérifie que vos applications web répondent (Plex, Nextcloud, Home Assistant…), façon Uptime Kuma. Ajouter une sonde :
| Type | Vérifie |
|---|---|
| HTTP(S) | Code de réponse attendu (ex. 200-399), mot-clé présent ou absent dans la page, temps de réponse, redirections suivies, certificat valide (auto-signé accepté sur demande). Exemple Plex : https://plex.mondomaine.fr/identity. |
| Port TCP | Le port répond (SSH, RDP, base de données…). |
| Ping | L'hôte répond en ICMP (sans privilège particulier). |
| DNS | Le nom se résout (A, AAAA, CNAME, MX, TXT, NS), sur un serveur choisi, avec une réponse attendue facultative. |
- Intervalle, délai et nombre d'échecs tolérés par sonde (défauts dans Paramètres → Surveillance) ; un échec est revérifié plus vite avant de déclarer la panne.
- Historique des 60 derniers contrôles, disponibilité sur 24 h / 7 j, temps de réponse moyen. Notification de panne puis de rétablissement (avec la durée).
- Certificats des sondes HTTPS vérifiés toutes les 6 h : alerte sous 14 jours (réglable), puis à l'expiration.
- Le chat d'Argos connaît ces sondes : « Plex est-il en ligne ? ».
Page de statut publique
Paramètres → Surveillance → Publier la page de statut (titre, message de maintenance), puis cochez Afficher sur la page de statut sur les sondes à montrer. La page https://argos.mondomaine.fr/status s'ouvre sans connexion : état global, groupes, historique et disponibilité, actualisée toutes les minutes. Les adresses et les erreurs n'y apparaissent jamais.
13 Sécurité & autonomie
- « Faible risque » = l'action ne peut provoquer aucune panne de production. Au moindre doute, ce n'est pas faible risque. La liste est fermée :
docker image prune -f,journalctl --vacuum-…, etdocker restartd'un conteneur marqué « non critique » sur sa fiche. - Autonomie désactivée par défaut (Paramètres → Autonomie). Activée, seules les propositions dont toutes les commandes sont faible risque s'exécutent seules ; le résultat est vérifié, avec rollback automatique et notification prioritaire en cas de problème.
- Toujours validé : pare-feu, DNS, arrêt ou redémarrage de VM et de services de production, mises à jour (apt, piles Docker, Windows Update), toute suppression de données, toute action d'intégration.
- L'IA peut rétrograder une action vers la validation, jamais la promouvoir. Les agents n'exécutent que des commandes d'une liste blanche, vérifiée aussi par le serveur.
- Ajouter une commande à la liste blanche : Paramètres → Liste blanche → « Ajouter une commande… », ou « Autoriser cette commande… » sur une commande refusée d'une proposition. Commande exacte (
zpool scrub tank) ou modèle à trous (zpool scrub {nom}, avec{nom},{nombre},{chemin},{ip}), pour toutes les machines Linux ou Windows. Chaque ajout est confirmé par la 2FA (impossible sans 2FA sur le compte) ; aucun enchaînement ni substitution n'est accepté (;,|,$…). Ces commandes restent toujours soumises à validation. - Les mises à jour longues (apt,
docker compose pull / up -d) tournent hors de l'agent, dans une unité systemd de l'hôte : un redémarrage de Docker ou de l'agent ne les interrompt pas. - Secrets chiffrés au repos (
AES-256-GCM), jamais renvoyés par l'API, masqués dans les journaux.
14 Mise à jour & sauvegarde
cd ~/asgard-argos
docker compose pull # nouvelles images du Hub
docker compose up -d # recrée ce qui a changé
- Les agents natifs (Linux, Windows) se mettent à jour seuls : ils comparent leur version à celle que publie le serveur une minute après leur démarrage, puis toutes les 6 h (jamais pendant une commande en cours). Les agents Docker :
docker compose pull && docker compose up -ddans leur dossier — ou « Mettre à jour l'agent » dans Asgard Remote. - À sauvegarder :
compose.ymletasgard-argos-data/(base SQLite avec tous les paramètres, clé maîtresecret.key, clés SSH des agents). Les dossiers Ollama et Claude Code se reconstituent seuls. - Perdre la clé maître ne fait perdre que les secrets saisis dans l'interface (à ressaisir) ; machines, métriques et comptes sont intacts.
15 Dépannage
| Symptôme | Cause et remède |
|---|---|
Le serveur redémarre en boucle, EACCES dans les journaux | Dossier de données pas à l'uid 1000 : sudo chown 1000:1000 asgard-argos-data asgard-argos-claude-home. |
| Notes ou Remote : « Argos non configuré sur ce serveur » | Adresse ou jeton d'Argos absents dans Notes (Administration → Asgard Argos). |
| « jeton Argos refusé » | Le jeton saisi dans Notes ne correspond à aucun jeton de l'onglet Applications d'Argos (révoqué ?) : en créer un nouveau. |
| Une intégration ne remonte rien | Paramètres → Intégrations : l'état indique « non configurée » ou l'erreur ; erreur 403 dans le Journal IA = privilège manquant sur l'équipement ; erreur de certificat = coller le certificat d'autorité. |
Traefik : erreur EPROTO | https:// utilisé sur un port HTTP : adresse http://<ip>:8080. |
| Claude Code : « en attente de ses jetons internes » | Le volume ./asgard-argos-data/engine:/shared:ro n'est pas monté sur le conteneur du moteur (voir le compose). |
| Notifications muettes juste après un redémarrage | Normal pendant le silence de démarrage (15 min par défaut, Paramètres → Surveillance) : un récapitulatif arrive à la fin. |
| Un agent reste « en attente » | La machine doit joindre l'adresse publique (DNS, pare-feu, certificat). Journaux : journalctl -u asgard-argos-agent, docker logs asgard-argos-agent ou C:\ProgramData\AsgardArgos\logs. |
| Claude Code : « Not logged in » | Jeton d'abonnement vide ou expiré : le régénérer avec claude setup-token et le coller dans Paramètres → IA. En attendant, le chat bascule sur le moteur suivant. |
| Pas de boutons dans les notifications | Adresse publique non renseignée (Paramètres → Serveur). |