Iterazione rapida · API e documentazione possono cambiare
Liri Logo

Liri

Linglong Bird · Assistente personale con IA · Prima in locale · Sicurezza integrata

v0.5.22 · Open source MIT · Rilasciato il 2026-10-28 Iterazione rapida · API e documentazione possono cambiare
4,109 file TS 69 strumenti integrati 5 livelli di sicurezza 27 canali di messaggistica 18 specie di Buddy
$ git clone https://github.com/cocosoft/Liri.git
BUILD LOG

Una strada non ancora conclusa

Il 25 maggio 2026 era solo la v0.1 con 100 commit. Cinque mesi dopo contiene oltre 4.000 file e 27 canali — e il conto che li accompagna: un monolite da 7.000 righe, 105 file fuori limite che nessuno aveva registrato e una «pulizia del codice morto» che ha eliminato l'intero sottosistema sandbox.

Abbiamo ripristinato, poi abbiamo trasformato cancellazione, confini e vocabolari di stato in cancelli della CI, uno per uno. La strada non è finita.

156 giorni 116 segmenti di versione 20+ controlli architetturali
Leggere la storia completa

Che cos'è Liri

Liri è un assistente personale con IA basato su un'architettura TypeScript + Rust.

Non è un semplice chatbot: sa comprendere l'intento, eseguire comandi, gestire attività, chiamare strumenti e persino collaborare con altri agenti IA. Un unico motore alimenta ogni punto di accesso: terminale, desktop, IM e MCP.

71 sottosistemi modulari, 4,109 file TypeScript e 429 componenti desktop — ritagliabili in base alla variante di build.

Capacità

Otto capacità distintive, ognuna verificabile nel codice sorgente su GitHub

🧠
Nucleo

Motore di agente profondo

Un ciclo TAOR interno con strategia, memoria e checkpoint

  • Ciclo decisionale TAOR (Think-Act-Observe-Reason)
  • 4 strategie di agente: generale / codice / esplorazione / pianificazione
  • Ripresa da checkpoint: i compiti lunghi restano recuperabili dopo un'interruzione
  • Finestre di contesto a livelli con compattazione automatica a tre livelli
  • 8 motivi di terminazione più interruzione per singolo giro, per evitare cicli a vuoto
🛡️
Sicurezza

5 livelli di difesa in profondità

Analisi AST Rust in fase di compilazione → cinque linee di difesa → isolamento sandbox multi-backend

  • Analisi Bash in fase di compilazione tramite AST Rust via FFI
  • 37 regole sui comandi pericolosi + 14 regole di iniezione
  • Motore di regole di policy Guardrail
  • Classificatore di rischio AutoMode
  • Copertura sandbox su Landlock / macOS / Windows / Docker / SSH / PTY
🛠️
Ampiezza

69 strumenti integrati

23 categorie tra file, comandi, rete, media, codice e collaborazione

  • Esecuzione Bash a livello di AST Rust
  • Intelligenza del codice basata su LSP
  • Scraping e ricerca web
  • Elaborazione di notebook, immagini, audio e video
  • Supporto completo a client e server MCP
🌐
Multipiattaforma

27 canali di messaggistica

27 adattatori di canale, con WeChat / WeCom / DingTalk / Feishu / QQ tutti supportati

  • Telegram / Discord / Slack / WhatsApp
  • WeChat / WeCom / DingTalk / Feishu / QQ / Yuanbao
  • Email / SMS / Webhook / IRC / Matrix
  • Un catalogo unificato dei canali con instradamento tramite gateway
  • Ritaglio dei canali in fase di build per artefatti più piccoli
📊
Osservabilità

Osservabilità di livello enterprise

Integrazione OpenTelemetry, sistema di avvisi e controlli di integrità

  • Tracing + metriche allineati alle convenzioni semantiche OTel GenAI
  • Log strutturati a livelli
  • Regole di allerta e gestione degli incidenti
  • Controlli di integrità, backup e archiviazione dei dati
  • Eventi di sessione riproducibili e verificabili
🔌
Flessibile

Architettura a plugin

SDK per plugin, sistema di competenze e quattro protocolli — ritagliabili per variante di build

  • 5 varianti di build: core / personal / coding / enterprise / headless
  • Marketplace dei plugin con caricamento a caldo e verifica delle firme
  • Tre origini di competenze isolate (integrate / utente / terze parti)
  • Protocolli MCP / ACP / A2A / LSP
  • Avvio in quattro fasi (T0–T3) con caricamento su richiesta
🏠
Privacy

Prima in locale

Modelli locali Ollama / llama.cpp, con i dati sulla macchina per impostazione predefinita

  • Inferenza locale che funziona completamente offline
  • Un unico file di dati SQLite che non lascia il dispositivo
  • Sessioni salvate come events.jsonl in sola aggiunta
  • Fornitori cloud come miglioramento opzionale
  • Cartelle sandbox isolate per workspace
🚦
Instradamento

Instradamento intelligente

19 classi di compito × 4 livelli × 5 stadi decisionali, più catene di fallback tra fornitori

  • 19 tipi di compito rilevati automaticamente
  • 4 livelli: simple / medium / complex / reasoning
  • 5 stadi decisionali: interruttore → percorso rapido → persistenza di sessione → giudizio LLM → livello
  • FallbackChain tra fornitori con policy di retry
  • Prezzi e finestre di contesto letti dal database

A livelli, come un sistema operativo

Nucleo sottile, confini tra sottosistemi e cancelli di dipendenza; la modalità prima in locale è il default, non un interruttore.

Nucleo

@openliri/kernel è un pacchetto autonomo che espone solo un'interfaccia sottile, protetto dai cancelli K01–K08

Sottosistemi

Strumenti, canali, memoria, instradamento, sandbox e attività hanno ciascuno ingressi e confini propri

Cancelli

Una direzione di dipendenza su 6 livelli e oltre 20 controlli architetturali: una violazione blocca la CI

Prima in locale

I dati restano sulla macchina per impostazione predefinita; i modelli possono girare interamente in locale

Cinque livelli di difesa in profondità

Dall'analisi AST in fase di compilazione alla sandbox a runtime: numero di regole, soglie e politiche di degrado sono nel codice

🦀

Analisi AST Rust in fase di compilazione

Compilazione

Rust FFI esegue un'analisi di sicurezza a livello di AST prima dell'esecuzione, verificando 37 regole sui comandi pericolosi

  • Il livello Rust FFI analizza l'AST Bash
  • Analisi dell'AST Bash con 37 regole sui comandi pericolosi
  • Rilevamento di iniezione di variabili e blocco del path traversal
  • Rilevamento di manomissione degli argomenti con validazione dei comandi in whitelist
🔍

Analisi semantica TypeScript

Runtime

I comandi composti vengono valutati a runtime segmento per segmento, con motivi di rifiuto legati all'istruzione esatta

  • I comandi composti di sola lettura passano segmento per segmento invece di essere rifiutati in blocco
  • 14 pattern di iniezione rilevati, inclusi caratteri a larghezza zero e avvelenamento delle variabili d'ambiente
  • 10 regole specifiche per la shell (bash / PowerShell / cmd)
  • I messaggi di rifiuto indicano la causa reale e l'istruzione coinvolta
⚙️

Motore di regole Guardrail

Policy

Sistema di regole di policy configurabile con autorizzazione granulare per strumento, canale e gruppo di utenti

  • deny-by-default con elenchi consentiti
  • Granularità dei permessi: strumento → regola → impronta
  • Le modifiche alle regole hanno effetto immediato, senza riavvio
  • In caso di rifiuto vengono restituiti origine della regola e istruzione corrispondente
🤖

Classificatore AutoMode

Adattivo

