Liri
Linglong Bird · Assistente pessoal de IA · Local-first · Segurança integrada
$ git clone https://github.com/cocosoft/Liri.git Uma estrada ainda em construção
Em 25 de maio de 2026 era só uma v0.1 com 100 commits. Cinco meses depois, são mais de 4.000 arquivos e 27 canais — e a conta que vem junto: um monólito de 7.000 linhas, 105 arquivos acima do limite que ninguém havia registrado e uma “limpeza de código morto” que apagou todo o subsistema de sandbox.
Nós restauramos tudo e depois transformamos exclusão, limites e vocabulários de estado em portões de CI, um por um. A estrada não está terminada.
O que é o Liri
Liri é um assistente pessoal de IA construído sobre uma arquitetura de TypeScript + Rust.
Muito mais que um chatbot — ele entende a intenção, executa comandos, gerencia tarefas, chama ferramentas e até colabora com outros agentes de IA. Um único motor alimenta todos os pontos de entrada: terminal, desktop, IM e MCP.
71 subsistemas modulares, 4,109 arquivos TypeScript e 429 componentes de desktop — tudo cortável por variante de build.
Recursos
Oito recursos diferenciados, cada um verificável no código-fonte no GitHub
Motor de agente profundo
Um loop TAOR próprio, com estratégia, memória e checkpoints
- Ciclo de decisão TAOR (Think-Act-Observe-Reason)
- 4 estratégias de agente: geral / codificação / exploração / planejamento
- Retomada por checkpoint mantém tarefas longas recuperáveis após interrupção
- Janelas de contexto em camadas com compactação automática em três níveis
- 8 motivos de término e disjuntor por rodada para impedir loops descontrolados
5 camadas de defesa em profundidade
Análise AST em Rust no tempo de compilação → cinco linhas de defesa → isolamento por sandbox com múltiplos backends
- Análise de Bash em tempo de compilação via AST em Rust pela FFI
- 37 regras de comandos perigosos + 14 regras de injeção
- Motor de regras de política Guardrail
- Classificador de risco AutoMode
- Cobertura de sandbox: Landlock / macOS / Windows / Docker / SSH / PTY
69 ferramentas integradas
23 categorias cobrindo arquivos, comandos, rede, mídia, código e colaboração
- Execução de Bash em nível de AST em Rust
- Inteligência de código com LSP
- Coleta e busca na web
- Processamento de notebook, imagem, áudio e vídeo
- Suporte completo a cliente e servidor MCP
27 canais de mensagens
27 adaptadores de canal, com suporte a WeChat / WeCom / DingTalk / Feishu / QQ
- Telegram / Discord / Slack / WhatsApp
- WeChat / WeCom / DingTalk / Feishu / QQ / Yuanbao
- Email / SMS / Webhook / IRC / Matrix
- Catálogo unificado de canais com roteamento de gateway
- Corte de canais em tempo de compilação para builds menores
Observabilidade de nível empresarial
Integração OpenTelemetry, alertas e verificações de saúde
- Tracing + métricas alinhados às convenções semânticas OTel GenAI
- Logs estruturados em níveis
- Regras de alerta e gestão de incidentes
- Verificações de saúde, backups e arquivamento de dados
- Eventos de sessão reproduzíveis e auditáveis
Arquitetura plugável
SDK de plugins, sistema de habilidades e quatro protocolos — cortáveis por variante de build
- 5 variantes de build: core / personal / coding / enterprise / headless
- Marketplace de plugins com carregamento a quente e verificação de assinatura
- Três fontes de habilidades isoladas (integradas / do usuário / de terceiros)
- Protocolos MCP / ACP / A2A / LSP
- Inicialização em quatro estágios (T0–T3) com carregamento sob demanda
Local-first
Modelos locais via Ollama / llama.cpp, com os dados na sua máquina por padrão
- Inferência local que roda totalmente offline
- Um único arquivo SQLite que nunca sai do dispositivo
- Sessões gravadas em events.jsonl somente em acréscimo
- Provedores na nuvem como reforço opcional
- Diretórios de sandbox isolados por workspace
Roteamento inteligente
19 classes de tarefa × 4 níveis × 5 etapas de decisão, mais cadeias de fallback entre provedores
- 19 tipos de tarefa detectados automaticamente
- 4 níveis: simple / medium / complex / reasoning
- 5 etapas de decisão: interruptor → caminho rápido → aderência da sessão → julgamento do LLM → nível
- FallbackChain entre provedores com políticas de nova tentativa
- Preços e janelas de contexto lidos do banco
Em camadas, como um sistema operacional
Núcleo fino, limites entre subsistemas e portões de dependência; local-first é o padrão, não um interruptor.
Núcleo
@openliri/kernel é um pacote próprio que expõe apenas uma interface fina, protegida pelos portões K01–K08
Subsistemas
Ferramentas, canais, memória, roteamento, sandbox e tarefas têm cada um seus pontos de entrada e limites
Portões
Direção de dependência em 6 camadas + mais de 20 verificações de arquitetura — violação bloqueia a CI
Local-first
Os dados ficam na sua máquina por padrão; os modelos podem rodar totalmente local
Cinco camadas de defesa em profundidade
Da análise AST em tempo de compilação ao sandbox em tempo de execução: cada contagem de regras, limiar e política de degradação está no código-fonte
🦀 Análise AST em Rust no tempo de compilação
Tempo de compilação A FFI em Rust faz análise de segurança em nível de AST antes de o código rodar, conferida contra 37 regras de comandos perigosos
Análise AST em Rust no tempo de compilação
Tempo de compilaçãoA FFI em Rust faz análise de segurança em nível de AST antes de o código rodar, conferida contra 37 regras de comandos perigosos
- A camada FFI em Rust analisa a AST do Bash
- Análise da AST do Bash com 37 regras de comandos perigosos
- Detecção de injeção por variáveis e bloqueio de travessia de caminho
- Detecção de adulteração de argumentos com validação de comandos permitidos
🔍 Análise semântica em TypeScript
Tempo de execução Comandos compostos são avaliados trecho a trecho em tempo de execução, com o motivo da recusa atrelado à instrução exata
Análise semântica em TypeScript
Tempo de execuçãoComandos compostos são avaliados trecho a trecho em tempo de execução, com o motivo da recusa atrelado à instrução exata
- Comandos somente leitura compostos passam trecho a trecho, em vez de serem recusados por inteiro
- 14 padrões de injeção detectados, incluindo caracteres de largura zero e envenenamento de variáveis de ambiente
- 10 regras específicas de shell (bash / PowerShell / cmd)
- As mensagens de recusa apontam a causa real e a instrução infratora
⚙️ Motor de regras Guardrail
Política Um sistema configurável de regras de política com autorização granular por ferramenta, canal e grupo de usuários
Motor de regras Guardrail
PolíticaUm sistema configurável de regras de política com autorização granular por ferramenta, canal e grupo de usuários
- deny-by-default com listas de permissão
- Granularidade de permissão: ferramenta → regra → impressão digital
- Mudanças de regra valem na hora, sem reiniciar
- Recusas informam a origem da regra e a instrução correspondida
🤖 Classificador AutoMode
Adaptativo Avalia o risco pelo contexto da tarefa e da ferramenta e decide automaticamente entre permitir, perguntar e negar
Classificador AutoMode
AdaptativoAvalia o risco pelo contexto da tarefa e da ferramenta e decide automaticamente entre permitir, perguntar e negar
- Classificação de risco baseada na semântica do comando e no contexto da ferramenta
- Comandos de baixo risco são permitidos automaticamente conforme a política
- Comandos de alto risco vão para aprovação e caem na Inbox
- Comandos não confiáveis perguntam por padrão, em vez de negar
🔒 Execução em sandbox
Isolamento 6 backends de isolamento — Landlock / macOS / Windows / Docker / SSH / PTY — para que comandos que extrapolam nunca toquem o host
Execução em sandbox
Isolamento6 backends de isolamento — Landlock / macOS / Windows / Docker / SSH / PTY — para que comandos que extrapolam nunca toquem o host
- Linux Landlock: restrições de sistema de arquivos em nível de núcleo
- Sandbox do macOS / Windows Low IL + objeto Job como fallback
- Docker: isolamento completo com políticas de recursos e de rede
- Execução remota via SSH e caminhos de PTY controlados
- Degradação honesta com aviso claro quando nenhum backend está disponível
Segurança em números
Análise AST em Rust no tempo de compilação · Análise semântica em TypeScript · Motor de regras Guardrail · Classificador AutoMode · Execução em sandbox
Roteamento inteligente
Escolhe um nível de modelo pelo tipo e pela dificuldade da tarefa e, quando o provedor principal está indisponível, recorre à ordem configurada
Detecta automaticamente 19 tipos de tarefa (8 comuns abaixo)
Pipeline de decisão em 5 camadas
Cadeia de fallback entre provedores
Modelo principal fora → fallback automático → degradação sem interrupção
Interação por voz
Mais que digitar — diga o que precisa, e o Liri entende, age e responde
Entrada de voz
faster-whisper ou SenseVoice local, ou OpenAI Whisper na nuvem
Saída de voz
Piper local ou Edge / OpenAI na nuvem, ou seu próprio comando personalizado
Nativa em ferramentas
A própria fala é uma ferramenta que o modelo pode chamar quando precisar
Em todas as superfícies
Desktop e terminal compartilham o mesmo serviço de fala
Operação sem as mãos · Multitarefa · Acessibilidade · Atalhos de voz · Diga em qualquer lugar, e está feito
O segundo cérebro
Base de conhecimento → Memória → Eventos de sessão: três camadas de contexto recuperáveis, todas armazenadas na sua máquina
Base de conhecimento
Markdown em disco e indexação semântica, com fontes citadas em cada resultado
Sistema de memória
Memória em camadas e tabelas vetoriais SQLite, recuperadas com ponderação por relevância
Log de eventos de sessão
Tudo o que entra em uma requisição ao modelo vira um evento de sessão que você pode reproduzir
Organizar e governar
Curar conhecimento quando ocioso, comprimir contexto quando transborda — dois pipelines reais em segundo plano
Pipeline de cinco estágios do DreamEngine
Governança de contexto em camadas
Quando uma conversa longa transborda, os turnos mais antigos são descartados primeiro, reduzindo a memória em tempo de build de O(total) para O(janela). Um aviso de “texto original recuperável” sobrevive ao corte, os detalhes podem ser paginados de volta e marcas de tokens disparam a compactação automática.
Loop de autoaperfeiçoamento PDCA
Em tarefas de longa duração, o Liri executa o ciclo Plan-Do-Check-Act por conta própria: decompor a tarefa → executar etapas → revisar resultados → revisar o plano, até concluir ou atingir uma condição de parada.
Cliente desktop
Feito com Tauri 2.11 + React 19 · 429 componentes TSX · 32 páginas de recursos · uma experiência completa de desktop
Ilustração da estrutura da interface — não é uma captura de tela real
27 canais de mensagens
Cada um dos 27 canais vem com um adaptador correspondente. Defina as variáveis de ambiente do canal para ativá-lo, ou remova-o no momento do build.
27 canais no total · um catálogo unificado · ativação por canal · corte em tempo de compilação
Ecossistema
Marketplace de plugins + marketplace MCP + três fontes de habilidades + marketplace de modelos = um ecossistema Liri combinável
Marketplace MCP
5 adaptadores de fonte, uma única busca
Marketplace de plugins
Registros local, npm e remoto
Três fontes de habilidades
Integradas, do usuário e de terceiros — fisicamente isoladas
Modelos e protocolos
Modelos de agente e de documento, prontos para usar
Mais que uma lista de recursos
Três coisas fáceis de esquecer e usadas todos os dias.
Persona Buddy
Não é uma ferramenta — é um companheiro. A aparência é gerada de forma determinística a partir de uma semente, então o mesmo Buddy sempre parece igual; o estado de crescimento é persistido e acumula entre sessões.
Custos transparentes
Preços lidos do banco, atribuição ao nome real do modelo informado pelo provedor, cada chamada gravada em cost_records; orçamentos avisam, depois comprimem e por fim bloqueiam.
Quatro tipos de usuários
Desenvolvedores executam comandos e editam código; responsáveis por segurança têm bloqueio em nível de AST e trilhas de auditoria; equipes de operação rodam como serviço; todo o resto acessa pelo aplicativo de mensagens.
Limitações atuais
O que ainda não está pronto durante a iteração rápida — escrito aqui para você não descobrir do jeito difícil.
A segurança aguarda auditoria externa
Aguardando auditoria externa5 camadas de defesa e 6 backends de sandbox estão implementados, com 51 arquivos relacionados a sandbox que você pode revisar um a um — mas nenhuma auditoria de segurança de terceiros foi concluída ainda.
Interações do desktop ainda em polimento
Em polimento429 componentes TSX e 32 páginas estão prontos; atalhos, animações e casos de borda ainda estão sendo ajustados.
Catálogo do marketplace ainda pequeno
Em construçãoO marketplace de plugins, o marketplace MCP e as fontes de habilidades funcionam de ponta a ponta, mas o catálogo instalável ainda está crescendo.
Começar
Três passos: instalar dependências → configurar sua chave de API → rodar o dev
Instalar dependências
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
Configurar sua chave de API
$ cp .env.example .env
$ # edite o .env e adicione sua chave de API Iniciar o Liri
$
bun run dev
Código aberto · Comunidade
O Liri é um projeto de código aberto e todo colaborador é bem-vindo