Jelly:本地多智能体工作台
在自己的 Mac、Linux 或虚拟机上运行多个持久化 AI 智能体,配真实移动端 Web UI 与本地 Chrome。
- Star 数
- ★ 55
- 最近更新
- 2 天前
- License
- MIT
- 主语言
- TypeScript
- FA 评分
- 52/100 · 缺口较多
30 秒速览
- 可在哪里用
- 平台专用ChatGPT · OpenAI API
- 开始前需要
- 典型场景
- 独立开发者用一台 VM 运营整个业务,希望把邮件、运维、抓取等杂活分派给不同项目目录下的多个智能体。
- 主要局限
- 不是沙箱:智能体以你的 OS 用户权限执行 shell 与文件操作,没有逐工具审批,任何能访问该服务的人都可以调用这些工具。
- 源码审查
- 52/100 · 缺口较多
这个 Agent 能做什么,适合哪些场景?
Jelly 是一个本地优先的多智能体系统,面向用一台虚拟机跑完整个业务的个人开发者。它基于 Bun、React、SQLite 以及 Pi agent harness 构建,前端开发端口为 5173,生产服务端口为 3100,实例数据默认写入 .jelly/ 目录,用户级 MCP 配置与 OAuth 缓存放在 ~/.jelly/。你可以自由创建任意数量的智能体,按项目目录分组,每个智能体拥有独立的浏览器窗口、配置文件和私有桌面,并共享同一个受限的权限模型。运行智能体必须连接 ChatGPT 订阅或填写 OpenAI API 密钥,官方明确说明没有免密钥演示模式,模型对话会发送给你选择的模型提供商。它定位为“可信用户工具”而非沙箱:智能体以你的操作系统用户权限执行 shell 命令和访问文件,sudo 请求通过私有认证卡片输入密码,密码不会发给模型也不会被 Jelly 保存。
智能体具备 shell 工具、子智能体与 MCP 连接,支持文件上传、内联图片和可下载产物。浏览器工具允许智能体读取有限的可见文本与元素引用、点击/填写非机密字段、管理会话内标签页、滚动、等待文本或就绪状态,并读取经过脱敏的错误诊断;这些操作共享每个智能体的隔离与私有控制门禁,引用在观察、导航或交接后失效,快照只覆盖顶层 DOM。当智能体需要登录网站时,你可以在 Web UI 中通过 noVNC 接管浏览器;剪贴板在本地与远端之间传输纯文本,上限 12,000 字符,不进入聊天记录或日志。apply_patch 工具在 OpenAI API 和 ChatGPT 上提供 Codex 风格的多文件增/改/删/移补丁,要求精确唯一上下文,拒绝符号链接与硬链接源,单文件/补丁上限 1 MiB、最多 64 个操作、合计 16 MiB,写入并非事务性,失败会记录在 mutation ledger 中。管理员命令通过 request_sudo 执行,需要 Linux、支持 askpass 的 sudo 和 /usr/bin/python3。首个消息发送时,Jelly 会发起一次无工具的 OpenAI 小型请求,为智能体生成海味主题的自动命名。
- 独立开发者用一台 VM 运营整个业务,希望把邮件、运维、抓取等杂活分派给不同项目目录下的多个智能体。
- 需要让智能体登录内部或第三方网站,但又不想把密码交给模型的用户:先让智能体发起登录,再用 Web UI 的 VNC 手动接管完成登录。
- 想用现有的 ChatGPT 订阅而非单独购买 API 额度的个人用户,可在设置中通过设备码登录连接账号。
- 需要在服务器上安装软件包或管理系统服务的运维场景:让智能体调用 request_sudo,由用户在私有认证卡片中审批并输入密码。
- 希望在手机或笔记本上远程使用智能体的人:配置 Tailscale 后把 Web UI 添加到 iPhone 主屏幕,获得接近原生应用的体验。
- 开发者需要多文件补丁级代码修改:使用 apply_patch 在 OpenAI API 或 ChatGPT 通道上一次性增删改移多个文件。
如何安装或部署这个 Agent?
需要 Bun 1.3.9+ 与 Node.js 24+;托管浏览器桌面与 sudo 交接需要 Linux。
git clone https://github.com/dctanner/jelly.git
cd jelly
bun install
bun run dev打开 http://127.0.0.1:5173 即可。本地环境变量写入 .env.local(已被 Git 忽略),如需启用网页搜索与抓取,在其中设置 FIRECRAWL_API_KEY。
生产模式:
bun run build
bun start随后打开 http://127.0.0.1:3100,并先停止开发模式(两者默认共用 API 端口 3100)。
在 Debian/Ubuntu x86-64 上,若已安装 Google Chrome 或 Chromium,可安装可选的浏览器桌面:
bun run setup:desktop若浏览器不在常规系统路径,设置 JELLY_BROWSER_PATH。要通过 Tailscale 私有网络访问:
bun run dev:tailscale如何使用这个 Agent?
首次使用必须在 Settings 中连接 ChatGPT 账号(一次性设备码登录,输入设置页显示的代码后自动连接)或填入 OpenAI API 密钥,否则无法发送消息;自动模式优先 ChatGPT,其次 API 密钥。
点击左上角 + 立即创建并打开 New Agent,它会继承当前项目或获得项目外的私有工作区;发送第一条消息前可点击居中名称或头像就地编辑,改过名字即表示不参与自动命名。
为符合条件的 ChatGPT 订阅(Pro 500 或 Enterprise)或 OpenAI API 访问,可在 Settings → Model 或输入框的模型菜单中选择 GPT-6 Astra Ultrafast,它会以 service_tier: "ultrafast" 请求 Astra,标准 Astra 仍为默认,账户权限错误会直接暴露而不会静默回退。
在 Agent computer 面板中选择 Take control 接管某个智能体的浏览器;连接后可用 Paste to remote 和 Copy from remote 在两个设备间传输文本剪贴板;若会话过期或 Cookie 丢失导致控制卡住,可用 Agent computer → Recover lost control… 断开旧控制者并清空私有标签页与远端剪贴板,网站登录状态仍会保留。
开发校验:
bun run check
bun run test:desktopbun run check 包含结构化浏览器的 Chromium 测试、补丁文件系统测试和本地 provider 传输测试;bun run test:desktop 额外需要 Linux 桌面运行时。测试使用临时数据和固定夹具,不需要付费模型调用。
这个 Agent 有哪些优点和局限?
- 多智能体天然隔离:每个智能体有独立浏览器窗口、配置文件、标签页、剪贴板与人工控制状态,最多可同时分配 8 个浏览器会话。
- 凭据保护设计具体:sudo 密码只在私有认证卡片输入,不发给模型也不被 Jelly 保存;剪贴板传输仅限纯文本、上限 12,000 字符且不进入日志。
- 支持使用现有 ChatGPT 订阅(设备码登录可跨 Tailscale 工作),不必额外购买 API 额度。
- apply_patch 提供 Codex 风格多文件迁移,并有明确的体积与操作数上限以及 mutation ledger 失败记录。
- 本地优先的数据布局清晰:.jelly/ 存对话、凭据、浏览器配置与产物,~/.jelly/ 存 MCP 配置和 OAuth 缓存,便于备份与审计。
- 不是沙箱:智能体以你的 OS 用户权限执行 shell 与文件操作,没有逐工具审批,任何能访问该服务的人都可以调用这些工具。
- 绑定模型供应商:运行智能体必须使用 ChatGPT 订阅或 OpenAI API 密钥,没有免密钥演示模式,本地存储也不等于本地推理。
- 平台限制明确:托管浏览器桌面和 sudo 交接需要 Linux,桌面运行时还依赖 xclip 与 /usr/bin/python3。
- apply_patch 的写入并非事务性,失败可能留下部分修改;路径不做沙箱隔离,且拒绝符号链接与硬链接源。
- 安装步骤偏多:需要同时具备 Bun 1.3.9+ 与 Node.js 24+,生产与开发共用 3100 端口,切换模式前必须停止另一端。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Jelly:本地多智能体工作台 当前 | 52 · 缺口较多 | — | ★ 55 | 2 天前 | TypeScript | ChatGPT · OpenAI API |
| Auto Browser | 62 · 存在缺口 | 自托管服务免费 + 模型费 | ★ 897 | 1 天前 | Python | OpenAI API · Claude API |
| Aiden | 65 · 存在缺口 | 命令行工具免费 + 模型费 | ★ 844 | 20 天前 | TypeScript | ChatGPT · OpenAI API · Claude API |
| JoySafeter | 59 · 缺口较多 | 自托管服务免费 + 模型费 | ★ 312 | 5 个月前 | Python | — |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
README 明确声明 Jelly 是 trusted-user 工具而非沙箱:agent 以 OS 用户权限执行 shell 与文件操作,且无逐工具审批;apply_patch 路径未沙箱化,sudo 在策略允许时立即执行。这属于有意的设计取舍,但 least_privilege 与 user_confirmation 因此仅得 1。加分项:sudo 密码走私有认证卡、不发给模型也不保存;浏览器 secret 字段启发式检测并引导使用私有登录;剪贴板仅文本、限 12000 字符、不进入聊天/日志;.jelly/ 与 ~/.jelly/ 明确不入版本控制。扣分项:依赖仅锁定部分版本(多个 ^ 范围),无 lockfile 证据、无依赖审计或漏洞缓解说明,dependency_security 仅 1;apply_patch 非事务性、失败可留部分修改,rollback 仅靠 mutation ledger 报告,得 1;external_effects 因浏览器点击/导航/输入等网站副作用不可撤销而得 1;source_attribution 仅 MIT 与 noVNC MPL-2.0 一句,发布者身份未验证,得 1。
自洽性较好:README 的命名、浏览器隔离、补丁限制与测试文件(agent-naming.test.ts、apply-patch-transport.test.ts)描述一致,且测试使用本地 stub 与确定性 fixture,不依赖付费模型调用,self_consistency 得 2。失败信息有具体设计:命名失败/超时保留 New Agent 且不重试、不阻断任务;账号权限错误显式暴露而非静默回退;补丁失败写入 mutation ledger,failure_messages 得 2。扣分项:依赖可用性依赖 Bun 1.3.9+、Node 24+、Linux 桌面运行时、系统 Chrome/Chromium、xclip、/usr/bin/python3 与 sudo askpass,环境门槛高且无降级路径说明,dependency_availability 仅 1。
受众与场景清晰:面向在单台 VM/Mac/Linux 上经营业务、需要多 agent 与移动端访问的用户,audience_and_scenarios 得 2。能力边界写得具体:浏览器快照仅顶层 DOM、引用会过期、secret 检测为启发式、补丁 1 MiB/64 操作/16 MiB 上限、最多 8 个浏览器会话、Stop 无法撤销已发送动作,capability_boundaries 得 2。扣分项:触发精度不足——自动命名在首条消息时发起一次额外模型请求,虽可编辑名称退出,但默认行为对用户是隐式的,trigger_precision 仅 1。环境适配有明确 Linux 限定与 Tailscale 建议,environment_fit 得 2。
信息架构良好:README 分节覆盖快速开始、生产、浏览器桌面、管理员命令、安全与本地数据、开发,并有 docs/ARCHITECTURE.md、DESIGN.md、ROADMAP.md 指引,information_architecture 得 2。安装说明具体到命令与端口(bun install、bun run dev、127.0.0.1:5173/3100),install_notes 得 2。已知限制写得异常充分(非沙箱、sudo 即时执行、补丁非事务、剪贴板限制、Stop 局限、会话上限),known_limitations 得 3。许可证为完整 MIT 文本且 package.json 标注 MIT,license 得 3。扣分项:版本号仅 0.1.0,无 CHANGELOG,versioning_changelog 仅 1;命名稳定性弱——README 出现 GPT-6 Astra Ultrafast 等具体模型名与 service_tier,模型可用性随账号变化,naming_stability 仅 1;示例与 FAQ 仅快速开始与少量说明,无 FAQ,examples_and_faq 仅 1;维护责任未声明(无 maintainer、无贡献指南、发布者未验证),maintenance_responsibility 仅 1。
输出可用性尚可:提供本地 Web UI、移动端体验、文件上传、内联图片、可下载产物与结构化浏览器工具,output_usability 得 2。边际价值明确:本地优先、多 agent 分组、私有浏览器交接、sudo 请求流程,相对通用 agent 框架有差异化,marginal_value 得 2。扣分项:成本收益不清晰——必须自备 ChatGPT 订阅或 OpenAI API key,无无 key 演示模式,Ultrafast 明确更高定价与独立限额,且需自维护 VM、Chrome、VNC、Tailscale 等基础设施,cost_benefit 仅 1。
claim_traceability 得 2:README 的多数声明可对应到具体测试文件(命名、补丁传输、浏览器工具)与文档路径,但未逐条给出可核验的引用编号。cross_source_corroboration 得 2:README、package.json 脚本与测试文件在命名流程、补丁工具、浏览器工具集上相互印证。fact_inference_separation 得 2:README 明确区分模拟内容(演示数据、sudo 与网站登录为模拟)与真实能力,测试注释也声明使用隔离 fixture 且不发真实模型请求。扣分项:无独立第三方验证、无发布者验证,且本次为静态审查未执行任何代码,故不高于 2。
- Jelly 明确不是沙箱:agent 以你的 OS 用户权限执行 shell 与文件操作,且默认无逐工具审批;请仅在 loopback 或可信 Tailscale 网络内运行,切勿暴露到公网。
- apply_patch 的路径未沙箱化,且文件系统写入非事务性,失败可能留下部分修改;对重要仓库使用前应先备份或使用版本控制。
- sudo 在策略允许时立即以 root 执行,无二次确认;请审慎配置 sudoers 与 askpass。
- 依赖仅部分锁定版本(多个 ^ 范围),未提供 lockfile、依赖审计或漏洞缓解说明;部署前应自行锁定并审计依赖。
- 运行需要 Bun 1.3.9+、Node 24+、Linux 桌面运行时、系统 Chrome/Chromium、xclip、/usr/bin/python3 与 sudo askpass,环境门槛高且无降级路径。
- 必须自备 ChatGPT 订阅或 OpenAI API key,无无 key 演示模式;Ultrafast 定价更高且限额独立,成本需自行评估。
- 发布者身份未经验证,维护责任与更新路径未声明,版本仅 0.1.0 且无 CHANGELOG;长期维护与升级风险需自行承担。
- 本次为静态源码审查,未执行任何代码,也未做独立测试;所有结论仅基于所提供文件。