Valuta il rischio da compito e contesto dello strumento, poi decide automaticamente se consentire, chiedere o negare

  • Classificazione del rischio basata sulla semantica del comando e sul contesto dello strumento
  • I comandi a basso rischio vengono consentiti automaticamente secondo la policy
  • I comandi ad alto rischio passano all'approvazione e finiscono nella Inbox
  • I comandi non attendibili finiscono per impostazione predefinita in una richiesta, non in un rifiuto
🔒

Esecuzione in sandbox

Isolamento

6 backend di isolamento — Landlock / macOS / Windows / Docker / SSH / PTY — così i comandi oltre i limiti non toccano mai l'host

  • Linux Landlock: restrizioni del filesystem a livello di kernel
  • Sandbox macOS / Windows Low IL + oggetti Job come fallback
  • Docker: isolamento completo con policy di risorse e rete
  • Esecuzione remota SSH e percorsi PTY controllati
  • Degrado onesto con un avviso chiaro quando nessun backend è disponibile

Sicurezza in numeri

37
Regole sui comandi pericolosi
Corrispondenza a livello di AST su bash / PowerShell / cmd
14
Regole di rilevamento delle iniezioni
Copre caratteri a larghezza zero, avvelenamento delle variabili d'ambiente e altro
6
Backend sandbox
Landlock / macOS / Windows / Docker / SSH / PTY
51
File di implementazione della sandbox
Implementazioni TypeScript in app/src/sandbox

Analisi AST Rust in fase di compilazione · Analisi semantica TypeScript · Motore di regole Guardrail · Classificatore AutoMode · Esecuzione in sandbox

Instradamento intelligente

Sceglie il livello di modello in base al tipo di compito e alla difficoltà, poi ripiega nell'ordine configurato quando il fornitore principale non è disponibile

Rilevamento automatico di 19 tipi di compito (8 comuni elencati sotto)

💻
Codice
Generazione, debug e revisione del codice
✍️
Scrittura
Documentazione, testi, traduzione
📊
Analisi
Analisi dati, ragionamento, pianificazione
🔧
Strumenti
File, ricerca, operazioni di sistema
🌐
Traduzione
Traduzione multilingue e localizzazione
🔍
Ricerca
Ricerca web e recupero di informazioni
🎨
Creatività
Brainstorming, design, ideazione
💬
Conversazione
Conversazione quotidiana

Pipeline decisionale a 5 livelli

1 L1: Interruttore di instradamento Se disattivato, le richieste vanno direttamente al modello predefinito senza controlli aggiuntivi
2 L2: Percorso rapido I compiti semplici o le regole di prefisso vanno direttamente al modello di livello basso
3 L3: Persistenza di sessione Mantiene un solo modello per conversazione, per evitare cambi continui
4 L4: Classificatore LLM Un modello piccolo valuta tipo e difficoltà del compito, poi assegna un livello
5 L5: Risoluzione del livello Mappa i livelli simple/medium/complex/reasoning su modelli concreti

Catena di fallback tra fornitori

Modello principale non disponibile → fallback automatico → degrado senza interruzioni

Primario Fornitore principale · modello del livello corrente
Fallback 1 Fornitore di riserva dello stesso livello
Fallback 2 Fornitore di fallback su altro livello
Fallback 3 Qualsiasi altro fornitore configurato
Ultima risorsa Ollama / llama.cpp locale

Interazione vocale

Non solo digitare: basta dire cosa serve, e Liri capisce, agisce e risponde

🎤

Ingresso vocale

faster-whisper e SenseVoice in locale, oppure OpenAI Whisper nel cloud

faster-whisper locale
SenseVoice
OpenAI Whisper
Riconoscimento in streaming
🔊

Uscita vocale

Piper in locale oppure Edge / OpenAI nel cloud, oppure un comando personalizzato

Piper locale
Edge TTS
OpenAI TTS
Comando personalizzato
⚡

Uso come strumento

La voce è essa stessa uno strumento che il modello può chiamare quando serve

strumento tts
strumento audio_play
Ingresso vocale
Riproduzione delle risposte
📱

Su ogni superficie

