Iteración rápida · Las API y la documentación pueden cambiar
Liri Logo

Liri

Linglong Bird · Asistente personal de IA · Local-first · Seguridad integrada

v0.5.22 · Licencia MIT · Publicado el 2026-10-28 Iteración rápida · Las API y la documentación pueden cambiar
4,109 archivos TS 69 herramientas integradas 5 capas de seguridad 27 canales de mensajería 18 especies de Buddy
$ git clone https://github.com/cocosoft/Liri.git
BUILD LOG

Un camino que aún no está terminado

El 25 de mayo de 2026 solo era una v0.1 con 100 commits. Cinco meses después tiene más de 4.000 archivos y 27 canales, y también la factura que viene con ellos: un monolito de 7.000 líneas, 105 archivos sobredimensionados que nadie había registrado y una «limpieza de código muerto» que borró todo el subsistema de sandbox.

Lo restauramos y después convertimos el borrado, los límites y los vocabularios de estados en puertas de CI, una a una. El camino no está terminado.

156 días 116 versiones 20+ comprobaciones de arquitectura
Leer la historia completa

Qué es Liri

Liri es un asistente personal de IA construido sobre una arquitectura TypeScript + Rust.

No es solo un chatbot: puede entender la intención, ejecutar comandos, gestionar tareas, llamar herramientas e incluso colaborar con otros agentes de IA. Un mismo motor alimenta cada punto de entrada: terminal, escritorio, IM y MCP.

71 subsistemas modulares, 4,109 archivos TypeScript y 429 componentes de escritorio, recortables según la variante de compilación.

Capacidades

Ocho capacidades diferenciales, todas verificables en el código fuente de GitHub

🧠
Núcleo

Motor de agente profundo

Un bucle TAOR propio con estrategia, memoria y puntos de control

  • Ciclo de decisión TAOR (Think-Act-Observe-Reason)
  • 4 estrategias de agente: general / codificación / exploración / planificación
  • La reanudación desde puntos de control mantiene recuperables las tareas largas tras una interrupción
  • Ventanas de contexto por capas con compactación automática en tres niveles
  • 8 motivos de terminación más corte de circuito por ronda para evitar bucles desbocados
🛡️
Seguridad

5 capas de defensa en profundidad

Análisis AST en Rust en tiempo de compilación → cinco líneas de defensa → aislamiento con sandbox en varios backends

  • Análisis de Bash en tiempo de compilación mediante AST en Rust vía FFI
  • 37 reglas de comandos peligrosos + 14 reglas de inyección
  • Motor de reglas de política Guardrail
  • Clasificador de riesgo AutoMode
  • Cobertura de sandbox en Landlock / macOS / Windows / Docker / SSH / PTY
🛠️
Amplitud

69 herramientas integradas

23 categorías que abarcan archivos, comandos, red, medios, código y colaboración

  • Ejecución de Bash a nivel de AST en Rust
  • Inteligencia de código con LSP
  • Extracción y búsqueda web
  • Procesamiento de notebooks, imágenes, audio y vídeo
  • Soporte completo de cliente y servidor MCP
🌐
Multiplataforma

27 canales de mensajería

27 adaptadores de canal, con WeChat / WeCom / DingTalk / Feishu / QQ compatibles

  • Telegram / Discord / Slack / WhatsApp
  • WeChat / WeCom / DingTalk / Feishu / QQ / Yuanbao
  • Email / SMS / Webhook / IRC / Matrix
  • Un catálogo de canales unificado con enrutamiento de pasarela
  • Recorte de canales en tiempo de compilación para compilaciones más pequeñas
📊
Observabilidad

Observabilidad de nivel empresarial

Integración con OpenTelemetry, alertas y comprobaciones de estado

  • Tracing + métricas alineados con las convenciones semánticas OTel GenAI
  • Registro estructurado por niveles
  • Reglas de alerta y gestión de incidentes
  • Comprobaciones de estado, copias de seguridad y archivado de datos
  • Eventos de sesión reproducibles y auditables
