Liri
Linglong Bird · Asistente personal de IA · Local-first · Seguridad integrada
$ git clone https://github.com/cocosoft/Liri.git 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.
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
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
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
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
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 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
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
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 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
Análisis AST en Rust en tiempo de compilación
CompilaciónRust 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
Análisis semántico en TypeScript
EjecuciónLos 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
Motor de reglas Guardrail
PolíticaUn 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
Clasificador AutoMode
AdaptativoPuntú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
Ejecución en sandbox
Aislamiento6 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
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)
Pipeline de decisión de 5 capas
Cadena de conmutación por error entre proveedores
Modelo principal caído → conmutación automática → degradación sin interrupciones
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
Salida de voz
Piper local o Edge / OpenAI en la nube, o tu propio comando personalizado
Integrada como herramienta
La voz en sí es una herramienta que el modelo puede llamar cuando la necesite
En todas las superficies
Escritorio y terminal comparten el mismo servicio de voz
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
Base de conocimiento
Markdown en disco más indexación semántica, con la fuente citada en cada resultado
Sistema de memoria
Memoria por capas más tablas vectoriales en SQLite, recuperadas con ponderación por relevancia
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
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
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.
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.
Cliente de escritorio
Construido con Tauri 2.11 + React 19 · 429 componentes TSX · 32 páginas de funciones · una experiencia de escritorio completa
Ilustración de la estructura de la interfaz, no es una captura real
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.
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
Mercado de plugins
Registros locales, npm y remotos
Tres fuentes de habilidades
Integradas, de usuario y de terceros, aisladas físicamente
Plantillas y protocolos
Plantillas de agentes y de documentos, listas para usar
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.
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.
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.
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ía5 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 pulido429 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 desarrolloEl 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
Instalar dependencias
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
Configurar la clave de API
$ cp .env.example .env
$ # edita .env y añade tu clave de API Iniciar Liri
$
bun run dev
Código abierto · Comunidad
Liri es código abierto y cualquier contribución es bienvenida