Desktop e terminale condividono lo stesso servizio vocale

Desktop Tauri
Terminale CLI
API HTTP

Uso a mani libere · Scenari multi-attività · Supporto all'accessibilità · Comandi vocali rapidi · Dirlo ovunque, ed è fatto

Il secondo cervello

Base di conoscenza → Memoria → Eventi di sessione: tre livelli di contesto interrogabili, tutti salvati sulla macchina locale

Livello 1: base di conoscenza

Base di conoscenza

Markdown su disco più indicizzazione semantica, con le fonti citate in ogni risultato

Markdown su disco Indice semantico JSONL Ricerca per parole chiave Ricerca vettoriale Fusione RRF
Livello 2: memoria

Sistema di memoria

Memoria a livelli più tabelle vettoriali SQLite, richiamate con pesatura per rilevanza

Memoria a livelli memory_vectors Peso per rilevanza Pulizia della memoria Iniezione di contesto
Livello 3: fonte di verità

Log degli eventi di sessione

Tutto ciò che entra in una richiesta al modello diventa un evento di sessione riproducibile

events.jsonl in sola aggiunta Persistenza prima della scrittura Riproduzione della sessione Tracce verificabili Registrazione in fase di compilazione

Organizzare e governare

Curare la conoscenza quando si è inattivi, comprimere il contesto quando trabocca — due pipeline di background reali

Pipeline DreamEngine a cinque stadi

01 Gather
Raccolta
Raccogliere sessioni e documenti in attesa di cura
02 Analyze
Analisi
Estrarre temi e conclusioni riutilizzabili
03 Generate
Generazione
Produrre note destinate ai livelli superiori
04 Write
Scrittura
Scrivere nella base di conoscenza e nella memoria
05 Index
Indicizzazione
Ricostruire gli indici vettoriali e per parole chiave
🧠

Governo del contesto a livelli

Quando una conversazione lunga supera la finestra, i turni più vecchi vengono scartati per primi, riducendo la memoria in fase di costruzione da O(totale) a O(finestra). Un avviso «il testo originale è recuperabile» sopravvive al taglio, i dettagli possono essere riletti a pagine e le soglie di token attivano la compressione automatica.

Finestra a livelli
Tagliare prima i turni vecchi quando il contesto trabocca
Recupero su richiesta
Rileggere il testo originale a pagine
Compressione a tre livelli
Livello 1/2 in linea + livello 3 in background
🔄

Ciclo di auto-miglioramento PDCA

Per i compiti di lunga durata Liri esegue da solo il ciclo Plan-Do-Check-Act: scomporre il compito → eseguire i passi → riesaminare i risultati → correggere il piano, fino al completamento o a una condizione di arresto.

Plan
Scomposizione automatica
Do
Esecuzione passo per passo
Check
Revisione automatica
Act
Correzione automatica

Client desktop

Costruito con Tauri 2.11 + React 19 · 429 componenti TSX · 32 pagine funzionali · un'esperienza desktop completa

Liri Desktop · Tauri 2.11
💬
Pannello di chat
Liri · Linglong Bird
Ciao, sono Liri. Come posso aiutare?
Vorrei analizzare i dati di questo progetto
Certo, analisi in corso...
Scrivere un messaggio e premere Invio per inviarlo...

Schema della struttura dell'interfaccia, non uno screenshot reale

💬
Pannello di chat
Conversazioni multi-turno
🤖
Gestione dei modelli
Passaggio tra modelli
📚
Base di conoscenza
Ricerca nei file
🧠
Memoria
Rivedere la cronologia
⏰
Attività pianificate
Pianificazione con Cron
🔌
Integrazione MCP
Scoprire e installare server
💰
Centro costi
Registro di consumi e spese
🎭
Buddy
Aspetto e dati di crescita

27 canali di messaggistica

Ognuno dei 27 canali ha un adattatore dedicato. Si attiva impostando le variabili d'ambiente del canale, oppure lo si esclude in fase di build.

