opencode-sandbox: OpenCode 2 in a sandbox for any project
Runs OpenCode 2 with full permissions while containing its mistakes: - egress filter: squid in a container per project; squid.conf is rendered from layered egress.conf files (package, user, project, local) with allow/block/connect rules and expect-pass/expect-block self-tests - netlock: nftables rejects direct egress for the opencode-sandbox group (installed once with sudo as a systemd unit) - bubblewrap: read-only host, writable project, worktrees and state; credentials hidden; ssh keys via the host's ssh-agent; session bus replaced by an xdg-dbus-proxy limited to notifications; no permission prompts (sudo and systemd-run denied); refuses to run unsandboxed - per-project state in ~/.local/share/opencode-sandbox/<name> - worktrees: `wt add|rm|list` with project hooks - skills mounted per project; the opencode-sandbox skill explains the environment to the agent - plugins as submodules: context-panel, skill-compact-resurrect; global config adds opencode-notifier and cc-safety-net - README in English and Russian
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
PREFIX ?= $(HOME)/.local
|
||||
BIN := $(PREFIX)/bin/opencode-sandbox
|
||||
|
||||
.PHONY: help install uninstall plugins lint
|
||||
|
||||
help:
|
||||
@echo "make install link bin/opencode-sandbox into $(PREFIX)/bin and fetch plugins"
|
||||
@echo "make uninstall remove the link"
|
||||
@echo "make plugins fetch or update plugins (git submodules)"
|
||||
@echo "make lint bash -n and shellcheck"
|
||||
|
||||
install: plugins
|
||||
@mkdir -p $(dir $(BIN))
|
||||
ln -sfn $(CURDIR)/bin/opencode-sandbox $(BIN)
|
||||
@echo "✓ $(BIN) → $(CURDIR)/bin/opencode-sandbox"
|
||||
@case ":$$PATH:" in *":$(PREFIX)/bin:"*) ;; *) echo "⚠ $(PREFIX)/bin is not in PATH";; esac
|
||||
|
||||
uninstall:
|
||||
rm -f $(BIN)
|
||||
|
||||
plugins:
|
||||
git submodule update --init --recursive
|
||||
|
||||
lint:
|
||||
@for f in bin/opencode-sandbox lib/*.sh egress/entrypoint.sh shim/xdg-open templates/project/hooks/*.example; do \
|
||||
bash -n $$f || exit 1; done
|
||||
@if command -v shellcheck >/dev/null; then \
|
||||
shellcheck -x bin/opencode-sandbox lib/*.sh egress/entrypoint.sh shim/xdg-open; \
|
||||
else echo "shellcheck not installed — syntax only"; fi
|
||||
@echo "✓ lint"
|
||||
Reference in New Issue
Block a user