Itération rapide · Les API et la documentation peuvent changer
Liri Logo

Liri

Linglong Bird · Assistant IA personnel · Local d’abord · Sécurité intégrée

v0.5.22 · sous licence MIT · publié le 2026-10-28 Itération rapide · Les API et la documentation peuvent changer
4,109 fichiers TS 69 outils intégrés 5 couches de sécurité 27 canaux de messagerie 18 espèces de Buddy
$ git clone https://github.com/cocosoft/Liri.git
BUILD LOG

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.

156 jours 116 versions 20+ vérifications d’architecture
Lire toute l’histoire

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

🧠
Cœur

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
🛡️
Sécurité

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
🛠️
Étendue

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
🌐
Multi-plateforme

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é

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
🔌
Flexible

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
🏠
Confidentialité

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

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

  • 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

  • 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

  • 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

  • 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

  • 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

37
Règles de commandes dangereuses
Correspondance au niveau AST pour bash / PowerShell / cmd
14
Règles de détection d’injection
Couvre les caractères de largeur nulle, l’empoisonnement de variables d’environnement, etc.
6
Backends de bac à sable
Landlock / macOS / Windows / Docker / SSH / PTY
51
Fichiers d’implémentation du bac à sable
Implémentations TypeScript sous app/src/sandbox

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)

💻
Codage
Génération, débogage et revue de code
✍️
Rédaction
Documentation, textes, traduction
📊
Analyse
Analyse de données, raisonnement, planification
🔧
Outils
Fichiers, recherche, opérations système
🌐
Traduction
Traduction multilingue et localisation
🔍
Recherche
Recherche web et récupération d’informations
🎨
Créatif
Brainstorming, conception, idéation
💬
Conversation
Échanges du quotidien

Pipeline de décision en 5 étapes

1 L1 : interrupteur de routage Désactivé, les requêtes vont directement au modèle par défaut, sans vérification supplémentaire
2 L2 : voie rapide Les tâches simples ou les règles de préfixe vont directement au modèle de niveau bas
3 L3 : ancrage de session Conserve un modèle par conversation pour éviter les changements incessants
4 L4 : classificateur LLM Un petit modèle juge le type et la difficulté de la tâche, puis attribue un niveau
5 L5 : résolution du niveau Associe les niveaux simple/medium/complex/reasoning à des modèles concrets

Chaîne de repli entre fournisseurs

Modèle principal indisponible → repli automatique → dégradation sans interruption

Principal Fournisseur principal · modèle du niveau courant
Repli 1 Fournisseur de secours du même niveau
Repli 2 Fournisseur de repli d’un autre niveau
Repli 3 Tout autre fournisseur configuré
Dernier recours Ollama / llama.cpp local

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

faster-whisper local
SenseVoice
OpenAI Whisper
Reconnaissance en flux
🔊

Sortie vocale

Piper en local ou Edge / OpenAI dans le cloud, ou votre propre commande

Piper local
Edge TTS
OpenAI TTS
Commande personnalisée
⚡

Natif outil

La parole est elle-même un outil que le modèle peut appeler au besoin

outil tts
outil audio_play
Entrée vocale
Lecture des réponses
📱

Toutes les surfaces

Le bureau et le terminal partagent le même service vocal

Bureau Tauri
Terminal CLI
HTTP API

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

Couche 1 : Base de connaissances

Base de connaissances

Markdown sur disque et index sémantique, avec sources citées dans chaque résultat

Markdown sur disque Index sémantique JSONL Recherche par mots-clés Recherche vectorielle Fusion RRF
Couche 2 : Mémoire

Système de mémoire

Mémoire à plusieurs niveaux et tables vectorielles SQLite, rappelées avec pondération de pertinence

Mémoire à plusieurs niveaux memory_vectors Pondération de pertinence Nettoyage de la mémoire Injection de contexte
Couche 3 : Source de vérité

Journal d’événements de session

Tout ce qui entre dans une requête de modèle devient un événement de session rejouable