Messaggistica
Telegram
Discord
Slack
WhatsApp
Signal
Matrix
IRC
Line
Zalo
Piattaforme cinesi
WeChat
WeCom
DingTalk
Feishu
QQ
Yuanbao
Collaborazione e social
Microsoft Teams
Google Chat
Mattermost
Facebook Messenger
Twitter/X
Altri canali
Email
SMS
Webhook
Nostr
Claude
iMessage
Accesso mobile

27 canali in totale · un catalogo unificato · attivazione per canale · ritaglio in fase di build

Ecosistema

Marketplace dei plugin + Marketplace MCP + tre origini delle competenze + Marketplace di template = un ecosistema Liri componibile

🔌

Marketplace MCP

5 adattatori di origine, un'unica ricerca

GitHub
npm
Registro ufficiale
Smithery
Servizi inclusi
🧩

Marketplace dei plugin

Registri locali, npm e remoti

SDK per plugin + adattatori
Ciclo di vita e ricarica a caldo
Verifica delle firme
Endpoint di configurazione + CLI
5 varianti di build
⚡

Tre origini delle competenze

Integrate, utente e di terze parti — isolate fisicamente

11 competenze integrate
Competenze definite dall'utente
Origine di terze parti ClawHub
Orchestrazione condizionale
Composizione e abbinamento delle competenze
📚

Template e protocolli

Template per agenti e documenti, pronti all'uso

Marketplace di template per agenti
Marketplace di template per documenti
MCP / ACP / A2A / LSP
Plugin e competenze componibili
Riuso parametrico dei template

Più di un elenco di funzioni

Tre cose facili da trascurare ma usate ogni giorno.

🐣

Personalità Buddy

Non uno strumento, ma un compagno: l'aspetto è generato in modo deterministico da un seed, quindi lo stesso Buddy ha sempre lo stesso aspetto; lo stato di crescita è salvato e si accumula tra le sessioni.

18 specie 8 cappelli 6 occhi 5 livelli di rarità
🧾

Costi trasparenti

Prezzi letti dal database, attribuzione al nome reale del modello restituito dal fornitore, ogni chiamata scritta in cost_records; il budget avvisa, poi comprime, infine blocca.

prezzi model_registry usage reale registro per chiamata budget giornaliero
🎯

Quattro tipi di utenti

Chi sviluppa esegue comandi e modifica codice; chi si occupa di sicurezza ottiene blocco a livello di AST e tracce di audit; i team operativi lo eseguono come servizio; tutti gli altri lo raggiungono da un'app di chat.

Sviluppo Sicurezza Operazioni Utenti comuni

Limiti attuali

Cosa non è ancora a posto durante l'iterazione rapida: lo scriviamo prima, così non lo si scopre a proprie spese.

La sicurezza attende un audit esterno

In attesa di audit

5 livelli di difesa e 6 backend sandbox sono implementati, con 51 file relativi alla sandbox verificabili uno per uno, ma non è ancora stato completato un audit di sicurezza di terze parti.

Le interazioni desktop sono ancora in rifinitura

In rifinitura

429 componenti TSX e 32 pagine sono pronti; scorciatoie, animazioni e casi limite sono ancora in fase di messa a punto.

Il catalogo del marketplace è ancora limitato

In corso

Il marketplace dei plugin, il marketplace MCP e le origini delle competenze funzionano end-to-end, ma il catalogo installabile è ancora in crescita.

Avvio rapido

Tre passi: installare le dipendenze → configurare la chiave API → avviare dev

1

Installare le dipendenze

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

Configurare la chiave API

$ cp .env.example .env
$ # modificare .env e inserire la chiave API
3

Avviare Liri

$ bun run dev

Open source · Comunità

Liri è un progetto open source e ogni contributo è benvenuto

GitHub

Seguire il progetto su GitHub, aprire Issue o inviare PR

github.com/cocosoft/liri

Partecipare alla comunità

Partecipare alla discussione, aprire Issue o inviare PR