Liri
Linglong Bird · Assistente personale con IA · Prima in locale · Sicurezza integrata
$ git clone https://github.com/cocosoft/Liri.git 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.
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
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
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
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
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à 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
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
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 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
Analisi AST Rust in fase di compilazione
CompilazioneRust 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
Analisi semantica TypeScript
RuntimeI 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
Motore di regole Guardrail
PolicySistema 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
Classificatore AutoMode
AdattivoValuta 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
Esecuzione in sandbox
Isolamento6 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
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)
Pipeline decisionale a 5 livelli
Catena di fallback tra fornitori
Modello principale non disponibile → fallback automatico → degrado senza interruzioni
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
Uscita vocale
Piper in locale oppure Edge / OpenAI nel cloud, oppure un comando personalizzato
Uso come strumento
La voce è essa stessa uno strumento che il modello può chiamare quando serve
Su ogni superficie
Desktop e terminale condividono lo stesso servizio vocale
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
Base di conoscenza
Markdown su disco più indicizzazione semantica, con le fonti citate in ogni risultato
Sistema di memoria
Memoria a livelli più tabelle vettoriali SQLite, richiamate con pesatura per rilevanza
Log degli eventi di sessione
Tutto ciò che entra in una richiesta al modello diventa un evento di sessione riproducibile
Organizzare e governare
Curare la conoscenza quando si è inattivi, comprimere il contesto quando trabocca — due pipeline di background reali
Pipeline DreamEngine a cinque stadi
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.
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.
Client desktop
Costruito con Tauri 2.11 + React 19 · 429 componenti TSX · 32 pagine funzionali · un'esperienza desktop completa
Schema della struttura dell'interfaccia, non uno screenshot reale
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.
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
Marketplace dei plugin
Registri locali, npm e remoti
Tre origini delle competenze
Integrate, utente e di terze parti — isolate fisicamente
Template e protocolli
Template per agenti e documenti, pronti all'uso
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.
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.
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.
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 audit5 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 rifinitura429 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 corsoIl 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
Installare le dipendenze
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
Configurare la chiave API
$ cp .env.example .env
$ # modificare .env e inserire la chiave API Avviare Liri
$
bun run dev
Open source · Comunità
Liri è un progetto open source e ogni contributo è benvenuto