什么是 devvm?
devvm 会为每个项目文件夹创建一个隔离的虚拟机。虚拟机包含项目所需的工具链,并提供一个沙箱环境,让你或编码代理可以在其中工作,而无需直接将代理安装到主机上。
每个虚拟机都通过 Lima运行。默认情况下,devvm 只挂载选定的项目文件夹,并在虚拟机中以主机上的相同路径提供该文件夹。再次在该文件夹中运行 devvm,会重新打开同一个虚拟机。
主要功能
- 每个项目对应一个虚拟机:每个项目文件夹都有自己的隔离环境。
- 自动检测工具链:devvm 会检查项目文件,以确定所需的工具链。例如,包含
package.json的项目会获得 Node.js 工具。 - 支持编码代理:Claude Code、Codex、opencode 和 pi 可以在虚拟机中运行,并使用各自的设置、技能和 MCP 服务器。
- 受控网络:新虚拟机默认使用允许列表网络层级,只能访问获准的主机。
- 主机端密钥:GitHub 和 Claude Code 等凭据会保留在主机上,并跨所有网络层级使用。
- 可复用镜像:虚拟机从基础镜像复制而来,工具链则在各虚拟机之间以只读方式共享。完成初始设置后,新虚拟机可以在几秒内启动。
- 可选层:内置层包括
docker、nix和desktop。你也可以创建自己的层。 - 克隆模式:虚拟机可以在自己的 Git 克隆中工作,而不是挂载主机工作树。
系统要求
devvm 支持 macOS 13 或更高版本,以及 arm64 或 x86_64 Linux。它要求 Lima 2.2 或更高版本,并满足相关的 Lima 要求。该项目已在 Apple 芯片 Mac 以及使用 arm64 和 x86_64 的 Linux 系统上完成测试,但尚未在 Intel Mac 上测试。
安装 devvm
使用 Homebrew 在 macOS 上安装
Homebrew 公式会安装 devvm 和 Lima:
brew trust --formula devvmhq/tap/devvm
brew install devvmhq/tap/devvm在 Linux 上安装
运行官方安装脚本:
curl -fsSL https://github.com/devvmhq/devvm/releases/latest/download/install.sh | bash该脚本也适用于 macOS。在安装 Lima、QEMU 或访问 /dev/kvm 之前,它会请求确认。
每个版本都使用 devvm minisign 密钥
RWSjzFsn7ETaijKJ2y7F4DtZobXmyv+LmdclJwZP/KmAkLUwOCzWF/2b签名。如果你想在运行脚本前验证下载内容,请参阅安装脚本验证指南。
检查安装
安装后,运行诊断命令:
devvm doctor该命令会检查 devvm 在你的计算机上所需的内容,并说明如何获取缺少的组件。如需了解所有要求和安装程序选项,请参阅完整的安装指南。
创建第一个项目虚拟机
- 打开项目文件夹。在终端中切换到包含项目的目录。
- 运行 devvm。查看建议的虚拟机配置并确认。
- 在虚拟机中工作。devvm 会打开一个 shell,其提示符以
(devvm)开头。
cd ~/some-project
devvmdevvm 会检测项目文件所请求的工具链。在创建虚拟机之前,你还可以自定义其工具链、编码代理、层、网络层级和大小。
首次运行时,系统会询问几个问题,用于设置新虚拟机和基础镜像的默认值。这些选项包括默认虚拟机大小、编码代理以及可选的基础镜像附加组件。基础镜像只需构建一次,耗时几分钟;之后的项目虚拟机通常可以在几秒内启动。
重新打开同一个虚拟机
返回项目文件夹并运行相同的命令:
cd ~/some-project
devvm由于每个项目文件夹都会保留自己的虚拟机,devvm 会重新打开现有环境,而不是创建一个无关的虚拟机。
运行编码代理
虚拟机 shell 打开后,从其中启动受支持的代理。例如,使用以下命令运行 Claude Code:
claude这样可以让编码代理留在沙箱中,而无需将其安装到主机上。devvm 会将受支持代理的设置和登录信息存储在自己的存储中。
登录 Claude Code
首次启动 Claude Code 前,请从虚拟机中发起登录:
devvm agent login claude登录信息会保留在你的计算机上。详情请参阅 Claude Code 登录指南。
导入现有代理配置
如果你已经在主机上使用受支持的编码代理,devvm 可以将其现有配置复制到自己的存储中:
devvm agent import此功能用于迁移现有本地代理所使用的设置。支持的集成包括 Claude Code、Codex、opencode 和 pi。
使用克隆模式保护工作树
在默认模式下,主机编辑器和虚拟机共享挂载的项目文件。因此,在虚拟机中进行的更改会出现在同一个工作树中。
如需更强的隔离,请使用 --clone 启动 devvm。这样,虚拟机会获得自己的仓库克隆,从而阻止其中的进程接触主机工作树或其 .git 目录。
devvm --clone在虚拟机内提交工作后,通过 devvm 远程仓库在主机上获取这些提交:
git fetch devvm获取的分支将以 devvm/main 等名称显示。合并前请检查差异:
git log -p main..devvm/main通过这种工作流,只有在你明确执行获取操作后,虚拟机中的工作才会进入你的仓库。完整流程请参阅使用克隆进行工作。
高级配置提示
谨慎选择工具链
自动检测可以提供一个实用的起点,但在创建虚拟机前,请检查建议的设置。如果检测到的选择不符合你的预期环境,可以在创建流程中自定义工具链。工具链文档列出了受支持的选项。
添加环境层
如果项目需要相应能力,请使用内置的 docker、nix 或 desktop 层。要开始定义自定义层,请使用:
devvm layer new自定义镜像前,请查看环境层文档。
检查网络访问
新建虚拟机默认使用允许列表网络层级。请尽可能缩小可访问主机的范围,尤其是在运行自主编码代理时。其他网络层级请参阅网络安全指南。
了解沙箱边界
虚拟机可以降低风险,但无法消除所有安全漏洞。请了解虚拟机能够访问的内容,避免暴露不必要的资源,并在接受生成的更改前进行检查。在让虚拟机处理重要项目之前,请阅读安全使用。
查阅 CLI 参考
如需了解本教程之外的命令、标志和参数,请使用官方CLI 参考。更全面的使用文档还介绍了端口、虚拟机规格、虚拟机之间的链接、SSH、编辑器、镜像和故障排除。
结语
devvm 为每个项目提供独立的开发环境,是一种实用的隔离方式。安装它,使用 devvm doctor 验证主机,在项目目录中运行 devvm,然后在生成的 shell 中启动编码代理。对于敏感工作,请结合受限网络和 devvm --clone,并在合并之前检查获取的更改。
