返回资讯中心
外部精选
软件工程
#社区热议

Devvm.dev 推出开发工具 devvm,为每个项目创建独立虚拟机沙箱

来源标题:Devvm.dev: One VM for every project

Devvm.dev 发布命令行工具 devvm,可为每个项目启动一台预装对应工具链的隔离虚拟机,供开发者或编码 agent 直接开始写代码。该工具通过 Homebrew 或安装脚本部署,依赖 Lima、QEMU 等组件,进入项目目录运行 devvm 即可创建并进入 VM。再次在同一目录运行会复用同一台 VM,并支持为已有 VM 添加 agent。

Hacker Newsluispa2026/11/6 · 今天19 分钟阅读

以下正文由 AI 翻译自 Hacker News(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

一个隔离的沙箱,内置项目所需的工具链,随时供你或编码代理开始写代码。

快速开始 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 访问权限之前会先征求你的同意。

  1. 进入你的项目 打开终端,cd 到任意项目文件夹。

  2. 运行 devvm devvm 会展示新 VM 将获得哪些内容。确认即可创建,也可以自定义。

  3. 启动你的代理 devvm 会在 VM 中打开一个 shell,其提示符以 (devvm) 开头,在那里启动你的代理即可。

Claude Code 首次启动前需要你的 Claude 登录信息,devvm agent login claude 会从 VM 中完成登录,并把凭据保存在你的机器上(你的第一个 VM)。下次你在该文件夹运行 devvm 时,它会打开同一个 VM;devvm tools 则可以给已有的 VM 添加代理。

支持的内容 工具链 devvm 会根据项目文件自动选择所需的工具链,你也可以在自定义新 VM 时选择更多,或用 --tools(toolchains)指定。

nodepython编码代理 Claude Code、Codex 和 opencode 在 VM 中运行。你可以在自定义新 VM 时选择一个,也可以在 devvm setup(coding agents)中为所有新 VM 统一选择。

层 devvm 自带 docker、nix 和 desktop 层,你可以在自定义新 VM 时选用;devvm layer new 可以创建你自己的自定义层,并应用到任意 VM 上(layers)。

为什么用 devvm? 开发者每天都面临各种攻击,比如供应链攻击、密钥泄露、提示注入和失控的代理。

沙箱能把攻击的影响范围限制在沙箱内部。

你知道应该把代码和代理放在沙箱里运行,但大多数工具需要复杂的配置和设置,很难做对。

devvm 自带合理的默认配置,一条命令就能在沙箱里开始写代码。

没有 devvm 时,提示注入、密钥泄露、供应链攻击和失控的代理会接连命中你的机器,每一个都会危及它所触及的东西:先是项目 /web,然后是 /.aws、/.ssh,再到另一个项目 /api。有了 devvm,项目在 VM 里,同样这四种攻击只能触及 VM。它们通往你机器的路径都终止于 VM 的边界,因此 /.ssh、/.aws 和 /api 都安然无恙。without devvmyour machineprompt injectionleaked secretssupply chainrogue agent/web/.aws/.ssh~/apiwith devvmyour machineVM~/web~/.ssh~/.aws~/apiprompt injectionleaked secretssupply chainrogue agent××××

开发者就绪,零配置 基础镜像附带一些可选的额外组件,由你选择,比如 oh-my-bash、fzf、zoxide(z)、tree 和 tldr。

每个 VM 都会获得你的 git 用户名和邮箱,因此在 VM 中产生的提交,作者是你或你的代理。

端口会自动转发,VM 中 :5173 上的开发服务器,可以在你机器的 localhost:5173 打开(ports)。

devvm code 通过 Remote-SSH 在 VS Code 中打开 VM(devvm code)。

在 VM devvm-web 中,npm run dev 已在 :5173 上就绪,你机器上的浏览器可通过 localhost:5173 访问。devvm code 通过 SSH 在你的编辑器中打开该 VM。在 VM 中产生的提交,作者是你。your machinelocalhost:5173▓▓▓▓ ░░░░░░░░devvm codeSSH: devvm-web←───ports───────ssh────→devvm-web❯npm run devready on:5173❯git commitAuthor:you❯█

隔离沙箱 VM 会以相同路径挂载你的项目文件夹。除了从 devvm 自有存储中以只读方式提供的代理设置之外,它看不到你主目录中的任何其他内容(what a VM can reach)。

新 VM 默认使用 allowlist 网络层级,因此只能通过你机器上的代理访问白名单中的主机。你也可以选择更宽松的层级(internet 或 open)或更严格的层级(none)。

在 macOS 上,devvm 会锁定 .git 的 hooks 和 config,使 VM 无法更改你机器上 git 运行的内容(.git protection)。

使用 --clone 时,VM 会在仓库的一个自己的克隆上工作,而不是你的文件夹,因此其中的任何操作都无法触及你的工作区或 .git,它的成果只有在你 fetch 时才会进入你的仓库。

没有哪个沙箱能堵住所有漏洞,attack vectors 列出了仍然敞开的部分,staying safe 则列出了能堵住其中大部分的习惯。

在你的机器上,/.ssh、/.aws 和 ~/Documents 不会被挂载。只有项目文件夹 ~/web 会以读写方式进入其 VM,并在其中锁定 .git。VM 的网络流量经过你机器上的代理,代理只放行白名单允许的内容。your machine× ~/.ssh× /.aws× /Documents/webVM/webrw.gitlockedproxyallowlist

几秒内就绪 第一个 VM 会构建一个基础镜像,之后每个 VM 都是它的副本,几秒内即可启动(images)。

devvm 对每个版本的工具链只构建一次并以只读方式共享,因此所有 VM 使用同一份副本(shared tools)。

基础镜像只构建一次。每个 VM——devvm-web、devvm-api 和 devvm-cli——都是它的副本,几秒内启动。node、python、go、rust 和 claude 在它们之间以只读方式共享。base▓▓▓▓▓▓▓▓░▒devvm-web■ updevvm-api■ updevvm-cli■ upnodepythongorustclauderead-only

为编码代理而打造 代理在 VM 中运行,因此针对它的攻击会停留在沙箱内。它能获得你的设置、技能和 MCP 服务器,但永远拿不到你的历史记录(coding agents)。

无论在哪个网络层级,它们的密钥(比如你的 Claude Code token 和你的 Codex 登录信息)都留在你的机器上,因为 VM 拿到的是占位符,devvm 的代理会在对外请求时把真实密钥填入。

你的代理技能以只读方式挂载进 VM,它们的设置和 MCP 服务器则被复制进去,适用于 claude、codex 和 opencode。你的历史记录留在你的机器上。你的 token 留在你的机器上:VM 中只有占位符,代理在发往 API 的途中加上真实 token。your machineskillssettingsMCP serverstoken─────ro────→────copy───→────copy───→historystays────×proxy↓APIVMclaudecodexopencode░░░░░░░

让它成为你的

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →