Claude Cowork 10GB虚拟机:技术解析与争议
Anthropic 的 AI 编程助手 Claude Code 及其桌面版功能 Claude Cowork 近期引发了技术社区的广泛关注。核心争议在于:Claude Cowork 在 macOS 上未经明确用户提示,即自动下载并部署了一个约 10GB 的虚拟机捆绑包。
本文将深入分析 Claude Code 的沙盒机制、10GB 虚拟机争议,以及 Claude Cowork 虚拟机内部的完整运作机制。
Claude Code 简介
Claude Code 是 Anthropic 推出的命令行 AI 代理工具,通过理解自然语言指令,自主执行代码生成、调试、文件操作及测试等任务。它可无缝调用 git、npm、pytest 等本地开发工具,集成至现有开发工作流。
10GB 虚拟机争议
尽管 Claude Code CLI 版本采用轻量级 OS 级沙盒(后文详述),但 Claude Desktop 的 Cowork 功能却选择部署一个约 10GB 的虚拟机捆绑包。此举在 Hacker News 上引发了激烈争议。
争议焦点:
- 磁盘空间
:用户报告在未明确警告的情况下,应用在 ~/Library/Application Support/Claude/vm_bundles/claudevm.bundle/路径下创建了约 10GB 的虚拟机文件 - 数据流量
:未经提示的大文件下载可能导致额外费用 - 性能功耗
:运行完整的 Ubuntu 22.04 LTS ARM64 虚拟机(4 vCPU、3.8 GB RAM)会显著增加系统负担
Anthropic 工程师 Felix Rieseberg 的回应:
虚拟机为 AI 代理提供完全独立的执行环境,确保不影响宿主系统 虚拟机提供比 OS 级沙盒更强的边界隔离,为非技术用户提供"硬性"安全保证 通过虚拟机隔离减少频繁审批需求,优化非技术用户体验
深入 Claude Cowork VM 内部架构
以下内容主要基于安全研究员 Pedro José Pereira Vieito 对 Claude Cowork 的深度逆向分析。
三层架构设计
Claude Cowork 采用三层架构:
- macOS 主机层
:运行 Claude Desktop(Electron 应用) - 虚拟机层
:通过 Apple Virtualization Framework 运行 Ubuntu 22.04 ARM64 - 沙盒层
:VM 内部的 Claude Code CLI 被 bubblewrap + seccomp 进一步隔离
即使在虚拟机内部,AI 代理的行为也被层层限制,形成纵深防御的安全模型。
VM 配置规格
| 操作系统 | |
| CPU | |
| 内存 | |
| 存储 | |
| Claude Code 版本 | |
| 默认模型 |
VM 文件存储结构:
~/Library/Application Support/Claude/vm_bundles/claudevm.bundle/
├── rootfs.img # 根文件系统(稀疏文件)
├── sessiondata.img # 持久化会话数据
├── efivars.fd # EFI 变量
├── macAddress # MAC 地址配置
└── machineIdentifier # 机器标识
四层安全机制
第一层 — Apple Virtualization Framework
macOS 原生虚拟化框架,实现与宿主系统的硬件级隔离。
第二层 — bubblewrap (bwrap)
VM 内部的 Linux 沙箱工具,限制 Claude Code 进程的文件系统访问范围。
第三层 — seccomp
系统调用过滤,收窄进程可执行的系统调用集合。
第四层 — 网络白名单代理
所有网络流量经由本地代理(端口 3128/1080),仅允许白名单域名:
api.anthropic.com— Claude API(允许) pypi.org、 registry.npmjs.org— 依赖安装(允许)google.com、 api.github.com等 — 返回403 blocked-by-allowlist
进程通信通道
Claude Desktop 与 VM 内 Claude Code 之间通过五种通道通信:
| 消息流 | ||
| HTTP 代理 | ||
| SOCKS 代理 | ||
| MCP 协议 | ||
| 文件访问 |
VirtioFS 文件共享
Claude Cowork 使用 VirtioFS 实现宿主与虚拟机之间的高性能文件共享,比传统 NFS/SMB 延迟更低。Claude Desktop 会进行智能路径转换 — VM 中的文件操作在 macOS UI 中显示为本地路径(如 ~/Downloads/),对用户完全透明。但 VM 只能访问被明确共享的文件夹。
多会话架构
单个 VM 实例支持多个对话,每个会话独立隔离:
/sessions/
├── intelligent-loving-darwin/ (会话1)
├── dreamy-optimistic-babbage/ (会话2)
会话命名采用 Docker 风格( 形容词-形容词-科学家名)目录权限 drwxr-x---,防止跨会话访问每个活跃会话分配独立 Linux UID 非活跃会话归属 nobody:nogroup
预装工具栈
VM 预装了丰富的工具,覆盖开发与办公场景:
- 编程语言
:Python 3.10、Node.js 22、Ruby 3.0、TypeScript 5.9 - 音视频
:ffmpeg / ffprobe 4.4 - 文档生成
:docx、pptxgenjs、pdf-lib - 数据分析
:pandas、numpy、matplotlib、beautifulsoup4 - 开发工具
:git、ripgrep、jq、pandoc、ImageMagick、sqlite3
MCP 服务器集成
Claude Desktop 的 MCP 服务器通过命令行参数动态注入到 VM:官方服务使用 UUID 标识符,第三方服务使用易读名称,采用 SDK 型通信。内置 cowork 服务提供目录创建和文件删除等额外权限。
Claude Code 启动命令
VM 内部通过标准 Claude Code CLI 启动:
/usr/local/bin/claude \
--output-format stream-json \
--input-format stream-json \
--model claude-opus-4-5-20251101 \
--resume <session-uuid> \
--allowedTools Task,Bash,Glob,Grep,Read,Edit,Write,... \
--mcp-config '{"mcpServers": {...}}' \
--permission-mode default \
--plugin-dir /sessions/<name>/mnt/.skills
安全权衡
优势:
仅限访问明确共享的文件夹 网络请求严格限制在白名单范围 系统调用受 seccomp 约束 多会话间通过 UID 隔离
残留风险:
/tmp/目录会话间共享,可能存在信息泄露 sessiondata.img 持久化可能保留跨会话工件
补充:sandbox-runtime 轻量级沙盒
值得一提的是,Anthropic 开源了 anthropic-experimental/sandbox-runtime(srt)项目,这是 Claude Code CLI 版本中 OS 级沙盒的核心实现。它是一个非容器化的轻量级沙盒运行时,直接利用操作系统原生指令限制进程,无需 Docker 或虚拟机:
- macOS
:通过 sandbox-exec动态生成 Seatbelt 策略文件 - Linux
:利用 bubblewrap 进行进程隔离
与 10GB VM 方案对比:srt 资源消耗极低,适合开发者使用;VM 方案提供更强的物理隔离,面向追求开箱即用安全的普通用户。两者体现了不同用户群体下的安全与体验权衡。
结论
Claude Cowork 的四层安全架构(虚拟化 + bubblewrap + seccomp + 网络白名单)展现了 Anthropic 在 AI 安全方面的严谨态度。但用户对未经警告的 10GB 资源占用表达了合理担忧。
未来 AI 代理产品应在提供强大功能的同时,提升用户知情权和控制权 — 下载前明确告知资源占用、允许用户选择沙盒类型、探索微虚拟机等更轻量的方案。AI 代理的安全与用户体验之间的平衡,将是所有 AI 产品持续面对的核心课题。
参考文献
Anthropic Cowork feature creates 10GB VM bundle on macOS without warning | Hacker News https://news.ycombinator.com/item?id=47218288 Inside Claude Cowork: How Anthropic Runs Claude Code in a Local VM on Your Mac https://pvieito.com/2026/01/inside-claude-cowork How I Actually Use Claude Code in 2026 https://levelup.gitconnected.com/how-i-actually-use-claude-code-in-2026-and-why-it-still-needs-a-parent-f029824f4539 Sandboxing - Claude Code Docs https://code.claude.com/docs/en/sandboxing anthropic-experimental/sandbox-runtime - GitHub https://github.com/anthropic-experimental/sandbox-runtime