❌

Vue lecture

Korben Remote Desktop - Contrôlez votre Mac à distance gratuitement

J'ai pas mal de déplacements pro en ce moment, et comme je suis sur plein de projets en même temps, c'est un peu relou. Parce que tout ne tourne pas uniquement sur mon ordi portable. J'ai des traitements un peu plus lourds qui tournent par exemple sur mon Mac Studio et faut dire que je lui en fais vraiment voir de toutes les couleurs à celui-là...

La plupart du temps, j'arrive heureusement à tout gérer à distance en me connectant en SSH à l'ordinateur via mon VPN privé (ça me permet d'avoir toutes mes machines sur le même réseau local virtuel comme ça c'est chiffré et sécurisé) mais il arrive parfois que je doive cliquer sur un bouton ou taper un mot de passe via l'interface de macOS.

Jusqu'à présent pour ce genre de choses, j'utilisais donc l'application Partage d'Écran fournie par Apple, mais je ne sais pas vous, chez moi ça lag furieusement et c'est vraiment pas pratique à utiliser. Bref, j'aime pas.

Je me suis donc rabattu sur des Real VNC et compagnie, mais pareil, ce n'est pas un protocole et des clients que je trouve très efficaces. Et j'avais pas envie non plus de payer un peu au pif une app présentée comme meilleure comme celle-ci d'Apple pour voir ce que ça donne :

Du coup, je me suis créé à l'aide d'agent IA, ma propre application de prise de contrôle à distance en y mettant toutes les fonctionnalités dont j'avais besoin.

Ça s'appelle Korben Remote Desktop et ça fonctionne en deux parties. On a d'un côté un petit agent sur l'ordi à contrôler, qui demande juste les autorisations système "Enregistrement de l'écran" et "Accessibilité" (sans oublier la fonctionnalité de Session à distance activée dans Partage, pour le tunnel SSH au niveau des réglages de macOS), et de l'autre côté le client sur le Mac que vous avez sous les yeux. Les deux se parlent ensuite à travers un tunnel SSH chiffré, sur votre réseau local ou votre VPN privé, sans passer par aucun serveur chez moi ni ailleurs puisque l'appli refuse carrément les adresses IP publiques pour des questions de sécurité.

Voici tout ce que j'ai mis en place dans cette application :

  • Une image fluide, jusqu'en 4K. Capture ScreenCaptureKit, encodage HEVC ou H.264 par la puce du Mac, transport UDP chiffré avec de la parité Reed-Solomon pour encaisser les paquets perdus. Qualité au choix (Automatique, 720p, 1080p, 4K ou Native) et cadence de 30, 60 ou 120 images par seconde.
  • Un Wi-Fi qui coupe n'est plus un drame. Une micro-coupure est traitée comme un retard et pas comme une perte, et trois priorités de présentation (Réactif, Équilibré, Fluide) règlent le tampon selon que vous voulez la latence la plus basse ou aucun gel d'image.
  • Le son aussi. Le son système du Mac distant arrive au format Opus, et si y'a pas de son, aucune bande passante n'est consommée pour ça.
  • Souris, clavier et raccourcis. Défilement précis, boutons latéraux compris, et les raccourcis partent au Mac distant tant qu'il a le clavier (⌘C copie là-bas, pas chez vous). Ceux du client sont donc basculés en ⌃⌥⌘ pour ne pas leur marcher dessus.
  • Un mode jeu. Capturer la souris (⌃⌥⌘G) cache le curseur, envoie le mouvement brut sans le bloquer aux bords de l'image et passe le clavier en touches physiques, donc W reste la touche W quelle que soit la disposition. Les manettes passent aussi, en expérimental.
  • Tous les écrans. Vous passez d'un écran à l'autre, ou vous les affichez tous à la fois (⌃⌥⌘A), rangés comme sur le Mac distant, le pointeur passe de l'un à l'autre et une fenêtre se tire d'un écran à l'autre. Un écran branché ou débranché pendant la session apparaît ou disparaît tout seul.
  • Zoom et plein écran. Un zoom comme celui de macOS (pincement à partir du curseur, déplacement à deux doigts, double toucher) et un plein écran système dont la barre d'outils se range.
  • Les fenêtres des apps distantes, chez vous. Une fenêtre d'une application du Mac distant (un Terminal du Studio, par exemple) peut s'ouvrir comme une fenêtre indépendant sur votre Mac. Vous la déplacez, la redimensionnez, vous tapez et cliquez dedans, et c'est l'application distante qui répond. Quand elle a accès au clavier, la barre des menus de votre Mac affiche même les menus de cette application distante, et un clic droit y ouvre le vrai menu contextuel du Mac distant.
  • Fichiers et presse-papiers. Presse-papiers texte partagé, transfert de fichiers dans les deux sens, y compris en glisser-déposer vers et depuis le Finder distant. Un transfert interrompu peut également reprendre sans tout recommencer. Les fichiers reçus sont ensuite mis en quarantaine, comme n'importe quel téléchargement.
  • Reconnexion automatique. Si le lien tombe, l'image se grise et le client réessaie jusqu'à ce que vous l'arrêtiez, en gardant vos fenêtres déportées. Et si aucune session n'est ouverte sur le Mac distant (après un redémarrage, par exemple), l'appli vous propose alors d'ouvrir le Partage d'écran d'Apple pour taper votre mot de passe, puis reprend la main dès que l'agent est prêt (J'ai pas d'autre choix que de faire comme ça).
  • Un Mac qui ne montre rien pendant que vous bossez dessus. Durant une session, l'écran du Mac distant est noir pour quelqu'un qui passerait devant, son clavier et sa souris sont bloqués et ses haut-parleurs sont coupés (le son, lui, continue d'arriver chez vous). À la déconnexion, l'agent demande au lecteur multimédia de se mettre en pause (s'il peut le faire) et verrouille la session, par défaut.
  • Un accès depuis un simple navigateur. L'agent peut aussi ouvrir un accès web, à démarrer explicitement dans sa fenêtre. Vous copiez un lien à usage unique valable quinze minutes, vous l'ouvrez dans Safari ou Chrome sur votre réseau privé, vous comparez l'empreinte du certificat avec celle affichée par l'agent, et vous retrouvez l'écran, le son, le zoom et le contrôle sans rien installer. Les fichiers et les fenêtres séparées restent réservés au client Mac.
  • Sécurisé par défaut. Tunnel SSH obligatoire pour le client natif (votre compte SSH est la clé, aucun compte à créer nulle part), TLS avec échange de clés ECDHE et ChaCha20-Poly1305 pour le lien de contrôle, AES-256-GCM pour l'image et le son, adresses publiques refusées, et un seul viewer à la fois (le deuxième doit demander la place au premier, qui répond oui ou non).
  • Une vraie app Mac. Barre latérale avec vos Macs, barre d'outils native, fenêtre Réglages, menus complets, mode sombre, français ou anglais selon la langue du système, et les Macs du réseau qui ont la session à distance activée sont trouvés tout seuls par Bonjour. Les statistiques du flux (⌃⌥⌘I) donnent la latence, la gigue, le tampon et les pertes, et une "liaison économe" allège tout d'un coup pour un réseau lent ou compté.

Ce que ça ne fait pas encore par contre, c'est pas de réveil à distance, pas de déverrouillage FileVault après un redémarrage à froid (prévu sur macOS 26, mais pas encore validé), les gestes du trackpad comme la rotation ou le balayage à trois doigts ne passent pas, et le verrouillage des majuscules reste celui du Mac distant. Il faut macOS 14 minimum des deux côtés, et les deux applications sont universelles, Apple Silicon comme Intel (testées sur Apple Silicon, l'Intel et macOS 14 restent à valider).

Maintenant pour pour l'utiliser tous les jours, ce que je peux vous dire c'est que ça marche très bien. Maintenant, j'ai pas eu d'autres testeurs que moi-même pour le moment mais ça fait tout ce dont j'ai besoin.

Et je me suis payé le luxe également d'adapter le code (en version ultra alpha, j'ai pas encore assez testé ça) pour Windows et Linux. Et l'application iOS est également sur les rails.

