MakeMake The Dwarf Planet is a feed agregator.

ELY - Un agent IA auto-hébergé conforme RGPD avec anonymisation native

by ElyDeFranck from Linuxfr.org

Bonjour à tous,

Avis à tous ceux qui vont hurler sur un projet vibe codé mais pour ceux qui veulent tester et que ça intéresse, j'ai créé ELY. Un agent IA auto-hébergé que je développe depuis plusieurs mois et même si j'ai fait ça avec Claude Code, croyez moi, je n'ai pas eu qu'à dire "Fais moi ceci, comme cela, qui fait çi et qui fait ça…". C'est le fruit de week-end et de soirées, voire nuits, à imaginer, tester, échanger jusqu'à ce que le résultat me convienne.

La particularité — et la raison d'être du projet — est un pipeline d'anonymisation des données personnelles qui s'exécute AVANT tout appel à un LLM, qu'il soit local ou cloud.

L'écosystème des agents IA a beaucoup grandi en 2025-2026 (OpenClaw, Hermes, et bientôt Google Remy à I/O 2026), mais aucun n'adresse sérieusement le cas des organisations soumises au secret professionnel ou au RGPD strict. ELY essaie de combler ce vide.

Quand un avocat copie une note de synthèse dans ChatGPT, ou qu'un expert-comptable demande à Claude de résumer un compte de résultat client, les noms, IBAN, SIRET, montants — tout part en clair vers des serveurs aux États-Unis. C'est documenté, c'est connu, c'est pourtant fait quotidiennement par des centaines de milliers de professionnels en France.

Les agents auto-hébergés actuels (Hermes, OpenClaw, Aider) règlent le problème de la "boîte noire" en mettant le code à disposition, mais ne résolvent pas le problème des données : si l'agent appelle Claude ou GPT-5 en backend, les données partent quand même.

ELY ajoute une couche d'anonymisation déterministe en amont : avant toute construction de prompt, un SecurityFilter détecte et remplace les PII (emails, IBAN, SIRET, numéros de téléphone, jetons API…) par des placeholders. Le LLM voit [EMAIL_0], [IBAN_0]. Les valeurs réelles sont restaurées localement quand la réponse revient à l'utilisateur. Le LLM ne voit jamais la donnée brute.

Architecture

ELY est construit sur :
- FastAPI + LangGraph (backend Python)
- Next.js 16 (frontend)
- Apps natives iOS (SwiftUI) et Android (Kotlin/Compose)
- Daemon Go pour l'automatisation desktop
- Qdrant pour la mémoire vectorielle locale, SQLite FTS5 pour le keyword
- Docker Compose pour le déploiement

Le routage LLM se fait par "tier de complexité" (Tier A rapide / B standard / C profond / IMG / SYS). L'utilisateur assigne un modèle à chaque tier dans les Settings — local (Ollama, LM Studio) pour les tâches simples, cloud (Mistral privilégié, ou Anthropic, OpenAI, Gemini, DeepSeek, Qwen, etc… selon préférence) pour les complexes. Tout est configurable sans redémarrage.

HITL (Human In The Loop) structurel

Toute action irréversible — envoi de mail, suppression, commande SSH, partage — passe par une validation explicite. Trois choix : autoriser une fois, refuser, ou bannir définitivement (la décision persiste entre toutes les sessions futures).

C'est différent des "confirmations" qu'on trouve sur les agents cloud type ChatGPT Operator, où le HITL est une UX optionnelle. Chez ELY, c'est structurel — désactiver HITL demande une modification du code source, ce qui est explicitement interdit par la licence.

Licence

ELY est sous licence PolyForm Strict 1.0 — source-available, gratuit pour usage personnel/familial/éducatif, licence commerciale annuelle pour les entreprises.
C'est un choix conscient, je l'assume :
l'open-source au sens OSI ne permettait pas de pérenniser le projet sans capital-risque, et la licence MIT/Apache aurait permis à un acteur cloud US de forker pour son SaaS sans aucune contrepartie (J'ai déjà donné…).
Ce modèle source-available est devenu courant (Sentry, Grafana, Elastic) et fonctionne bien pour les projets entre solo-dev et fondation.

