ovis
devswha/ovis加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

图:Ovis 应用图标,仓库内 public/icons/icon-192.png
想象一个具体场景:你让 Claude Code 在本地仓库里跑一个重构,它改到第三个文件时抛出一个权限确认——"是否允许执行 git push origin feat/export-guard?" 此刻你不在电脑前,而是在通勤的地铁上。传统做法是你盯着终端干等,或者干脆不敢让 Agent 跑长任务。
Ovis 就是为这个瞬间而生的。它是 herdr 的浏览器与手机客户端——把跑在你自己机器上的编码 Agent,会话内容变成手机和浏览器里可以随时查看、随时回复的聊天流,权限请求变成可以点一下的卡片。截至 2026 年 11 月初,Ovis 获得 1770 个 Star、246 个 Fork,是编码 Agent 外围工具中增长很快的一员。
这个项目的历史本身就是一段行业插曲。它最初叫 herdr web UI,是开发者 devswha 为自己的终端多路复用工具 herdr 写的 Web 界面。后来它长成了一个独立的、面向所有编码 Agent 的通用客户端,名字也就跟着改成了 Ovis(拉丁语"羊")。
有意思的是,仓库里还留着完整的迁移包袱:install.sh 里明确处理了旧插件 ID devswha.herdr-web-ui 到新 ID devswha.ovis 的配置继承,Node 运行时目录也保留了 ~/.local/share/herdr-web-ui/node 的旧路径兼容。这种"改名但不丢数据"的细致,在个人项目里并不常见。
从 2026 年 9 月 17 日创建到今天不到两个月,版本号已经迭代到 v0.4.21,发布节奏极快——几乎每天一个 release。
要理解 Ovis,得先理解 herdr。herdr 是一个终端多路复用器,专门为"同时跑多个编码 Agent"设计:每个 Agent 待在真实的终端面板里,保留自己的 shell、日志和运行中的进程,herdr 负责跟踪哪些面板里跑着 Agent,把状态汇总到标签页和工作区上。
Ovis 是连接"Agent 会话"和"人类注意力"的那一层。 具体能力包括:

图:聊天视图——Claude Code 面板的原生对话记录,每一轮的工作折叠成一行可展开
把每个 Agent 读成对话。 这是核心。Ovis 不做终端文本的粗暴解析,而是直接读取各 Agent 自己的会话文件:Claude Code 的原生 transcript、Codex 的 rollout 记录、OpenCode 的 SQLite 数据库、Grok 的 events.jsonl、Hermes 的 SQLite 会话存储……每轮的工作(Grep、Read、Edit、Write、Bash)折叠成一行"Worked for 2m 36s",点开就是细节。

图:Codex 面板等待输入时的权限确认卡片,选项可直接点选
用一次点击批准。 Agent 的权限请求和提问变成卡片,服务端在提交前会检查这张卡片是否仍然有效(避免对着一个已经过期的菜单做选择)。发消息期间还能排队,让 Agent 下一轮接着做。
真正的终端一键可达。 随时切到 live terminal,用的是 xterm.js 6 直连 herdr 的面板,和你自己在 herdr TUI 里看到的是同一个 pane。手机端还提供 Esc、Tab、Ctrl、方向键的虚拟键盘条。