Maintenant, comme d'hab, j'ai essayé de la mettre sur l'App Store d'Apple mais ils sont tellement casse couilles que je ne sais pas si j'y arriverai. Mais peu importe, je me suis dit que ça vous servirait alors je vous ai fait un petit site ici pour télécharger mon app : remotedesktop.korben.info .

C'est 100% gratuit, y'a aucune télémétrie ni pub dedans et je n'ai pas de plan de carrière avec ce logiciel si ce n'est de l'améliorer par petites touches au fil du temps. Je l'ai créé pour mes besoins et je me suis dit que ce serait dommage de ne pas vous en faire profiter, c'est tout.

Voilà, donc n'hésitez pas à tester. C'est conçu pour macOS mais j'ai décliné ça pour Windows et Linux (je le redis, c'est de l'alpha pour Win et Linux) afin que chaque client puisse prendre le contrôle de n'importe quelle machine peu importe son système d'exploitation.

Enjoy !

  •  

Music Bridge - Pour que les liens musicaux s'ouvrent bien sur votre plateforme favorite

Si vous avez des potes qui vous envoient des liens Spotify trop cools toute la journée alors que vous écoutez tout sur Deezer (ou l'inverse), bah c'est chiant votre vie. Faut copier le titre, ouvrir votre appli, le chercher...etc.

Heureusement, il existe Music Bridge , une extension pour le navigateur signée Simon Duhem (un ancien de Deezer) qui vous permet d'éviter de faire tout ce bordel en ouvrant directement la bonne chanson dans votre application musicale à vous.

Une fois Music Bridge installé, vous réglez votre service favori une fois pour toutes dans les options, et ensuite chaque page de morceau ou d'album ouverte ailleurs vous renvoie automatiquement vers son équivalent chez vous.

Deezer, Spotify, Apple Music, YouTube Music, Amazon Music, Tidal et Pandora se renvoient ainsi la balle dans n'importe quel sens, et YouTube ou SoundCloud peuvent également servir de destination. Et bien sûr si le morceau n'existe pas dans votre catalogue parce que c'est trop niche, bah vous restez sur la page d'origine avec un petit message qui vous prévient.

Maintenant pour ceux qui préfèrent l'appli de bureau plutôt que l'extension navigateur, une option permet également de lancer la musique directement dedans pour Deezer, Spotify et Apple Music, sous Windows et macOS, et une autre s'occupe de refermer l'onglet resté ouvert 5 secondes après l'ouverture de l'appli. Cochez juste "Toujours autoriser" la première fois que le navigateur vous demande s'il peut ouvrir l'appli, sinon l'onglet se fermera avant d'avoir eu votre réponse.

Après, il y a encore quelques trous dans la raquette... Par exemple, il n'y a pas de conversion pour les artistes ou pour les playlists. Et sur Android, quand l'appli de l'autre plateforme est installée, c'est elle qui récupère ses liens avant même que le navigateur ne les voie, et ça malheureusement, l'extension n'y peut rien.

Maintenant, pour retrouver le bon morceau, l'extension envoie l'adresse de la page ainsi que la plateforme de destination choisie à un petit service web que Simon hébergé chez Cloudflare, qui interroge l'API d' Odesli (le moteur de song.link) pour faire le matching.

Le code de cette extension est sous licence BSD et Music Bridge s'installe sur Chrome , Firefox (Android compris) et Edge .

Merci à Simon pour le partage !

  •  

xboxrecomp - Transformer un jeu Xbox en .exe Windows

xboxrecomp est un outil de recompilation qui vient de voir le jour et qui devrait vous intéresser si vous êtes nostalgique de la première Xbox. En effet, ce dernier prend l'exécutable d'un jeu de la Xbox originale, traduit chacune de ses fonctions x86 en code C, puis recompile le résultat en programme Windows 100% natif. Cela veut dire que le jeu ensuite peut tourner directement sur votre ordinateur, sans faire appel à un interpréteur ni à un émulateur. C'est ce qui s'appelle de la recompilation statique, et je vous en parle régulièrement parce que je trouve ça assez magique (rappelez vous de Zelda 64 recompilé ).

Le dépôt de xboxrecomp ne contient évidemment aucun fichier de jeu pour ne pas s'exposer au courroux des ayants-droits. Vous devez donc avoir votre propre disque, en extraire le default.xbe, et la chaîne d'outils (du Python avec capstone, puis Visual Studio 2022 pour compiler) génèrera chez vous tout le code C du jeu. Pas de bouton magique, par contre, le premier lancement d'un jeu recompilé plantera et ensuite, ça avancera crash après crash. Notez que ce projet s'est construit avec Claude Code également.

Pour le moment, le seul jeu qui va au bout de sa recompilation, c'est Burnout 3: Takedown. Tous les modes démarrent et se jouent, seul ou à deux, mais les menus tournent à environ 14 images par seconde et les courses à 2 à 4 FPS sur une machine à 12 cœurs. Y'a pas non plus de possibilité de faire des sauvegardes et c'est manette obligatoire. Bref, c'est pas encore très jouable.

En fait le problème c'est le GPU de la Xbox (le NV2A) qui est émulé en logiciel, et c'est malheureusement ça qui fait chuter les FPS. Le "No emulation" du slogan ne vaut donc que pour le processeur, mais pas les morceaux audio ni le GPU repris de xemu. Mais ça changera peut-être bientôt.

Maintenant, si vous cherchez un jeu Xbox précis à installer, regardez plutôt du côté de SCDA-XBERecomp , qui est l'inverse de xboxrecomp. C'est n'est pas un outil universel mais une recompilation uniquement du jeu Splinter Cell: Double Agent. Celui-ci réimplémente le noyau, Direct3D et DirectSound côté Windows, et vous laisse régler le champ de vision ou lever la limite de 30 images par seconde.

Et si vous voulez juste rejouer à vos jeux Xbox ce soir, un émulateur comme xemu fera très bien comme d'hab.

Moi de mon côté, j'avance toujours sur mon recompilateur universel de ROMs Kompote et ça marche vraiment très bien. Là je suis en train d'implémenter le support des jeux Amiga... je pense que dans quelques jours, ce sera cuit à point.

Source : xboxrecomp sur GitHub

  •  

OpenMouse - Réglez votre souris gaming depuis le navigateur

Si vous avez la chance de rentrer de manif avec vos 2 mains, parce que hé, "c'est la démocratie", voici un outil qui va vous intéresser ! Ça s'appelle OpenMouse et c'est un configurateur de souris gaming qui fonctionne direct dans le navigateur. Vous branchez votre souris, vous ouvrez le site dans Chrome ou Edge, et vous réglez le DPI, le polling rate, et les boutons et le RGB (selon ce que votre modèle sait faire).

L'outil n'envoie aucune donnée à l'extérieur et en plus, c'est gratuit et sous licence AGPL. Maintenant, est-ce que ça va fonctionner avec votre souris ? C'est la grande question ! La liste du projet suit actuellement 746 appareils, dont 232 sont taggés comme "Compatible", c'est-à-dire confirmés fonctionnels avec un driver enregistré. Les autres sont des modèles demandés par la communauté, ou qui attendent un test matériel ou un driver.

Chez Logitech par exemple, la G502, la MX Master 3S et la G Pro X Superlight en font partie. Chez Razer, la DeathAdder V3 et la Viper V3 Pro aussi, mais la Basilisk V3 attend encore un test sur du vrai matériel.

Après, "Compatible" ne veut pas dire que tout se règle direct. La Corsair Nightsword RGB est marqué comme tel et pourtant, elle est en lecture seule (il faut fermer l'outil iCUE avant), et plusieurs autres modèles de la marque affichent "Driver nécessaire".

Et si vous avez une Razer sous Windows ?

Alors là, il vous faudra un utilitaire en plus car depuis Chrome 153, une page web ne peut plus toucher à la souris via l'interface que Razer utilise. En effet, Chrome a corrigé un bug Windows qui, d'après le billet d'OpenMouse daté du 12 septembre dernier, laissait cet accès ouvert depuis des années. Les Razer ont donc cessé de s'y connecter, ce qui fait que pour le projet, la seule solution c'est Bridge , un utilitaire optionnel qui s'installe sur l'ordi et qui permet de faire le lien entre la souris et l'app web.

Bridge est cool parce qu'elle permet aussi d'utiliser OpenMouse sous Firefox (Safari n'est pas encore supporté), ainsi que d'appliquer un profil de réglages au lancement d'un jeu, ou encore de vous prévenir quand la batterie de votre souris sans fil passe sous 20 %.

Par contre, c'est encore une bêta donc il n'y a aucune garantie ! À tester !

  •  

Floci - L'émulateur AWS open source qui tourne en local

Si vous développez pour AWS, il y a de bonnes chances que LocalStack tourne déjà quelque part dans votre docker-compose ou votre CI. C'est un peu l'outil incontournable pour tester ses buckets S3 et ses fonctions Lambda sans avoir à toucher au vrai cloud. Sauf que depuis mars dernier, ses nouvelles versions exigent un compte LocalStack et un jeton d'authentification, CI comprise, et surtout l'édition Community n'est plus prise en charge.

Ouin !

Et comme si ça ne suffisait pas, l'offre gratuite qui reste interdit totalement l'usage commercial. Donc si vous l'utilisez dans le cadre de votre travail, faudra passer à la caisse. Alors, oui, ne pas respecter la licence ou se figer sur une ancienne image reste possible, mais déjà, ça ne se fait pas, et ensuite, niveau faille de sécu, ce n'est pas top.

Mais c'est là qu'arrive en sauveur Floci, un émulateur AWS local sous licence MIT qui se présente comme un remplaçant direct de LocalStack, sans avoir besoin de se créer un compte ou un jeton et surtout sans offre payante planquée dedans.

Maintenant, le principe reste le même puisque vous pointez dessus l'AWS CLI (Floci écoute sur le port 4566), vos SDK, Terraform, OpenTofu ou le CDK, avec la région de votre choix et des identifiants bidon, et vos commandes habituelles tomberont sur votre machine au lieu de partir chez Amazon.

Le plus simple pour démarrer, c'est sa CLI qu'on peut déployer avec Homebrew (il y a aussi un script pour Linux et un pour Windows) :

brew install floci-io/floci/floci
floci start
eval $(floci env)
aws s3 mb s3://my-bucket

Ensuite, faites un floci start pour lancer l'émulateur dans un conteneur et lui monter le socket Docker de votre machine. Floci s'appuie sur de vrais conteneurs dès que la fidélité l'exige ce qui fait que Lambda tourne dans l'image d'exécution officielle d'AWS, RDS lance un vrai PostgreSQL, MySQL ou MariaDB, ElastiCache un Valkey, et c'est pareil pour ECS, EC2 ou EKS.

J'ai fait l'essai sur mon Mac avec un bucket S3, une table DynamoDB et une petite fonction Lambda en Python, et tout a répondu du premier coup à la CLI AWS. La Lambda a juste mis six secondes à répondre au premier appel, puis moins d'une seconde au suivant.

Pour voir ce qui se passe ensuite, une console web est dispo localhost:4566/_floci/ui, avec vos ressources rangées par service.

La console web de Floci sur localhost, après un essai sur S3, DynamoDB et Lambda

Notez aussi que si vous venez de LocalStack, la bascule se résume simplement dans le nom de l'image puisque Floci traduit tout seul les variables d'environnement de LocalStack, exécute sans modification les scripts d'init rangés dans /etc/localstack/init/ et répond même sur /_localstack/health. Cela veut dire qu'une CI qui attend ce signal ne voit pas la différence et ça c'est super cool pour migrer vite fait bien fait.

Et si vos scripts appellent aws ou boto3, prenez l'image floci/floci:latest-compat, qui embarque les deux.

Par contre, méfiez-vous du volume de données, car LocalStack range tout par défaut dans /var/lib/localstack et Floci dans /app/data. Donc dans le docker compose, pointez bien votre volume sur /app/data sinon, vous perdrez vos fichiers au premier restart du docker.

Après n'oubliez pas non plus que Floci imite le comportement d'AWS, et pas sa sécurité. En effet, par défaut, il n'applique aucune politique IAM, donc si vous voulez vérifier qu'un rôle trop resserré bloque bien une action, il faudra activer la variable FLOCI_SERVICES_IAM_ENFORCEMENT_ENABLED. Et certains services ne sont également que des façades. Par exemple Bedrock Runtime renvoie des réponses factices et Transcribe termine ses tâches aussitôt, sans jamais traiter l'audio, donc oui, votre code peut les appeler, mais le résultat ne sera pas au rendez-vous, ce qui est tout à fait normal.

Pour le reste, les données sont stockées en mémoire par défaut et s'effaceront à l'arrêt, ce qui est pile poil ce qu'on veut en CI. Vous pouvez quand même le paramétrer pour que ça s'écrive sur le disque si vous voulez...

Voilà, à essayer sur une branche de votre CI si vous voulez vous débarrasser de débrancher LocalStack pour de bon !

Source : Floci sur GitHub

  •  

curl.md - Récupérez le texte de n'importe quelle page web au format Markdown

Je ne sais pas si vous connaissez curl.md, mais c'est un service qui prend l'adresse d'une page web et vous l'affiche en Markdown. Y'a pas de menus, pas de bandeaux de cookies, et ce genre de conneries... C'est juste le texte de votre article, les titres, les liens et les tableaux.

Et le plus sympa, c'est que vous n'avez rien à installer pour l'essayer. Vous collez curl.md/ devant l'adresse qui vous intéresse, dans la barre de votre navigateur, et vous obtenez la page en texte markdonw. Avec curl dans un terminal, c'est pareil, la réponse arrivera en text/markdown, et si vous préférez du JSON, vous envoyez l'en-tête Accept: application/json.

Un article de korben.info passé par curl.md : le texte, les liens, et un en-tête de métadonnées en haut

Et vous pouvez aller plus loin en ajoutant un objectif avec le paramètre --objective. Par exemple, vous décrivez ce que vous cherchez dans la page, et le service ne vous renvoie que le passage qui correspond. Il y a aussi des mots-clés, qui font un pré-filtrage avant l'extraction, et un mode smart ou rush selon que vous voulez une passe plus poussée ou plus rapide. Tout ça passe en paramètres d'URL, donc sans ligne de commande.

Pour ceux qui y reviennent souvent, il existe également un client à installer avec npm, avec bun ou avec un script, et qui s'invoque ensuite par curl.md ou par son alias court md :

# Sans rien installer
curl curl.md/example.com

# Ou avec le client
npm i -g curl.md
md zod.dev/error-formatting --objective "tree error formatting"

Côté agents de code, il y a des intégrations natives pour Amp, Claude, OpenCode et Pi. Si votre outil n'est pas dans la liste, le client sait aussi tourner en serveur MCP avec curl.md --mcp, et il existe un SDK TypeScript. Dans tous les cas, c'est l'agent qui va chercher les pages tout seul, vous n'avez plus rien à lui coller.

Du coup, ça sert à quoi ?

Bah dans le cadre de votre boulot, c'est surtout pour arrêter de coller des pages entières dans vos prompt. Vous donnez à votre agent la doc d'une bibliothèque avec un objectif précis, et il reçoit trois paragraphes au lieu de quarante pages HTML.

Ça marche aussi pour un script de veille qui suit les notes de version d'un projet, ou pour aspirer une doc dans un fichier texte que vous garderez dans le dépôt (bien plus lisible qu'un PDF dans un coin...).

Et en usage perso, ça vous permet de récupérer par exemple un article pour le relire au calme dans Obsidian, d'archiver une recette ou un mode d'emploi avant qu'il disparaisse, ou de vous envoyer une page à ChatGPT sans lui faire avaler la moitié du site autour. Notez que si c'est la consommation de vos agents qui vous embête, j'avais parlé de RTK, un proxy qui économise des tokens sur le même principe.

Par contre, il y a un plafond. En mode anonyme sur la version hébergée, vous avez droit à 100 requêtes par heure, et 1 000 une fois connecté. Et pour les requêtes avec un objectif, celles qui font justement l'intérêt du truc, c'est 3 par heure en anonyme et 10 en étant connecté. Bref, de quoi essayer, mais pas vraiment de quoi travailler... Au-delà, faudra passer par des crédits prépayés, à recharger par tranches de 5, 10, 20 ou 50 dollars.

Et si vous ne voulez pas dépenser d'argent, le code source est public sur GitHub sous licence MIT pour l'auto-héberger chez vous.

C'est à tester sur curl.md , et merci à Camille Roux pour le lien !

  •  

Cloudflare lance son skill d'audit de sécurité par IA

Cloudflare a mis en ligne sur son GitHub un skill trop super génial d'audit de sécurité qui leur a servi de point de départ à leur propre système de chasse aux failles de sécu. Ce package pour faire des audits de sécu boostés à l'agent IA c'est un dossier de consignes en Markdown que vous déposez dans votre agent de code, et qui le fait bosser comme un vrai auditeur et pas simplement comme un "relecteur" de code.

Dans ce dépôt, vous trouverez un fichier par famille d'attaque : la corruption mémoire, l'injection de prompt, le cadrage des requêtes HTTP, l'isolation entre locataires. Et avec ça, un schéma JSON qui décrit à quoi doit ressembler un rapport, et deux validateurs écrits en JavaScript sans la moindre dépendance.

Le dossier du skill sur GitHub : un fichier de consignes par famille d'attaque, et les deux validateurs en bas de liste ( Source )

L'agent déroule ensuite six phases, de la reconnaissance au rapport final. Il commence par cartographier l'architecture, les frontières de confiance et les points d'entrée, puis il écrit sa propre grille de couverture. Ensuite il envoie des chasseurs isolés case par case et chaque piste qui remonte part chez un vérificateur tout frais tout beau qui n'a pas participé à la chasse.

Chaque piste se termine ensuite avec un rapport technique. Un rapport confirmed qui exige une trace source complète et un résultat réellement observé. Un rapport needs_validation qui nomme le fait précis qui manque, et surtout qui n'a droit à aucun niveau de gravité. Et le rapport des rejected qui garde la mémoire de ce qui a été réfuté, pour que la passe suivante ne vous ressorte pas la même chose.

Le validateur, lui, c'est du vrai code qui vérifie la "forme" de la preuve. Les empreintes doivent être uniques, et le suivi du parcours des tests qui doit partir d'un point d'entrée pour finir sur un point d'impact. Ainsi une trouvaille confirmée dont le parcours ne tient pas debout est recalée.

En revanche, sachez-le, l'indépendance du vérificateur est demandée dans les consignes, mais pas contrôlée (chez Cloudflare, c'est leur orchestrateur maison qui s'en charge, et il n'est pas dispo publiquement).

Cloudflare explique sur son site ce que donne un de ces agents lâché sur du code sans garde-fou. Il modifie la source pour que son exploit fonctionne, puis il annonce fièrement le bug qu'il vient de créer lui-même. Ou alors il pond un test qui démontre que exec() exécute des choses, donc que c'est forcément une faille critique... Et ça vous l'aurez compris, c'est de la merde et c'est absolument ce qu'on ne veut pas.

Voilà donc exactement ce que ces consignes cherchent à lui interdire.

Pour l'installer, il vous faut le CLI skills de Vercel Labs :

npx skills add https://github.com/cloudflare/security-audit-skill --skill security-audit

Ensuite, vous lancez votre agent dans le dépôt à auditer et vous lui demandez un audit de sécurité. Le skill se déclenche tout seul et c'est le modèle de votre agent qui pilotera les sous-agents en parallèle (utilisez donc un modèle qui sache faire ça, c'est mieux lool). Par défaut, le rapport atterrit ensuite dans un dossier ~/security-audit-skill, en dehors du dépôt audité.

