
コンテナ不要の軽量サンドボックス:ネットワークとファイルシステムに制限をかけてコマンドを実行するためのもの

Fence はコマンドをサンドボックスでラップし、デフォルトでネットワークアクセスをブロックし、設定可能なルールに基づいてファイルシステム操作を制限します。これは、半信頼のおけるコード(パッケージインストール、ビルドスクリプト、CIジョブ、馴染みのないリポジトリ)を副作用を制御しながら実行する場合に最も役立ち、また、AIコーディングエージェントに対して多層防御として補完することもできます。
# すべてのネットワークアクセスをブロック(デフォルト)
fence curl https://example.com # → 403 Forbidden
# 特定のドメインを許可
fence -t code npm install # → 'code'テンプレートを使用(npm/pypiなど許可)
# 危険なコマンドをブロック
fence -c "rm -rf /" # → コマンド拒否ルールによりブロック
Fence は CLI エージェントのパーミッションマネージャーでもあります。Claude Code、Codex、Amp、Gemini CLI、GitHub Copilot、OpenCode、Factory (Droid) CLI などの人気コーディングエージェントと連携します - 詳細は agents.md を参照してください。
[!NOTE] Fence は
github.com/Use-Tusk/fenceからgithub.com/fencesandbox/fenceに移行しました。 以前のTusk tapからHomebrewでインストールした場合は、新しいtapに切り替えてください:brew uninstall use-tusk/tap/fence brew untap use-tusk/tap brew tap fencesandbox/tap brew install fencesandbox/tap/fence
go installでインストールした場合は、新しいモジュールパスから再インストールしてください:go install github.com/fencesandbox/fence/cmd/fence@latest
macOS / Linux:
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
Homebrew (macOS):
brew tap fencesandbox/tap
brew install fencesandbox/tap/fence
Nix (macOS, Linux, Windows (WSL)):
nix run nixpkgs#fence -- --help
これは、リポジトリから直接実行し、fence をインストールしません。インストールしたい場合は、NixOS または nix-darwin のガイドラインに従ってください。
Go install:
go install github.com/fencesandbox/fence/cmd/fence@latest
ソースからビルド:
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
Linux の追加要件:
bubblewrap (サンドボックス化のため)socat (ネットワークブリッジのため)bpftrace (オプション、-m で監視時のファイルシステム違反可視化のため)# すべてのネットワークをブロックしてコマンドを実行(デフォルトではドメインは許可されない)
fence curl https://example.com
# シェル展開を使用して実行
fence -c "echo hello && ls"
# デバッグログを有効化
fence -d curl https://example.com
# テンプレートを使用
fence -t code -- claude # `code`テンプレート設定でClaude Codeを実行
# 監視モード(違反を表示)
fence -m npm install
# Fence自身のモニター/デバッグログをファイルに出力
fence -m --fence-log-file /tmp/fence.log -- claude
tail -f /tmp/fence.log
# 設定継承チェーンとアクティブな統合設定を表示
fence config show
# すべてのコマンドとオプションを表示
fence --help
[!TIP] 実行するコマンドにフラグを渡す必要がありますか?
--を使って Fence のフラグとコマンドのフラグを区切ってください。例:fence -- claude --dangerously-skip-permissions
--settings を指定しない場合、Fence は最初に現在のディレクトリと親ディレクトリで fence.jsonc(または fence.json)を探します。見つからない場合は、~/.config/fence/fence.{jsonc,json} にフォールバックします。どちらの拡張子も JSONC として扱われます(コメントと末尾カンマが許可されます)。詳細は設定リファレンスを参照してください。
{
"$schema": "https://raw.githubusercontent.com/fencesandbox/fence/main/docs/schema/fence.schema.json",
"extends": "code",
"network": { "allowedDomains": ["private.company.com"] },
"filesystem": { "allowWrite": ["."] },
"command": { "deny": ["git push", "npm publish"] }
}
各ユーザーの通常の Fence 設定に加えてリポジトリローカルのオーバーライドを行うには、次を使用します:
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
異なる設定ファイルを指定するには fence --settings ./custom.json を使用します。
コマンドを実行せずにアクティブな設定を確認するには:
fence config show
fence config show --settings ./custom.json
fence config show --template code
fence config show は設定チェーンを stderr に出力し、完全に解決された設定をプレーンな JSON として stdout に出力するため、JSON を jq などのツールにパイプできます。
適切なデフォルトでスターター設定を作成する:
# デフォルトパスに以下の設定で作成:
# { "extends": "code" }
fence config init
# 編集可能なヒントとしてスキャフォールド配列を含める
fence config init --scaffold
fence import --claude --save
rm -rf /、git push などの危険なコマンドを拒否-m)Fence は Go パッケージまたは CLI ツールとして使用できます。
完全なドキュメントは fencesandbox.com/docs にあります。
クイックリンク:
Anthropic の sandbox-runtime に触発されました。