Démarrage

git clone https://github.com/franckolv-dev/ElyAgent.git
cd ElyAgent
cp .env.example .env
make up

Trois commandes, 30 minutes pour le scénario "POC local" avec une clé API Gemini gratuite. Documentation et scénarios de déploiement plus avancés (Cloudflare Tunnel, Tailscale, multi-canaux) dans docs/START_HERE.md.

Discussions et critiques bienvenues

C'est un projet personnel développé en parallèle de mon activité professionnelle (je suis directeur technique chez un gros intégrateur Français, spécialisé webtoprint). Le code est ouvert, les choix architecturaux documentés. Toutes les critiques techniques sont les bienvenues, c'est ce qui fait monter le niveau, du moment que c'est constructif.

GitHub : https://github.com/franckolv-dev/ElyAgent
Site : https://agent-ely.fr

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Présentation d’un générateur de mots de passe Python/Tkinter (standalone Nuitka, multi‑OS, clé USB)

by securepass from Linuxfr.org

Page de test EscapeCyber
Bonjour,
Je souhaite présenter un petit projet personnel : un générateur de mots de passe écrit en Python/Tkinter, compilé en standalone via Nuitka, et destiné à fonctionner directement depuis une clé USB (Ventoy).

    **Origine du projet**``

Comme beaucoup d’utilisateurs, j’en avais assez de :
devoir créer des mots de passe différents selon les sites,
me faire refuser un mot de passe pour un symbole manquant,
revenir sur “mot de passe oublié”,
recommencer plusieurs fois sur différents services.
J’ai aussi constaté que beaucoup utilisent encore des mots de passe basés sur des données personnelles (chien, date de naissance, etc.), ce qui n’est ni sécurisé ni sécurisable.
L’objectif : un outil simple, portable, robuste, qui génère des mots de passe fiables sans prise de tête.

    ** Fonctionnalités**``

3 niveaux de complexité : simple (sans symboles), standard (symboles courants), avancé (tous symboles).
Longueur configurable : 6 à 32 caractères.
Disponible en 15 langues.
Génération aléatoire via un algorithme interne.
Protection par mot de passe à l’ouverture.
Utilisation de HMAC et bcrypt.
Compilation Nuitka standalone (pas de dépendances externes).
Fonctionne sur :
- Windows 7 → 11
- Linux Lite 7.04
- Ubuntu 24.04 LTS
et probablement la majorité des distributions.

    ** Comportement sous Linux (console automatique)**``

Lors du lancement du binaire standalone sous Linux, une console s’ouvre automatiquement, puis la fenêtre Tkinter apparaît. Ce comportement est normal avec Nuitka : le binaire reste considéré comme une application console + GUI, et Linux ouvre un terminal pour gérer stdout/stderr.
La console ne demande rien, ne nécessite aucune action, et le programme fonctionne normalement.

    ** Vision du projet**``

À terme, je souhaite ajouter un coffre-fort compartimenté (par lettre ou catégorie), afin d’éviter l’exposition d’un lot complet de mots de passe. Les personnes travaillant en cybersécurité comprendront l’intérêt : limiter la surface d’attaque.

    ** Distribution possible**``

Le projet se veut d’utilité publique. Il pourrait être distribué par :
banques,
assurances,
entreprises,
associations (ex : protection de profils exposés en ligne).

    ** Support**``

Une page dédiée sur mon blog documentera :
- les comportements selon les distributions,
- les limitations (ex : console automatique),
- les solutions,
- les mises à jour,
- un contact administrateur.

    ** Pourquoi je poste ici**

Je viens chercher :
- des retours techniques,
- des critiques constructives,
- des tests sur d’autres distributions,
- des avis sur la partie sécurité.
Projet personnel, développé par moi-même, sans IA. Merci pour vos retours.

Quelques captures pour illustrer le fonctionnement :
– lancement sous Linux (console + interface Tkinter)
– génération d’un mot de passe
– interface en différentes langues
– version Windows
– test de la fonction japonais (sans mot de passe sur cette machine)
capture linux lite 7.4>
Capture sous windows 10 famille
Capture Ubuntu 24.04
Capture windows 11

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Sortie de Crème CRM en version 2.8