Ce qui est cool c'est que ce skill est conçu pour limiter les bêtises. Par exemple il refuse d'exécuter le code qu'il audite s'il n'a pas de bac à sable (sandbox) imposé par le système d'exploitation, avec le réseau coupé, la cible en lecture seule et des limites de CPU et de mémoire. Ce bac à sable, le dépôt ne le fournit pas, et c'est à vous de le mettre en place avec par exemple un outil d'isolation comme Fence . Sans lui, la piste de l'audit finira tout bonnement en needs_validation au lieu d'être véritablement suivie et tranchée.

Après, c'est le temps qui fera la différence. Chez Cloudflare, ils ont un gros système qui leur permet, par exemple avec un dépôt d'environ 30 000 lignes de code, de ne passer que 3 à 4 heures sur l'audit pour avoir un résultat correct. Mais chez vous, en local, ce sera beaucoup plus long. Cloudflare prévient aussi qu'une seule passe n'est pas suffisante puisqu'elle trouve à peu près la moitié des failles à chaque fois. Il faudra relancer ça plusieurs fois.

Allez, si vous cherchez également un filet de sécurité pour tout ce qui concerne vos pull requests, sachez qu'Anthropic maintient de son côté un reviewer de sécurité pour Claude Code qui lit le diff et vient commenter directement dessus.

