Назад к обновлениям
New releaseJul 26, 2026

fence v0.1.64

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

Поделиться

Fence Banner

GitHub Release Build and test Docs Ask DeepWiki License

Fence оборачивает команды в изолированную среду (песочницу), которая по умолчанию блокирует сетевой доступ и ограничивает операции с файловой системой на основе настраиваемых правил. Это наиболее полезно для выполнения полудоверенного кода (установка пакетов, скрипты сборки, задачи CI, незнакомые репозитории) с контролируемыми побочными эффектами, а также может дополнять AI-агенты кодирования в качестве защиты на нескольких уровнях.

# Блокировать весь сетевой доступ (по умолчанию)
fence curl https://example.com  # → 403 Forbidden

# Разрешить определённые домены
fence -t code npm install  # → использует шаблон 'code' с разрешёнными npm/pypi и т.д.

# Блокировать опасные команды
fence -c "rm -rf /"  # → заблокировано правилами запрета команд

Fence Claude Code демо

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 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  # Запускает 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 от флагов команды, например:

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

Импорт из Claude Code

fence import --claude --save

Возможности

  • Сетевая изоляция — весь исходящий трафик по умолчанию заблокирован; разрешайте домены через конфигурацию
  • Ограничения файловой системы — контроль путей чтения/записи
  • Блокировка команд — запрет опасных команд, таких как rm -rf /, git push
  • Фильтрация SSH-команд — контроль того, какие хосты и команды разрешены через SSH
  • Встроенные шаблоны — предварительно настроенные наборы правил для типичных рабочих процессов
  • Мониторинг нарушений — уведомления в реальном времени о заблокированных запросах (-m)
  • Кроссплатформенность — macOS (sandbox-exec) + Linux (bubblewrap)

Fence можно использовать как Go-пакет или CLI-инструмент.

Документация

Полная документация размещена на fencesandbox.com/docs.

Быстрые ссылки:

Атрибуция

Вдохновлено sandbox-runtime от Anthropic.

Категории