Présentation
L'outil Ledge.sh se décrit comme un carnet de notes Markdown capable d'exécuter des blocs de code, des requêtes SQL, des commandes shell et même des prompts d'IA. Il est disponible pour macOS Apple Silicon, Windows 11 (WSL), Linux (x64 et arm64), iPhone/iPad et Android (beta). L'installation locale se fait en un seul appel
curl -fsSL https://ledge.sh/server.sh | sh, tandis que la version mobile agit uniquement comme interface vers un serveur distant.Architecture et exécution à distance
Chaque note possède son propre shell persistant. Le front‑matter cwd: et env: définit le répertoire de travail et les variables d'environnement au démarrage du shell. L'exécution se déclenche avec ⌘↩ et le résultat s'affiche sous le bloc. Un second raccourci ⇧⌘↩ ouvre un tiroir terminal où l'utilisateur peut interagir en temps réel, répondre à des invites sudo ou [y/N]. Les blocs peuvent être marqués norun pour désactiver le bouton d'exécution, utile pour les exemples de documentation.
Le serveur Ledge, installé via le même script, expose les fichiers et les shells via SSH uniquement. Aucun compte central n'est requis ; l'authentification repose sur les clés SSH ou le trousseau système. Plusieurs clients (ordinateur, téléphone, seconde fenêtre) peuvent se connecter simultanément au même serveur, chaque session conservant son état même si le laptop est fermé. Le serveur peut être déployé sur un VPS, un homelab ou un service cloud, et les notes restent synchronisées grâce à ledge backup qui copie chaque heure un archive chiffrée vers un bucket compatible S3.
Sécurité et sauvegarde
La connexion SSH garantit la confidentialité du canal. Ledge enregistre la clé d'hôte du serveur et refuse toute autre, limitant les attaques de type man‑in‑the‑middle. Les profils d'environnement, stockés dans ~/.config/ledge/profiles/*.env, sont séparés des notes et ne sont jamais synchronisés, préservant les secrets. La sauvegarde chiffrée utilise le même bucket S3, mais le chiffrement reste côté client, ce qui empêche l'exposition des données même en cas de compromission du stockage.
Un exemple d'utilisation de variables de profil apparaît dans le texte :
#growth
sh curl -sG https://api.stripe.com/v1/subscriptions -u "$STRIPE_KEY:" \
-d limit=100 -d "created[gte]=$(date -v-7d +%s)" > subs.jsonLe script Python qui suit calcule le MRR à partir du JSON récupéré, illustrant la capacité de Ledge à combiner appels API, traitement de données et affichage instantané.Limites et perspectives
Le modèle repose entièrement sur SSH ; les environnements où le port 22 est bloqué nécessitent un tunnel ou une configuration alternative. La dépendance à un serveur externe implique que la disponibilité du service dépend de l'infrastructure sous‑jacente. De plus, la version mobile ne stocke aucune note, ce qui limite l'usage hors ligne. Enfin, l'absence d'interface web native restreint l'accessibilité depuis des navigateurs sans client installé.