À propos du projet

Longe est un harnais autonome et auto-améliorant pour tout LLM, écrit en Rust. Il s'appuie sur les idées présentées lors des talks du YC Harness Club (2026). Il traite les poids du modèle comme le moteur et l'exécution comme la voiture, transformant un modèle à poids fixes en un agent persistant. Architecture : Longe exécute un démon en arrière-plan (`longed`) qui gère une arborescence de sessions. Chaque session possède un historique, un état REPL Lua 5.4, un bac à sable et un budget configurable. La hiérarchie de mémoire comporte trois niveaux : le L1 correspond à la fenêtre de contexte du modèle (avec compactage automatique à 70 %) ; le L2 est le REPL Lua persistant où les variables survivent d'un tour à l'autre ; le L3 est un dépôt de fichiers versionné git contenant compétences, mémoire, invites, spécifications de sous-agents et trajectoires. Le modèle ne voit qu'un seul outil : `exec(code)`, qui exécute du Lua. Des liaisons natives dans le VM Lua exposent l'E/S de fichiers (confinée au workspace), les commandes shell (sandboxées via Seatbelt sur macOS, Landlock sur Linux, jetons restreints sur Windows), la manipulation de mémoire, les opérations CRUD sur les compétences et sous-agents, la modification des invites, les requêtes LLM récursives sans état, le changement de modèle entre fournisseurs, le compactage du contexte, la vérification externe et un appel `done()` refusé tant qu'un budget minimum et un vérificateur n'ont pas passé. Fournisseurs: Anthropic, API compatibles OpenAI (y compris DeepSeek, OpenRouter) et Ollama pour les modèles locaux. Le modèle peut changer de fournisseur en cours de session sans perdre son état, ce qui permet à un modèle local peu coûteux de traiter les tâches courantes tandis qu'une API de pointe s'occupe des étapes complexes. Sous-agents: Des sessions persistantes qui, une fois terminées, restent inactives en RAM, sont déchargées sur disque et se réveillent sur réception de messages. Les parents, enfants et frères communiquent via un bus de messages partageant directement le contexte. Bac à sable : trois modes (lecture seule, écriture dans le workspace, accès complet). Des règles fixes masquent toujours le magasin, ~/.ssh, les identifiants, .env et le binaire lui-même. Les secrets sont épurés de l'environnement ; le réseau est refusé sauf configuration contraire. Budget: Un plancher avant de devenir un plafond. `done()` est refusé avant `min_seconds` et `min_turns`; sortie propre forcée à `max_turns`/`max_tokens`. Réflexion: Après chaque achèvement accepté (et selon un cron), le runtime condense la trajectoire complète et demande à un modèle de proposer des diff sur les compétences, la mémoire, les spécifications des sous-agents, l'invite et la configuration. Les modifications sont appliquées sur une branche git, une commande de fitness est rejouée, et la branche n'est fusionnée que si le score ne baisse pas, ou alors elle est conservée pour examen humain dans le cockpit. Cockpit: Une interface TUI (`longe cockpit`) affiche l'arborescence de sessions, le budget, l'état du vérificateur, la queue de trajectoire et les diffs de réflexion en attente. Une surface JSON HTTP sur le port 7878 permet un accès distant, par exemple via Tailscale. Construction : `cargo build --release` (Rust 1.85+, aucun code unsafe). Les tests incluent 91 cas unitaires et bout-en-bout pilotés par un serveur modèle factice scripté. License: MIT. Dépôt: edouard-claude/longe.