🔌
Flexible

Arquitectura conectable

SDK de plugins, sistema de habilidades y cuatro protocolos, recortables según la variante de compilación

  • 5 variantes de compilación: core / personal / coding / enterprise / headless
  • Mercado de plugins con carga en caliente y verificación de firmas
  • Tres fuentes de habilidades aisladas (integradas / de usuario / de terceros)
  • Protocolos MCP / ACP / A2A / LSP
  • Arranque en cuatro etapas (T0–T3) con carga bajo demanda
🏠
Privacidad

Local-first

Modelos locales Ollama / llama.cpp, con los datos en tu máquina por defecto

  • Inferencia local que funciona sin conexión
  • Un único archivo de datos SQLite que nunca sale del dispositivo
  • Sesiones guardadas como events.jsonl de solo añadir
  • Proveedores en la nube como mejora opcional
  • Directorios de sandbox aislados por espacio de trabajo
🚦
Enrutamiento

Enrutamiento inteligente

19 clases de tarea × 4 niveles × 5 etapas de decisión, más cadenas de conmutación por error entre proveedores

  • 19 tipos de tarea detectados automáticamente
  • 4 niveles: simple / medium / complex / reasoning
  • 5 etapas de decisión: interruptor → vía rápida → persistencia de sesión → juicio del LLM → nivel
  • FallbackChain entre proveedores con políticas de reintento
  • Los precios y las ventanas de contexto se leen de la base de datos

Por capas, como un sistema operativo

Un núcleo fino, límites entre subsistemas y puertas de dependencia; local-first es el valor por defecto, no un interruptor.

Núcleo

@openliri/kernel es un paquete propio que expone una interfaz fina, protegido por las puertas K01–K08

Subsistemas

Herramientas, canales, memoria, enrutamiento, sandbox y tareas tienen sus propios puntos de entrada y límites

Puertas

Una dirección de dependencia de 6 capas más de 20 comprobaciones de arquitectura: una violación bloquea la CI

Local-first

Los datos se quedan en tu máquina por defecto; los modelos pueden ejecutarse por completo en local

Cinco capas de defensa en profundidad

Del análisis AST en tiempo de compilación al sandbox en tiempo de ejecución: cada recuento de reglas, umbral y política de degradación está en el código fuente

🦀

Análisis AST en Rust en tiempo de compilación

Compilación

Rust FFI realiza un análisis de seguridad a nivel de AST antes de ejecutar el código, contrastado con 37 reglas de comandos peligrosos

  • La capa FFI de Rust analiza el AST de Bash
  • Análisis del AST de Bash con 37 reglas de comandos peligrosos
  • Detección de inyección por variables y bloqueo de salto de rutas
  • Detección de manipulación de argumentos con validación de comandos en lista blanca
🔍

Análisis semántico en TypeScript

Ejecución

Los comandos compuestos se evalúan en tiempo de ejecución segmento a segmento, con motivos de rechazo ligados a la sentencia exacta

  • Los comandos compuestos de solo lectura pasan segmento a segmento en lugar de rechazarse en bloque
  • 14 patrones de inyección detectados, incluidos caracteres de ancho cero y envenenamiento de variables de entorno
  • 10 reglas específicas de shell (bash / PowerShell / cmd)
  • Los mensajes de rechazo señalan la causa real y la sentencia infractora
⚙️

Motor de reglas Guardrail

Política

Un sistema de reglas de política configurable con autorización granular por herramienta, canal y grupo de usuarios

  • deny-by-default con listas blancas
  • Granularidad de permisos: herramienta → regla → huella
  • Los cambios de reglas surten efecto de inmediato, sin reiniciar
  • Los rechazos informan de la regla de origen y de la sentencia coincidente
🤖

Clasificador AutoMode

Adaptativo

