提醒一下:这个项目(包括 README)都深受 AI agent 影响。如果你不喜欢这种带有 LLM 味道的行文,请提前知悉。等事情稳定下来后,会补上由人撰写的文档。
自带大脑
一个原生桌面 AI 同事,配合你已经在跑的模型使用。把 byob 指向任何 OpenAI 兼容的端点(llama-server、Ollama、LM Studio、vLLM 或托管 API),它就能在你的文件夹里和你一起干活:读写文件、运行代码,并在聊天窗口旁边构建电子表格、图表、文档和小型应用。
byob 是桌面软件,而不是塞在窗口里的网页:一个程序同时支持 Linux、macOS 和 Windows,在 GPU 上自行绘制界面,不依赖 Electron。

针对本地模型(llama.cpp)实时录制;等待模型的时间已剪掉。
它能做什么
- 真正的桌面应用。单个文件夹,完整版下载约 60 MB(精简版 13 MB),带原生文件对话框、拖放和键盘快捷键。浏览器界面的安排与常见做法相反:同一个原生界面编译成 WebAssembly,因此一个标签页或你的手机能获得完全相同的应用,并共享同一会话、实时同步。
- 你的模型,你的机器。不捆绑推理、不需要账号:任何 OpenAI 兼容的 URL 都行。首次运行会自动发现常见端口上的本地服务器;当服务器不支持工具调用时,回退到基于提示词的调用。
- 聊天旁的产物。电子表格(xlsx/csv)、图表、Markdown 文档、图像和 HTML 应用,每种都带版本历史。
- 有缰绳的手。文件工具、run_command 和 run_python(在 Linux 上沙箱运行);带 diff 的审批卡片;按轮次撤销。
- 会读、会搜、会记。PDF、Word 和 PowerPoint 文件;图像,供能看图的模型使用;网页搜索与页面阅读(默认 Exa,也可用你自己的 SearXNG、Brave 或 Tavily);跨聊天以纯 Markdown 保存的笔记;长任务的步骤计划。
- 工作区。一个带有自己设置的文件夹,也是命令运行的地方:本机、Nix dev shell 或 Docker/Podman 容器。设置按全局 → 工作区 → 聊天分层。
- 随处可用。byob --serve 把该会话同时开放给浏览器;配合 tailscale serve 就能在手机上用。
- 一切都是插件。提示词、核心工具、产物、电子表格、子代理和压缩都是捆绑插件,使用与所有人相同的 API。插件可以添加工具、绘制 UI(面板、标题栏小标签、设置、卡片)、挂接一轮对话的每个阶段,并运行长期驻留的后端。byob 能在聊天中编写并修复自己的插件。
| “给我做一个带计数器面板的插件”:byob 写出它,读取自身的加载错误,修复它们,然后面板出现。 | HTML 应用内联运行,在桌面上(byob 自带一个独立的 Servo 渲染进程)和浏览器界面中都是如此。 |
|---|---|
| 把 CSV 作为电子表格打开;每次写入都会重新计算,并把错误报告回模型。 | 首次运行:选择一个它发现的服务器,或一个预设。 |




手机宽度下的浏览器界面。

