
Devvm.dev 推出开发工具:为每个项目分配独立虚拟机沙箱
来源标题:Devvm.dev: One VM for every project
Devvm.dev 发布 devvm 工具,可为每个项目创建带完整工具链的隔离虚拟机沙箱,供开发者或编码 agent 直接使用。该工具支持 macOS 和 Linux,通过 Homebrew 或安装脚本部署,首次运行会自动识别项目所需工具链并生成 VM,再次进入同一目录时复用同一 VM。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
为每个项目提供一个独立虚拟机
一个隔离的沙箱环境,内置项目所需的工具链,你和编码 agent 都可以直接开始写代码。
快速开始 macOSLinux
安装 devvm 及其依赖的 Lima
brew trust --formula devvmhq/tap/devvm brew install devvmhq/tap/devvm Linux 标签页里的安装脚本在 macOS 上同样可用,安装选项见 Installing 一节。
安装 devvm 及其依赖
curl -fsSL https://github.com/devvmhq/devvm/releases/latest/download/install.sh | bash 脚本在安装 Lima、QEMU 或申请 /dev/kvm 访问权限之前会先询问你。
-
进入你的项目 打开终端,cd 到任意项目文件夹。
-
运行 devvm devvm 会展示新 VM 将获得哪些配置。确认即可创建,也可以自定义。
-
启动你的 agent devvm 会在 VM 中打开一个 shell,提示符以 (devvm) 开头,在那里启动你的 agent 即可。 Claude Code 首次启动前需要你的 Claude 登录信息,devvm agent login claude 会在 VM 中完成登录,并将凭据保存在你的机器上(针对你的第一个 VM)。下次在同一文件夹运行 devvm 时会打开同一个 VM;devvm tools 可以为已有 VM 添加 agent。
支持的功能 工具链 devvm 会根据项目文件自动选择所需的工具链,你也可以在自定义新 VM 时额外选择,或用 --tools(工具链)指定。 nodepython编码 agent Claude Code、Codex 和 opencode 都在 VM 中运行。自定义新 VM 时可以选择其中一个,也可以在 devvm setup(编码 agent)中为所有新 VM 统一选择。
层 devvm 自带 docker、nix 和 desktop 层,在自定义新 VM 时可以选择;devvm layer new 可以创建你自己的自定义层,并应用到任意 VM(层)。
为什么使用 devvm? 开发者每天都在面对各种攻击,例如供应链攻击、密钥泄露、prompt injection 和失控的 agent。 沙箱能把攻击的影响范围限制在沙箱内部。 你知道应该在沙箱中运行代码和 agent,但大多数工具需要复杂的配置和搭建,很难做对。 devvm 自带合理的默认配置,一条命令就能在沙箱中开始写代码。
没有 devvm 时,prompt injection、密钥泄露、供应链攻击和失控的 agent 会接连侵入你的机器,每一个都会危及它触及的东西:先是项目 /web,然后是 /.ssh~/api有 devvm你的机器VM~/web~/.ssh~/.aws~/apiprompt injection密钥泄露供应链失控 agent××××/.aws、/.ssh,再到另一个项目 /api。有了 devvm,项目运行在 VM 中,同样的四种攻击只会到达 VM。每条通往你机器的路径都终止于 VM 的边界,因此 /.aws/.ssh、/.aws 和 /api 都不会被波及。无 devvm你的机器prompt injection密钥泄露供应链失控 agent/web
开箱即用,零配置 基础镜像包含可选组件,由你选择,例如 oh-my-bash、fzf、zoxide(z)、tree 和 tldr。 每个 VM 都会获得你的 git 用户名和邮箱,因此在 VM 中提交的 commit 作者是你或你的 agent。 端口自动转发,VM 中监听 :5173 的开发服务器会直接在你的机器上通过 localhost:5173 打开(端口)。 devvm code 通过 Remote-SSH 在 VS Code 中打开 VM(devvm code)。 在 VM devvm-web 中,npm run dev 已在 :5173 上就绪,你机器上的浏览器可通过 localhost:5173 访问。devvm code 通过 SSH 在你的编辑器中打开 VM。在 VM 中提交的 commit 作者是你。你的机器localhost:5173▓▓▓▓ ░░░░░░░░devvm codeSSH: devvm-web←───ports───────ssh────→devvm-web❯npm run devready on:5173❯git commitAuthor:you❯█
隔离的沙箱
VM 会以相同路径挂载你的项目文件夹。除了从 devvm 自有存储中以只读方式获取的 agent 配置外,它看不到你主目录中的任何其他内容(VM 能访问什么)。
新 VM 默认使用 allowlist 网络层级,只能通过你机器上的代理访问白名单中的主机。你也可以选择更宽松的层级(internet 或 open)或更严格的层级(none)。
在 macOS 上,devvm 会锁定 .git 的 hooks 和 config,VM 无法改变你机器上 git 执行的内容(.git 保护)。
使用 --clone 时,VM 会在仓库的克隆副本上工作,而不是你的文件夹,因此其中的任何操作都无法触碰你的工作区或 .git,只有你 fetch 时它的改动才会进入你的仓库。
没有沙箱能堵住所有漏洞,attack vectors 列出了仍然开放的入口,staying safe 列出了能堵住大部分漏洞的习惯。
在你的机器上,/.ssh、/.aws 和 ~/Documents 不会被挂载。只有项目文件夹 ~/web 会以读写方式进入 VM,其中的 .git 被锁定。VM 的网络经过你机器上的代理,代理只放行白名单允许的互联网流量。你的机器× ~/.ssh× /.aws× /webrw.gitlockedproxyallowlist/Documents/webVM
秒级就绪 第一个 VM 会构建基础镜像,之后每个 VM 都是它的副本,几秒内即可启动(镜像)。 devvm 对每个工具链版本只构建一次并以只读方式共享,所有 VM 使用同一份副本(共享工具)。 基础镜像只构建一次。每个 VM(devvm-web、devvm-api 和 devvm-cli)都是它的副本,几秒内启动。node、python、go、rust 和 claude 在它们之间以只读方式共享。base▓▓▓▓▓▓▓▓░▒devvm-web■ updevvm-api■ updevvm-cli■ upnodepythongorustclauderead-only
为编码 agent 而生 agent 在 VM 中运行,因此针对它的攻击会被限制在沙箱内。它能获得你的设置、skills 和 MCP servers,但永远拿不到你的历史记录(编码 agent)。 无论哪个网络层级,它们的密钥(例如你的 Claude Code token 和 Codex 登录信息)都留在你的机器上,因为 VM 拿到的是占位符,devvm 的代理会在请求发出时把真实凭据填入。你的 agent 的 skills 以只读方式挂载进 VM,其设置和 MCP servers 被复制进去,适用于 claude、codex 和 opencode。你的历史记录留在你的机器上。你的 token 留在你的机器上:VM 中只有占位符,代理在请求发往 API 时添加真实 token。你的机器skillssettingsMCP serverstoken─────ro────→────copy───→────copy───→historystays────×proxy↓APIVMclaudecodexopencode░░░░░░░
按你的需求定制
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。