Le dépôt de Security Audit Skill de Cloudflare est sous licence MIT, et il lui faudra Node.js pour faire tourner ses deux validateurs.

En tout cas, ce que je vous conseille, c'est d'aller lire le SKILL.md avant de lancer la première passe, pour vous assurer que tout sera OK au sein de votre harness.

Source : security-audit-skill sur GitHub

  •  

FFmpeg Commander - Cochez, copiez, collez dans le terminal

Convertir une vidéo avec ffmpeg, ça prend 2 minutes... Mais ça c'est quand on connaît les commandes et les paramètres de l'outil, par cœur. Sinon, vous êtes partis facilement pour une demi-heure de documentation.

Mais votre vie va changer puisque FFmpeg Commander est une page web qui règle ce problème-là. Vous cochez ce que vous voulez obtenir, et la commande s'écrit toute seule en dessous, prête à être copiée.

Le formulaire couvre en réalité ce qu'on demande le plus souvent à ffmpeg. Je pense notamment au conteneur, aux codecs vidéo et audio, au débit ou au CRF (la qualité), mais aussi la résolution, le découpage d'un extrait, sans oublier quelques filtres... Si vous touchez un réglage, la commande se réécrit alors dans la foulée, et vous voyez donc tout de suite quelle option votre clic vient d'ajouter.

