stencil-hq/ovnfs
开发工具为编码 Agent 提供任意目录的隔离写时复制检出,不复制原目录,审查后再合并回去。
项目用途
ovnfs 给 Agent 一个隔离的目录检出:无论是 git 仓库还是普通文件夹,都无需先复制,Agent 直接在写时复制层里工作,原目录在你执行 apply 之前不会被改动。改动可以用 diff 审查,再用三方 apply 合并回原目录。检出支持快照、fork,也可以挂到另一台机器上,内容在首次读取时才拉取。
一个守护进程把每个检出挂载成统一挂载点下的一个文件夹:macOS 用 NFSv3,Linux 用 FUSE,Windows 用 SMB 或 WinFsp。除 Windows 需要安装 WinFsp 外,不需要 root,也不需要内核扩展。检出内的路径会被分为 source(被捕获并同步)、cache/local(实时目录,只读)和 hidden,从而把构建产物和密钥排除在 diff 和传输之外。
快速使用
前提:Go(见 go.mod)、git,Linux 上还需要 fusermount3(fuse3 包)。Linux、macOS、Windows 的 amd64 和 arm64 预编译包可在 Releases 获取;也可以用 go install github.com/stencil-hq/ovnfs@latest 安装,或在克隆后执行 go build -o bin/ovnfs . 自行编译。用 ovnfs version 查看构建版本。
典型流程从希望 Agent 工作的目录开始:
cd ~/src/app
cd "$(ovnfs new)" # 启动守护进程并打印检出路径
git status # 与 ~/src/app 状态相同,原目录未被写入
# ...让 Agent 工作...
ovnfs diff app -p # 查看改动
ovnfs apply app # 合并回 ~/src/app
cd ~/src/app && ovnfs rm app # 删除检出,快照保留
其他常用命令:ovnfs run -- make test 运行一次性检出,ovnfs new --rev main 从指定版本开始,ovnfs attach app --to devbox 把同一检出挂到另一台机器,ovnfs grep / ovnfs glob 在守护进程内搜索。没有守护进程时命令会自动启动;start、stop、restart、status、serve 用于显式管理。更多细节见检出文档和远程检出指南。
配置与平台
路径分类由内置规则决定,可通过 .o2/ovnfs.yml 或 --rule 覆盖,ovnfs explain PATH 会说明某条路径由哪条规则决定。在 git 仓库中,每个检出都有私有 git 目录,可以在其中自由提交,再用 apply --branch NAME 把提交带回原仓库。NFS、FUSE、SMB、WinFsp 各前端的差异见平台文档。
使用约束
ovnfs 隔离的是文件而非进程,它本身不是沙箱。apply 会修改原目录,合并前应先审查 diff。远程检出(attach、pull、share)会在机器之间传输被捕获的 source 内容,涉及数据处理时需要留意。项目维护了单独的限制说明,依赖前值得阅读。许可证为 MIT。
HotRepo 点评
2026-11-08,ovnfs 出现在 Go 新项目榜中:约一小时的统计窗口内新增 5 个 Star,窗口结束时为 105 个 Star,Fork 保持 7 个。这只是一个较短的观察窗口,反映的是早期关注度,而非持续采用情况;评估它是否适合 Agent 工作流时,值得重点看的是逐 commit 审查与合并的流程,以及内容在首次读取才到达的远程检出。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。