Liri
Linglong Bird · Assistant IA personnel · Local d’abord · Sécurité intégrée
$ git clone https://github.com/cocosoft/Liri.git Une route encore en construction
Le 25 mai 2026, il n’y avait qu’un v0.1 et 100 commits. Cinq mois plus tard, plus de 4 000 fichiers et 27 canaux — et la facture qui va avec : un monolithe de 7 000 lignes, 105 fichiers hors limite que personne n’avait enregistrés, et un « nettoyage de code mort » qui a supprimé tout le sous-système de bac à sable.
Nous avons restauré, puis transformé la suppression, les frontières et les vocabulaires d’états en garde-fous CI, un par un. La route n’est pas terminée.
Qu’est-ce que Liri
Liri est un assistant IA personnel construit sur une architecture TypeScript + Rust.
Bien plus qu’un chatbot — il peut comprendre l’intention, exécuter des commandes, gérer des tâches, appeler des outils et même collaborer avec d’autres agents IA. Un seul moteur alimente toutes les entrées : terminal, bureau, messagerie et MCP.
71 sous-systèmes modulaires, 4,109 fichiers TypeScript et 429 composants de bureau — le tout découpable selon la variante de build.
Capacités
Huit capacités différenciantes, vérifiables une par une dans le code source GitHub
Moteur d’agent profond
Une boucle TAOR maison avec stratégie, mémoire et points de contrôle
- Cycle de décision TAOR (Think-Act-Observe-Reason)
- 4 stratégies d’agent : général / codage / exploration / planification
- Reprise sur point de contrôle pour les tâches longues interrompues
- Fenêtres de contexte stratifiées avec compaction automatique à trois niveaux
- 8 motifs de terminaison et une coupure par tour pour éviter les boucles à vide
5 couches de défense en profondeur
Analyse AST Rust à la compilation → cinq lignes de défense → isolation multi-backend
- Analyse Bash à la compilation via AST Rust FFI
- 37 règles de commandes dangereuses + 14 règles d’injection
- Moteur de règles de politique Guardrail
- Classificateur de risque AutoMode
- Couverture du bac à sable : Landlock / macOS / Windows / Docker / SSH / PTY
69 outils intégrés
23 catégories couvrant fichiers, commandes, réseau, médias, code et collaboration
- Exécution Bash au niveau AST Rust
- Intelligence de code via LSP
- Extraction et recherche web
- Traitement de notebooks, images, audio et vidéo
- Prise en charge complète du client et du serveur MCP
27 canaux de messagerie
27 adaptateurs de canaux, avec WeChat / WeCom / DingTalk / Feishu / QQ pris en charge
- Telegram / Discord / Slack / WhatsApp
- WeChat / WeCom / DingTalk / Feishu / QQ / Yuanbao
- Email / SMS / Webhook / IRC / Matrix
- Catalogue de canaux unifié avec routage par passerelle
- Découpage des canaux à la compilation pour des builds plus légers
Observabilité de niveau entreprise
Intégration OpenTelemetry, alertes et contrôles de santé
- Traces + métriques alignées sur les conventions sémantiques OTel GenAI
- Journalisation structurée à plusieurs niveaux
- Règles d’alerte et gestion des incidents
- Contrôles de santé, sauvegardes et archivage des données
- Événements de session rejouables et auditables
Architecture enfichable
SDK de plugins, système de compétences et quatre protocoles — découpables selon la variante de build
- 5 variantes de build : core / personal / coding / enterprise / headless
- Place de marché de plugins avec chargement à chaud et vérification de signature
- Trois sources de compétences isolées (intégrées / utilisateur / tierces)
- Protocoles MCP / ACP / A2A / LSP
- Démarrage en quatre étapes (T0–T3) et chargement à la demande
Local d’abord
Modèles locaux Ollama / llama.cpp, données sur votre machine par défaut
- Inférence locale, exécution entièrement hors ligne
- Un seul fichier de données SQLite qui ne quitte jamais l’appareil
- Sessions stockées en events.jsonl en ajout seul
- Les fournisseurs cloud comme amélioration optionnelle
- Répertoires de bac à sable isolés par espace de travail
Routage intelligent
19 classes de tâches × 4 niveaux × 5 étapes de décision, plus chaînes de repli entre fournisseurs
- 19 types de tâches détectés automatiquement
- 4 niveaux : simple / medium / complex / reasoning
- 5 étapes de décision : interrupteur → voie rapide → ancrage de session → jugement LLM → niveau
- FallbackChain entre fournisseurs avec politiques de réessai
- Tarifs et fenêtres de contexte lus depuis la base
Structuré comme un système d’exploitation
Un noyau mince, des frontières entre sous-systèmes et des garde-fous de dépendance ; local d’abord par défaut, pas en option.
Noyau
@openliri/kernel est un paquet autonome qui n’expose qu’une interface mince, protégé par les garde-fous K01–K08
Sous-systèmes
Outils, canaux, mémoire, routage, bac à sable et tâches ont chacun leurs points d’entrée et leurs frontières
Garde-fous
Une direction de dépendance en 6 couches et plus de 20 vérifications d’architecture — toute violation bloque la CI
Local d’abord
Les données restent sur votre machine par défaut ; les modèles peuvent tourner entièrement en local
Cinq couches de défense en profondeur
De l’analyse AST à la compilation au bac à sable à l’exécution : chaque nombre de règles, seuil et politique de repli se trouve dans le code source
🦀 Analyse AST Rust à la compilation
Compilation Rust FFI effectue une analyse de sécurité au niveau AST avant l’exécution, selon 37 règles de commandes dangereuses
Analyse AST Rust à la compilation
CompilationRust FFI effectue une analyse de sécurité au niveau AST avant l’exécution, selon 37 règles de commandes dangereuses
- La couche Rust FFI analyse l’AST Bash
- Analyse AST Bash avec 37 règles de commandes dangereuses
- Détection d’injection de variables et blocage des traversées de chemin
- Détection de falsification d’arguments et validation des commandes autorisées
🔍 Analyse sémantique TypeScript
Exécution Les commandes composites sont jugées segment par segment à l’exécution, le motif de refus étant rattaché à l’instruction exacte
Analyse sémantique TypeScript
ExécutionLes commandes composites sont jugées segment par segment à l’exécution, le motif de refus étant rattaché à l’instruction exacte
- Les commandes composites en lecture seule passent segment par segment au lieu d’être refusées en bloc
- 14 motifs d’injection détectés, dont les caractères de largeur nulle et l’empoisonnement de variables d’environnement
- 10 règles spécifiques au shell (bash / PowerShell / cmd)
- Les messages de refus pointent la cause réelle et l’instruction fautive
⚙️ Moteur de règles Guardrail
Politique Un système de règles de politique configurable, avec autorisation fine par outil, canal et groupe d’utilisateurs
Moteur de règles Guardrail
PolitiqueUn système de règles de politique configurable, avec autorisation fine par outil, canal et groupe d’utilisateurs
- deny-by-default avec listes d’autorisation
- Granularité des permissions : outil → règle → empreinte
- Les changements de règles prennent effet immédiatement, sans redémarrage
- Les refus indiquent la source de la règle et l’instruction correspondante
🤖 Classificateur AutoMode
Adaptatif Évalue le risque à partir du contexte de la tâche et des outils, puis décide automatiquement d’autoriser, de demander ou de refuser
Classificateur AutoMode
AdaptatifÉvalue le risque à partir du contexte de la tâche et des outils, puis décide automatiquement d’autoriser, de demander ou de refuser
- Notation du risque fondée sur la sémantique des commandes et le contexte des outils
- Les commandes à faible risque sont autorisées automatiquement selon la politique
- Les commandes à haut risque passent en approbation et arrivent dans l’Inbox
- Les commandes non fiables demandent une confirmation au lieu d’être refusées
🔒 Exécution en bac à sable
Isolation 6 backends d’isolation — Landlock / macOS / Windows / Docker / SSH / PTY — pour que les commandes hors cadre ne touchent jamais l’hôte
Exécution en bac à sable
Isolation6 backends d’isolation — Landlock / macOS / Windows / Docker / SSH / PTY — pour que les commandes hors cadre ne touchent jamais l’hôte
- Linux Landlock : restrictions du système de fichiers au niveau du noyau
- Bac à sable macOS / Windows Low IL + objet Job en repli
- Docker : isolation complète avec politiques de ressources et de réseau
- Exécution distante SSH et chemins PTY contrôlés
- Dégradation honnête avec un message clair quand aucun backend n’est disponible
La sécurité en chiffres
Analyse AST Rust à la compilation · Analyse sémantique TypeScript · Moteur de règles Guardrail · Classificateur AutoMode · Exécution en bac à sable
Routage intelligent
Choisit un niveau de modèle selon le type et la difficulté de la tâche, puis bascule selon l’ordre configuré quand le fournisseur principal est indisponible
Détecte automatiquement 19 types de tâches (8 courants ci-dessous)
Pipeline de décision en 5 étapes
Chaîne de repli entre fournisseurs
Modèle principal indisponible → repli automatique → dégradation sans interruption
Interaction vocale
Plus que du texte — dites ce dont vous avez besoin, Liri comprend, agit et répond
Entrée vocale
faster-whisper ou SenseVoice en local, ou OpenAI Whisper dans le cloud
Sortie vocale
Piper en local ou Edge / OpenAI dans le cloud, ou votre propre commande
Natif outil
La parole est elle-même un outil que le modèle peut appeler au besoin
Toutes les surfaces
Le bureau et le terminal partagent le même service vocal
Mains libres · Multitâche · Accessibilité · Raccourcis vocaux · Dites-le n’importe où, et c’est fait
Le second cerveau
Base de connaissances → Mémoire → Événements de session : trois couches de contexte interrogeables, toutes stockées sur votre machine
Base de connaissances
Markdown sur disque et index sémantique, avec sources citées dans chaque résultat
Système de mémoire
Mémoire à plusieurs niveaux et tables vectorielles SQLite, rappelées avec pondération de pertinence
Journal d’événements de session
Tout ce qui entre dans une requête de modèle devient un événement de session rejouable
Organiser et gouverner
Curer les connaissances au repos, compresser le contexte quand il déborde — deux pipelines d’arrière-plan bien réels
Pipeline DreamEngine en cinq étapes
Gouvernance stratifiée du contexte
Lorsqu’une longue conversation déborde, les tours les plus anciens sont supprimés d’abord, ramenant la mémoire de construction de O(total) à O(fenêtre). Une note « le texte brut reste récupérable » survit à la coupe, les détails peuvent être rappelés par pages, et des seuils de tokens déclenchent la compression automatique.
Boucle d’auto-amélioration PDCA
Pour les tâches longues, Liri exécute seul la boucle Plan-Do-Check-Act : décomposer la tâche → exécuter les étapes → examiner les résultats → réviser le plan, jusqu’à la fin ou une condition d’arrêt.
Client de bureau
Construit avec Tauri 2.11 + React 19 · 429 composants TSX · 32 pages fonctionnelles · une expérience de bureau complète
Illustration de la structure de l’interface — pas une capture réelle
27 canaux de messagerie
Chacun des 27 canaux dispose d’un adaptateur dédié. Définissez ses variables d’environnement pour l’activer, ou retirez-le à la compilation.
27 canaux au total · un catalogue unifié · activation par canal · découpage à la compilation
Écosystème
Marché de plugins + marché MCP + trois sources de compétences + marché de modèles = un écosystème Liri composable
Marché MCP
5 adaptateurs de sources, une seule recherche
Marché de plugins
Registres local, npm et distant
Trois sources de compétences
Intégrées, utilisateur et tierces — physiquement isolées
Modèles et protocoles
Modèles d’agents et de documents, prêts à brancher
Plus qu’une liste de fonctionnalités
Trois choses faciles à négliger et utilisées tous les jours.
Personnage Buddy
Pas un outil — un compagnon. Son apparence est générée de façon déterministe à partir d’une graine, si bien qu’un même Buddy a toujours la même apparence ; son état de croissance est persisté et s’accumule d’une session à l’autre.
Coûts transparents
Tarifs lus dans la base, attribution au nom réel du modèle renvoyé par le fournisseur, chaque appel écrit dans cost_records ; le budget alerte, puis compresse, puis bloque.
Quatre types d’utilisateurs
Les développeurs lancent des commandes et modifient du code ; les responsables sécurité obtiennent un blocage au niveau AST et une piste d’audit ; les équipes d’exploitation le font tourner comme un service ; tous les autres y accèdent depuis une application de messagerie.
Limites actuelles
Ce qui n’est pas terminé pendant l’itération rapide — écrit noir sur blanc pour que vous ne le découvriez pas à vos dépens.
La sécurité attend un audit externe
Audit externe en attente5 couches de défense et 6 backends de bac à sable sont implémentés, avec 51 fichiers liés au bac à sable que vous pouvez examiner un par un — mais aucun audit de sécurité tiers n’a encore été réalisé.
Les interactions du bureau sont encore en polissage
En polissage429 composants TSX et 32 pages sont en place ; les raccourcis, les animations et les cas limites sont encore en cours de réglage.
Le catalogue de la place de marché reste limité
En coursLe marché de plugins, le marché MCP et les sources de compétences fonctionnent de bout en bout, mais le catalogue installable se remplit encore.
Commencer
Trois étapes : installer les dépendances → configurer votre clé API → lancer dev
Installer les dépendances
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
Configurer votre clé API
$ cp .env.example .env
$ # éditez .env et ajoutez votre clé API Lancer Liri
$
bun run dev
Open source · Communauté
Liri est un projet open source, et chaque contribution est bienvenue