Liri
Linglong Bird · AI 개인 비서 · 로컬 우선 · 보안 내장
$ git clone https://github.com/cocosoft/Liri.git 아직 끝나지 않은 길
2026년 5월 25일, 그것은 v0.1과 커밋 100개뿐이었습니다. 다섯 달 뒤에는 4,000여 개 파일, 채널 27개로 자랐습니다 — 그리고 그 대가도 함께 자랐습니다: 7,000줄의 거대 파일, 아무도 등록하지 않은 초과 파일 105개, 그리고 「죽은 코드 정리」 한 번이 샌드박스 서브시스템 전체를 삭제한 일.
우리는 롤백하고 복구한 뒤, 삭제와 경계, 상태 어휘를 하나씩 CI 게이트로 만들었습니다. 이 길은 아직 끝나지 않았습니다.
Liri란 무엇인가
Liri는 TypeScript + Rust 아키텍처를 기반으로 한 AI 개인 비서입니다.
단순한 챗봇이 아닙니다. Liri는 의도를 파악하고, 명령을 실행하며, 작업을 관리하고, 도구를 호출하며, 다른 AI 에이전트와 협업까지 합니다. 터미널에서 데스크톱까지, IM에서 MCP까지 하나의 엔진이 여러 진입점을 뒷받침합니다.
모듈형 서브시스템 71개, TypeScript 파일 4,109개, 데스크톱 컴포넌트 429개 — 빌드 변형별로 잘라낼 수 있습니다.
핵심 기능
여덟 가지 차별화된 기능, 모두 GitHub 소스에서 확인할 수 있습니다
심층 에이전트 엔진
자체 개발한 TAOR 루프: 전략과 기억, 체크포인트를 갖췄습니다
- TAOR 결정 루프 (Think-Act-Observe-Reason)
- 4가지 에이전트 전략: 범용 / 코딩 / 탐색 / 계획
- 체크포인트 재개로 장기 작업이 중단되어도 복구됩니다
- 컨텍스트 계층 분할 윈도 + 3단계 자동 압축
- 8가지 종료 사유 + 라운드 단위 서킷 브레이커로 공회전을 방지합니다
5계층 보안 심층 방어
Rust AST 컴파일 타임 분석 → 5계층 방어 → 다중 백엔드 샌드박스 격리
- Rust FFI AST 기반 컴파일 타임 Bash 분석
- 위험 명령 37개 + 주입 규칙 14개
- Guardrail 정책 규칙 엔진
- AutoMode 위험 분류기
- 샌드박스: Landlock / macOS / Windows / Docker / SSH / PTY 지원
내장 도구 69개
23개 분류로 파일, 명령, 네트워크, 미디어, 코드, 협업을 아우릅니다
- Rust AST 수준 Bash 실행
- LSP 코드 인텔리전스 연동
- 웹 스크래핑과 검색
- Notebook, 이미지, 오디오·비디오 처리
- MCP 클라이언트 + 서버 완전 지원
메시지 채널 27개
채널 어댑터 27개, WeChat / WeCom / DingTalk / Feishu / QQ 모두 지원
- Telegram / Discord / Slack / WhatsApp
- WeChat / WeCom / DingTalk / Feishu / QQ / Yuanbao
- Email / SMS / Webhook / IRC / Matrix
- 통합 채널 카탈로그와 게이트웨이 라우팅
- 채널 단위 빌드 트리밍으로 산출물 축소
엔터프라이즈급 관측성
OpenTelemetry 연동 + 알림 체계 + 헬스 체크
- Tracing + Metrics, OTel GenAI 시맨틱 규약 준수
- 구조화 로그 등급 관리
- 알림 규칙과 인시던트 관리
- 헬스 체크, 백업, 데이터 아카이빙
- 세션 이벤트 재생과 감사 가능
플러그인 아키텍처
플러그인 SDK + 스킬 시스템 + 4개 프로토콜, 빌드 변형별 트리밍
- 5가지 빌드 변형: core / personal / coding / enterprise / headless
- 플러그인 마켓, 핫 로딩과 서명 검증 지원
- 스킬 3개 출처 격리 (내장 / 사용자 / 서드파티)
- MCP / ACP / A2A / LSP 4개 프로토콜
- 4단계 기동 (T0–T3)과 필요 시 로딩
로컬 우선
Ollama / llama.cpp 로컬 모델, 데이터는 기본적으로 기기에 저장
- 로컬 추론, 완전 오프라인 실행 가능
- SQLite 단일 데이터 파일, 기기 밖으로 나가지 않음
- 세션은 events.jsonl에 추가 저장
- 클라우드 프로바이더는 선택적 확장
- 워크스페이스별로 격리된 샌드박스 디렉터리
스마트 라우팅
19개 작업 분류 × 4단계 tier × 5단계 의사결정 + 프로바이더 폴백 체인
- 19가지 작업 유형 자동 인식
- 4단계 tier: simple / medium / complex / reasoning
- 5단계 의사결정: 스위치 → 빠른 경로 → 세션 고정성 → LLM 판별 → Tier
- FallbackChain 다중 프로바이더 폴백 + 재시도 정책
- 가격과 컨텍스트 윈도 모두 데이터베이스에서 조회
운영체제처럼 계층화
얇은 커널 + 서브시스템 경계 + 의존성 게이트. 로컬 우선은 스위치가 아니라 기본값입니다.
커널
@openliri/kernel은 독립 패키지로 대외에는 얇은 인터페이스만 노출하며 K01–K08 게이트가 지킵니다
서브시스템
도구, 채널, 메모리, 라우팅, 샌드박스, 작업은 각자 진입점과 경계를 가집니다
게이트
6계층 의존 방향 + 20여 개 아키텍처 검사, 위반 시 CI 차단
로컬 우선
데이터는 기본적으로 기기에 남고, 모델은 완전히 로컬에서 실행할 수 있습니다
5계층 보안 심층 방어
컴파일 타임 AST 분석에서 런타임 샌드박스까지: 규칙 개수, 임계값, 저하 정책이 모두 소스에 적혀 있습니다
🦀 Rust AST 컴파일 타임 분석
컴파일 타임 코드 실행 전 Rust FFI로 AST 수준 보안 분석을 수행하며 위험 명령 규칙 37개를 검사합니다
Rust AST 컴파일 타임 분석
컴파일 타임코드 실행 전 Rust FFI로 AST 수준 보안 분석을 수행하며 위험 명령 규칙 37개를 검사합니다
- Rust FFI 계층이 Bash AST를 파싱
- Bash AST 파싱, 위험 명령 규칙 37개
- 변수 주입 탐지, 경로 탈출 차단
- 인자 변조 식별, 허용 목록 명령 검증
🔍 TypeScript 의미 분석
런타임 런타임에 복합 명령을 구간별로 판정하고, 거부 사유를 구체적 문장에 귀속시킵니다
TypeScript 의미 분석
런타임런타임에 복합 명령을 구간별로 판정하고, 거부 사유를 구체적 문장에 귀속시킵니다
- 복합 읽기 전용 명령을 구간별로 허용하며, 더 이상 명령 전체를 거부하지 않습니다
- 주입 패턴 14개 탐지 (제로폭 문자, 환경 변수 오염 포함)
- Shell 전용 규칙 10개 (bash / PowerShell / cmd)
- 거부 메시지가 실제 원인과 해당 문장을 가리킵니다
⚙️ Guardrail 규칙 엔진
정책 도구/채널/사용자 그룹별 세밀한 권한 부여가 가능한 설정형 정책 규칙 시스템
Guardrail 규칙 엔진
정책도구/채널/사용자 그룹별 세밀한 권한 부여가 가능한 설정형 정책 규칙 시스템
- deny-by-default 허용 목록 방식
- 권한 세분화: 도구 → 규칙 → 핑거프린트
- 규칙 변경 즉시 적용, 재시작 불필요
- 거부 시 규칙 출처와 해당 문장 반환
🤖 AutoMode 분류기
지능형 작업과 도구 컨텍스트로 위험 등급을 판정해 허용, 질문, 거부를 자동으로 결정합니다
AutoMode 분류기
지능형작업과 도구 컨텍스트로 위험 등급을 판정해 허용, 질문, 거부를 자동으로 결정합니다
- 명령 의미와 도구 컨텍스트 기반 위험 등급화
- 저위험 명령은 정책에 따라 자동 허용
- 고위험 명령은 승인으로 넘겨 Inbox에서 처리 대기
- 신뢰되지 않은 명령은 즉시 거부 대신 기본적으로 질문
🔒 샌드박스 격리 실행
격리 격리 백엔드 6가지 — Landlock / macOS / Windows / Docker / SSH / PTY — 권한을 넘어선 명령은 호스트에 닿을 수 없습니다
샌드박스 격리 실행
격리격리 백엔드 6가지 — Landlock / macOS / Windows / Docker / SSH / PTY — 권한을 넘어선 명령은 호스트에 닿을 수 없습니다
- Linux Landlock: 커널 수준 파일 시스템 제한
- macOS 샌드박스 / Windows Low IL + Job 최후 방어
- Docker 컨테이너: 완전 격리 + 리소스와 네트워크 정책
- SSH 원격 실행과 PTY 의사 터미널 경로 제어
- 사용 가능한 격리 백엔드가 없으면 정직하게 저하하고 안내를 표시
보안 방어 수치
Rust AST 컴파일 타임 분석 · TypeScript 의미 분석 · Guardrail 규칙 엔진 · AutoMode 분류기 · 샌드박스 격리 실행
스마트 라우팅
작업 유형과 난이도로 모델 tier를 선택하고, 주 프로바이더를 쓸 수 없으면 설정된 순서대로 폴백합니다
19가지 작업 유형 자동 인식 (아래는 흔한 8가지)
5단계 의사결정 파이프라인
프로바이더 폴백 체인
주 모델 불가 → 자동 폴백 → 중단 없는 저하
음성 인터랙션
타이핑만이 아닙니다 — 필요한 것을 말하면 Liri가 듣고, 실행하고, 답합니다
음성 입력
로컬 faster-whisper와 SenseVoice, 또는 클라우드 OpenAI Whisper
음성 출력
로컬 Piper 또는 클라우드 Edge / OpenAI, 사용자 정의 명령도 연결 가능
도구화된 호출
음성 기능 자체도 도구라서 모델이 필요할 때 호출할 수 있습니다
멀티 디바이스 대응
데스크톱과 터미널이 같은 음성 서비스를 공유합니다
핸즈프리 조작 · 멀티태스킹 · 접근성 지원 · 음성 단축 명령 · 언제 어디서나, 말하면 실행됩니다
세컨드 브레인
지식 베이스 → 메모리 → 세션 이벤트: 세 갈래의 검색 가능한 컨텍스트를 모두 기기에 보관합니다
지식 베이스
Markdown 디스크 저장 + 시맨틱 인덱스, 검색 결과에 출처 표시
메모리 시스템
계층형 메모리 + SQLite 벡터 테이블, 관련도 가중 회수
세션 이벤트 로그
모델 요청에 들어간 모든 내용이 세션 이벤트로 남아 재생할 수 있습니다
정리와 거버넌스
유휴 시 지식을 정리하고, 윈도를 넘으면 컨텍스트를 압축합니다 — 실제로 존재하는 두 개의 백그라운드 파이프라인
DreamEngine 5단계 파이프라인
컨텍스트 계층 거버넌스
윈도를 넘는 긴 대화는 먼저 오래된 앞부분을 버리고, 빌드 시 메모리 사용량을 O(전체)에서 O(윈도)로 낮춥니다. 윈도를 자를 때 「원문 복원 가능」 안내를 남겨 필요하면 페이지 단위로 다시 읽어오고, 토큰 수위에 따라 자동 압축합니다.
PDCA 자체 반복 루프
장기 작업의 경우 Liri가 Plan-Do-Check-Act 루프를 자동으로 수행합니다: 작업 분해 → 단계 실행 → 결과 검토 → 계획 수정, 완료되거나 종료 조건에 도달할 때까지 반복합니다.
데스크톱 클라이언트
Tauri 2.11 + React 19 기반 · TSX 컴포넌트 429개 · 기능 화면 32개 · 완전한 데스크톱 경험
인터페이스 구조 예시이며 실제 스크린샷이 아닙니다
메시지 채널 27개
채널 27개 모두 대응 어댑터가 있습니다. 채널별 환경 변수를 설정하면 활성화되고, 빌드 시 잘라낼 수도 있습니다.
총 27개 채널 · 통합 채널 카탈로그 · 채널별 활성화 · 빌드 시 트리밍 지원
생태계
플러그인 마켓 + MCP 마켓 + 스킬 3출처 + 템플릿 마켓 = 조합 가능한 Liri 생태계
MCP 마켓
출처 어댑터 5개를 하나의 검색으로
플러그인 마켓
로컬 / npm / 원격 카탈로그 세 가지 출처
스킬 3출처
내장 / 사용자 / 서드파티를 물리적으로 격리
템플릿과 프로토콜
에이전트와 문서 템플릿, 바로 사용
기능 목록 그 이상
놓치기 쉽지만 매일 쓰게 되는 세 가지.
Buddy 페르소나 시스템
도구가 아니라 동료입니다. 외형은 시드에서 결정론적으로 생성되어 같은 개체는 항상 같은 모습이고, 성장 상태는 디스크에 저장되어 세션을 넘어 누적됩니다.
비용 투명성
가격은 데이터베이스에서 읽고, 프로바이더가 회신한 실제 모델명으로 귀속하며, 모든 호출을 cost_records에 기록합니다. 예산이 수위를 넘으면 먼저 경고하고, 다음은 압축, 마지막은 차단입니다.
네 가지 사용 장면
개발자는 명령을 돌리고 코드를 고치며, 보안 책임자는 AST 수준 차단과 감사에 쓰고, 운영팀은 상시 서비스로 두며, 일반 사용자는 채팅 앱에서 바로 호출합니다.
현재 제한
빠른 반복 기간에 아직 미비한 부분을 먼저 적어 둡니다. 직접 부딪혀 알게 되지 않도록.
보안 체계는 외부 감사 대기
외부 감사 대기5계층 방어와 샌드박스 백엔드 6가지는 구현되었고 샌드박스 관련 파일 51개를 하나씩 확인할 수 있지만, 서드파티 보안 감사는 아직 통과하지 못했습니다.
데스크톱 상호작용 다듬는 중
다듬는 중TSX 컴포넌트 429개와 화면 32개는 준비되었고, 단축키와 애니메이션, 경계 상황은 아직 조정 중입니다.
생태계 마켓 항목은 제한적
구축 중플러그인 마켓, MCP 마켓, 스킬 출처는 연결되었지만 설치 가능한 항목은 아직 채우는 중입니다.
빠른 시작
세 단계: 의존성 설치 → API Key 설정 → dev 실행
의존성 설치
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
API Key 설정
$ cp .env.example .env
$ # .env를 편집해 API Key를 입력하세요 Liri 실행
$
bun run dev
오픈소스 · 커뮤니티
Liri는 오픈소스 프로젝트이며 모든 기여자를 환영합니다