cplt は何をしますか?
AIコーディングエージェント向けサンドボックスラッパー。GitHub Copilot CLI、OpenCode、Google Gemini CLI、Pi、またはプレーンシェルをカーネルレベルのサンドボックス内で実行し、エージェントがプロジェクトで作業できるようにしながらも、秘密情報にはアクセスできないようにします。
概要
cplt はLinuxカーネルの名前空間(ユーザー名前空間、マウント名前空間)とseccompを使用して、AIコーディングエージェント用の軽量サンドボックスを作成します。エージェントのファイルシステムアクセスをプロジェクトディレクトリに制限し、機密性の高いシステムパスやユーザーデータにはアクセスさせません。
サポートするエージェント
- GitHub Copilot CLI (
gh copilot) - OpenCode (
opencode) - Google Gemini CLI (
gemini) - Pi (
pi) - プレーンシェル(
bash、zshなど)
使用法
インストール
# リポジトリをクローン
$ git clone https://github.com/navikt/cplt.git
$ cd cplt
# シェルにエイリアスを追加(推奨)
$ source cplt.sh
基本コマンド
# 現在のディレクトリでCopilot CLIをサンドボックス内で実行
$ cplt gh copilot
# サンドボックス内でOpenCodeを実行
$ cplt opencode
# サンドボックス内でプレーンシェルを開始
$ cplt bash
高度な使用法
# 特定のプロジェクトディレクトリを指定
$ cplt --project /path/to/my/project gh copilot
# 追加の読み取り専用マウントを許可(注意して使用)
$ cplt --allow /usr/share/some-tool gh copilot
# デバッグ出力を有効化
$ cplt --verbose gh copilot
仕組み
sandbox-runner バイナリが以下の処理を行います:
- 新しいユーザー名前空間を作成し、プロセスを特権のないユーザーとして実行
- 新しいマウント名前空間を作成し、以下のマウントを設定:
- プロジェクトディレクトリを読み取り/書き込み可能でマウント
- 必要なシステムディレクトリ(
/bin、/lib、/usr)を読み取り専用でマウント /home、/root、/tmp、/varなどの機密性の高いパスを空のtmpfsでマウント
- seccompプロファイルを適用し、不要なシステムコールをブロック
- 指定されたエージェントプログラムをサンドボックス内で実行
設定
環境変数で動作をカスタマイズできます:
| 変数名 | 説明 | デフォルト |
|---|---|---|
CPLT_PROJECT_DIR | プロジェクトディレクトリへのパス | $PWD |
CPLT_ALLOW_DIRS | 許可する追加の読み取り専用ディレクトリ | (なし) |
CPLT_VERBOSE | デバッグ出力を有効化 | false |
CPLT_USER_NS | ユーザー名前空間の分離を使用 | true |
CPLT_DISABLE_SECCOMP | seccompフィルタリングを無効化 | false |
制限事項
- Linuxのみサポート(macOSやWindowsには対応していません)
- カーネルがユーザー名前空間をサポートしている必要があります
- 一部のエージェントは、機能制限によりサンドボックス内で特定の機能が動作しない場合があります
- サンドボックスは特権昇格攻撃に対する完全な防御を提供しません
セキュリティ
このツールは、偶発的なデータ漏洩に対する防御線を提供しますが、悪意のあるエージェントやバグのあるエージェントに対する完全な保護を保証するものではありません。機密性の高いワークロードには、専用の隔離環境(別のVMなど)を使用することをお勧めします。
ライセンス
MIT