如何在 AI Agent 构建全程做好沙箱保护:Capakit 从构建到运行的安全实践
当你让 AI Agent 为你编写应用时,真正面临的风险是什么?不是 Agent 写错了代码,而是它在你的本机上执行了来历不明的脚本、下载了不可控的依赖包、访问了不该访问的文件。
多数工具只对运行阶段做沙箱隔离,但整个构建阶段——从 npm install 到 bun build——完全暴露在你的宿主机上。这意味着你的 SSH 密钥、AWS 凭据、数据库密码就在那里,等着某个 preinstall 脚本顺手带走。
这篇文章介绍 Capakit,一个免费的 CLI 工具包和运行时,它把你的 AI 应用(Kit)从构建到运行全程沙箱化。所有操作在一次性、无网络的临时沙箱中完成,结束后不留痕迹。
为什么构建阶段比运行阶段更危险
传统沙箱的思路很直接:应用跑起来后,把它关进笼子里。但 AI 应用的生命周期有三个阶段——构建、测试、运行——其中构建阶段实际上是最大风险面:
| 阶段 | 典型操作 | 风险等级 |
|---|---|---|
| 构建 | npm install、pip install、bun build | 🔴 极高 — 可执行任意脚本 |
| 测试 | 运行测试用例、访问文件 | 🟡 中 — 可读取文件 |
| 运行 | 提供服务、处理请求 | 🟢 低(已沙箱化) |
npm install 的 postinstall 钩子可以执行任意 shell 命令。一个被污染的包可能在安装时读取你的 ~/.ssh/id_rsa 并外传到攻击者服务器。传统沙箱只隔离运行阶段,让构建阶段完全暴露。
Capakit 的核心差异:它把构建和运行都放进一次性沙箱。没有继承的环境变量,没有文件系统访问权限,默认没有网络——你需要明确声明放行哪些流量。
安装与首次运行
Capakit 目前支持 macOS(使用系统 Seatbelt 沙箱),Bun 运行时,完全免费:
curl -fsSL https://capakit.com/install.sh | sh brew install capakit/tap/capakit
安装后直接运行一个 Demo Kit 试试:
capakit run https://github.com/capakit/hello-world-demo-kit
你会看到 Capakit 下载 Kit、准备 workloads、启动本地运行时,然后在 localhost:50958 上暴露一个 MCP 端点。整个过程从下载、安装依赖到运行,全部在沙箱中完成。
理解 Kit:AI 应用的标准单元
Capakit 提出「Kit」这个概念——一个标准化的 AI 应用包。一个 Kit 的本质是源代码 + manifest 文件,任何人只需一条命令就能完全沙箱化地运行。
典型的 Kit 结构:
hello-world-demo-kit/
├── AGENTS.md # Agent 引导说明
├── capability.yml # 核心 manifest
├── capability-test.yml # 测试定义
├── README.md # 项目说明
└── workloads/
└── hello/
└── src/
└── index.ts
capability.yml 是关键文件,定义了 workload 的入口、服务端点和网络策略:
version: '1'
name: hello-world
workloads:
hello:
endpoints:
- mcp
runtime:
source: .
toolchain: bun
prepare:
command: bun install
develop:
command: bun run dev
launch:
command: bun run start
network:
egress:
- api.openai.com
注意 network.egress 字段:默认拒绝所有出站流量,只有在这里声明过的域名才放行。这意味着你的 Agent 构建的应用无法偷偷往外传数据——除非你明确允许。
三大实战场景
场景一:让 Agent 创建可共享的 AI 工具
当你需要让 Claude Code 或 Codex 创建一个带 Web UI 的工具时,直接告诉它用 Capakit:
使用 capakit 创建一个 Kit,叫 invoice-helper。 我想要一个 Web UI,可以上传发票文本并提取字段: vendor、date、total 和 line items。 请添加测试和清晰的使用说明。
Agent 会生成完整的 Kit 结构,包含 MCP 端点。你可以分享给团队:
capakit run https://github.com/你的用户名/invoice-helper
场景二:将 Kit 注册为 Agent Skill
Capakit 支持将运行的 Kit 自动注册为 Codex 或 Claude Code 的 Skill:
capakit run https://github.com/capakit/hello-world-demo-kit \ --global-skill codex
这条命令会在 ~/.codex/skills/hello-world/ 下创建 Skill 文件,包含 Agent 指令和调用入口。之后你的 Codex 就能直接通过 /hello-world 调用这个 Kit。
场景三:安全地开发和测试
Capakit 提供了一个 exec 命令,让你在沙箱中安全地执行任意 workload 命令:
git clone https://github.com/你的用户名/invoice-helper cd invoice-helper capakit exec hello -- bun add pdf-parse
和直接在终端执行 bun add 不同,这个命令运行在隔离沙箱中——没有宿主机环境变量,没有文件访问权限,bun add 的 postinstall 脚本即使作恶也无法访问你的私密文件。
与同类工具对比
| 特性 | Capakit | Docker | macOS Sandbox |
|---|---|---|---|
| 覆盖构建阶段 | ✅ | ✅ | ❌ |
| 覆盖运行阶段 | ✅ | ✅ | ✅ |
| 默认无网络 | ✅ | ❌(需配置) | ❌ |
| 一次性沙箱 | ✅ | ❌(容器可复用) | ❌ |
| MCP 原生支持 | ✅ | ❌ | ❌ |
| Agent Skill 集成 | ✅ | ❌ | ❌ |
| 安装复杂度 | 一条命令 | 需安装 Docker | 系统内置 |
Capakit 不是 Docker 的替代品。Docker 是通用的容器运行时,而 Capakit 专门为 AI Agent 构建的应用设计:零配置、MCP 原生、自动 Skill 注册、构建+运行全程沙箱。如果你的 Agent 经常创建需要共享的工具,Capakit 的开箱即用体验比 Docker 配 MCP 要顺畅得多。
注意事项
- 目前仅支持 macOS:使用系统 Seatbelt 沙箱(Apple 的沙箱机制),Linux 和 Windows 暂不支持
- Bun 运行时:当前 workloads 使用 Bun 作为默认运行时
- Chromium 不支持:涉及 Chromium 的 workload 已知在 macOS sandbox 下有兼容性问题
- 免费、无资金支持:开发者从 2025 年初全职投入做这个项目,无外部融资
总结
Capakit 解决了一个被大多数人忽视的问题:AI Agent 构建的应用在构建阶段同样需要沙箱保护。它的「全程沙箱」思路——从 npm install 到生产运行,全部在一次性、无网络的临时环境中完成——比传统只隔离运行时的方案更彻底。
对于需要经常让 AI Agent 创建和共享工具的团队,Capakit 提供了一个零配置的沙箱方案,而且 MCP 和 Agent Skill 的原生支持让集成非常自然。如果你正在让 Agent 写代码并分发给团队,值得一试。