面向 AI 编码代理的沙箱运行器。无需权限疲劳,凭据不进入沙箱,在你批准之前不会对你的项目做任何更改。
AI 编码代理在关闭护栏时表现最佳,但在你的真实机器上这样运行是非常糟糕的。yoloAI 为代理提供一个可丢弃的沙箱,它可以在其中自由编辑和运行任何内容,无需人工值守。你的项目、你的凭据和你的网络始终由你掌控。当代理完成后,审查差异并应用你想要保留的内容。
你 沙箱 你的项目
│ │ │
├─ yoloai new fix-bug . ├─ 项目的沙箱副本 │
│ │ │
├─ << 你的提示词 >> ├─ 代理自由工作 │
│ │ (无权限提示) │
│ │ │
├─ yoloai diff fix-bug ├─ 显示更改内容 │
│ │ │
├─ yoloai apply fix-bug │ ├─ 应用补丁
│ (由你选择应用哪些) │ │
│ │ │
├─ yoloai destroy fix-bug ├─ 销毁沙箱 │
权限提示的存在是因为代理会犯错。在第一百次批准/拒绝之后,你就不再阅读它们了,而 --dangerously-skip-permissions 距离一个困惑的代理酿成大祸只有一步之遥。yoloAI 缩小了爆炸半径,直到权限提示变得不再必要:
diff 精确显示更改内容,apply 在保留单个提交的同时修补你的真实项目,在你应用之前,原始文件永远不会改变。--network-isolated 将出站流量限制为代理的 API 端点以及你允许的域名。--network-none 完全移除网络。有关完整模型(包括诚实的局限性说明),请参阅 安全。
从 最新发布 下载适用于你平台的压缩包,解压出 yoloai 二进制文件,并将其放入你的 PATH:
# Linux x86-64(根据需要替换为 linux_arm64 / darwin_amd64 / darwin_arm64)。
# 将 VERSION 设置为上方链接的最新发布页面中显示的标签,不带
# 开头的 "v" —— 例如标签 v1.2.3 对应 VERSION=1.2.3。
VERSION=X.Y.Z
curl -fsSL "https://github.com/kstenerud/yoloai/releases/download/v${VERSION}/yoloai_${VERSION}_linux_amd64.tar.gz" \
| tar -xz yoloai
sudo install yoloai /usr/local/bin/
每个压缩包还附带 shell 补全、LICENSE 和变更日志。发布版本使用 cosign 签名(checksums.txt),并带有 GitHub 构建来源证明(gh attestation verify yoloai_… --repo kstenerud/yoloai)。每个发布版本也附带了 Debian/RPM 软件包。
brew install --cask kstenerud/tap/yoloai
go install# 最新发布版本
go install github.com/kstenerud/yoloai/cmd/yoloai@latest
# 最新开发版本(不稳定)
go install github.com/kstenerud/yoloai/cmd/yoloai@main
需要 Go 1.26+。二进制文件位于 $GOPATH/bin(通常为 ~/go/bin)。
git clone https://github.com/kstenerud/yoloai.git
cd yoloai
git checkout "$(git describe --tags --abbrev=0)" # 最新的发布标签;或停留在 main 分支使用开发版本
make build
sudo install yoloai /usr/local/bin/
这是一个单一的 Go 二进制文件,除了你选择的后端之外没有运行时依赖。首次运行时,yoloAI 会构建其基础镜像并创建 ~/.yoloai/(或你通过 --data-dir 指定的任何目录)。
# 认证(yoloAI 自动获取现有凭据)
export ANTHROPIC_API_KEY=sk-ant-... # Claude Code
export GEMINI_API_KEY=... # Gemini CLI
# 或者直接让它获取你已认证的会话
# 1. 启动一个沙箱。当你提供提示词时,代理立即开始工作
yoloai new fix-bug ./my-project --prompt "修复失败的测试"
# 2. 查看代理更改了什么
yoloai diff fix-bug
# 3. 将好的部分应用到你的真实项目
yoloai apply fix-bug
# 4. 丢弃沙箱
yoloai destroy fix-bug
yoloai new exploration ./my-project -a
# 你已进入代理,它在沙箱中的 tmux 里运行。
# 按 Ctrl-B, D 分离。
# 使用 yoloai attach exploration 重新连接。
对于较长的会话,以循环方式工作:告诉代理边工作边提交,并随时从另一个终端运行 yoloai apply,将完成的提交拉入你的真实项目。每次 apply 只带入自上次以来的新提交。当你对结果满意时,照常推送并销毁沙箱。完整工作流程请参阅 使用指南。
创建沙箱、向代理发出提示并应用结果:
https://github.com/user-attachments/assets/9d6740b4-a34e-4253-82ec-cb0e4c7a8bd9
沙箱化
--env、--dir)。--cpus、--memory)和端口转发(--port)。clonefile),支持 reflink 的 Linux 文件系统(btrfs、XFS)上为逐文件 reflink。不支持 reflink 的文件系统(ext4)则进行常规复制。.gitignore:任何被忽略的内容都不会被复制到沙箱中(针对磁盘上开发凭据的安全实践)。凭据
工作流
.patch 文件、按引用选择提交,或先使用 --dry-run。yoloai run --prompt ... --rm,所有命令均支持 --json 输出。集成
shell 模式可用于其他任何工具。--vscode-tunnel)。yoloai mcp serve 让外部代理将沙箱作为工具驱动;yoloai mcp proxy 在沙箱内部运行 MCP 服务器。yoloai x)。~/.yoloai/ 中(可通过 --data-dir 重定位)。注意:Tart 提供完整的 macOS 虚拟机,使你能够在沙箱内运行模拟器。
可选地升级 OCI 运行时以获得更强的隔离。gVisor 模式可用于 docker 和 podman;虚拟机模式随 containerd 后端提供。
# 为所有新沙箱使用 gVisor
yoloai config set isolation container-enhanced
# 或按沙箱设置
yoloai new task . --isolation container-enhanced
使用 yoloai system agents 列出可用的代理。
公开测试版。核心工作流稳定且每日使用;接口在 0.x 版本之间可能仍有变化,所有破坏性变更都会记录在 BREAKING-CHANGES 中。欢迎反馈。
| 后端 | 支持的主机 | 依赖项 |
|---|
| docker | Linux、macOS、Windows(WSL2) | Docker Engine、Docker Desktop 或 OrbStack |
| podman | Linux、macOS | Podman(macOS 上使用 brew install podman) |
| containerd | Linux | Kata Containers |
| apple | macOS(Apple Silicon) | Apple Container |
| tart | macOS(Apple Silicon) | Tart(brew install cirruslabs/cli/tart) |
| seatbelt | macOS(任意) | 无(使用内置的 sandbox-exec) |
| 模式 | 描述 |
|---|
container | 默认 runc:标准 Linux 命名空间和 cgroups |
container-enhanced | 用户空间内核(gVisor/runsc):系统调用拦截,无需 KVM |
container-privileged | 所有能力,seccomp/AppArmor 不受限制。用于 Docker-in-Docker 和 Compose |
vm | Kata Containers(QEMU):硬件虚拟机隔离 |
vm-enhanced | Kata + Firecracker 微型虚拟机:轻量级虚拟机隔离 |
| 模式 | 描述 |
|---|
claude | 通过 API 密钥或订阅凭据运行 Claude Code(默认) |
codex | 通过 API 密钥或订阅凭据运行 Codex |
gemini | 通过 API 密钥或订阅凭据运行 Gemini CLI |
aider | 运行 Aider(你的配置会被复制进去) |
opencode | 运行 OpenCode(你的配置会被复制进去) |
shell | 运行一个 tmux shell,并预置所有代理凭据 |
idle | 运行一个空闲进程以支持 MCP 代理 |