Le formulaire et la commande juste en dessous

Et depuis sa refonte, il y a surtout de super "recettes". 34 préréglages rangés par usage, dont six catégories entières arrivées d'un coup : du MP4 en faststart pour le web, du vertical en 1080x1920 pour les réseaux sociaux, du HEVC 10 bits pour l'archivage, le désentrelacement d'un vieux DVD, la stabilisation d'une action cam, ou l'extrait de 10 secondes qu'on doit se faire toujours en urgence.

Ce qui est cool c'est que tous vos réglages sont encodés dans l'URL. Du coup une recette se partage en collant un lien, et la personne en face se retrouvera avec le même formulaire, dont les cases seront déjà cochées. Par contre, vos préréglages maison, eux, resteront dans le stockage local de votre navigateur.

Une fois que vous avez la commande qu'il vous faut, vous ouvrez votre terminal, vous collez la commande et puis ça va lancer FFmpeg et convertir votre fichier tranquillement.

Pour le reste, c'est du MIT et c'est gratuit. L'auteur prévient lui-même que son outil ne couvre pas tout ffmpeg et que le résultat dépend aussi de votre version. Relisez donc bien la commande avant de la lancer, surtout sur un fichier que vous n'avez pas en double.

À tester sur ffmpeg-commander.com , et le code est sur GitHub si vous voulez le faire tourner chez vous.

