v1.1.0
OpenCode support 🚧
The same rulepacks now guard OpenCode — the third agent, with zero engine changes:
fence init opencode # writes ./.opencode/plugins/fence.js (--global for ~/.config/opencode)OpenCode has no hook protocol, so init generates a tiny plugin that pipes every shell command and file edit to the same engine: bash, edit, write, read, webfetch, and apply_patch (screened per file touched, most severe verdict wins). The session banner confirms Fence is watching, and fence uninstall opencode is the exit door.
Two honest notes:
- OpenCode plugins can block a call but can't show an approval prompt, so
askrules stop the call and route the agent to you for confirmation instead of prompting natively. - Fail-open holds on both sides: if the
fencebinary is missing or errors, the plugin lets the call proceed — a guardrail must never brick the agent it protects.
Also in this release
- The threat-model and architecture docs now describe the hooked surface per agent instead of assuming Claude Code.
Install: brew install hoophq/tap/fence · npm install -g @hoophq/fence · binaries below
Upgrading? The binary alone is enough for existing Claude Code/Codex setups — nothing to re-run. For OpenCode, run fence init opencode once.