
fence v0.1.64
네트워크 및 파일 시스템 제한을 적용하여 명령을 실행하는 가볍고 컨테이너 없는 샌드박스.

Fence는 명령어를 샌드박스로 감싸 기본적으로 네트워크 액세스를 차단하고 설정 가능한 규칙을 기반으로 파일 시스템 작업을 제한합니다. 반신뢰 코드(패키지 설치, 빌드 스크립트, CI 작업, 익숙하지 않은 저장소)를 제어된 부작용으로 실행할 때 가장 유용하며, 심층 방어로서 AI 코딩 에이전트를 보완할 수도 있습니다.
# 모든 네트워크 액세스 차단 (기본값)
fence curl https://example.com # → 403 Forbidden
# 특정 도메인 허용
fence -t code npm install # → npm/pypi 등이 허용된 'code' 템플릿 사용
# 위험한 명령어 차단
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 설치:
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에 출력하므로 jq와 같은 도구로 JSON을 파이핑할 수 있습니다.
합리적인 기본값으로 시작 구성을 생성:
# 기본 경로에 다음과 같은 구성을 생성:
# { "extends": "code" }
fence config init
# 편집 가능한 힌트로 스캐폴드 배열 포함
fence config init --scaffold
Claude Code에서 가져오기
fence import --claude --save
기능
- 네트워크 격리 - 모든 아웃바운드가 기본적으로 차단됨; 구성을 통해 도메인 화이트리스트
- 파일 시스템 제한 - 읽기/쓰기 액세스 경로 제어
- 명령어 차단 -
rm -rf /,git push와 같은 위험한 명령어 거부 - SSH 명령어 필터링 - SSH를 통해 허용되는 호스트 및 명령어 제어
- 내장 템플릿 - 일반적인 워크플로우를 위한 사전 구성된 규칙 세트
- 위반 모니터링 - 차단된 요청의 실시간 로깅 (
-m) - 크로스 플랫폼 - macOS (sandbox-exec) + Linux (bubblewrap)
Fence는 Go 패키지 또는 CLI 도구로 사용할 수 있습니다.
문서
전체 문서는 **fencesandbox.com/docs**에서 호스팅됩니다.
빠른 링크:
기여
Anthropic의 sandbox-runtime에서 영감을 받았습니다.