Source : FFmpeg Commander

  •  

Un script pour virer les produits sponsorisés d'Amazon

Allez, on va faire un jeu. Cherchez un disque dur externe sur Amazon et regardez où pointe le premier lien de la page. Bingo, ça part sur une adresse en /sspa/click, autrement dit un emplacement publicitaire. Et c'est pas le mieux noté, c'est pas le moins cher, non, c'est juste celui qui a payé le plus pour être là.

Et moi, ce qui me saoule vraiment, c'est que les filtres n'y peuvent rien.

Pour remédier à cela il faut sortir l'artillerie. J'ai d'abord pensé à faire un filtre uBlock Origin, puis à me coder une extension Firefox, avant de me rappeler que Tampermonkey tournait déjà dans mon navigateur.

Direction le repo Greasy Fork, donc, où traîne un script qui fait exactement ça . Une cinquantaine de règles CSS, qui dégagent du DOM les résultats sponsorisés de la recherche, les carrousels promo, les encarts publicitaires de la fiche produit, l'upsell Prime et les bannières de marque.

On passe ainsi de ça :

À ça :

Et ça fonctionne super sur toutes les versions d'Amazon, y compris Amazon.fr.

Trois réglages attendent dans le menu du gestionnaire de scripts. Un compteur qui affiche en bas de page ce qui a été retiré et pourquoi, une journalisation console pour les curieux, et une option qui redirige les pages de navigation vers la vraie liste de résultats.

Attention quand même à ce qui saute en plus des pubs. Le bloc "Les gens qui ont acheté ça, ont aussi acheté ça". Le script s'attaque aussi à Rufus, l'assistant d'achat maison et côté installation, il vous faut Tampermonkey, Violentmonkey ou Greasemonkey. Sur Firefox, ça s'arrête là. Par contre sur Chrome, depuis la version 138, il faut en plus activer un switch "Allow User Scripts" sur la fiche de l'extension, coupé par défaut sur toute extension fraîchement installée.

Voilà, j'espère que ça vous aidera à avoir un Amazon un peu plus propre. Maintenant, n'oubliez pas, Amazon, c'est le mal, donc si vous avez les moyens de payer 2x plus cher la même chose et que vous aimez passer votre vie dans les transports ou en bagnole à faire une espèce de chasse au trésor à travers toute la ville, pour trouver le produit qu'il vous faut, le mieux reste encore et toujours d'acheter dans des magasins physiques. Lol.

  •  

Freenet-git - Le dépôt Git sans serveur

Depuis ce printemps, sachez qu'un git clone ordinaire peut maintenant récupérer un dépôt qui n'existe sur aucun serveur spécifique. En fait, le code est stocké dans Freenet, le réseau pair-à-pair qu'Ian Clarke a relancé en mars. Et comme y'a plus d'hébergeur, bah y'a plus personne pour fermer un compte ou shooter le dépôt.

Car Git est décentralisé depuis toujours et fonctionne très bien comme ça, puisque chaque clone contient l'historique complet, ce qui permet à 2 clones de se synchroniser directement. Ce qui lui manquait par contre, c'était l'hébergement, et c'est là-dessus que les forges que nous connaissons, Github en tête, sont venues capitaliser. Y'a bien des initiatives comme Grasp qui essaie d'en sortir grâce au protocole Nostr mais freenet-git lui range carrément le dépôt dans un contrat que les nœuds recopient, et se publie lui-même à l'adresse freenet::99TmCayXn6Tm/freenet-git.

Cloner ou publier du code exige donc le paquet freenet-git et un nœud qui tourne sur votre machine, ce qui fait qu'on ne supprime pas vraiment le serveur, mais on le ramène juste chez soi.

Ce clic autorise une connexion à Google : adresse IP transmise et traceurs possibles. En savoir plus Voir cette vidéo sur YouTube

Le socle compte plus que l'application dans cette présentation. Les contrats et les delegates forment la couche où une app tourne sans backend, et quatre tournent déjà dessus : River pour le chat de groupe, Delta pour les sites, Atlas pour la recherche, et freenet-git pour le code. Mail, Raven et Harvest existent aussi, à un stade plus jeune.

L'adresse du dépôt sort des 12 premiers caractères de la clé publique de son propriétaire, et à ce stade expérimental, lui seul peut pousser dedans. Y'a pas non plus de pull requests, ni d'issues puisque c'est le modèle du noyau Linux d'avant les forges, où chacun publie son clone et le mainteneur vient y piocher ce qui l'intéresse.

Reste le plus dur maintenant, retrouver un dépôt.