by GuieA_7,Benoît Sibaud,Ysabeau 🧶 from Linuxfr.org

Le 7 avril 2026 est sortie la version 2.8 du logiciel de gestion de la relation client Crème CRM (sous licence AGPL-3.0).

Icone de Crème CRM

Au programme notamment, de nombreuses améliorations autour des droits, l’épinglage de fiches et des totaux calculés dans les vues en liste. Les nouveautés sont détaillées dans la suite de la dépêche.

Sommaire

Description du logiciel

Crème CRM est un logiciel de gestion de la relation client, généralement appelé CRM (pour Customer Relationship Management). Il dispose évidemment des fonctionnalités basiques d’un tel logiciel :

  • un annuaire, dans lequel on enregistre contacts et sociétés : il peut s’agir de clients, bien sûr, mais aussi de partenaires, prospects, fournisseurs, adhérents, etc. ;
  • un calendrier pour gérer ses rendez‐vous, appels téléphoniques, conférences, etc. ; chaque utilisateur peut avoir plusieurs calendriers, publics ou privés ;
  • les opportunités d’affaires, gérant tout l’historique des ventes ;
  • les actions commerciales, avec leurs objectifs à remplir ;
  • les documents (fichiers) et les classeurs.

Crème CRM dispose en outre de nombreux modules optionnels le rendant très polyvalent :

  • campagnes de courriels ;
  • devis, bons de commande, factures et avoirs ;
  • tickets, génération des rapports et graphiques…

L’objectif de Crème CRM est de fournir un logiciel libre de gestion de la relation client pouvant convenir à la plupart des besoins, simples ou complexes. À cet effet, il propose quelques concepts puissants qui se combinent entre eux (entités, relations, filtres, vues, propriétés, blocs), et il est très configurable (bien des problèmes pouvant se résoudre par l’interface de configuration) ; la contrepartie est qu’il faudra sûrement passer quelques minutes dans l’interface de configuration graphique pour avoir quelque chose qui vous convienne vraiment (la configuration par défaut ne pouvant être optimale pour tout le monde). De plus, afin de satisfaire les besoins les plus particuliers, son code est conçu pour être facilement étendu, tel un cadriciel (framework).

Du côté de la technique, Crème CRM est codé notamment avec Python/Django et fonctionne avec les bases de données MySQL, SQLite et PostgreSQL.

Principales nouveautés de la version 2.8

Voici les changements les plus notables de cette version :

Meilleure synchronisation avec les sorties de Django

C’est une version plus petite qu’à l’accoutumée (Creme 2.7 est sortie le 2 septembre 2025 et nous sortons une version par an). Cela nous permet de nous caler enfin sur les cycles de sortie de Django (dont les versions LTS—gérée pendant 3 ans—sortent en avril une fois tous les 2 ans) et donc éviter d’avoir des périodes où une version de Crème CRM est encore gérée mais pas la version de Django sous-jacente.

Améliorations des droits

Les utilisateurs peuvent avoir plusieurs rôles. Il arrive que des personnes aient plusieurs casquettes, et finissent par posséder plusieurs utilisateurs, se connectant avec le bon utilisateur en fonction des tâches à effectuer. Mais c’est un peu contraignant de devoir à chaque fois se déconnecter puis se reconnecter (et ça peut aussi être gênant d’avoir plusieurs utilisateurs pour une seule identité). Un utilisateur peut désormais posséder plusieurs rôles, et peut passer de l’un à l’autre sans devoir se déconnecter. Voir ce lien pour plus de détails.

Sélection d’un de ses rôles dans me menu principal

Les rôles peuvent désormais être désactivés. De manière générale, on essaie d’ajouter, au fur et à mesure des versions, la possibilité pour les différents objets que les utilisateurs peuvent supprimer de pouvoir d’abord passer par un état “désactivé”. Cela permet de tester un certain temps si un objet ne manque pas au final ; s’il y a un souci on peut revenir en arrière. C’est donc au tour des rôles d’avoir une telle fonctionnalité.

