<div align="center">
</div>
Fence는 기본적으로 네트워크 액세스를 차단하고 구성 가능한 규칙에 따라 파일 시스템 (filesystem) 작업을 제한하는 샌드박스 (sandbox) 내에서 명령어를 감쌉니다. 이는 제어된 부작용 (side effects)과 함께 반신뢰 코드 (semi-trusted code, 패키지 설치, 빌드 스크립트, CI 작업, 익숙하지 않은 저장소 등)를 실행할 때 가장 유용하며, 심층 방어 (defense-in-depth)로서 AI 코딩 에이전트 (AI coding agents)를 보완할 수도 있습니다.
fence curl https://example.com
...
<p align="center">
<img src="https://raw.githubusercontent.com/Use-Tusk/fence/HEAD/assets/demo.gif" alt="Fence Claude Code demo" width="800">
</p>
Fence는 또한 CLI 에이전트를 위한 권한 관리자 (permission manager)이기도 합니다. Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI 등 인기 있는 코딩 에이전트와 함께 작동합니다 - agents.md를 참조하세요.
설치 (Install)
macOS / Linux:
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
Homebrew (macOS):
brew tap use-tusk/tap
brew install use-tusk/tap/fence
Nix (macOS, Linux, Windows (WSL)):
nix run nixpkgs#fence -- --help
이 방식은 fence를 설치하지 않고 저장소에서 직접 실행합니다. 설치를 원하신다면 NixOS 또는 nix-darwin의 가이드를 따르세요.
<details>
<summary>기타 설치 방법 (Other installation methods)</summary>
Go install:
go install github.com/Use-Tusk/fence/cmd/fence@latest
소스에서 빌드 (Build from source):
git clone https://github.com/Use-Tusk/fence
cd fence
go build -o fence ./cmd/fence
</details>
Linux를 위한 추가 요구 사항:
bubblewrap (샌드박싱용)
socat (네트워크 브릿징용)
bpftrace (선택 사항, -m으로 모니터링할 때 파일 시스템 위반 가시성을 위함)
사용법 (Usage)
기본 (Basic)
fence curl https://example.com
...
[!TIP]
실행하려는 명령에 플래그 (flags)를 전달해야 하나요? --를 사용하여 Fence 플래그와 명령 플래그를 구분하세요. 예시:
fence -- claude --dangerously-skip-permissions
### 설정 (Configuration)
`--settings`가 제공되지 않으면, Fence는 먼저 현재 디렉토리와 상위 디렉토리에서 `fence.jsonc` (또는 `fence.json`)를 찾습니다. 아무것도 발견되지 않으면 `~/.config/fence/fence.{jsonc,json}`을 기본값으로 사용합니다. 두 확장자 모두 JSONC (주석 및 trailing comma 허용)로 처리됩니다. 자세한 내용은 [설정 참조](./docs/configuration.md)를 확인하세요.
```json
{
"$schema": "https://raw.githubusercontent.com/Use-Tusk/fence/main/docs/schema/fence.schema.json",
"extends": "code",
...
각 사용자의 일반적인 Fence 설정 위에 리포지토리 로컬 (repo-local) 재정의 (overrides)를 적용하려면 다음을 사용하세요:
{
"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는 설정 체인 (config chain)을 stderr에 출력하고, 완전히 해결된 (fully resolved) 설정을 일반 JSON 형식으로 stdout에 출력하므로, JSON을 jq와 같은 도구로 파이프 (pipe) 연결할 수 있습니다.
합리적인 기본값이 포함된 시작 설정 (starter config)을 생성하려면:
Claude Code에서 가져오기 (Import from Claude Code)
fence import --claude --save
기능 (Features)
- 네트워크 격리 (Network isolation) - 기본적으로 모든 외부 연결이 차단되며, 설정을 통해 허용 목록 (allowlist) 도메인을 지정할 수 있습니다.
- 파일 시스템 제한 (Filesystem restrictions) - 읽기/쓰기 액세스 경로를 제어합니다.
- 명령어 차단 (Command blocking) -
rm -rf /, git push와 같은 위험한 명령어를 거부합니다.
- SSH 명령어 필터링 (SSH Command Filtering) - SSH를 통해 허용되는 호스트와 명령어를 제어합니다.
- 내장 템플릿 (Built-in templates) - 일반적인 워크플로우를 위한 사전 구성된 규칙 세트(rulesets)를 제공합니다.
- 위반 모니터링 (Violation monitoring) - 차단된 요청을 실시간으로 로깅합니다 (
-m).
- 크로스 플랫폼 (Cross-platform) - macOS (sandbox-exec) 및 Linux (bubblewrap)를 지원합니다.
Fence는 Go 패키지 또는 CLI 도구로 사용할 수 있습니다.
문서 (Documentation)
전체 문서는 **fencesandbox.com/docs**에서 확인할 수 있습니다.
빠른 링크:
출처 (Attribution)
Anthropic의 sandbox-runtime에서 영감을 받았습니다.