Mattermost
Client REST v4 par interrogation et WebSocket. Par défaut, le bot interroge les canaux toutes les 3 secondes pour les nouveaux posts ; définissez listen_mode = "websocket" pour une diffusion d’événements quasi en temps réel via une connexion WebSocket persistante. Les posts de réponse sont toujours envoyés via POST /api/v4/posts, quel que soit le mode d’écoute.
Qui peut parler à l’agent
Les expéditeurs entrants sont filtrés par rapport au peer set résolu pour l’agent lié, issu de la configuration peer_groups à laquelle l’agent appartient. La correspondance supprime le @ initial et est insensible à la casse par rapport à l’identifiant d’expéditeur natif du canal. Un ensemble vide refuse tout le monde ; un ensemble contenant "*" accepte n’importe qui ; sinon, seuls les pairs externes listés (et les agents pairs) sont acceptés. Ceci est distinct de l’appairage de la passerelle (gateway.require_pairing), qui authentifie les clients HTTP/WebSocket, et non les expéditeurs des canaux de discussion.
Un groupe de pairs pour mattermost définit channel à mattermost, liste les expéditeurs autorisés dans external_peers (pour mattermost, l’UUID de l’utilisateur Mattermost (et non un nom d’utilisateur) ; ["*"] accepte tout le monde), nomme éventuellement des agents pairs pour la distribution inter-agents, une liste de blocage ignore, et une output_modality (mirror, voice ou text). Consultez Peer Groups pour la référence des champs.
Où définir ce paramètre :
Tableau de bord de la passerelle
Ouvrez /config/peer_groups dans le tableau de bord web.
zerocode
Dans le volet Config, sous Peer groups.
Pour ajouter un humain spécifique à la liste d’autorisation, copiez son ID utilisateur depuis System Console → User Management. Mattermost effectue la correspondance avec l’UUID de l’utilisateur, et non un nom d’utilisateur, et ne résout pas les noms d’utilisateur au moment de la réception du message.
Démarrage rapide
Configurez un canal Mattermost (url plus un secret bot_token, voir Authentification) via l’une des interfaces ci-dessous. Cela seul vous offre :
- Détection automatique de chaque canal que le bot peut lire dans toutes les équipes dont il fait partie.
- Canaux DM et DM de groupe découverts automatiquement et interrogés en même temps que les canaux d’équipe.
- Les nouveaux MP (créés après le démarrage du bot) sont récupérés lors de la prochaine actualisation de découverte, qui a lieu toutes les 60 secondes.
mention_onlyest contourné dans les canaux de messages privés et de groupes privés (afin que les conversations en tête-à-tête ne nécessitent pas de mentionner le bot avec @).
Pour restreindre le bot, affinez avec channel_ids, team_ids ou discover_dms.
Configuration
bot_token et password sont des secrets :
channels.mattermost.<alias>.bot_tokenest un secret. Stocké chiffré, jamais en clair dansconfig.toml. Définissez-le via l’une de ces méthodes, qui chiffrent à l’écriture :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez-y le champ channels.mattermost.<alias>.bot_token.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.bot_token (la saisie est masquée).
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.bot_token # demande une saisie masquée, stocke de manière chiffrée
Référence des champs
bot_token 🔑
Jeton d’accès du bot Mattermost. Lorsqu’il n’est pas défini, le canal revient au flux de connexion utilisant login_id + password.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.bot_token.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.bot_token.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.bot_token # entrée masquée, stockée chiffrée
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__bot_token=
channel_ids
Identifiants de canaux auxquels restreindre le bot. Vide ou ["*"] = découverte automatique de tous les canaux que le bot peut lire (publics, privés, DM, DM de groupe) et interrogation de chacun d’eux. Des identifiants explicites désactivent la découverte et limitent le bot aux seuls canaux listés. Migré depuis l’ancien champ singulier channel_id.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.channel_ids.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.channel_ids.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.channel_ids <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__channel_ids=
discover_dms
Lorsque la valeur est true (par défaut), la découverte automatique inclut les canaux de MP (type=D) et de MP de groupe (type=G). Définissez la valeur sur false pour restreindre le bot aux canaux d’équipe publics et privés uniquement. Sans effet lorsque channel_ids liste des ID explicites. La valeur par défaut est true au point d’appel via discover_dms.unwrap_or(true).
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.discover_dms.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.discover_dms.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.discover_dms <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__discover_dms=
excluded_tools
Outils exclus de la spécification d’outils de ce canal. Lorsque ce paramètre est défini, ces outils ne sont pas exposés au modèle lors des réponses via ce canal.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.excluded_tools.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.excluded_tools.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.excluded_tools <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__excluded_tools=
interrupt_on_new_message
Lorsque cette option est définie sur true, un message Mattermost plus récent provenant du même expéditeur dans le même canal annule la requête en cours et démarre une nouvelle réponse en conservant l’historique.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.interrupt_on_new_message.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.interrupt_on_new_message.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.interrupt_on_new_message <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__interrupt_on_new_message=
listen_mode
Mode d’écoute : "polling" (API REST toutes les 3 s, par défaut) ou "websocket" (connexion WebSocket persistante à /api/v4/websocket pour une distribution des événements en quasi temps réel). Le mode WebSocket réduit la charge du serveur et fournit les événements plus rapidement, mais nécessite un serveur Mattermost compatible WebSocket (v4.0+).
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.listen_mode.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.listen_mode.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.listen_mode <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__listen_mode=
login_id
Identifiant de connexion (e-mail ou nom d’utilisateur) pour le flux de connexion par mot de passe. Utilisé uniquement lorsque bot_token n’est pas défini ; login_id et password doivent être définis ensemble.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.login_id.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.login_id.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.login_id <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__login_id=
mention_only
Lorsque la valeur est true, le bot ne répond qu’aux messages qui le mentionnent avec @. Les autres messages du canal sont silencieusement ignorés. Les canaux de MP et de MP de groupe contournent toujours ce filtre : une conversation directe en 1:1 (ou en petit groupe) ne comporte aucun bruit ambiant à filtrer, donc chaque message est considéré comme adressé au bot.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.mention_only.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.mention_only.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.mention_only <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__mention_only=
password 🔑
Mot de passe du compte pour le flux de connexion. Utilisé uniquement lorsque bot_token n’est pas défini ; login_id et password doivent être définis ensemble.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.password.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.password.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.password # entrée masquée, stockée chiffrée
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__password=
proxy_url
URL de proxy par canal (http, https, socks5, socks5h). Remplace le paramètre global [proxy] pour ce canal uniquement.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.proxy_url.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.proxy_url.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.proxy_url <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__proxy_url=
reply_min_interval_secs
Plancher de cadencement sortant par (canal, destinataire) en secondes. Plage : 0..=REPLY_MIN_INTERVAL_MAX_SECS (0 désactive).
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.reply_min_interval_secs.
zerocode
Dans le panneau Config, définissez le champ channels.mattermost.<alias>.reply_min_interval_secs.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.reply_min_interval_secs <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__reply_min_interval_secs=
reply_queue_depth_max
Profondeur de la file d’attente de régulation sortante par (canal, destinataire). Plage : 0..=REPLY_QUEUE_DEPTH_CEILING. Lorsque reply_min_interval_secs > 0 et que cette valeur est 0, le wrapper de régulation substitue DEFAULT_REPLY_QUEUE_DEPTH (16). Lorsque la file d’attente est pleine, l’envoi le plus récent est abandonné et un WARN est journalisé.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.reply_queue_depth_max.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.reply_queue_depth_max.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.reply_queue_depth_max <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__reply_queue_depth_max=
team_ids
Identifiants d’équipe auxquels restreindre la découverte automatique. Vide = découvrir dans toutes les équipes auxquelles le bot appartient. Non vide = découvrir uniquement les canaux publics/privés dont le team_id figure dans cette liste. Les messages directs et les messages directs de groupe (qui n’ont pas d’équipe) sont régis par discover_dms à la place.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.team_ids.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.team_ids.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.team_ids <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__team_ids=
thread_replies
Lorsque la valeur est true (par défaut), les réponses sont regroupées en fil de discussion sur la publication d’origine. Lorsque la valeur est false, les réponses sont envoyées à la racine du canal.
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.thread_replies.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.thread_replies.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.thread_replies <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__thread_replies=
url*
URL du serveur Mattermost (par ex. "https://mattermost.example.com").
Posez-le sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et définissez le champ channels.mattermost.<alias>.url.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.url.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.url <value>
Variable d’environnement
Exportez le remplacement (shells POSIX ; à placer dans ~/.bashrc, ~/.zshrc, .env ou un Dockerfile). Remplacez <alias> par l’alias littéral :
export ZEROCLAW_channels__mattermost__<alias>__url=
Découverte de canaux
Il existe deux modes de portée.
- Découverte automatique (lorsque
channel_idsest vide ou défini sur["*"]). Au démarrage, puis toutes les 60 secondes, le bot appelleGET /api/v4/users/me/channels, filtre le résultat selonteam_ids(canaux publics/privés) etdiscover_dms(messages directs/messages directs de groupe), puis interroge chaque canal restant. Les nouveaux messages directs créés en cours d’exécution apparaissent lors de la prochaine actualisation. - Explicite (lorsque
channel_idsest une liste non vide d’ID autres que*). Au démarrage, le bot appelleGET /api/v4/channels/{id}pour chaque entrée afin de connaître sontype(afin de savoir lesquels sont des DM pour le contournementmention_only), puis interroge exactement ces canaux indéfiniment. Aucune redécouverte périodique.
Dans les deux modes, chaque canal possède son propre curseur since : le bot suit le create_at le plus élevé qu’il a traité par canal et le transmet sous la forme since=<ms> lors de l’appel GET /api/v4/channels/{id}/posts suivant. Les curseurs ne se mélangent pas entre les canaux, de sorte qu’un canal peu actif ne supprime pas les messages d’un canal très actif.
Mode WebSocket
Définissez listen_mode = "websocket" pour passer de l’interrogation REST à une connexion WebSocket persistante (wss://<server>/api/v4/websocket). Le mode WebSocket :
- Diffuse les nouvelles publications en quasi temps réel (sans délai d’interrogation de 3 secondes).
- Réduit la charge HTTP sur le serveur Mattermost (une connexion au lieu de N requêtes toutes les 3 s).
- Renvoie les sessions ayant échoué au superviseur de canal partagé, qui se reconnecte avec un backoff exponentiel borné en utilisant les valeurs
reliability.channel_initial_backoff_secsetreliability.channel_max_backoff_secsconfigurées. - Nécessite Mattermost v4.0+ (l’endpoint
/api/v4/websocket).
La découverte de canaux, mention_only, thread_replies, la transcription audio et l’autorisation par groupe de pairs fonctionnent de manière identique dans les deux modes.
Compromis :
- Le mode WebSocket doit maintenir une connexion TCP+TLS persistante.
- Pendant une fenêtre de reconnexion, des messages publiés dans un canal peuvent être manqués car cet écouteur ne demande pas encore la reprise/relecture de connexion Mattermost. L’interrogation rattrape le retard via les curseurs
since=. - Le mode d’interrogation est plus résistant aux interruptions réseau transitoires, au prix d’un trafic HTTP constant.
Pour revenir en arrière, définissez listen_mode = "polling" (ou supprimez le champ ; le polling est la valeur par défaut).
Messages directs
Mattermost classe les canaux par type :
type | sens |
|---|---|
O | Canal d’équipe public. |
P | Canal d’équipe privé. |
G | Message direct de groupe (DM multi-utilisateurs). |
D | Message direct (1:1). |
G et D sont traités de manière identique par ZeroClaw : aucun ne comporte de team_id, tous deux sont contrôlés par discover_dms, et tous deux contournent implicitement mention_only (une conversation privée n’a aucun bruit ambiant à filtrer).
L’autorisation des expéditeurs de DM passe toujours par le résolveur de groupe de pairs du canal, comme pour tout autre canal. discover_dms est un paramètre de réglage, pas une frontière de sécurité ; ce sont les groupes de pairs qui décident qui est autorisé à s’adresser à l’agent.
Exécution de threads
- La publication entrante se trouve dans un fil de discussion existant (
root_idest défini) → la réponse arrive toujours dans ce fil, quel que soitthread_replies. - Le post entrant est de premier niveau et
thread_replies = true(par défaut) → la réponse ouvre un fil de discussion ancré sur le post entrant. - L’envoi entrant est de premier niveau et
thread_replies = false→ la réponse est publiée à la racine du canal.
Gestion du contexte
Lorsqu’une conversation Mattermost se déroule dans un fil de discussion, ce fil constitue sa propre conversation. ZeroClaw dérive une clé de session distincte par fil, de sorte que chaque fil possède une fenêtre de contexte et un historique indépendants : les messages d’un fil ne débordent jamais dans un autre, et l’agent ne voit pas les échanges antérieurs d’un fil voisin. Pour Mattermost, ce comportement est contrôlé par thread_replies : lorsqu’il est activé, les messages de premier niveau ouvrent un fil et chaque fil constitue une conversation distincte ; lorsqu’il est désactivé, les réponses sont publiées à la racine du canal et l’historique est indexé par expéditeur et par cible plutôt que par fil.
- L’isolation est l’objectif. Le contexte de chaque thread est autonome : il ne fuit pas en dehors du thread, et rien de l’extérieur du thread ne s’y infiltre. Les threads parallèles conservent des états conversationnels distincts, de sorte que des tâches sans rapport ne se contaminent jamais entre elles.
- Les threads longs font croître le contexte. Un thread accumule l’historique tant qu’il reste actif, donc un thread très long finit par remplir la fenêtre de contexte du modèle comme toute autre conversation longue. Démarrez un nouveau thread pour réinitialiser.
- Le travail en cours est limité à chaque fil de discussion. Un nouveau message dans un fil n’annule pas une réponse en cours dans un autre ; la tâche de chaque fil est indépendante.
Définissez le comportement du thread sur n’importe quelle surface :
Tableau de bord de la passerelle
Ouvrez /config/channels/mattermost et activez ou désactivez le champ channels.mattermost.<alias>.thread_replies.
zerocode
Dans le volet Config, définissez le champ channels.mattermost.<alias>.thread_replies.
zeroclaw config
zeroclaw config set channels.mattermost.<alias>.thread_replies true # réponses en fil de discussion activées
zeroclaw config set channels.mattermost.<alias>.thread_replies false # réponses à la racine du canal
Authentification
Deux chemins :
- Jeton de bot (recommandé). Créez-le dans System Console → Integrations → Bot Accounts, copiez le jeton d’accès et stockez-le dans
bot_token. Les jetons restent valides après les rotations de mot de passe et sont plus faciles à révoquer. - Flux de connexion. Définissez
login_id(email ou nom d’utilisateur) etpassword. Le bot appellePOST /api/v4/users/loginau démarrage et met en cache le jeton de session renvoyé en mémoire. Aucune persistance sur disque.
bot_token l’emporte lorsque les deux sont définis.
Messages vocaux
Lorsque [transcription] est configuré et qu’un post entrant contient une pièce jointe audio (type MIME audio/* ou extension ogg/mp3/m4a/wav/opus/flac) sans corps de texte, le fichier audio est téléchargé via GET /api/v4/files/{file_id} et acheminé vers le fournisseur de transcription configuré. La transcription est préfixée [Voice] et devient le contenu du message. Les pièces jointes dépassant 25 Mo ou la durée limite définie par transcription.max_duration_secs sont ignorées avec un avertissement WARN.
Configuration
- Dans Mattermost : Console système → Intégrations → Comptes de bot → Ajouter un compte de bot. Définissez un nom d’utilisateur (par ex.
zeroclaw), activez les portées souhaitées. - Copiez le jeton d’accès. Stockez-le dans votre backend de secrets ZeroClaw.
- Invitez le bot dans les équipes où vous souhaitez qu’il soit actif. Pour la découverte automatique des MP, aucune invitation supplémentaire n’est nécessaire : tout utilisateur peut envoyer un MP au bot.
- Créez le canal
mattermost.<alias>en référençant le jeton via la passerelle, zerocode, ouzeroclaw config set. - Liez le canal à un agent dans
[agents.<alias>]viachannels = ["mattermost.<alias>"].
Notes opérationnelles
- La fréquence d’interrogation est de 3 secondes par canal. N canaux découverts = N appels HTTP toutes les 3 secondes vers le serveur Mattermost. Les configurations auto-hébergées par défaut gèrent cela facilement ; si vous êtes sur un tenant cloud partagé avec des limites de débit strictes, envisagez de restreindre la portée avec
channel_idsouteam_ids. - L’identité du bot est récupérée une fois via
GET /api/v4/users/meet mise en cache pour toute la durée de vie du processus. Les changements de nom d’utilisateur nécessitent un redémarrage. - Le jeton de session du flux de connexion par mot de passe est conservé uniquement en mémoire. Un redémarrage relance la connexion.