
あなたのエージェントはセキュリティリスクです。だから、そのように扱ってください。yoloAIはAIエージェントのサンドボックス化を正しく実現します。
# yoloAI
**AIコーディングエージェント向けサンドボックスランナー。権限プロンプトの疲れも、ボックス内の認証情報も、承認するまでプロジェクトへの変更も一切ありません。**
[](https://github.com/kstenerud/yoloai/actions/workflows/ci.yml)
[](https://github.com/kstenerud/yoloai/actions/workflows/audit.yml)
[](https://github.com/kstenerud/yoloai/releases/latest)
[](https://pkg.go.dev/github.com/kstenerud/yoloai)
[](LICENSE)
AIコーディングエージェントはガードレールを外した状態で最もよく機能しますが、それを実機で実行するのは非常に危険です。yoloAIはエージェントに使い捨てのサンドボックスを提供し、無人で何でも編集・実行できるようにします。あなたのプロジェクト、認証情報、ネットワークはすべてあなたの管理下に置かれます。エージェントが完了したら、差分を確認して保持したい部分だけを適用します。
```text
あなた サンドボックス あなたのプロジェクト
│ │ │
├─ yoloai new fix-bug . ├─ プロジェクトのサンドボックスコピー │
│ │ │
├─ << プロンプト >> ├─ エージェントが自由に作業 │
│ │ (権限プロンプトなし) │
│ │ │
├─ yoloai diff fix-bug ├─ 変更内容を表示 │
│ │ │
├─ yoloai apply fix-bug │ ├─ パッチが適用される
│ (適用するものを選択) │ │
│ │ │
├─ yoloai destroy fix-bug ├─ サンドボックスを破棄 │
```
## なぜ?
権限プロンプトはエージェントがミスをするから存在します。100回目の許可/拒否でプロンプトを読まなくなり、`--dangerously-skip-permissions` は混乱したエージェントが大事故を起こす一歩手前です。yoloAIはプロンプトが不要になるまで爆発半径を縮小します:
- **ファイルは安全です。** エージェントはプロジェクトの隔離されたコピーで作業します。`diff` で変更内容が正確に表示され、`apply` で個々のコミットを保持したまま実際のプロジェクトにパッチを適用します。適用するまで原本は一切変更されません。
- **シークレットは安全です。** サンドボックスは最小限のローカルビルド環境から起動します。ホストの環境変数はホストに留まります。認証情報は読み取り専用のファイルマウントとして提供され、環境変数としては決して渡されません。認証情報ブローカリングが適用される場合(現在はClaude、Gemini、Codexでデフォルト有効)、APIキーは完全にホスト側に留まります。ローカルプロキシがプロバイダーへの経路上でキーを注入するため、完全に侵害されたエージェントでも外部に持ち出せる情報はありません。
- **ネットワークはあなたのものです。** `--network-isolated` はエージェントのAPIエンドポイントと許可したドメインのみに外部通信を制限します。`--network-none` はネットワークを完全に削除します。
- **マシンは隔離されています。** Linux名前空間からgVisor、ハードウェアVMまで、快適なレベルを選択できます。
完全なモデル(正直な制限事項を含む)については [セキュリティ](https://github.com/kstenerud/yoloai/blob/main/docs/GUIDE.md#security) を参照してください。
## インストール
### プリビルドバイナリ(推奨)
[最新リリース](https://github.com/kstenerud/yoloai/releases/latest) からお使いのプラットフォーム用のアーカイブをダウンロードし、`yoloai` バイナリを展開して `PATH` に配置します:
```bash
# 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/
```
各アーカイブにはシェル補完、`LICENSE`、変更ログも同梱されています。リリースはcosign(`checksums.txt`)で署名され、GitHubのビルド来歴(`gh attestation verify yoloai_… --repo kstenerud/yoloai`)が付与されています。Debian/RPMパッケージも各リリースに添付されています。
### Homebrew(macOS / Linux)
```bash
brew install --cask kstenerud/tap/yoloai
```
### `go install` を使用
```bash
# 最新リリース
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`)に配置されます。
### ソースから
```bash
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` で指定したディレクトリ)を作成します。
## クイックスタート
### 非対話型
```bash
# 認証(yoloAIは既存の認証情報を自動的に検出します)
export ANTHROPIC_API_KEY=sk-ant-... # Claude Code
export GEMINI_API_KEY=... # Gemini CLI
# または、すでに認証済みのセッションをそのまま利用
# 1. サンドボックスを起動。プロンプトを指定するとエージェントがすぐに作業を開始します
yoloai new fix-bug ./my-project --prompt "fix the failing tests"
# 2. エージェントが変更した内容を確認
yoloai diff fix-bug
# 3. 良い部分だけを実際のプロジェクトに適用
yoloai apply fix-bug
# 4. サンドボックスを破棄
yoloai destroy fix-bug
```
### 対話型
```bash
yoloai new exploration ./my-project -a
# サンドボックス内のtmuxで実行されているエージェントの中に入ります。
# Ctrl-B, D でデタッチ。
# yoloai attach exploration で再接続。
```
### 反復作業
長時間のセッションではループで作業します: エージェントに作業の進行に合わせてコミットするよう指示し、完成したコミットを実際のプロジェクトに取り込みたいときは別のターミナルから `yoloai apply` を実行します。適用のたびに前回以降の新しいコミットだけが取り込まれます。結果に満足したら通常どおりプッシュしてサンドボックスを破棄します。完全なワークフローは [使用ガイド](https://github.com/kstenerud/yoloai/blob/main/docs/GUIDE.md) を参照してください。
## デモ
サンドボックスの作成、エージェントへのプロンプト、結果の適用:
https://github.com/user-attachments/assets/9d6740b4-a34e-4253-82ec-cb0e4c7a8bd9
## 機能
**サンドボックス**
- 6つのバックエンド: Docker、Podman、containerd(Kata)、Apple Container、Tart、Seatbelt。Linux、macOS、Windows(WSL2)で動作します。
- サンドボックスごとに選択可能な隔離強度。runcからgVisor、Kata VM(QEMUまたはFirecracker)まで。
- サンドボックスごとのネットワークポリシー: オープン、許可リスト、なし。
- サンドボックス内の最小限の環境。ホストからのものはすべて明示的なオプトイン(`--env`、`--dir`)です。
- リソース制限(`--cpus`、`--memory`)とポート転送(`--port`)。
- 安価な作業ディレクトリコピー: macOSではツリー全体のクローン(APFS `clonefile`)、対応するLinuxファイルシステム(btrfs、XFS)ではファイルごとのreflink。reflink非対応のファイルシステム(ext4)では通常のコピー。
- `.gitignore` を尊重: 無視されたものはサンドボックスにコピーされません(ディスク上の開発用認証情報に対するセキュリティ対策)。
**認証情報**
- 既存のエージェントログインを自動検出: APIキー、サブスクリプション認証情報、macOSキーチェーン。
- 認証情報ブローカリングによりAPIキーはホスト側に保持されます(現在はClaude、Gemini、Codex)。AiderとOpenCodeの認証情報は読み取り専用のファイルマウントとして提供されます。
**ワークフロー**
- gitをサンドボックス側で実行するコピー/差分/適用。フィルターやフックのあるリポジトリでも正しく動作します。
- 適用方法を選択可能: コミットのリプレイ(デフォルト)、単一パッチへのスカッシュ、`.patch` ファイルのエクスポート、refによるコミット選択、または事前の `--dry-run`。
- 完全なライフサイクル: 作成、アタッチ、停止、再起動、待機、クローン、リセット、破棄。エージェントの状態は停止・再起動後も保持されます。
- スクリプトやCI向けのヘッドレスワンショット: `yoloai run --prompt ... --rm`。すべてのコマンドで `--json` 出力に対応。
- エージェントが終了すると、そのtmuxペインはシェルにフォールバックするため、サンドボックスを検査できます。
**統合**
- Claude Code、Codex、Gemini CLI、Aider、OpenCodeが組み込み。その他は `shell` モードで対応。
- VS Code: コンテナにアタッチするか、サンドボックス内からRemote Tunnelを開きます(`--vscode-tunnel`)。
- 双方向のMCP: `yoloai mcp serve` で外部エージェントがサンドボックスをツールとして操作可能。`yoloai mcp proxy` でサンドボックス内のMCPサーバーを実行。
- プロファイル: プロジェクトごとのイメージとデフォルト(Dockerfile + 設定、継承対応)。
- 拡張機能: YAMLでラップしたシェルスクリプトとして独自のサブコマンドを追加(`yoloai x`)。
- 組み込み可能: CLIは公開 [Go API](https://pkg.go.dev/github.com/kstenerud/yoloai) の薄いレイヤーです。
- 単一の静的バイナリ。状態は `~/.yoloai/` に保存されます(`--data-dir` で移動可能)。
## 対応インフラストラクチャ
### サンドボックスバックエンド
| バックエンド | 対応ホスト | 依存関係 |
|------------|------------------------------|--------------------------------------------------------------------|
| docker | Linux、macOS、Windows (WSL2) | [Docker Engine](https://docs.docker.com/engine/install)、[Docker Desktop](https://docs.docker.com/get-docker)、または [OrbStack](https://orbstack.dev) |
| podman | Linux、macOS | [Podman](https://podman.io/get-started)(macOSでは `brew install podman`) |
| containerd | Linux | [Kata Containers](https://katacontainers.io) |
| apple | macOS(Apple Silicon) | [Apple Container](https://github.com/apple/container) |
| tart | macOS(Apple Silicon) | [Tart](https://github.com/cirruslabs/tart)(`brew install cirruslabs/cli/tart`) |
| seatbelt | macOS(すべて) | なし(組み込みの `sandbox-exec` を使用) |
**注記**: Tartは完全なmacOS VMを提供するため、サンドボックス内でシミュレーターを実行できます。
### 隔離モード
必要に応じてOCIランタイムをアップグレードし、より強力な隔離を実現できます。gVisorモードはdockerとpodmanで利用可能で、VMモードはcontainerdバックエンドに付属しています。
| モード | 説明 |
|------|-------------|
| `container` | デフォルトの `runc`: 標準のLinux名前空間とcgroups |
| `container-enhanced` | ユーザー空間カーネル(gVisor/runsc): システムコールインターセプト、KVM不要 |
| `container-privileged` | すべてのケーパビリティ、seccomp/AppArmor無制限。Docker-in-DockerやCompose用 |
| `vm` | Kata Containers(QEMU): ハードウェアVM隔離 |
| `vm-enhanced` | Kata + Firecracker microVM: 軽量VM隔離 |
```bash
# すべての新しいサンドボックスでgVisorを使用
yoloai config set isolation container-enhanced
# またはサンドボックスごとに指定
yoloai new task . --isolation container-enhanced
```
### エージェント
| モード | 説明 |
|------------|-------------|
| `claude` | APIキーまたはサブスクリプション認証情報で [Claude Code](https://github.com/anthropics/claude-code) を実行(デフォルト) |
| `codex` | APIキーまたはサブスクリプション認証情報で [Codex](https://github.com/openai/codex) を実行 |
| `gemini` | APIキーまたはサブスクリプション認証情報で [Gemini CLI](https://github.com/google-gemini/gemini-cli) を実行 |
| `aider` | [Aider](https://github.com/Aider-AI/aider) を実行(設定はコピーされます) |
| `opencode` | [OpenCode](https://github.com/anomalyco/opencode) を実行(設定はコピーされます) |
| `shell` | すべてのエージェント認証情報がシードされたtmuxシェルを実行 |
| `idle` | MCPプロキシを許可するアイドルプロセスを実行 |
利用可能なエージェントを一覧表示するには `yoloai system agents` を使用します。
## 詳細情報
- **[使用ガイド](https://github.com/kstenerud/yoloai/blob/main/docs/GUIDE.md)**: コマンド、フラグ、作業ディレクトリモード、設定、セキュリティ
- **[ロードマップ](https://github.com/kstenerud/yoloai/blob/main/docs/ROADMAP.md)**: 今後の機能
- **[アーキテクチャ](https://github.com/kstenerud/yoloai/blob/main/docs/contributors/architecture/README.md)**: コントリビューター向けのコードナビゲーション
## ステータス
パブリックベータ版。コアワークフローは安定しており毎日使用されています。インターフェースは0.xリリース間で変更される可能性があり、すべての破壊的変更は [BREAKING-CHANGES](https://github.com/kstenerud/yoloai/blob/main/docs/BREAKING-CHANGES.md) に文書化されています。[フィードバック歓迎。](https://github.com/kstenerud/yoloai/issues)
## ライセンス
[MIT](https://github.com/kstenerud/yoloai/blob/main/LICENSE)