
Fence 将命令包裹在沙箱中,默认阻止网络访问,并根据可配置的规则限制文件系统操作。它最适合运行半可信代码(包安装、构建脚本、CI 任务、不熟悉的仓库)并控制其副作用,也可以作为纵深防御手段补充 AI 编码智能体。
# 默认阻止所有网络访问
fence curl https://example.com # → 403 禁止
# 允许特定域名
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。 如果你之前通过 Homebrew 从旧的 Tusk tap 安装,请切换到新 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 安装:
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
# 运行包含 shell 展开的命令
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。