$git clone https://github.com/ruilisi/lsbotEnglish | 中文
| 1 | [English](./README_EN.md) | 中文 |
| 2 | |
| 3 | <div align="center"> |
| 4 | <img src="https://files.lingti.com/images/lsbot-banner-dark.svg" alt="lsbot — Lean & Secure Bot" width="360" /> |
| 5 | </div> |
| 6 | |
| 7 | --- |
| 8 | |
| 9 | # lsbot — Lean & Secure Bot |
| 10 | |
| 11 | > **不需要信任的地方,就不应该建立信任依赖。** |
| 12 | |
| 13 | [](https://go.dev/) |
| 14 | [](LICENSE) |
| 15 | [](https://lsbot.org) |
| 16 | [](https://lsbot.net) |
| 17 | |
| 18 | > 📖 **文档:[lsbot.org/docs](https://lsbot.org/docs)** | 国内镜像:[lsbot.net/docs](https://lsbot.net/docs) |
| 19 | |
| 20 | --- |
| 21 | |
| 22 | ## Bot Needs to be Secured |
| 23 | |
| 24 | 当你运行一个 AI Bot,你实际上把机器的钥匙交了出去:文件、终端、数据库、浏览器会话、凭证。Bot 读取你的代码、笔记、私人文档,并以你的名义执行命令。 |
| 25 | |
| 26 | 问题不是 Bot 是否有用。**问题是:还有谁能看到它看到的东西?** |
| 27 | |
| 28 | 你每天操作电脑,层层加密加锁——密码管理器、磁盘加密、双重验证。但当你打开一个 AI Bot,这一切防线往往荡然无存。你的每一条消息、每一个工具调用结果,都在你不知情的情况下流经某台你不控制的服务器。 |
| 29 | |
| 30 | 这不是理论风险。这是今天几乎所有 AI Bot 工具的默认配置。 |
| 31 | |
| 32 | --- |
| 33 | |
| 34 | ## Why OpenClaw is Not Secured |
| 35 | |
| 36 | OpenClaw(以及大多数同类工具)以便利性和功能广度为设计目标,安全性是事后考虑,而非核心设计原则。 |
| 37 | |
| 38 | | 问题 | 意味着什么 | |
| 39 | |---|---| |
| 40 | | 消息通过开发者的云服务路由 | 服务商可以读取每一条消息 | |
| 41 | | 没有端到端加密 | 任何中继节点都可以审查内容 | |
| 42 | | npm 依赖链 | 500+ 第三方包,任何一个都可能被攻击 | |
| 43 | | Node.js 运行时 | 动态执行环境,攻击面庞大 | |
| 44 | | 没有本地数据保证 | 对话历史、上下文、记忆——存储位置不明 | |
| 45 | |
| 46 | OpenClaw 在功能和集成方面做得出色。但它的架构假设你信任中继基础设施。对于个人电脑、企业环境,或任何数据敏感的场合,这个假设不成立。 |
| 47 | |
| 48 | 当你把终端和文件的访问权限交给 AI Bot,传输层必须被当作敌对环境对待。OpenClaw 没有做到这一点。 |
| 49 | |
| 50 | --- |
| 51 | |
| 52 | ## Why lsbot |
| 53 | |
| 54 | `lsbot` 是 **Lean Secure Bot** 的缩写。名字也呼应了 `ls`——Unix 最基础的命令,第一次拿到新机器时你敲的第一个命令。像 `ls` 一样,lsbot 是一个基础工具:精简、专注、永远可用。 |
| 55 | |
| 56 | **lsbot 建立在一个核心原则上:你的数据属于你。** |
| 57 | |
| 58 | 这个原则决定了每一个架构选择: |
| 59 | |
| 60 | - **端到端加密,默认开启。** 所有 relay 流量使用 P-256 ECDH + AES-256-GCM 加密。中继服务器只看到密文,无法读取你的消息。 |
| 61 | - **单一静态二进制。** 没有运行时,没有包管理器,没有依赖链。攻击面就是这一个二进制文件——可审计、确定性、可复现。 |
| 62 | - **本地优先。** 对话历史、记忆、配置、凭证——全部存储在你的机器上。没有任何内容写入云端数据库。 |
| 63 | - **密钥验证带外进行。** 浏览器不会自动从服务器获取 Bot 的公钥。你从 `lsbot e2e pubkey` 手动粘贴,并核对指纹。中继服务器无法替换密钥。 |
| 64 | |
| 65 | --- |
| 66 | |
| 67 | ## Lean Secure Bot |
| 68 | |
| 69 | ```bash |
| 70 | lsbot relay --provider deepseek --api-key sk-xxx |
| 71 | ``` |
| 72 | |
| 73 | 一条命令启动安全 Bot: |
| 74 | |
| 75 | 1. 首次运行自动在 `~/.lsbot.pem` 生成持久化 P-256 密钥对 |
| 76 | 2. 通过 WebSocket 连接中继服务器 |
| 77 | 3. 仅发布**公钥**——私钥永远不离开你的机器 |
| 78 | 4. 每一条响应在离开你的进程前加密 |
| 79 | 5. 每一条消息到达你的进程后解密 |
| 80 | |
| 81 | 中继服务器(lsbot.org,国内镜像 lsbot.net)只看到密文。它无法读取你的消息,无法记录你的对话,无法推断你在使用哪些工具或访问哪些文件。 |
| 82 | |
| 83 | ```bash |
| 84 | lsbot e2e pubkey |
| 85 | # Key file: ~/.lsbot.pem |
| 86 | # Public key: BK3x9f2... |
| 87 | # Fingerprint: sha256:29f8954f |
| 88 | ``` |
| 89 | |
| 90 | 打开 Bot 页面,点击 **Secure**,粘贴公钥,核对指纹与命令行输出一致。此后每次访问自动激活加密。 |
| 91 | |
| 92 | --- |
| 93 | |
| 94 | ## 我们不能相信任何聊天服务器 |
| 95 | |
| 96 | **信任中继服务器是 AI Bot 安全的原罪。** |
| 97 | |
| 98 | 几乎所有主流 AI Bot 工具都依赖一个隐含假设:消息通过开发者的服务器路由是安全的。这个假设在以下任何场景中都会失效: |
| 99 | |
| 100 | - 服务商被攻击或遭受数据泄露 |
| 101 | - 政策变更导致日志保留或内容审查 |
| 102 | - 内部员工滥用访问权限 |
| 103 | - 法律程序要求披露用户数据 |
| 104 | - 服务商出售或被收购 |
| 105 | |
| 106 | 你的 AI Bot 可以访问你的终端、你的文件、你的代码库。它知道你在做什么项目,知道你的工作流程,知道你的私人文档。**这些信息通过一个你不控制的服务器转发——这不是可接受的风险,这是一个架构缺陷。** |
| 107 | |
| 108 | lsbot 的设计前提是:中继服务器是不可信的。这不是对 lsbot.org 或 lsbot.net 的不信任,而是一个工程原则:**不需要信任的地方,就不应该建立信任依赖。** |
| 109 | |
| 110 | --- |
| 111 | |
| 112 | ## 数据库保存在本地 |
| 113 | |
| 114 | lsbot 没有云端数据库。 |
| 115 | |
| 116 | | 数据 | 存储位置 | 云端是否存在 | |
| 117 | |---|---|:---:| |
| 118 | | 对话历史 | 浏览器 IndexedDB(本地) | ❌ | |
| 119 | | E2EE 私钥 | `~/.lsbot.pem` | ❌ | |
| 120 | | 配置文件 | `~/.lsbot.yaml` | ❌ | |
| 121 | | AI API 密钥 | `~/.lsbot.yaml` | ❌ | |
| 122 | | Cron 任务数据库 | `~/.lingti.db` | ❌ | |
| 123 | | 技能文件 | `~/.lingti/skills/` | ❌ | |
| 124 | |
| 125 | 云中继服务器(`lsbot.org`,国内镜像 `lsbot.net`)只做一件事:**路由加密后的消息**。它不保存任何内容,不分析任何内容,不记录任何内容。消息转发后立即丢弃。 |
| 126 | |
| 127 | 即使中继服务器明天关闭,你所有的数据、配置、历史记录都完好无损在你的机器上。这不是承诺,这是架构决定的结果。 |
| 128 | |
| 129 | --- |
| 130 | |
| 131 | ## 快速开始 |
| 132 | |
| 133 | **两步启动,无需平台账号,无需公网服务器:** |
| 134 | |
| 135 | **第一步:安装** |
| 136 | |
| 137 | ```bash |
| 138 | # macOS / Linux / WSL |
| 139 | curl -fsSL https://files.lingti.com/install-lsbot.sh | bash |
| 140 | |
| 141 | # Windows (PowerShell) |
| 142 | irm https://files.lingti.com/install-lsbot.ps1 | iex |
| 143 | ``` |
| 144 | |
| 145 | **第二步:运行** |
| 146 | |
| 147 | ```bash |
| 148 | lsbot relay --provider deepseek --api-key sk-xxx |
| 149 | ``` |
| 150 | |
| 151 | 启动后自动输出你的专属 Bot 页面: |
| 152 | |
| 153 | ``` |
| 154 | Your bot page: https://lsbot.org/bots/xxx |
| 155 | E2E fingerprint: sha256:a3f7c91b2d4e8f06 |
| 156 | ``` |
| 157 | |
| 158 | > 国内用户:Bot 页面也可通过 `https://lsbot.net/bots/xxx` 访问。 |
| 159 | |
| 160 | 打开链接,点击状态栏的 **Secure** → 粘贴公钥 → 核对指纹,即可在浏览器中与 Bot 进行端到端加密对话。 |
| 161 | |
| 162 | > 支持的 `--provider`:`deepseek`、`claude`、`kimi`、`minimax`、`gemini`、`openai` 等,详见 [AI-PROVIDERS.md](AI-PROVIDERS.md)。 |
| 163 | |
| 164 | #### 端到端加密(E2EE) |
| 165 | |
| 166 | Bot Page 默认启用**端到端加密**,relay 服务器(lsbot.org / lsbot.net)无法读取消息内容: |
| 167 | |
| 168 | - bot 首次启动时,在 `~/.lsbot.pem` 自动生成持久化 P-256 密钥,日志打印指纹 |
| 169 | - 浏览器打开 Bot Page,点击状态栏 **Secure** 进入设置面板 |
| 170 | - 从终端运行 `lsbot e2e pubkey`,将公钥粘 |