图:终端视图——herdr 里的 shell 面板实时运行 git log 和 bun test
手机端。 PWA 形态,iOS/Android 都有 TestFlight / Google Play beta。配套 Tailscale,通过二维码扫码连接自己的设备。
如果把 herdr 理解成一台功能强大但操作复杂的工业设备——按钮多、布线复杂、每个功能都要学习——那 Ovis 就是它的遥控器:把繁复的终端操作压缩成聊天、卡片和几个键。
更贴切的类比是对讲机。Agent 在房间里(你的电脑)干活,你是走在楼里(通勤路上)的人。Ovis 让房间里的声音变成手机上的文字,并且让你能回一句"好,继续"。
Ovis 的技术选型非常明确:
| 层面 | 选型 |
|---|---|
| 前端 | React 19 + Vite 8 + TypeScript 7 |
| 终端 | xterm.js 6(含 fit / unicode-graphemes / web-links 三个插件) |
| 运行时 | Bun 1.4.2(packageManager 锁定),Node 22 仅作降级兜底 |
| 后端 | Bun 原生 HTTP + WebSocket 服务,端口 7317 |
| 终端宿主 | Rust 编写的 crates/pty-sidecar(PTY 侧车),预编译分发并校验 SHA-256 |
| 加密 | tweetnacl、@noble/ciphers、@noble/curves、@noble/hashes |
| 推送 | web-push(Web Push 通知) |
| 原生应用 | Mac(Swift)、Windows(C# / .NET)、Tailscale 集成 |
代码规模上,TypeScript 约 2510 万字节,占绝对主导,另有 CSS、HTML、Swift、C#、Java、Shell、PowerShell、JavaScript、Rust、Python 等辅助语言。
架构上有意思的设计是"三层分离":React 前端(src/)只负责渲染;Bun 服务端(server/)负责 Agent 会话解析、WebSocket 推送和权限校验;Rust PTY 侧车(crates/pty-sidecar)专门处理真实的终端 I/O。这样即使 Rust 侧车在某个平台编译不出来,还有 Node 18+ 兜底,再不行就退化为"屏幕镜像"(screen mirror)模式。
Ovis 的安装体验是我见过的同类项目里做得最好的之一:
curl -fsSL https://ovis.sh/install.sh | sh
这一行命令会自动完成:安装 herdr(如缺失)、安装 Bun(如缺失)、把 Ovis 注册为 herdr 插件、在 Tailscale 运行时通过 tailscale serve 暴露 HTTPS 地址并打印二维码。Mac 用户有 .dmg 一键安装包,Windows 用户有 Ovis.exe。
但前提条件很硬:
这一点必须说清楚:Ovis 没有托管服务,没有账号体系。它跑在你自己机器上,本地监听 127.0.0.1:7317。官方文档非常明确地警告:除非用户主动要求远程访问,否则绝不要绑定 0.0.0.0 或 LAN 地址——因为任何能访问到未设防服务器的人都能在你的终端里输入命令。
这是 Ovis 最让人意外的部分。仓库里有 713 个测试文件,测试密度在同类前端项目中相当罕见。
CI 有 14 个 workflow:主 ci.yml、PTY 侧车构建与测试(pty-sidecar.yml、pty-sidecar-attach.yml)、Windows 应用与安装(windows-app.yml、windows-install.yml、windows-terminal-qa.yml)、macOS DMG 打包、relay 部署、远程 bundle 构建、PR 标题规范检查等。CI 里固定了 Bun 1.4.2、Node 22、herdr 0.9.3 三个版本。
测试脚本分四层:test:unit(单元)、test:integration(集成)、test:ui(UI 回归,包含 UI 回归、上下文回归、粘性修饰键回归三个套件)、test:ssh(SSH 集成)。UI 测试用的是 playwright-core。
文档同样完整:docs/guide.md 有 11.8 万字符,覆盖快速开始、支持的 Agent 清单、功能说明、手机端、跨 PC SSH、访问与安全、配置、快捷键、工作原理、FAQ 十个大节。README 提供英/简中/日/韩四语版本,另有 INSTALL.md(安装)、CHANGELOG.md(变更)、DESIGN.md(UI 规范)、SECURITY.md(安全策略)、THIRD_PARTY_NOTICES.md(第三方声明)、以及分布在根目录、server/、src/ 三个位置的 AGENTS.md——后者是为编码 Agent 写的仓库内协作约定。
依赖 herdr 是最大的耦合。 Ovis 不是独立应用,你必须先接受 herdr 这个前提。对于已经在用 herdr 的人,这是顺水推舟;对于没有的人,等于要额外学一个终端多路复用器。
平台覆盖不均。 Rust PTY 侧车只提供 Linux x64/arm64 和 macOS 的预编译版本,Windows 走屏幕镜像,功能上打了折扣。文档还注明 Alpine 和 32 位 ARM 没有侧车构建。
部分 Agent 支持是"实验性"或"部分降级"。 Antigravity (agy) 标注为实验性且 macOS 未测;Letta Code 是只读 transcript;Grok 的会话识别依赖 /proc、lsof、sysctl 这些 Linux/macOS 特有的机制,Windows 上直接退化为终端文本。Copilot CLI 的选择项是只读的。
功能边界写得很克制,这点值得肯定。 CONTRIBUTING 里明确写道:新功能要么镜像 herdr 自己的 TUI 已有的能力,要么满足 Codex/Claude 官方 App、Paseo、T3 Code 这类主流编码 Agent 应用已经满足的需求——"提供它们都没有的便利,或者为小众场景新增一个设置或 UI 概念,很可能会被拒绝:每个功能都要长期维护和测试"。这种克制在快速迭代期尤其可贵。
隐私上算清白但有默认开启的遥测。 会话数据留在跑 Agent 的那台机器上,Ovis 本身没有账号也没有托管中继。但匿名使用计数默认开启(Settings → About → Anonymous usage counts 可查看并关闭,或设 OVIS_TELEMETRY=0)。语音输入功能会使用你自己的 OpenAI key 或浏览器自带的语音识别。
安装脚本会顺手 star 仓库。 首次安装时,如果 gh CLI 已登录且尚未 star,脚本会在终端里提示 20 秒,只在输入 "y" 时才 star——它绝不会自己动手。这个细节挺有意思,但也说明作者对 GitHub 生态的运作方式很熟悉。
Ovis 反映了一个正在成型的趋势:编码 Agent 的竞争焦点,正在从"能力"转向"人在回路的体验"。
当 Claude Code、Codex、OpenCode、Grok、Devin 各自的模型能力和工具调用都逐渐收敛之后,真正的差异化落在了"当 Agent 需要你时,你恰好在不在电脑前"这个问题上。Ovis 给出的答案是:让 Agent 的会话变成一种可以随身携带的通知与对话。
1770 个 Star、246 个 Fork、102 位贡献者、不到两个月从 0 迭代到 v0.4.21——这个增长曲线说明开发者确实需要这样一个东西。而它选择"跑在你自己机器上、不设账号、不做托管"的路线,也让"你的代码和对话不出本机"这个卖点,在这个数据隐私敏感度持续上升的时期变得格外有说服力。
herdr 生态正在做的事,其实是给终端这个"最古老但最没被 Web 化"的界面,补上移动时代的那一课。