Puntúa el riesgo a partir del contexto de la tarea y de la herramienta y decide automáticamente si permitir, preguntar o denegar

  • Clasificación de riesgo basada en la semántica del comando y el contexto de la herramienta
  • Los comandos de bajo riesgo se permiten automáticamente según la política
  • Los comandos de alto riesgo pasan a aprobación y llegan a la bandeja de entrada
  • Los comandos no confiables se preguntan por defecto en lugar de denegarse
🔒

Ejecución en sandbox

Aislamiento

6 backends de aislamiento (Landlock / macOS / Windows / Docker / SSH / PTY) para que los comandos que se extralimitan nunca toquen el host

  • Linux Landlock: restricciones del sistema de archivos a nivel de núcleo
  • Sandbox de macOS / Windows Low IL + objeto Job como alternativa
  • Docker: aislamiento completo con políticas de recursos y de red
  • Ejecución remota por SSH y rutas PTY controladas
  • Degradación honesta con un aviso claro cuando no hay backend disponible

La seguridad en cifras

37
Reglas de comandos peligrosos
Coincidencia a nivel de AST en bash / PowerShell / cmd
14
Reglas de detección de inyección
Cubre caracteres de ancho cero, envenenamiento de variables de entorno y más
6
Backends de sandbox
Landlock / macOS / Windows / Docker / SSH / PTY
51
Archivos de implementación del sandbox
Implementaciones en TypeScript bajo app/src/sandbox

Análisis AST en Rust en tiempo de compilación · Análisis semántico en TypeScript · Motor de reglas Guardrail · Clasificador AutoMode · Ejecución en sandbox

Enrutamiento inteligente

Elige un nivel de modelo según el tipo de tarea y su dificultad y, si el proveedor principal no está disponible, retrocede por el orden configurado

Detecta automáticamente 19 tipos de tarea (los 8 más comunes abajo)

💻
Codificación
Generación de código, depuración, revisión
✍️
Redacción
Documentos, textos, traducción
📊
Análisis
Análisis de datos, razonamiento, planificación
🔧
Herramientas
Archivos, búsqueda, operaciones del sistema
🌐
Traducción
Traducción y localización multilingüe
🔍
Búsqueda
Búsqueda web y recuperación de información
🎨
Creatividad
Lluvia de ideas, diseño, ideación
💬
Charla
Conversación cotidiana

Pipeline de decisión de 5 capas

1 L1: Interruptor del enrutador Cuando está desactivado, las peticiones van directas al modelo por defecto sin comprobaciones adicionales
2 L2: Vía rápida Las tareas simples o las reglas de prefijo van directas al modelo de nivel bajo
3 L3: Persistencia de sesión Mantiene un modelo por conversación para que no cambie continuamente
4 L4: Clasificador LLM Un modelo pequeño juzga el tipo y la dificultad de la tarea y asigna un nivel
5 L5: Resolución del nivel Asigna los niveles simple/medium/complex/reasoning a modelos concretos

Cadena de conmutación por error entre proveedores

Modelo principal caído → conmutación automática → degradación sin interrupciones

Principal Proveedor principal · modelo del nivel actual
Alternativa 1 Proveedor de respaldo del mismo nivel
Alternativa 2 Proveedor de respaldo de otro nivel
Alternativa 3 Cualquier otro proveedor configurado
Último recurso Ollama / llama.cpp en local

Interacción por voz

Más que escribir: di lo que necesitas y Liri lo entiende, actúa y responde

🎤

Entrada de voz

faster-whisper local y SenseVoice, u OpenAI Whisper en la nube

faster-whisper local
SenseVoice
OpenAI Whisper
Reconocimiento en streaming
🔊

Salida de voz

Piper local o Edge / OpenAI en la nube, o tu propio comando personalizado

Piper local
Edge TTS
OpenAI TTS
Comando personalizado
⚡

Integrada como herramienta

La voz en sí es una herramienta que el modelo puede llamar cuando la necesite

herramienta tts
herramienta audio_play
Entrada de voz
Reproducción de respuestas
📱

