Liri
Linglong Bird · パーソナルAIアシスタント · ローカルファースト · セキュリティ内蔵
$ git clone https://github.com/cocosoft/Liri.git まだ歩き終えていない道
2026 年 5 月 25 日、それは v0.1 と 100 コミットだけでした。5 か月後、4000 を超えるファイルと 27 のチャネルに育ち——同時に代償も生みました。7000 行の巨石ファイル、誰も登録していない 105 個の上限超過ファイル、「デッドコードのクリーンアップ」がサンドボックスサブシステム全体を消してしまったこと。
私たちはロールバックし、復元し、削除・境界・状態語彙を 1 つずつ CI ゲートにしました。この道はまだ終わっていません。
Liri とは
Liri は TypeScript + Rust アーキテクチャで構築された パーソナルAIアシスタント です。
チャットボットにとどまりません — 意図を理解 し、コマンドを実行 し、タスクを管理 し、ツールを呼び出 し、他の AI エージェントと協働することもできます。1 つのエンジンがターミナル、デスクトップ、IM、MCP のすべての入口を支えます。
71 個のモジュール型サブシステム、4,109 個の TypeScript ファイル、429 個のデスクトップコンポーネント — ビルドバリアントごとに削減できます。
主要機能
8 つの差別化された能力。いずれも 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 によるコードインテリジェンス
- Web スクレイピングと検索
- 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 件のインジェクションパターンを検出(ゼロ幅文字、環境変数の汚染を含む)
- 10 件の Shell 専用ルール(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。独自コマンドも接続可能
ツールとしての呼び出し
音声機能自体もツールで、モデルが必要に応じて呼び出せます
マルチデバイス対応
デスクトップとターミナルが同じ音声サービスを共有
ハンズフリー操作 · マルチタスク · アクセシビリティ支援 · 音声ショートカット · いつでもどこでも、話せば実行
セカンドブレイン
ナレッジベース → 記憶 → セッションイベント:検索可能な 3 層のコンテキストを、すべて手元に保存
ナレッジベース
Markdown をディスクに保存 + セマンティックインデックス。検索結果には出典を付与
記憶システム
階層型記憶 + SQLite ベクトルテーブル。関連度で重み付けして想起
セッションイベントログ
モデルへのリクエストに入る内容はすべてセッションイベントとして保存され、再生できます
整理とガバナンス
アイドル時に知識を整理し、ウィンドウを超えたらコンテキストを圧縮 — 実在する 2 本のバックグラウンドパイプライン
DreamEngine の 5 段階パイプライン
コンテキストの階層ガバナンス
長い会話がウィンドウを超えると、まず古いターンから捨て、構築時のメモリ使用量を O(全量) から O(ウィンドウ) に下げます。切り詰め時には「原文は取得可能」という注記を残し、必要ならページ単位で読み戻し、さらにトークン水位に応じて自動圧縮します。
PDCA 自己反復ループ
長時間のタスクでは、Liri が Plan-Do-Check-Act ループを自動で回します。タスク分解 → 手順の実行 → 結果のレビュー → 計画の修正を、完了または終了条件に達するまで繰り返します。
デスクトップクライアント
Tauri 2.11 + React 19 で構築 · 429 個の TSX コンポーネント · 32 個の機能ページ · 完全なデスクトップ体験
画面構成のイメージであり、実際のスクリーンショットではありません
27 個のメッセージチャネル
27 個のチャネルすべてに対応するアダプターがあります。環境変数を設定すると有効になり、コンパイル時に削減することもできます。
全 27 チャネル · 統一カタログ · チャネル単位で有効化 · コンパイル時に削減可能
エコシステム
プラグインマーケット + MCP マーケット + 3 つのスキルソース + テンプレートマーケット = 組み合わせ可能な Liri エコシステム
MCP マーケット
5 つのソースアダプターを一括検索
プラグインマーケット
ローカル / npm / リモートレジストリの 3 ソース
3 つのスキルソース
組み込み / ユーザー / サードパーティを物理的に分離
テンプレートとプロトコル
エージェントとドキュメントのテンプレート。接続するだけで使える
機能一覧にとどまらない
見落としやすいけれど、毎日使っている 3 つ。
Buddy ペルソナ
ツールではなく、相棒です。外見はシードから決定論的に生成されるため、同じ Buddy はいつも同じ姿。成長状態は保存され、セッションをまたいで積み上がります。
コストの透明性
価格はデータベースから読み、プロバイダーが返した実際のモデル名に帰属させ、呼び出しごとに cost_records へ書き込みます。予算は水位を超えるとまず警告し、次に圧縮し、最後に遮断します。
4 種類の利用者
開発者はコマンド実行とコード編集に、セキュリティ責任者は AST レベルの遮断と監査に、運用は常駐サービスとして、一般ユーザーはチャットアプリからそのまま使います。
現在の制限
高速イテレーション期にまだ整っていない点を、先に書いておきます。遠回りを避けられるように。
セキュリティ体系は外部監査待ち
外部監査待ち5 層の防御線と 6 種のサンドボックスバックエンドは実装済みで、51 個のサンドボックス関連ファイルを 1 つずつ確認できますが、第三者によるセキュリティ監査はまだ受けていません。
デスクトップの操作感を調整中
調整中429 個の TSX コンポーネントと 32 個のページは用意済みですが、ショートカット、アニメーション、境界ケースはまだ調整中です。
エコシステムマーケットの項目は限定的
構築中プラグインマーケット、MCP マーケット、スキルソースはつながっていますが、インストールできる項目はまだ拡充中です。
クイックスタート
3 ステップ:依存関係のインストール → API キーの設定 → dev の実行
依存関係のインストール
$ git clone https://github.com/cocosoft/Liri.git
$ cd Liri/app && bun install
API キーの設定
$ cp .env.example .env
$ # .env を編集して API キーを入力 Liri の起動
$
bun run dev
オープンソース · コミュニティ
Liri はオープンソースプロジェクトで、すべての貢献者を歓迎します