Skip to content

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 20:12
· 3 commits to main since this release
0c9b351

One hook per agent 🚧

A Claude Code plugin can register a Fence hook of its own — the Hoop plugin ships one. On a machine with both the plugin and a fence init install, Fence evaluated every tool call twice: same verdict, doubled latency, every "🚧 Fence allowed this" notice printed twice.

fence init now detects an enabled plugin that already runs the Fence hook and installs only the status line — the piece no plugin can provide — and removes a duplicate hook an earlier init left behind. Detection deliberately fails toward installing: a false negative merely duplicates work, but a false positive would leave you unguarded, so every uncertainty resolves to "install it". A --global install always writes the hooks, since any single project can disable a plugin out from under it.

New flags

  • fence init --statusline-only — write just the status line, never the hooks
  • fence init --force-hooks — install Fence's own hook even beside a plugin's
  • fence uninstall --hooks-only — remove the hooks, keep the status line (plain uninstall still removes both)

Upgrading

If you run both the Hoop plugin and a fence init install, upgrade and re-run fence init once — it removes the duplicate and keeps your status line. /hoop:doctor (plugin ≥ 0.7.2) now detects real duplicates only and recommends the version-appropriate fix.

Changelog

  • ad839ea init: stand down when a Claude Code plugin already runs the Fence hook
  • efad8c2 fix: --global init never stands down (a project could disable the plugin and be left unguarded)
  • f2811e1 fix: reject --statusline-only/--force-hooks for agents without a status line
  • ba403f0 fix: wrapper-script detection requires an actual invocation line, not a mention
  • 0e6278a, 607abb9 ci: GitHub→Linear issue sync

Full diff: v1.2.0...v1.3.0