En todas las superficies

Escritorio y terminal comparten el mismo servicio de voz

Escritorio Tauri
Terminal CLI
API HTTP

Funcionamiento sin manos · Multitarea · Accesibilidad · Comandos de voz · Dilo donde sea y queda hecho

El segundo cerebro

Base de conocimiento → Memoria → Eventos de sesión: tres capas de contexto recuperable, todas guardadas en tu máquina

Capa 1: Base de conocimiento

Base de conocimiento

Markdown en disco más indexación semántica, con la fuente citada en cada resultado

Markdown en disco Índice semántico JSONL Búsqueda por palabra clave Búsqueda vectorial Fusión RRF
Capa 2: Memoria

Sistema de memoria

Memoria por capas más tablas vectoriales en SQLite, recuperadas con ponderación por relevancia

Memoria por capas memory_vectors Ponderación por relevancia Limpieza de memoria Inyección de contexto
Capa 3: Fuente de verdad

Registro de eventos de sesión

Todo lo que entra en una petición al modelo se convierte en un evento de sesión que puedes reproducir

events.jsonl de solo añadir Persistir antes de escribir Repetición de sesión Rastro auditable Registro en tiempo de compilación

Organizar y gobernar

Curar conocimiento cuando está inactivo, comprimir contexto cuando se desborda: dos pipelines reales en segundo plano

Pipeline de cinco etapas de DreamEngine

01 Gather
Recoger
Reunir sesiones y documentos pendientes de curación
02 Analyze
Analizar
Extraer temas y conclusiones reutilizables
03 Generate
Generar
Producir notas dirigidas a las capas superiores
04 Write
Escribir
Escribir en la base de conocimiento y la memoria
05 Index
Indexar
Reconstruir los índices vectoriales y de palabras clave
🧠

Gobernanza del contexto por capas

Cuando una conversación larga se desborda, se descartan primero los turnos más antiguos, reduciendo la memoria en tiempo de compilación de O(total) a O(ventana). Sobrevive una nota de que el texto original es recuperable, los detalles se pueden recuperar por páginas y las marcas de nivel de tokens activan la compresión automática.

Ventanas por capas
Recorta primero los turnos antiguos cuando el contexto se desborda
Recuperar bajo demanda
Recupera el texto original por páginas
Compresión en tres niveles
Nivel 1/2 en línea + nivel 3 en segundo plano
🔄

Bucle de automejora PDCA

En tareas de larga duración, Liri ejecuta el bucle Plan-Do-Check-Act por sí solo: descompone la tarea → ejecuta los pasos → revisa los resultados → revisa el plan, hasta terminar o alcanzar una condición de parada.

Plan
Descomposición automática
Do
Ejecución paso a paso
Check
Revisión automática
Act
Corrección automática

Cliente de escritorio

Construido con Tauri 2.11 + React 19 · 429 componentes TSX · 32 páginas de funciones · una experiencia de escritorio completa

Liri Desktop · Tauri 2.11
💬
Panel de chat
Liri · Linglong Bird
¡Hola! Soy Liri, ¿en qué puedo ayudarte?
Ayúdame a analizar los datos de este proyecto
Claro, analizando...
Escribe un mensaje y pulsa Enter para enviarlo...

Ilustración de la estructura de la interfaz, no es una captura real

💬
Panel de chat
Conversaciones de varios turnos
🤖
Gestión de modelos
Cambia entre modelos
📚
Base de conocimiento
Recuperación de archivos
🧠
Memoria
Revisa el historial
⏰
Tareas programadas
Programación con Cron
🔌
Integración MCP
Descubre e instala servidores
💰
Centro de costes
Registro de uso y gasto
🎭
Buddy
Aspecto y datos de crecimiento

27 canales de mensajería

Cada uno de los 27 canales incluye un adaptador propio. Configura sus variables de entorno para activarlo o recórtalo en tiempo de compilación.

