OpenBrowserClaw:浏览器就是服务器的零基础设施 AI 助手
这才是真正的「serverless」——没有服务器,只有浏览器。OpenBrowserClaw 是 NanoClaw 的浏览器版重新构想,将完整的个人 AI 助手运行在一个浏览器标签页里。不需要 Node.js 后端,不需要 Docker,也没有 SQLite。IndexedDB 存数据,OPFS 管文件,Web Worker 跑 Agent 逻辑,WebVM(v86 WASM)提供沙盒 Linux 环境。整个应用就是一堆静态文件,扔到任何 CDN 上就能跑。
架构设计很巧妙:主线程的 Orchestrator 负责状态机、消息路由和任务调度;Web Worker 里的 Agent 独立调用 Anthropic API 执行 tool-use 循环;bash 命令通过 v86 模拟的 Alpine Linux 在 WASM 中沙盒执行。内置 7 种工具——bash、JavaScript、文件读写、HTTP 请求、记忆持久化、定时任务。还支持 Telegram Bot 频道(纯 HTTPS,但需要保持标签页打开)。
与 NanoClaw 相比,运行时从 Node.js → 浏览器标签页,沙盒从 Docker → WebVM,数据库从 SQLite → IndexedDB,文件系统从磁盘 → OPFS,依赖从 ~50 个 npm 包 → 0 个运行时依赖。是浏览器能力边界的一次极致探索。
项目背景
传统的个人 AI 助手都需要服务器——Node.js 进程、Docker 容器、数据库服务。OpenBrowserClaw 提出了一个激进的问题:如果浏览器本身就是服务器呢?
这是 NanoClaw 的浏览器版重新构想。NanoClaw 是一个轻量级个人 AI 助手框架,跑在 Node.js 上,需要 Docker/Apple Container 做沙盒,SQLite 存数据。OpenBrowserClaw 把这一切都搬进了浏览器标签页——同样的哲学(小到能理解、为单用户设计),但完全不需要服务器。
架构设计
浏览器标签页(PWA)
├── Chat UI / Settings / Task Manager(前端组件)
├── Orchestrator(主线程)
│ ├── 消息队列与路由
│ ├── 状态机(idle/thinking/responding)
│ └── 任务调度器(cron)
├── IndexedDB(消息、任务、配置)
├── OPFS(分组文件存储)
└── Agent Worker(Web Worker)
├── Claude API tool-use 循环
└── WebVM 沙盒(v86 Alpine Linux in WASM)
关键设计:
- **主线程**负责 UI 和调度,不做重计算
- **Web Worker**独立运行 Agent 逻辑,不阻塞 UI
- **WebVM**提供完整 Linux 环境,bash 命令在 WASM 沙盒里执行
- **IndexedDB**替代 SQLite,存储消息、会话、任务、配置
- **OPFS**(Origin Private File System)替代磁盘文件系统
内置工具
| 工具 | 功能 |
|------|------|
| bash | 在 v86 模拟的 Alpine Linux 沙盒中执行 Shell 命令 |
| javascript | 在隔离作用域中执行 JS 代码(比 bash 更轻量) |
| read_file / write_file / list_files | OPFS 分组工作区的文件管理 |
| fetch_url | 通过浏览器 fetch() 发 HTTP 请求(受 CORS 限制) |
| update_memory | 将上下文持久化到 CLAUDE.md(每次对话自动加载) |
| create_task | 用 cron 表达式创建定时任务 |
WebVM 沙盒
bash 工具通过 v86(x86 模拟器的 WASM 版本)运行一个完整的 Alpine Linux。需要下载 v86 WASM 二进制和 Alpine rootfs 镜像放到 `public/assets/`。首次使用时 VM 启动约 5-15 秒。没有这些资源时 bash 工具会返回友好错误提示,其他工具正常工作。
Telegram Bot 集成
可选功能,纯 HTTPS 实现(无 WebSocket):
1. 通过 @BotFather 创建 Bot
2. 在 Settings 里填入 Bot Token 和 Chat ID
3. Telegram 消息和浏览器聊天走同样的处理流程
注意:浏览器标签页必须保持打开,Bot 才能响应。关闭标签页时消息会在 Telegram 侧排队,重新打开后处理。
与 NanoClaw 对比
| 维度 | NanoClaw | OpenBrowserClaw |
|------|----------|-----------------|
| 运行时 | Node.js 进程 | 浏览器标签页 |
| Agent 沙盒 | Docker/Apple Container | Web Worker + WebVM |
| 数据库 | SQLite | IndexedDB |
| 文件系统 | 磁盘 | OPFS |
| 主频道 | WhatsApp | 浏览器内聊天 |
| 其他频道 | Telegram, Discord | Telegram |
| Agent SDK | Claude Agent SDK | 原始 Anthropic API |
| 后台任务 | launchd 服务 | setInterval(需标签页打开) |
| 部署 | 自托管服务器 | 静态文件(任意 CDN) |
| 依赖 | ~50 npm 包 | 0 运行时依赖 |
安全模型
- API 密钥用 AES-256-GCM 加密存储,CryptoKey 不可导出
- 所有存储(IndexedDB、OPFS)受同源策略保护
- Agent 在 Web Worker 中运行,与 UI 线程隔离
已知限制:
- XSS 攻击可能绕过加密(同源内的脚本可调用加解密 API)
- javascript 工具内的 eval() 可发起任意 HTTP 请求
- Telegram Bot Token 目前明文存储
部署
npm run build
# 把 dist/ 上传到任何静态托管:GitHub Pages、Cloudflare Pages、Netlify、Vercel、S3 等
不需要服务器,就是 HTML + CSS + JS。
协议:开源 | 作者:sachaa | 灵感来源:NanoClaw