Les rôles gèrent maintenant les types de fiches qu’on peut lister, et 2 permissions spéciales peuvent être données : administration des utilisateurs & des rôles (il fallait être super-utilisateur pour les administrer dans les versions précédentes).

Épinglage de fiche

Vous pouvez désormais épingler les fiches auxquelles vous accédez souvent, pour aller dans leur vue détaillée.

Bouton d’épinglage dans l’entête d’une fiche

Vous pouvez accéder aux dernières fiches épinglées dans l’entrée de menu « Accès rapide » ; cette entrée remplace l’entrée qui proposait uniquement les fiches visitées récemment, et propose ces dernières ainsi que les fiches épinglées :

Entrée « Accès rapide » dans le menu

Totaux calculés dans les vues en liste

Certaines colonnes de vue en liste affichent désormais des totaux calculés sur toutes les fiches de cette liste :

  • la somme et la moyenne des totaux (avec et sans TVA) des Factures/Devis/Avoirs/Bons de commande.
  • la somme et la moyenne des chiffres d’affaires estimé & final des opportunités d’affaire.

Amélioration des champs personnalisés

Les champs personnalisés (les champs de fiches ajoutés par les utilisateurs) peuvent posséder :

– une description ; celle-ci est utilisée notamment dans les formulaires afin de donner plus de détails aux utilisateurs sur le sens dudit champ.
– une valeur par défaut, utilisée à la création de nouvelles fiches ; voir ce lien pour plus de détails.

Quelques autres améliorations notables

  • L’éditeur de texte HTML (utilisé pour les corps HTML d’e-mail par exemple) a subi une grosse mise-à-jour (l’interface est bien plus légère et moderne maintenant), et est utilisé à plus d’endroits.
  • On peut désormais télécharger plusieurs Documents, Factures ou Devis en une fois sous forme d’archive zip.

Le futur

La prochaine version devrait être la 3.0, et se concentrera sur une grosse revisite de l’interface graphique. À l’année prochaine !

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Sur Lyon − Meetup le lundi 18 mai

by grewn0uille from AFPy discuss

Hello tout le monde,

Le prochain meetup sur Lyon a lieu le lundi 18 mai à 19h.

Rendez-vous chez Lowit (métro Part-Dieu) où Emmanuel nous parlera de microcontrôleurs et de MicroPython !

Excursion dans le monde des microcontrôleurs
May 18, 2026 7:00 PM (Europe/Paris) → May 18, 2026 9:00 PM (Europe/Paris)
https://www.meetup.com/fr-fr/python-afpy-lyon/events/314642594/

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

Configuration emacs « minimale » en 2026

by mdk from AFPy discuss

C’est la suite de mon sujet de 2021 : Emacs : aujourd'hui j'essaye lsp-mode.

En 2026 je migre de jedi qui n’est plus maintenu à zuban. J’en profite pour migrer de lsp-mode à eglot qui est devenu natif.

Déjà, à quoi ça ressemble :

Le paquet Debian que j’utilise est emacs-pgtk.

Ensuite, la config « minimale » (72 lignes) :

