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

Fence оборачивает команды в изолированную среду (песочницу), которая по умолчанию блокирует сетевой доступ и ограничивает операции с файловой системой на основе настраиваемых правил. Это наиболее полезно для выполнения полудоверенного кода (установка пакетов, скрипты сборки, задачи CI, незнакомые репозитории) с контролируемыми побочными эффектами, а также может дополнять AI-агенты кодирования в качестве защиты на нескольких уровнях.
# Блокировать весь сетевой доступ (по умолчанию)
fence curl https://example.com # → 403 Forbidden
# Разрешить определённые домены
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 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.
Быстрые ссылки:
- Быстрый старт (исходник)
- Справочник по конфигурации (исходник)
- Хуки агентов (исходник)
- Модель безопасности (исходник)
- Использование библиотеки Go (исходник)
- Архитектура (исходник)
Атрибуция
Вдохновлено sandbox-runtime от Anthropic.