Car sans annuaire, un nœud doit deviner lequel de ses voisins mettra le moins de temps à trouver ce qu'on lui demande. Le réseau traite ça comme un problème d'apprentissage et parie sur le bon voisin à partir des requêtes passées grâce à Renegade, une bibliothèque open source sortie en 2021, capable de faire ce calcul.

Installer freenet-git

Il faut une chaîne Rust, et ~/.cargo/bin doit être dans votre PATH. Les installeurs du nœud sont sur freenet.org/quickstart.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Rust n'entre dans le PATH qu'au shell suivant, donc ouvrez un nouveau terminal avant la commande d'après. Elle dépose deux binaires, freenet-git et le remote helper que Git appellera tout seul.

cargo install freenet-git

Cloner un dépôt qui existe déjà

Aucune identité n'est nécessaire pour lire. La bibliothèque standard de Freenet fait un bon test, elle porte son historique complet et ses tags.

git clone freenet::96rknpy1GYhZ/freenet-stdlib

Publier le vôtre

C'est create qui publie réellement le contrat. Il affiche PUT confirmed by host et l'adresse du dépôt, dont le préfixe se recopie dans le remote. La phrase de passe voyage par une variable d'environnement parce que Git garde la main sur l'entrée standard durant le push.

freenet-git init-identity --name "Votre Nom" --email [email protected]
cd ~/code/mon-projet
freenet-git create --name mon-projet
# -> URL: freenet:VOTRE_PREFIXE/mon-projet
git remote add freenet freenet::VOTRE_PREFIXE/mon-projet
export FREENET_GIT_PASSPHRASE='votre-phrase-de-passe'
git push freenet main

Et voilà ! Avec ça vous pouvez faire du vrai git décentralisé même si la vraie limite est ailleurs...

En effet, les nœuds gardent en cache ce qu'on leur réclame et évacuent le reste, donc un dépôt que personne ne clone finit au bout d'un moment par ne plus être clonable. Et ça c'est dommage... C'est pourquoi une commande (rescue), le remet en circulation depuis une machine qui a encore les données. Le projet ne présente toutefois pas ça comme un bug, mais comme son modèle de durabilité actuel.

Mais autant le savoir avant d'y déposer votre code.

Source

  •  

Diagram-design - Des schémas à vos couleurs

Diagram-design , c'est un skill pour Claude Code, Codex et Pi qui vous fabrique un schéma technique sous forme de fichier HTML autonome. Vous double-cliquez, ça s'ouvre dans le navigateur, et le diagramme est là, super clean et sans avoir à faire de build ou importer des images.

27 types de diagrammes sont couverts, du schéma d'architecture au diagramme de séquence en passant par la machine à états, le Gantt et le quadrant, chacun en 3 variantes : claire, sombre et éditoriale. Bref, de quoi illustrer une doc ou un article de blog sans dessiner les boîboîtes vous-même, une par une comme dans un Excalidraw .

Le type Loop, avec son moyeu de mémoire partagée. Les pointillés sont les écritures en retour.

Il sait aussi partir de ce que vous avez déjà. Vous lui pointez un fichier draw.io ou un bloc Mermaid planqué dans un README, et il le reprend. Attention, ce n'est pas une conversion hein, mais un re-dessin (ça se dit ?? j'sais pas mais je m'en fous) complet. Il va même récupérer le diagramme embarqué dans un .drawio.png, vous savez, celui qui ressemble à du charabia quand vous ouvrez le fichier dans un éditeur.

Ce qu'il jette au passage ce sont les coordonnées de la source, sa palette, ses polices, les connecteurs en diagonale de draw.io et la mise en page automatique de Mermaid. Ce qu'il garde par contre, ce sont les composants, les relations, les regroupements et le sens de lecture.

À la fin de l'import, il rend même un genre de relevé de fidélité en vous indiquant les noeuds en entrée, les noeuds qu'il a dessinés et les noeuds orphelins qu'il a supprimé.

Un fichier draw.io de 12 nœuds redessiné en niveau de détail équilibré, pour un billet de blog.

La sortie se règle ensuite sur 4 critères. Le format d'abord, HTML, SVG ou PNG. Puis la taille, qui ne touche pas que le cadre. Une planche 16:9 destinée au vidéoprojecteur reçoit des libellés en 16px, une image de doc en reçoit des 12px.

Le troisième critère élague votre dessin, avec 24 nœuds au maximum en mode fidèle, 12 en équilibré, 7 en simplifié, et la coupe suit toujours le même ordre : les décorations, puis les doublons, puis les grappes de feuilles, puis l'infrastructure.

Le quatrième change le vocabulaire, mais pas le nombre de boîtes pour s'adapter au public à qui est destiné le diagramme. Pratique pour passer d'un diagramme hyper technique à quelque chose qui pourra être compris de la direction ou des commerciaux.

Reste l'allure du diagramme... Vous lui donnez par exemple l'URL de votre site, il lit la page d'accueil, en tire la couleur de fond, celle du texte, celle des boutons et la pile de polices, puis range tout ça dans des rôles, et voilà vous avez le design de vos rêves.

Mais surtout, avant d'écrire quoi que ce soit, il contrôle le contraste en AA. Si une de vos couleurs ne tient pas la route à la taille où vivent les libellés, entre 9 et 12px, il propose une valeur corrigée et explique pourquoi. Vous validez le diff, et le guide de style du skill est mis à jour pour tous les schémas suivants.

Et au premier schéma dans un nouveau projet, il refusera même de partir sur le thème par défaut sans vous demander. Il vous proposera naturellement d'aller consulter votre site, de coller vos couleurs à la main, ou encore d'assumer le défaut en connaissance de cause.

Côté installation, ça passe par les plugins pour Claude Code et Codex, par npx pour Codex, par une ligne pour Pi. C'est sous licence MIT et c'est gratuit. Tout est ensuite produit en local, et l'import Mermaid se contente de lire le texte, sans rendu ni appel réseau. Il n'y a que l'export PNG qui réclame un extra, à savoir Playwright, à installer à côté.

Maintenant, c'est pas le même usage qu'un bloc Mermaid qui lui est destiné à évoluer en permanence. Là c'est vraiment pour faire des rendus sous la forme d'une image finie et jolie. Donc à vous de voir !