安装
文章标题:Show HN: A local-first AI agent for the desktop, no Electron, any LLM endpoint
正文:
cargo install byob # with the browser UI built in
cargo install byob --no-default-features # slim: desktop only, a few MB smaller
nix build github:Scronkfinkle/byob # or .#byob-slim
Linux、macOS 和 Windows 的发布归档在 releases 页面:byob-… 包含全部内容(浏览器 UI 和 byob-artifact-host,后者用于内联渲染 HTML 应用;请把它放在 byob 旁边),byob-slim-… 则只有 byob。cargo install 不会构建渲染器;缺少它时,HTML 应用会通过一次点击在浏览器中打开。在 Linux 上,byob 不需要 GUI 工具包(文件对话框通过 XDG desktop portal 或 zenity 处理;两者都没有时,可以把文件拖到窗口上),渲染器使用系统的 OpenGL(Mesa)绘制。
在 macOS 上,这些构建尚未由 Apple 开发者签名。从终端获取时,发布归档不会触发 Gatekeeper(在 Intel Mac 上请使用 x86_64 而不是 aarch64):
v=0.3.4; curl -L https://github.com/Scronkfinkle/byob/releases/download/v$v/byob-$v-aarch64-apple-darwin.tar.gz | tar xz
./byob-$v-aarch64-apple-darwin/byob
或者获取 byob-…-apple-darwin.dmg,把 byob.app 拖进 Applications。若用浏览器下载,macOS 起初会拒绝打开它:先尝试一次,然后打开 系统设置 → 隐私与安全性 → 仍要打开(在 macOS 14 及更早版本上,右键 → 打开),或运行 xattr -dr com.apple.quarantine /Applications/byob.app。从 Finder 打开时,byob 会从你的主文件夹启动,并找到你 shell 中的工具(Homebrew、Nix)。
使用
byob # desktop window
byob --serve # + browser UI on http://127.0.0.1:7470
byob --headless # browser UI only, no window
byob --inference-url http://host:8080/v1 --model local
BYOB_API_KEY=sk-... byob # for hosted endpoints
byob --workspace ~/projects/taxes # start in the workspace for that folder
tailscale serve 7470 # reach it from any device on your tailnet
byob --headless --allow-user [email protected] # only admit that Tailscale login
首次运行时,byob 会显示 Connect a model:它在这台电脑常用端口上找到的服务器(llama-server 8080、Ollama 11434、LM Studio 1234、vLLM 8000)、这些服务器和托管 API 的预设,以及一个 Test connection 按钮。之后,连接设置位于 Settings 的顶部(或点击标题栏中的状态圆点)。
聊天按 workspace 分组。+ Workspace 会创建一个(新文件夹或已有文件夹),并选择命令运行的位置。workspace 的 … 菜单和聊天标题旁的滑块会显示哪些设置是继承的、哪些是在此处设置的:model、approvals、tool calling、compaction、subagents、extra instructions。
插件
Settings → Plugins 列出当前视图中的聊天可以使用的插件。任何内置插件都可以 fork 到你自己的 plugins 并编辑(Fork to edit),或者直接让 byob 修改或编写一个:它具备编写工具,损坏的插件会把错误返回给模型,以便模型修复它。
- docs/views.md:视图树,即插件绘制的 UI(panes、chips、cards、grids)。
- docs/plugins-backend.md:长驻后端(Python 或 Rust)与 hooks。
- docs/environments.md:命令在哪里运行,以及如何添加你自己的环境。
- demos/:上手导览,每个都在一次性 profile 中运行(demos/run.sh todo)。
- examples/plugins/todo-demo:一个小插件,带有一个后端、一个 pane 和若干 cards,可供复制。
开发
nix develop # or: direnv allow
cargo run -p byob # launch the app
cargo xtask web # build the browser UI; the next `cargo build` embeds it
cargo xtask ci # full gate: fmt, clippy, tests, layers, no-tokio, wasm
nix build # release package (byob + bundled web UI + the artifact host)
# HTML artifacts inline on the desktop: the Servo helper is its own workspace (AGENTS.md §3)
(cd host/artifact-host && cargo build --release) # scripts/headless.sh picks it up
desktop GUI on a virtual display, scripted, with a screenshot (HEADLESS_RECORD=x.mp4 records it)
scripts/headless.sh --inference-url http://localhost:8080/v1 --model local --send "hi" --screenshot /tmp/byob.png scripts/readme-media.sh # regenerate this README's pictures
live test against a real server
BYOB_LIVE_URL=http://localhost:8080/v1 cargo test -p byob-llm -- --ignored
规则见 AGENTS.md,设计见 docs/architecture.md,后续计划见 ROADMAP.md。byob 起初是对 hob 的重写,hob 是更早的一个桌面协作程序,内置了 llama.cpp;byob 去掉了内置推理。
以 MIT OR Apache-2.0 许可协议授权。