events.jsonl en ajout seul Persistance avant écriture Rejeu de session Piste auditable Enregistrement à la compilation

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

01 Gather
Collecter
Rassembler les sessions et documents à curer
02 Analyze
Analyser
Extraire les thèmes et les conclusions réutilisables
03 Generate
Générer
Produire des notes destinées aux couches supérieures
04 Write
Écrire
Écrire dans la base de connaissances et la mémoire
05 Index
Indexer
Reconstruire les index vectoriels et par mots-clés
🧠

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.

Fenêtrage stratifié
Tronquer d’abord les anciens tours quand le contexte déborde
Récupération à la demande
Rappeler le texte brut par pages
Compression à trois niveaux
Niveaux 1/2 en ligne + niveau 3 en arrière-plan
🔄

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.

Plan
Décomposition automatique
Do
Exécution étape par étape
Check
Revue automatique
Act
Correction automatique

Client de bureau

Construit avec Tauri 2.11 + React 19 · 429 composants TSX · 32 pages fonctionnelles · une expérience de bureau complète

Liri Desktop · Tauri 2.11
💬
Panneau de discussion
Liri · Linglong Bird
Bonjour ! Je suis Liri, comment puis-je vous aider ?
Aidez-moi à analyser les données de ce projet
Bien sûr, analyse en cours...
Saisissez un message et appuyez sur Entrée pour envoyer...

Illustration de la structure de l’interface — pas une capture réelle

💬
Panneau de discussion
Conversations à plusieurs tours
🤖
Gestion des modèles
Changer de modèle
📚
Base de connaissances
Récupération de fichiers
🧠
Mémoire
Revoir l’historique
⏰
Tâches planifiées
Planification Cron
🔌
Intégration MCP
Découvrir et installer des serveurs
💰
Centre de coûts
Usage et dépenses enregistrés
🎭
Buddy
Apparence et données de croissance

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.

Messaging
Telegram
Discord
Slack
WhatsApp
Signal
Matrix
IRC
Line
Zalo
China platforms
WeChat
WeCom
DingTalk
Feishu
QQ
Yuanbao
Collaboration & social
Microsoft Teams
Google Chat
Mattermost
Facebook Messenger
Twitter/X
Other channels
Email
SMS
Webhook
Nostr
Claude
iMessage
Accès mobile

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

GitHub
npm
Registre officiel
Smithery
Services fournis
🧩

Marché de plugins

Registres local, npm et distant

SDK de plugins + adaptateurs
Cycle de vie et rechargement à chaud
Vérification de signature
Points de configuration + CLI
5 variantes de build
⚡

Trois sources de compétences

Intégrées, utilisateur et tierces — physiquement isolées

11 compétences intégrées
Compétences définies par l’utilisateur
Source tierce ClawHub
Orchestration conditionnelle
Composition et correspondance des compétences
📚

Modèles et protocoles

Modèles d’agents et de documents, prêts à brancher

Marché de modèles d’agents
Marché de modèles de documents
MCP / ACP / A2A / LSP
Plugins et compétences composables
Réutilisation paramétrée des modèles

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.

18 espèces 8 chapeaux 6 yeux 5 niveaux de rareté
🧾

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.

tarification model_registry usage réel registre par appel budget quotidien
🎯

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.

Développeurs Responsables sécurité Équipes d’exploitation Tout le monde

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 attente

5 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 polissage

429 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 cours

Le 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

1

Installer les dépendances

$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
2

Configurer votre clé API

$ cp .env.example .env
$ # éditez .env et ajoutez votre clé API
3

Lancer Liri

$ bun run dev

Open source · Communauté

Liri est un projet open source, et chaque contribution est bienvenue

GitHub

Suivez le projet sur GitHub, ouvrez des Issues ou envoyez des PR

github.com/cocosoft/liri

Rejoindre la communauté

Participez aux discussions, ouvrez des Issues ou envoyez des PR