Mensajería
Telegram
Discord
Slack
WhatsApp
Signal
Matrix
IRC
Line
Zalo
Plataformas de China
WeChat
WeCom
DingTalk
Feishu
QQ
Yuanbao
Colaboración y redes sociales
Microsoft Teams
Google Chat
Mattermost
Facebook Messenger
Twitter/X
Otros canales
Email
SMS
Webhook
Nostr
Claude
iMessage
Acceso móvil

27 canales en total · un catálogo unificado · activación por canal · recorte en tiempo de compilación

Ecosistema

Mercado de plugins + mercado MCP + tres fuentes de habilidades + mercado de plantillas = un ecosistema Liri componible

🔌

Mercado MCP

5 adaptadores de origen, una sola búsqueda

GitHub
npm
Registro oficial
Smithery
Servicios incluidos
🧩

Mercado de plugins

Registros locales, npm y remotos

SDK de plugins + adaptadores
Ciclo de vida y recarga en caliente
Verificación de firmas
Endpoints de configuración + CLI
5 variantes de compilación
⚡

Tres fuentes de habilidades

Integradas, de usuario y de terceros, aisladas físicamente

11 habilidades integradas
Habilidades definidas por el usuario
Fuente de terceros ClawHub
Orquestación condicional
Composición y emparejamiento de habilidades
📚

Plantillas y protocolos

Plantillas de agentes y de documentos, listas para usar

Mercado de plantillas de agentes
Mercado de plantillas de documentos
MCP / ACP / A2A / LSP
Plugins y habilidades componibles
Reutilización parametrizada de plantillas

Más que una lista de funciones

Tres cosas fáciles de pasar por alto y que se usan a diario.

🐣

Personalidad Buddy

No es una herramienta, es un compañero: su aspecto se genera de forma determinista a partir de una semilla, así que el mismo Buddy siempre se ve igual; su estado de crecimiento se guarda en disco y se acumula entre sesiones.

18 especies 8 sombreros 6 ojos 5 niveles de rareza
🧾

Costes transparentes

Precios leídos de la base de datos, atribución al nombre real del modelo que devuelve el proveedor y cada llamada escrita en cost_records; el presupuesto primero avisa, luego comprime y al final bloquea.

Precios en model_registry usage real registro por llamada presupuesto diario
🎯

Cuatro tipos de usuario

Los desarrolladores ejecutan comandos y editan código; los responsables de seguridad obtienen bloqueo a nivel de AST y rastros de auditoría; los equipos de operaciones lo ejecutan como servicio; el resto lo usa desde una aplicación de mensajería.

Desarrolladores Responsables de seguridad Equipos de operaciones Cualquier usuario

Limitaciones actuales

Lo que aún no está terminado durante la iteración rápida: lo escribimos aquí para que no tengas que descubrirlo a la mala.

La seguridad espera una auditoría externa

Pendiente de auditoría

5 capas de defensa y 6 backends de sandbox están implementados, con 51 archivos relacionados con el sandbox que puedes revisar uno a uno, pero todavía no ha habido una auditoría de seguridad de terceros.

La interacción de escritorio sigue en pulido

En pulido

429 componentes TSX y 32 páginas ya están listos; los atajos, las animaciones y los casos límite se siguen ajustando.

El catálogo del mercado es todavía pequeño

En desarrollo

El mercado de plugins, el mercado MCP y las fuentes de habilidades funcionan de extremo a extremo, pero el catálogo instalable sigue creciendo.

Empezar

Tres pasos: instalar dependencias → configurar tu clave de API → ejecutar dev

1

Instalar dependencias

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

Configurar la clave de API

$ cp .env.example .env
$ # edita .env y añade tu clave de API
3

Iniciar Liri

$ bun run dev

Código abierto · Comunidad

Liri es código abierto y cualquier contribución es bienvenida

GitHub

Sigue el proyecto en GitHub, abre Issues o envía PRs

github.com/cocosoft/liri

Únete a la comunidad

Participa en la conversación, abre Issues o envía PRs