(require 'use-package)
(require 'package)
(package-initialize)

(setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")
                         ("melpa" . "https://melpa.org/packages/")))

(when (not package-archive-contents)
  (package-refresh-contents))

(use-package yasnippet
  :ensure t
  :config
  (yas-global-mode 1))

(use-package yasnippet-snippets
  :ensure t)

(use-package company
  :ensure t
  :hook
  (python-mode . company-mode))

(use-package envrc
  :ensure t
  :init (envrc-global-mode))

(use-package eglot
  :hook (python-mode . eglot-ensure)
  :config
  (add-to-list 'eglot-stay-out-of 'flymake)
  (add-to-list 'eglot-server-programs '((python-mode) . ("zuban" "server"))))

(use-package python
  :custom
  (python-indent-guess-indent-offset nil))

(use-package flycheck
  :ensure t
  :config
  (global-flycheck-mode t))

(use-package blacken
  :ensure t
  :commands (blacken-mode)
  :hook (python-mode . blacken-mode)
  :config
  (setq blacken-only-if-project-is-blackened t))

(use-package python-isort
  :ensure t
  :hook ((python-mode) . python-isort-on-save-mode)
  :config
  (setq python-isort-arguments '("--stdout" "--atomic" "-" "--profile=black")))

(use-package whitespace
  :diminish (whitespace-mode global-whitespace-mode whitespace-newline-mode)
  :hook ((python-mode) . whitespace-mode)
  :config
  (setq show-trailing-whitespace t)
  (setq whitespace-line-column 88)
  (setq whitespace-style '(face empty tabs lines-tail trailing)))

(use-package spacemacs-theme
  :ensure t
  :defer t
  :init
  (load-theme 'spacemacs-light t))

(global-font-lock-mode t)
(column-number-mode t)
(show-paren-mode t)

Le fichier se place dans ~/.emacs.d/init.el. La première fois qu’emacs démarre il télécharge tous les paquets décrits dans la config, donc le premier démarrage est long, c’est normal.

Maintenant pour qu’eglot puisse trouver zuban, pour que flycheck puisse trouver pylint, et pour que blacken-mode puisse trouver black le mieux c’est … un venv !

Et pour que le venv du projet soit chargé automatiquement par emacs j’utilise direnv, ça fait double usage : mes venv sont aussi activés automatiquement dans le shell !

Pour configurer direnv il faut un fichier .envrc à la racine du projet qui contient :

VIRTUAL_ENV=.venv
layout python3

Si c’est votre première utilisation de direnv il faut rajouter eval "$(direnv hook bash)" dans ~/.bashrc.
Il vous fera executer direnv allow pour l’autoriser à bosser, et hop, le venv est crée tout seul, et activé automatiquement par bash et emacs.

Faites-vous un alias ou une commande nommé venv pour gagner du temps sur la création de ce .envrc.

Il faut installer deux-trois trucs dans le venv :

pip install --upgrade zuban black mypy pylint

puis démarrer emacs :

emacs test.py

Pour ceux qui n’ont jamais lancé emacs avant, tapez Ctrl-h puis t, ça vous ouvrira le tuto interactif.

Ohhh, et j’ai configuré blacken-mode pour ne passer black à la sauvegarde que s’il trouve [tool.black] dans pyproject.toml, ça m’évite d’avoir emacs qui réecrit des fichiers dans des projets qui n’utilisent pas black, c’est la ligne blacken-only-if-project-is-blackened dans la config.

Quelques raccourcis importants :

  • M-. : c’est pour aller a la définition de quelque chose.
  • M-x eglot-rename pour renommer une variable (et toutes ses occurrences).
  • C-c ! n pour sauter a la prochaine erreur.

Ma configuration complète est ici : https://git.afpy.org/mdk/dotfiles/src/branch/main/.emacs.d/init.el, elle est plus longue : j’enlève les menus, le message d’accueil, la décoration de la fenêtre, j’ajoute du confort, et j’ai de la configuration C, rust, org-mode, je configure emacs en mode serveur (et j’utilise emacsclient), etc…

1 message - 1 participant(e)

Lire le sujet en entier

Lire la suite…

lsdisplay / lsgpu — lister écrans et GPUs depuis le terminal dans l'esprit de lspci, lscpu, lsusb: v.0.1.0 appel à tests

by géhème from Linuxfr.org

Le problème

On a lsusb, lspci, lscpu… mais rien pour les écrans ou les GPUs.
Pour savoir quel écran est branché sur quelle sortie, c'est la danse du
xrandr | grep connected, cat /sys/class/drm/card*/edid | edid-decode,
nvidia-smi

J'ai écrit deux outils pour régler ça.

lsdisplay

Liste les écrans connectés avec fabricant, modèle, numéro de série,
résolution, fréquence, diagonale, et dessine un schéma ASCII du layout :

$ lsdisplay

CONNECTED DISPLAYS
==================

  DP-4         1440x2560+0+0           27"  75Hz  Iiyama PL2792Q    DisplayPort  S/N:1152031921274   rot=left [PRIMARY]
  HDMI-A-2     1440x2560+1441+0        27"  75Hz  Iiyama PL2792Q    HDMI         S/N:1152032422031   rot=left
  HDMI-A-5     5376x3024+0+2561        65"  60Hz  Samsung QN800D    HDMI         S/N:94:e6:ba:dd:9a:7a

Total: 3 display(s) connected

LAYOUT
======

  +--------------+ +--------------+
  |              | |              |
  |     DP-4*    | |   HDMI-A-2   |
  |              | |              |
  +--------------+ +--------------+

  +------------------------------+
  |                              |
  |          HDMI-A-5            |
  |                              |
  +------------------------------+

Fonctionnalités :

  • Parse les EDID directement depuis /sys/class/drm (pas de dépendance externe)
  • Fonctionne sur X11 et Wayland (KDE, Sway, wlroots)
  • Mode --json pour le scripting
  • Mode --scan pour découvrir les Smart TV Samsung sur le réseau
  • Fichier d'overrides pour corriger les EDID buggés (Samsung, je te regarde…)
  • Python 3.6+, zéro dépendance

lsgpu

Liste les GPUs avec stats NVIDIA, mapping écran par sortie :

$ lsgpu

GRAPHICS CARDS
==============

  card0: NVIDIA GA107 [GeForce RTX 3050 6GB]
         Driver: nvidia | VRAM: 6 GB | GPU:0% MEM:2077/6144MB 37°C 16.7W
    ├─ DP-4: connected ← Iiyama PL2792Q 27"
    ├─ HDMI-A-2: connected ← Iiyama PL2792Q 27"


  card1: Intel Arrow Lake-S [Intel Graphics]
         Driver: i915
    ├─ HDMI-A-5: connected ← Samsung TQ65QN800DTXXC 65"

Total: 2 GPU(s), 3 output(s) connected

Fonctionnalités :

  • Stats NVIDIA (utilisation, température, puissance, mémoire)
  • Stats AMD via sysfs
  • Mode --watch avec sparklines en temps réel
  • Liste des processus utilisant le GPU
  • Python 3.6+, zéro dépendance Python

Installation

sudo cp lsdisplay.py /usr/local/bin/lsdisplay
sudo chmod +x /usr/local/bin/lsdisplay

Paquet .deb disponible aussi. Un seul fichier Python, pas de pip, pas de venv.

Appel à testeurs

C'est une v0.1.0 — testé sur ma config (GPU NVIDIA + Intel, KDE Wayland,
3 écrans dont 2 Samsung TV). J'aimerais des retours sur :

  • Configs AMD (j'ai le code mais pas le matos pour tester)
  • Wayland hors KDE (Sway, GNOME, Hyprland)
  • Écrans avec EDID exotiques
  • Suggestions d'affichage ou de fonctionnalités

Liens

Licence : GPL-2.0

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…

Fonctionnement de Jupyter Lab/Notebook

by uneTanche from Linuxfr.org

Bonjour à tous,

Contexte:

Je cherche une alternative à mathlab simulink pour la mise au point d'algorithmes de contrôle et la modélisation de systèmes.

Après quelques essais (scilab xcos, modelica, octave …), c'est python qui a retenu mon attention et en particulier les notebook Jupyter et la bibliothèque control.

Ça fait quelques jours que je fais un essai sur la modélisation d'une régulation pour un générateur de courant mais certaines subtilités m'échappe.

En particulier, lorsque je veux modifier un paramètre dans une "cellule code" et la rejouer. Si cette dernière contient une courbe générer avec matplotlib, soit la courbe ne s'affiche pas, ou bien pas correctement, ou toutes les autres courbes s'en retrouve modifiées…

Matplotlib propose bien des exemples d'utilisation, mais comme mes essais, ils ne semblent fonctionner que si l'on exécute le "notebook" une seule fois.

Question:

L'utilisation de Jupyter notebook est-elle réservée à la documentation final du processus et non aux essais ? Ou bien je passe à côté de quelque chose ?

Télécharger ce contenu au format EPUB

Commentaires : voir le flux Atom ouvrir dans le navigateur

Lire la suite…