Skip to content

Fence 1.0.0 — the compatibility promise

Choose a tag to compare

@github-actions github-actions released this 06 Jul 19:05
· 26 commits to main since this release
a999976

⚠️ Renamed: Leash is now Fence 🚧

Clean break, no compatibility shims. If you had leash installed:

leash uninstall --global        # remove the old hooks (with the old binary)
brew uninstall leash            # or: npm rm -g @hoophq/leash
brew install hoophq/tap/fence   # or: npm install -g @hoophq/fence
fence init --global

State lives in ~/.fence now; project rule files are ./.fence.yaml. Installed packs: re-run fence add <pack>.

What 1.0 promises

1.0 is a compatibility promise, not a feature bar. The three public contracts — the rulepack schema, the registry index format, and the hook envelope — are frozen and versioned for all of 1.x (what that means). Rulepacks declare schema: 1; a pack needing newer vocabulary is refused whole on older binaries (skipped with an "upgrade fence" warning), never half-read.

New since 0.2.0

  • Codex support — the same rulepacks now guard OpenAI Codex CLI with zero engine changes: fence init codex, then trust the hook once via /hooks inside Codex. Shell commands and apply_patch edits are screened per file touched.
  • fence uninstall [agent] — the exit door: removes exactly the hooks init added, preserves everything else.
  • A written threat modelwhat Fence defends against, what it deliberately doesn't, and the known evasion paths, honestly.
  • Community scaffolding — CONTRIBUTING, SECURITY (private vulnerability reporting), and issue templates; the false-positive template is the one that matters most.
  • Windows: honestly unsupported natively — fence init says so instead of half-working; WSL works today. #26 tracks native support.

Install: brew install hoophq/tap/fence · npm install -g @hoophq/fence · binaries below