À découvrir ici !

  •  

GitWand - Il trie vos conflits Git et vous montre pourquoi

perso, je n'ai jamais été très à l'aise avec Git. Je l'utilise tous les jours, mais c'est vraiment pas ma came. Dès que ça devient trop compliqué, genre conflit de merge qui repeint des dizaines de fichiers en rouge, je ne m'en sors plus ^^.

Heureusement qu'il y a l'IA pour m'aider dans des moments difficiles ! Mais si vous n'aimez pas confier la gestion de vos merges à un LLM en aveugle, je vous invite à découvrir GitWand, développé par Laurent Guitton, qui s'occupe uniquement de la gestion des conflits avec Git et vous laisse gérer le reste.

Gitwand, c'est donc un client Git open source, sous licence MIT, qui classe chaque bloc conflictuel selon des règles fixes et ne résout automatiquement que ceux dont le résultat ne fait aucun doute.

Pour cela, il dispose de plusieurs patterns déterministes :

  • same_change, c'est quand les deux branches ont écrit exactement la même chose.
  • whitespace_only ne voit qu'une indentation qui a bougé,
  • reorder_only les mêmes lignes remises dans un autre ordre.
  • Un numéro de version qui change, lui, tombe dans value_only_change.
  • Et puis il y a complex, le fourre-tout des modifications qui se chevauchent pour de vrai. Celle-là n'est jamais tranchée toute seule.
  • git rerere rejoue les résolutions que vous avez déjà tranchées à la main,
  • et Mergiraf se branche directement dans git merge pour arbitrer en lisant l'arbre syntaxique de votre code.

Ce qui change ici, c'est que chaque décision est justifiée. En effet, chaque bloc reçoit un score de confiance ainsi qu'une trace qui nomme le motif retenu ligne par ligne.

Par exemple, si une branche écrit const theme = 'dark', et l'autre const theme = localStorage.getItem('theme') ?? 'dark', hé bien l'outil garde la seconde, étiquette sa décision prefer-theirs, et affiche 97 % de confiance à côté.

Sur la page d'accueil, l'outil annonce 95 % des conflits triviaux résolus automatiquement. Le moteur est aussi exposé aux agents IA via un serveur MCP, ce protocole qui branche des outils externes sur des assistants comme Claude Code ou Cursor. L'installation se fait comme ceci : claude mcp add gitwand -- npx -y @gitwand/mcp.

L'agent réclame un aperçu, récupère les blocs déjà réglés, et ne garde que les cas ambigus, avec les trois versions du code sous les yeux. Le modèle ne touche qu'à ce qu'aucune règle ne sait faire, soit l'inverse de ce qu'on voit d'habitude.

Le projet est jeune et ça se voit. Mais ça vaut le coup d'essayer parce que je pense que ça peut rendre de nombreux services. L'app existe pour macOS, Linux et Windows, l'interface est traduite en français, et elle se double d'une ligne de commande (npm i -g @gitwand/cli) et d'une extension VS Code.

Si l'interface graphique vous tente, je vous avais montré Gittyup dans le même registre, et pour les irréductibles du terminal j'avais présenté Lazygit .

À vous maintenant de commencer par gitwand resolve --dry-run --verbose pour voir "à blanc" ce qu'il trouve et comment il aurait tranché pour le merge.

Merci à Laurent pour le lien !

Source

  •  

Pix 2D to 3D - Des sprites aux modèles 3D, sans IA ni GPU

Si vous faites du pixel art, voilà un petit outil qui devrait vous plaire. Pix 2D to 3D prend votre sprite et vous le transforme en modèle 3D voxelisé au format .obj, importable direct dans Blender, Unity ou Godot. Pas la moindre trace d'IA là-dedans, uniquement des maths, et son dev Prashant bosse chez Snaptrude sur du logiciel 3D, donc autant vous dire qu'il maîtrise.

L'idée, c'est de vous épargner la modélisation quand vous montez un jeu en 3D iso ou un 2.5D et qu'il vous manque juste trois caisses et un tonneau pour meubler le décor. Vous dessinez le sprite, vous le passez dans l'app et hop, l'objet 3D ressort de l'autre côté.

Vous avez 4 modes selon ce que vous lui donnez à manger, plus un réglage Auto qui devine le format tout seul en regardant les proportions de votre image.

Single voxelise un sprite unique. Single + Repeated le répète sur les 4 côtés en l'extrudant sur la profondeur de votre choix. Dual accepte une planche à 2 vues (face et dos). Et mon préféré, Quad, avale carrément une planche de 4 vues alignées à l'horizontale dans un ordre bien précis : gauche, face, droite, dos. Résultat, un objet complet visible à 360°.

Si c'est sur ce dernier mode que vous voulez partir, sachez que le développeur conseille de passer par la fonction d'export de Frame d' un éditeur de sprites plutôt que de tout vous taper à la main.

L'interface de Pix 2D to 3D, avec le sélecteur de mode et les réglages de profondeur

L'algorithme calcule l'épaisseur des pixels en fonction de leur distance au bord, et les flancs sont arrondis pour une transition douce. L'outil modifie également les bords pour un effet plus naturel, en supprimant progressivement des voxels, ce qui évite l'aspect rigide et artificiel.

Du coup, pas de GPU qui chauffe, rien à installer à part l'app. Après cet outil est un convertisseur géométrique, pas un devin, hein donc à vous de bien gérer l'alignement du dessin dans les cases au départ. Sur Windows, la dernière pre-release est disponible par contre, pour macOS, il faut utiliser la version précédente et sous Linux, ça se compile facilement avec Go, Node, GTK3 et WebKit2GTK.

En tout cas, pour des formes simples et plutôt rondes, j'ai trouvé le rendu assez bluffant. Maintenant, si vous préférez rester dans votre éditeur, Pixelorama dispose de sa propre extension de voxélisation, mais sans le mode à 4 vues. Et pour vous rendre compte de ce que donnent des sprites voxélisés à grande échelle, je vous invite à jeter un œil à ce mod voxel de Duke Nukem 3D qui vaut vraiment le coup d'œil.

C'est par ici que ça se passe !

  •  
❌