Politique de confidentialité
Dernière mise à jour : juillet 2026
Présentation
DuckTerm (« l'App ») est un client SSH mobile et une console d'Agents IA pour iPhone et Android, développé et exploité par un développeur indépendant. Nous prenons votre vie privée au sérieux. Cette politique explique les données auxquelles l'App accède, leur utilisation et vos droits.
Identifiants SSH et clés privées
Les mots de passe, clés privées (.pem), phrases secrètes et autres éléments d'authentification sont stockés sur votre appareil — dans le Trousseau iOS sur iPhone, et dans un coffre chiffré adossé à l'Android Keystore sur Android — et ne sont jamais envoyés aux serveurs de DuckTerm.
Sur iOS, il existe trois canaux de synchronisation. ① La synchronisation iCloud optionnelle de DuckTerm (l'interrupteur dans l'app) ne transporte que les métadonnées de connexion — jamais les identifiants. ② Les identifiants sont stockés dans la section synchronisable via iCloud du Trousseau : si le Trousseau iCloud est activé au niveau du système, Apple les réplique, chiffrés de bout en bout, sur les appareils connectés au même identifiant Apple. ③ Le jeton d'appairage push (le jeton Bearer servant à s'authentifier auprès du relais push DuckTerm) est conservé dans le Trousseau synchronisable et également répliqué via le stockage clé-valeur iCloud d'Apple pour l'appairage automatique entre appareils — ce canal n'est pas contrôlé par l'interrupteur de synchronisation de l'app. Nous ne pouvons pas lire les identifiants SSH ni les métadonnées de ① et ②. Le jeton d'appairage de ③ est différent par conception : il est envoyé au relais DuckTerm avec chaque requête push, et le relais le vérifie pour l'authentification sans l'utiliser à d'autres fins.
Sur Android, si vous activez la synchronisation Google Drive, vos profils de connexion complets — y compris mots de passe, clés et identifiants de bastion/proxy — sont stockés dans le dossier privé Drive appDataFolder de votre compte Google. Google protège ce fichier en transit et au repos. Le chiffrement des champs d'identifiants géré par DuckTerm, facultatif, est désactivé par défaut. Lorsqu'il est activé, il chiffre les champs secrets des identifiants avec une clé de chiffrement des données. La clé brute reste dans le stockage local protégé par Android Keystore, tandis qu'une copie de récupération enveloppée par une phrase secrète est stockée dans Drive. Les métadonnées des profils, snippets, réglages sélectionnés, raccourcis et thèmes restent en clair dans le fichier du coffre dans tous les cas. Si le chiffrement des identifiants est désactivé, les champs secrets sont également lisibles par toute partie détenant une autorisation Drive DuckTerm valide ; appDataFolder est masqué dans l'interface Drive habituelle.
Serveurs, espaces de travail et snippets
Les serveurs enregistrés, espaces de travail, snippets et raccourcis sont stockés localement. Si vous activez la synchronisation dans les réglages, iCloud (CloudKit) transporte sur iOS les métadonnées des serveurs — notamment hôte, port, nom d'utilisateur, topologie de bastion/proxy et commande de démarrage — ainsi que les espaces de travail. Il ne transporte ni snippets, ni raccourcis, ni mots de passe, ni clés privées. Les identifiants utilisent iCloud Keychain comme décrit ci-dessus. Sur Android, le coffre privé Google Drive appDataFolder transporte les profils de connexion complets et les clés SSH autonomes, les snippets, certains réglages, les raccourcis personnalisés et les thèmes. iCloud et Drive ne se synchronisent pas entre eux. Nous n'exploitons aucun serveur distinct de synchronisation des profils pour ces données.
Trafic SSH, Mosh et SFTP
Les sessions SSH, Mosh et SFTP se connectent directement de votre téléphone ou tablette à l'hôte indiqué. Nous ne relayons, déchiffrons ni stockons ce trafic. Si vous configurez un proxy HTTP/SOCKS5 ou un bastion ProxyJump, cette étape reste sous votre contrôle ; DuckTerm n'achemine les paquets que par le chemin configuré.
Relais push et trafic Agent interactif
Les fonctions Pro facultatives (boîte Agent, alertes de fin) délivrent les notifications via l'Apple Push Notification service (APN) sur iOS et Firebase Cloud Messaging (FCM) sur Android. Le type d'événement, le nom de session, un titre et un court aperçu généré à partir de l'activité de l'Agent passent par notre relais push et sont indexés par votre identifiant d'appairage pour la livraison et la déduplication. Le contenu des notifications est programmé pour suppression environ 60 à 65 minutes après sa réception par le relais ; le nettoyage s'exécute toutes les cinq minutes et au démarrage du service. Pour les Activités en direct de l'écran verrouillé (une fonctionnalité propre à iOS), le relais conserve l'état actuel de la tâche (résumé du prompt et dernière ligne de sortie) tant que vous suivez la session. Le contenu est vidé dans la minute environ après l'arrêt du suivi et tout état est supprimé environ 24 heures après son dernier événement. Ces données servent uniquement aux notifications, jamais à la publicité, au profilage ou à la revente.
Le relais transporte aussi le trafic interactif entre l'app et votre daemon associé : approbations et réponses AskUser, réponses textuelles, repli de Live Preview, repli des images et — uniquement si vous le choisissez — audio du mode expérimental ChatGPT voix. Les octets de Live Preview et d'image privilégient LAN/P2P lorsque c'est possible ; P2P peut utiliser TURN. Le relais transfère le contenu des réponses, images et fichiers audio en transit au lieu de stocker leur contenu en clair dans la base des événements de notification. Les empreintes des payloads ainsi que les métadonnées de routage et de livraison sont stockées séparément pour empêcher les doublons et faire fonctionner les appareils associés ; la règle de conservation d'une heure du contenu des notifications ne s'y applique pas.
Boîte de réception et instantanés (sur l'appareil)
Après livraison, les enregistrements canoniques de la boîte de réception et les instantanés tmux sont stockés sur votre appareil ; leur transport peut emprunter les parcours de relais décrits ci-dessus. La version gratuite conserve la boîte 30 jours ; Pro, sans limite. Vous pouvez supprimer un élément ou toute la boîte à tout moment dans les réglages.
Saisie vocale
La saisie vocale par défaut (Mic / Wispr) utilise la reconnaissance vocale système de votre plateforme — le framework Apple Speech sur iOS, le module de reconnaissance vocale de l'appareil sur Android. Selon la plateforme, l'appareil et les packs de langue installés, l'audio peut être traité sur l'appareil ou par le service vocal du fournisseur de la plateforme via le réseau ; consultez les réglages de votre appareil pour exiger la reconnaissance sur l'appareil lorsque c'est pris en charge. Avec le fournisseur système, DuckTerm lui-même n'enregistre, ne stocke ni ne reçoit votre audio.
Un fournisseur optionnel et expérimental ChatGPT voix est également disponible. Lorsque vous le sélectionnez, DuckTerm enregistre un clip audio temporaire sur votre appareil et l'envoie, via le relais DuckTerm, à votre machine de développement appairée, qui le soumet à ChatGPT (OpenAI) pour transcription. Le clip ne sert qu'à cette transcription : le fichier temporaire est supprimé après l'envoi et le relais traite l'audio de manière transitoire sans le conserver ; OpenAI le traite selon ses propres conditions. Utilisez le fournisseur système si vous ne voulez pas que l'audio soit envoyé au relais DuckTerm ou à OpenAI — le traitement réseau éventuel par le service système dépend de la plateforme, de l'appareil et des packs de langue. Le traitement par OpenAI est décrit sur openai.com/policies/privacy-policy.
Rapports de plantage (Sentry)
Nous utilisons Sentry pour collecter des rapports de plantage anonymes et des données de performance afin de corriger les bugs. Ils peuvent inclure :
- Modèle de l'appareil et version du système d'exploitation
- Version et numéro de build de l'App
- Traces de pile des plantages
- Mesures de performance de base
Les rapports ne contiennent jamais vos identifiants SSH, mots de passe, clés privées ou tampons de terminal. Le contexte de diagnostic peut inclure des métadonnées non liées aux identifiants, comme le nom et le port d'un serveur ou le titre d'une notification, pour reproduire les erreurs. Les champs sensibles (tokens d'autorisation, mots de passe) sont nettoyés avant transmission. Vous pouvez désactiver ces rapports dans les réglages.
Aucune publicité, aucun suivi
DuckTerm n'intègre aucun SDK publicitaire ni traceur inter-apps. Les services tiers sont Sentry pour les rapports de plantage désactivables, RevenueCat (traitement des achats et leurs analyses standard), et — uniquement si vous choisissez le fournisseur optionnel ChatGPT voix — OpenAI, qui reçoit des clips audio pour transcription. Nous ne vendons pas vos données, ne les utilisons pas à des fins publicitaires et ne les partageons pas pour du suivi inter-apps.
Achats intégrés
Les abonnements Pro et l'achat à vie sont traités par la boutique où vous les avez achetés — l'App Store d'Apple sur iOS, ou Google Play sur Android. Nous ne recevons ni ne stockons vos informations de paiement. La validation des droits est assurée par RevenueCat, qui traite les reçus d'achat et l'état des abonnements pour notre compte.
Suppression des données
Supprimer un serveur ou une clé enregistrée dans l'app retire les identifiants correspondants du Trousseau / coffre Keystore. Désinstaller l'app supprime ses bases de données et fichiers locaux ; sur iOS, les entrées du Trousseau peuvent persister selon le comportement du système (et rester dans le Trousseau iCloud s'il est activé) — supprimez donc d'abord les serveurs dans l'app si vous voulez effacer complètement les identifiants. Les données côté cloud doivent être supprimées à la source : sur iOS, supprimez le conteneur DuckTerm dans les réglages iCloud Drive ; sur Android, ouvrez le site web Google Drive → Paramètres → « Gérer les applications » et supprimez les données masquées de DuckTerm. Désactiver la synchronisation ou déconnecter Drive ne supprime pas le coffre distant.
Confidentialité des enfants
DuckTerm ne s'adresse pas aux enfants de moins de 13 ans et nous ne collectons pas sciemment leurs informations personnelles.
Modification de cette politique
Nous pouvons mettre à jour cette politique de temps à autre. Les changements seront publiés sur cette page avec une date de révision actualisée.
Contact
Pour toute question sur cette politique, écrivez à [email protected].