Protect host-run files from the agent; trust registry; git audit

- read-only in the sandbox: .opencode-sandbox/, .cc-safety-net/, .git/hooks, .git/config,
  an in-project core.hooksPath, the egress rules and the safety-net home; .git is pinned
  by a bind onto itself so it cannot be swapped
- only trusted projects are loaded (init / trust): a .opencode-sandbox/ in a worktree or a
  subdirectory is no longer sourced on the host
- run (before and after the session) and doctor report planted .git entries, redirected
  worktrees and per-worktree overrides
- hide Firefox, Claude, VS Code, Cursor and Codex configs
This commit is contained in:
2026-10-30 01:31:36 -07:00
parent 5a7567849e
commit 01fc1627c1
8 changed files with 143 additions and 8 deletions
+21 -1
View File
@@ -69,7 +69,11 @@ opencode-sandbox run
`~/.local/share/opencode-sandbox/<проект>/password` (выводится при первом запуске).
Закоммитьте `.opencode-sandbox/` (кроме `local/`) и `.cc-safety-net/` — каждый, кто
склонирует проект, получит ту же песочницу.
склонирует проект, получит ту же песочницу. `sandbox.conf` и хуки — это bash, который
выполняется на вашем хосте, поэтому загружаются только доверенные проекты: `init` доверяет
созданному проекту, а в клоне прочитайте `.opencode-sandbox/` и выполните
`opencode-sandbox trust` (список — `~/.config/opencode-sandbox/projects`).
`.opencode-sandbox/` в worktree или подкаталоге игнорируется.
## Файлы проекта
@@ -233,6 +237,14 @@ opencode-sandbox run
(tmux, X11, сокеты браузеров, других программ), поэтому у агента свой `/tmp` — в
`<состояние>/tmp` (файлы старше 7 дней удаляются при запуске). Скриншоты и логи агента ищите
там. Docker смонтирует путь из `/tmp` из `/tmp` хоста — монтируйте пути проекта.
- **Только чтение внутри проекта:** то, что хост выполняет вне песочницы, — `.opencode-sandbox/`,
`.cc-safety-net/`, `.git/hooks`, `.git/config` (`core.fsmonitor` оттуда срабатывает при любом
`git status`, хватит prompt'а оболочки), `core.hooksPath`, если он внутри проекта, — а также
правила egress и домашний каталог safety-net в каталоге состояния. Сам `.git` — точка
монтирования, его нельзя переименовать и подменить. git работает; не проходит только запись
`git config` (например, `push -u` не запишет upstream). После каждой сессии `run` сообщает
о других `.git` в проекте и worktree, о worktree, чей `.git` указывает в другое место, и о
переопределениях для отдельных worktree; `doctor` проверяет то же.
- **Скрыто:** `OCSB_HIDE_HOME`, `OCSB_HIDE`, приватные ключи в `~/.ssh` (`config`,
`known_hosts` и `*.pub` видны; подписывает ssh-agent хоста).
- **Сеть:** `HTTP(S)_PROXY` указывают на фильтр. `GIT_SSH_COMMAND` пускает ssh через него
@@ -269,6 +281,13 @@ opencode-sandbox run
правила.
- **Проект доступен на запись.** Ошибки внутри него настоящие; cc-safety-net блокирует
типичные разрушительные команды, git хранит историю — коммитьте чаще.
- **Файлы, которые вы запускаете сами.** Хуки, конфиги и метаданные git защищены (см. выше),
но код агент правит: изменённый `Makefile`, скрипт в `package.json` или файл в `bin/`
выполнится с вашими правами, когда вы его запустите. Смотрите `git diff`, прежде чем
запускать команды проекта на хосте.
- **Подложенные репозитории обнаруживаются, а не предотвращаются.** `.git`, созданный агентом
в новом каталоге или новом worktree, найдёт проверка после сессии; не запускайте там git,
пока не посмотрели.
- С `OCSB_TMP=shared` доступны `/tmp` хоста и его сокеты.
- С `OCSB_DISPLAY=1` агент может открывать окна на вашем экране и пользоваться буфером обмена,
пока его окно в фокусе.
@@ -304,6 +323,7 @@ docker rmi opencode-sandbox-egress
```
opencode-sandbox init добавить .opencode-sandbox/ в текущий репозиторий
opencode-sandbox trust [каталог] доверять существующему .opencode-sandbox/ (клон)
opencode-sandbox config итоговые настройки
opencode-sandbox doctor зависимости и настройки хоста
opencode-sandbox run [аргументы opencode] всё сразу, затем OpenCode