
Легковесная песочница без контейнеров для выполнения команд с ограничениями сети и файловой системы

<div align="center">

[](https://github.com/fencesandbox/fence/actions/workflows/main.yml)
[](https://fencesandbox.com/docs)
[](https://deepwiki.com/fencesandbox/fence)
[](https://opensource.org/licenses/Apache-2.0)
</div>
Fence оборачивает команды в изолированную среду (песочницу), которая по умолчанию блокирует сетевой доступ и ограничивает операции с файловой системой на основе настраиваемых правил. Это наиболее полезно для выполнения полудоверенного кода (установка пакетов, скрипты сборки, задачи CI, незнакомые репозитории) с контролируемыми побочными эффектами, а также может дополнять AI-агенты кодирования в качестве защиты на нескольких уровнях.
```bash
# Блокировать весь сетевой доступ (по умолчанию)
fence curl https://example.com # → 403 Forbidden
# Разрешить определённые домены
fence -t code npm install # → использует шаблон 'code' с разрешёнными npm/pypi и т.д.
# Блокировать опасные команды
fence -c "rm -rf /" # → заблокировано правилами запрета команд
```
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/11239/fcd1fc039e748ec60455ad0f3f2cba244840824dc0d96362d18fd29500e46206.gif" alt="Fence Claude Code демо" width="800">
</p>
Fence также является менеджером разрешений для ваших CLI-агентов. **Работает с популярными агентами кодирования, такими как Claude Code, Codex, Amp, Gemini CLI, GitHub Copilot, OpenCode, Factory (Droid) CLI и многими другими** — см. [agents.md](https://github.com/fencesandbox/fence/blob/main/docs/agents.md).
## Установка
> [!NOTE]
> Fence перемещён из `github.com/Use-Tusk/fence` в `github.com/fencesandbox/fence`.
> Если вы устанавливали с помощью Homebrew из старого Tusk tap, переключитесь на новый tap:
>
> ```bash
> brew uninstall use-tusk/tap/fence
> brew untap use-tusk/tap
> brew tap fencesandbox/tap
> brew install fencesandbox/tap/fence
> ```
>
> Если вы устанавливали с помощью `go install`, переустановите из нового пути модуля:
>
> ```bash
> go install github.com/fencesandbox/fence/cmd/fence@latest
> ```
**macOS / Linux:**
```bash
curl -fsSL https://cli.fencesandbox.com/install.sh | sh
```
**Homebrew (macOS):**
```bash
brew tap fencesandbox/tap
brew install fencesandbox/tap/fence
```
**Nix (macOS, Linux, Windows (WSL)):**
```sh
nix run nixpkgs#fence -- --help
```
Эта команда запускает Fence напрямую из репозитория без установки. Если вы хотите установить его, следуйте инструкциям [из NixOS](https://nix.dev) или [nix-darwin](https://github.com/nix-darwin/nix-darwin).
<details>
<summary>Другие способы установки</summary>
**Go install:**
```bash
go install github.com/fencesandbox/fence/cmd/fence@latest
```
**Сборка из исходников:**
```bash
git clone https://github.com/fencesandbox/fence
cd fence
go build -o fence ./cmd/fence
```
</details>
**Дополнительные требования для Linux:**
- `bubblewrap` (для изоляции)
- `socat` (для сетевого моста)
- `bpftrace` (опционально, для видимости нарушений файловой системы при мониторинге с помощью `-m`)
## Использование
### Базовое
```bash
# Запуск команды с полной блокировкой сети (по умолчанию домены не разрешены)
fence curl https://example.com
# Запуск с раскрытием командной оболочки
fence -c "echo hello && ls"
# Включение отладочного журнала
fence -d curl https://example.com
# Использование шаблона
fence -t code -- claude # Запускает Claude Code с конфигурацией шаблона `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 от флагов команды, например:
>
> ```bash
> fence -- claude --dangerously-skip-permissions
> ```
### Конфигурация
Если `--settings` не указан, Fence сначала ищет `fence.jsonc` (или `fence.json`) в текущем каталоге и родительских каталогах. Если не найден, используется резервный путь `~/.config/fence/fence.{jsonc,json}`. Оба расширения обрабатываются как JSONC (допускаются комментарии и завершающие запятые). Подробнее см. в [справочнике по конфигурации](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md).
```json
{
"$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 каждого пользователя используйте:
```json
{
"extends": "@base",
"filesystem": { "allowWrite": ["."] }
}
```
Используйте `fence --settings ./custom.json`, чтобы указать другую конфигурацию.
Просмотр активной конфигурации без выполнения команды:
```bash
fence config show
fence config show --settings ./custom.json
fence config show --template code
```
`fence config show` выводит цепочку конфигурации в `stderr`, а полностью разрешённую конфигурацию в виде обычного JSON в `stdout`, что позволяет передавать JSON в такие инструменты, как `jq`.
Создайте начальную конфигурацию с разумными значениями по умолчанию:
```bash
# Создаёт конфигурацию по пути по умолчанию со значениями:
# { "extends": "code" }
fence config init
# Включает массивы-заготовки в качестве редактируемых подсказок
fence config init --scaffold
```
### Импорт из Claude Code
```bash
fence import --claude --save
```
## Возможности
- **Сетевая изоляция** — весь исходящий трафик по умолчанию заблокирован; разрешайте домены через конфигурацию
- **Ограничения файловой системы** — контроль путей чтения/записи
- **Блокировка команд** — запрет опасных команд, таких как `rm -rf /`, `git push`
- **Фильтрация SSH-команд** — контроль того, какие хосты и команды разрешены через SSH
- **Встроенные шаблоны** — предварительно настроенные наборы правил для типичных рабочих процессов
- **Мониторинг нарушений** — уведомления в реальном времени о заблокированных запросах (`-m`)
- **Кроссплатформенность** — macOS (sandbox-exec) + Linux (bubblewrap)
Fence можно использовать как Go-пакет или CLI-инструмент.
## Документация
Полная документация размещена на **[fencesandbox.com/docs](https://fencesandbox.com/docs)**.
Быстрые ссылки:
- [Быстрый старт](https://fencesandbox.com/docs/quickstart) ([исходник](https://github.com/fencesandbox/fence/blob/main/docs/quickstart.md))
- [Справочник по конфигурации](https://fencesandbox.com/docs/reference/configuration) ([исходник](https://github.com/fencesandbox/fence/blob/main/docs/configuration.md))
- [Хуки агентов](https://fencesandbox.com/docs/guides/hooks) ([исходник](https://github.com/fencesandbox/fence/blob/main/docs/hooks.md))
- [Модель безопасности](https://fencesandbox.com/docs/reference/security-model) ([исходник](https://github.com/fencesandbox/fence/blob/main/docs/security-model.md))
- [Использование библиотеки Go](https://fencesandbox.com/docs/reference/library) ([исходник](https://github.com/fencesandbox/fence/blob/main/docs/library.md))
- [Архитектура](https://fencesandbox.com/docs/reference/architecture) ([исходник](https://github.com/fencesandbox/fence/blob/main/ARCHITECTURE.md))
## Атрибуция
Вдохновлено [sandbox-runtime](https://github.com/anthropic-experimental/sandbox-runtime) от Anthropic.