Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Recent Releases

Release cadence is fast. Start with the latest eight versions, then open the historical archive when you need an earlier change. The complete release history remains in CHANGELOG.md.

Current window

Latest eight versions

From v1.33.0 through v1.31.0, newest first.

v1.33.0 · July 30, 2026

auto-mode classifier routing · a9a93f2
Added
  defer gate asks under auto mode so the classifier adjudicates
  auto = "prompt" holds a prompt the classifier cannot bypass
  record whether a human or the classifier approved a queue entry
Fixed
  scope the acceptEdits base guard to the whole command chain
  reach 27 cloud rules that subcommand lookups could never match
  apply git rules to path-qualified invocations
  consult the gcloud catalog at every argument count
  allow ten rules whose own reason text refutes the ask

Routes the gate catalog through auto mode's classifier instead of around it. Claude Code returns a hook ask to the user without consulting that classifier, so emitting one under auto excluded every declarative rule from the mechanism the mode exists to provide; defer is the decision that reaches it. Replaying a local approval history puts roughly four in five previously-prompted commands on the classifier path.

Irreversible, externally visible work opts out. auto = "prompt" on an ask rule keeps a prompt the classifier cannot bypass, and now covers registry publishes, credential and key mutation, infrastructure teardown, remote state overwrites, and the commands that rewrite tool-gates' own permission config. The disposition survives wrapper expansion, so a mise task or package script that reaches npm publish inherits the hold. The same marker applies to raw-floor rows, holding the patterns that run a destructive command once per match (find -delete, find -exec, fd -x, xargs) while redirects, source, and pipe-to-interpreter defer.

The acceptEdits base-command guard now requires every sub-command in a chain, matching when Claude's own fast path can fire, so mkdir -p dist && cargo build no longer denies under auto. Its outcome drops from deny to ask, and base names resolve through quoting, a leading backslash, and transparent prefixes so \rm and stdbuf -o0 rm cannot slip past. The approval queue records entries under auto tagged with whether a person answered a prompt or the classifier resolved a defer unseen, and the review list shows the difference so a rule is never granted on a silent approval.

Three long-standing catalog bugs surfaced while tracing that work. Declarative subcommand lookups only ever built a two-word key, leaving all 27 three-word cloud rules unreachable. The Git gate rejected path-qualified invocations, so /usr/bin/git push --force lost every Git rule. The gcloud handler consulted its catalog only below three arguments, so a rule matched its bare form and nothing else. Ten rules whose reason text already described read-only or locally regenerable behavior became allows, among them helm repo update, gh run watch, mise activate, ninja clean, meson compile, and git fetch without its ref-rewriting flags.

v1.32.4 · July 28, 2026

bounded hint feedback · 372c3c6
Fixed
  keep output-cap recovery guidance concise
  skip file-viewing hints for tail -F and --follow forms
  deduplicate and cap feedback at three hints per response
  avoid unavailable project-scoped tool names in search guidance

Keeps corrective feedback useful without letting it flood the agent's context. Consumer-side head/tail caps still explain that unseen output is lost, but recovery advice now states the invariant: use the producer's native limit when the task needs a bounded result; otherwise run uncapped and inspect persisted output. File-viewing hints now skip retrying and named tail follow forms. Compound calls deduplicate repeated suggestions and attach at most three unique hints per response. Code-search guidance describes available symbol-aware and semantic capabilities instead of naming project-scoped MCP tools that may not be loaded.

v1.32.3 · July 26, 2026

nested-shell guardrails + search routing · f10e982
Fixed
  apply guardrails inside bash/sh/zsh -c and -lc scripts
  inspect xargs-invoked shell scripts with the same raw floor
  distinguish ast-grep from the unrelated system sg command
  classify rg context searches after consuming their flag values

Extends the raw security floor into executable strings passed to local shell wrappers and xargs ... shell -c, including combined flags such as -lc. Nested truncation, pipe-to-shell, and other raw-pattern checks now receive the same decision as their top-level forms. Direct sg use asks with migration guidance because that name can resolve to either the deprecated ast-grep alias or the unrelated system group command. Search hints also consume split rg -A/-B/-C values before classifying the pattern, so exact identifier searches remain lexical while declarations, body captures, inventories, and conceptual queries get the appropriate structural or semantic guidance.

v1.32.2 · July 26, 2026

complete counts + canonical ast-grep · 1d4a4d7
Fixed
  allow full-stream rg count modes without treating them as caps
  keep count modes combined with max-count blocked
  replace deprecated sg recommendations with ast-grep

Allows rg -c ., --count, and --count-matches through the output-cap floor because they consume the complete stream and emit a scalar rather than discard unseen rows. Combining count mode with -m or --max-count remains blocked. Actionable search guidance now uses the canonical ast-grep executable instead of the deprecated sg name.

v1.32.1 · July 13, 2026

hardening + reliability · b1d6112
Fixed
  make hook, settings, and agy config updates transactional
  resolve symlinks before approving project edits
  inspect quoted substitutions and env-split embedded commands
  normalize blocked URL hosts and preserve privilege-wrapper decisions
  repair Gemini hook reporting and notebook edit coverage
Other
  reduce repeated config, parser, scanner, alias, and WASM work
  stabilize generated rules, docs checks, CI, and MSRV coverage

Hardens the boundaries where command parsing, path approval, and configuration persistence meet. Hook installation, settings permission changes, and the Antigravity allowlist now use transactional updates so a failed write cannot partially replace a working configuration. Project-edit approval resolves symlinks before testing scope; block rules normalize URL hosts; command inspection reaches substitutions inside quoted arguments and commands embedded in env -S strings; privilege wrappers keep the underlying gate decision. Gemini reports the hook set that was actually installed, notebook edits are covered end to end, and tracker state survives across sessions. The same release trims repeated parsing and filesystem work across configuration loading, security scans, Git alias discovery, and WASM builds, while tightening generated-rule, documentation, CI, and MSRV checks.

v1.32.0 · July 8, 2026

native scratchpad + gate fixes · 56ccac4
Added
  recognize Claude Code's native per-session scratchpad
  auto-allow supported file and shell writes within that root
Fixed
  honor package-manager allow rules and gate mutating subcommands
  route unmatched system tools through the generated dispatcher
  fail closed on malformed settings.json
  inspect newline-separated eval/source and multibyte truncation forms
Other
  generate reminder and design-lint docs from their scanner catalogs
  make the raw-string security floor declarative

Extends scratch handling to Claude Code's native per-session scratchpad under the system temporary directory. File tools already trusted this directory, but Bash redirects and write commands still prompted; tool-gates now recognizes the same bounded root at every scratch-aware call site. The matcher requires the current user and UUID-shaped session identifier and ends at scratchpad/, so sibling task and session directories remain gated. This release also honors package-manager allow rules while gating their mutating subcommands, routes unmatched system tools through the generated dispatcher, preserves malformed settings.json files instead of replacing them, and closes newline and multibyte parsing gaps in the raw-string safety floor. Security-reminder and design-lint reference pages are generated from their scanner catalogs, while the raw-string security floor is declarative, reducing drift between behavior and documentation.

v1.31.1 · June 25, 2026

flag gating · 5ad22a7
Fixed
  gate exec/write flags on otherwise-safe tools:
  rg --pre / --hostname-bin (code execution), sort -o,
  find -fprintf, pg_dump -f, gitleaks -r, unrar x,
  ip / route / ifconfig / arp network mutations
  drop fx and fselect from the always-safe list

Closes a gap where several read-only tools were auto-allowed regardless of flags that run a program or write a file. rg --pre and --hostname-bin run an external program per file (arbitrary code execution); sort -o, find -fprintf, pg_dump -f, gitleaks -r, and unrar x write or overwrite files; ip/route/ifconfig/arp can change network config. These are the program's own arguments, not pipes or redirects, so the existing shell-construct checks never saw them and the gate returned allow on every client. They now ask, with rg --pre a hard ask in the same tier as pipe-to-shell. fx and fselect leave the always-safe list because their danger lives inside a quoted expression or query the parser can't inspect. Normal usage stays allowed: rg pattern, sort -u, find -print, ip addr show.

v1.31.0 · June 25, 2026

Antigravity allowlist · 30055e3
Added
  tool-gates agy allowlist [--apply]: generate agy's native
  permissions.allow block for read-only commands

Antigravity resolves a tool call as the strictest of its candidate decisions, so a hook allow is the lowest rank and cannot suppress a prompt agy's own rules would show. The way to stop agy prompting for a read-only command is its native permissions.allow list. tool-gates agy allowlist generates that list from tool-gates' own unconditionally-safe command set, one command(<prog>) rule per program; --apply merges it into ~/.gemini/antigravity-cli/settings.json, preserving existing entries and writing a backup first. The hook still gates dangerous forms, so a native command(find) does not let find . -delete through. See the Antigravity page.

Historical archive Browse 52 earlier releases v1.30.0 to v1.1.0

v1.30.0 · June 23, 2026

design lint cleanset · 2de112f
Added
  design-lint: extend the catalog from 17 to 22 rules
  typography/script-font, color/maxed-saturation
  motion/transition-all, motion/scale-hover
  content/emoji-decoration

Extends the opt-in design-lint catalog from 17 rules to 22. The new rules flag decorative script display fonts (Pacifico, Caveat, Comic Sans, Lobster, Dancing Script), pure-channel hex colors like #f00 or #00ff00 used outside :root token definitions, transition: all and the transition-all utility, default scale(1.05) and scale(1.1) hover effects, and emoji placed inside headings or buttons. Each rule ships with positive and false-positive tests, and the Design Lint reference page documents the full set.

v1.29.0 · June 23, 2026

design lint · 805bcf3
Added
  design-lint: opt-in PostToolUse content gate for UI writes
  17 rules: generic gradients/palettes, default fonts, filler copy
  OKLCH hue-based violet/purple gradient detection
  off by default (features.design_lint), exempts :root tokens

Adds an opt-in PostToolUse content gate that scans UI file writes and edits for generic, templated design and missing UI-quality basics. It catches the overused #667eea/#764ba2 gradient, beige and brass "premium" palettes, default Tailwind indigo, Inter as the display font, placeholder names and fabricated stats, marketing filler copy, em and en dashes in rendered text, hardcoded Tailwind palette classes, raw hex in inline styles, hotlinked images, and interactive elements with no visible focus style. Violet and purple gradients are matched by OKLCH hue rather than a fixed hex list, so arbitrary violets are caught too. Findings attach as additionalContext next to the security reminders so the assistant can self-correct on the next turn. The gate is off by default (features.design_lint), raw color values inside :root token definitions are exempt, and individual rules disable by id. See the Design Lint reference page.

v1.28.0 · June 20, 2026

scratch coverage + awk gate · 368a1da
Added
  scratch auto-allow extended to mv / tee / chmod / sd
  quoted redirect targets, curl -o / wget -O
  MultiEdit / NotebookEdit writes under the scratch dir
  awk gate: auto-allow read-only awk, ask on exec / write / opaque programs

Broadens the v1.27.0 session scratch auto-allow from Write/Edit plus mkdir/touch/cp/redirect to the rest of the common write surface, so agents stop being prompted for routine throwaway work. New scratch-aware upgrades: mv (destination), tee output, chmod/chown/chgrp, curl -o/wget -O downloads, sd in-place edits, and MultiEdit/NotebookEdit file writes.

Also fixes a quoted-redirect gap: a quoted scratch target like > "$TOOL_GATES_SCRATCH/..." previously prompted because the quoted path was blanked before the scratch check, so the real target is now recovered from the original command. The safety model: each gate flips Ask to Allow only when the write target resolves under the scratch base (symlink or .. escapes still gate), and every non-scratch write still prompts. Tools whose sublanguage can run shell or write outside the named target (sed -i, sqlite3, zip, tar) are deliberately left asking, since a scratch target does not bound what they do.

Also adds a guarded awk/gawk/mawk gate so common read-only idioms (field selection, column sums, line counts, range extraction) auto-allow instead of prompting, while any awk that runs a command or writes a file still asks. A program auto-allows only as a static, inline, single-quoted literal with none of the exec/write markers (system, getline, a real | pipe, an @ indirect call, or a > redirect); || and >= are exempt so logical-or and range comparisons still allow. A program built from a shell variable, command substitution, ANSI-C quoting, or a later -e/--source chunk is opaque and asks since its text cannot be inspected, and -f/-i/-l/-E external-program flags ask. Dynamic filenames and -v values still allow because awk never executes them. Measured against the real session corpus, a clear majority of routine awk now auto-allows, with no file-writing or command-running awk allowed.

v1.27.0 · June 19, 2026

scratch + awk hints · 2a5b993
Added
  auto-allow writes under a session scratch dir ($TOOL_GATES_SCRATCH)
  awk idiom hints route to numbat / jq / rg / jc / choose

Adds a friction-free session scratch directory so agents stop reaching for /tmp. When $TOOL_GATES_SCRATCH is set (default ~/.cache/tool-gates-scratch), Write/Edit targets and shell mkdir/touch/cp/redirect destinations that resolve under it are auto-allowed in every permission mode. Targets are canonicalized first, so a symlink or .. that escapes the base is not matched, and sensitive or guarded paths still gate. On Claude this is a true allow; on Codex (deny-only PreToolUse) it falls through.

Also replaces the single generic awk suggestion with idiom-aware routing: byte/size math points at numbat, column sums at jq -Rn, line counts at rg -c, positional row/field extraction at jc | jq, and plain field selection at choose. Stateful range extraction and bare filters get no nudge.

v1.26.0 · June 19, 2026

risk gating · 4ec9a59
Added
  require an explicit confirm for shared high-stakes family globs in the review TUI

Tightens the review TUI blast-radius model. A scoped family glob over a high-stakes program (docker run:*, aws s3:*, ssh, rm, ...) written to project or global settings is a team- or machine-wide standing grant to run arbitrary subcommands of a high-blast-radius tool, so approving one now requires an explicit y confirm. Local-only grants and non-high-stakes programs are unchanged.

v1.25.0 · June 19, 2026

review TUI · c62f858
Added
  redesign review TUI with a flat keyboard model and rules manager
  Pending / Approved / Denied views with allow/deny rule removal
  blast-radius risk model that confirms before a dangerous write
  project switcher grouped by parent, plus undo for the last action
Other
  Review TUI reference page

Replaces the focus-mode three-panel layout with a flat keyboard model: arrows always navigate, letter keys act (a approve, d deny, x remove, y confirm). Adds Pending, Approved, and Denied views; the two rule views read settings.json and remove existing allow/deny rules behind a confirmation. A new blast-radius risk model (pattern breadth, scope reach, and whether the program is high-stakes) colors the panel and forces an explicit confirm before a dangerous write, and a compound segment with no safe suggested pattern is refused instead of fabricating a broad glob for the wrong program. Walkthrough and keymap live on the new Review TUI page.

v1.24.1 · June 16, 2026

Antigravity scopes · 2237a64
Fixed
  Antigravity hooks: default to ~/.gemini/config/hooks.json, add -s project
Other
  fix four-client grid layout and footer wrapping on the index page

Corrects the Antigravity hook install model. v1.24.0 shipped Antigravity as global-only at ~/.gemini/antigravity-cli/hooks.json; this release moves the default to the shared user path ~/.gemini/config/hooks.json and adds a -s project scope that writes .agents/hooks.json. tool-gates hooks status and tool-gates doctor now report both scopes. Also fixes the four-client install grid layout and footer wrapping on the documentation index.

v1.24.0 · June 9, 2026

Antigravity CLI · f12e0a0
Added
  Antigravity CLI (agy) support: --client antigravity, single PreToolUse hook
  hooks add / status / json --antigravity (named-hook hooks.json)
  Antigravity tool-name mapping + payload normalization
Changed
  Gemini CLI marked deprecated (Google sunsets it 2026-06-18)

Adds Antigravity CLI (Google's agy, the Gemini CLI successor) as a first-class client. Antigravity uses a distinct wire format: a payload nesting the tool under toolCall with PascalCase args, a flat {decision, reason} output, and a hooks.json keyed by hook name. tool-gates normalizes the payload, installs a single PreToolUse hook via tool-gates hooks add --antigravity, and gates shell, file, grep, and glob tools. The Gemini CLI client is marked deprecated across the docs because Google sunsets the consumer Gemini CLI on 2026-06-18; it keeps working through the transition.

v1.23.0 · June 6, 2026

docs & approvals · a43ee4a
Added
  mdBook documentation site with interactive WASM simulator
  rules export generator for markdown references
  Codex project-edit auto-approval config
  pre-commit rules-export hook in Lefthook
Fixed
  head/tail pipe block scoped to build/test/gh producers
  documentation accuracy corrections for Codex and MSRV

Introduces an interactive documentation site with a WebAssembly command simulator. It adds a declarative rules exporter (tool-gates rules export) and auto approval configurations for Codex in project edits ([codex] accept_project_edits). The output truncation pipe blocker was refined to focus only on build, test, and GitHub producers (such as cargo, npm, go, make, and gh), allowing soft producers (like cat and ls) to pass through with modern CLI hints. This release also adds a Lefthook pre-commit hook to automatically regenerate the Markdown documentation on rule changes.

v1.22.0 · May 26, 2026

media & CLI · 6657772
Added
  ffprobe / d2 allow
  ffmpeg info flags gated
  read-only tool-gates CLI subcommands
Fixed
  skip quoted-heredoc bodies in raw-string scans
  stop false asks from mise usage-args + bun file-exec

Adds gating for media tools (allowing ffprobe and d2, while gating ffmpeg info flags). It introduces read-only subcommands (including pending list, rules list, hooks status, and doctor) to the tool-gates command line interface. It also updates the raw string scanner to skip quoted heredocs. It resolves false positive asks caused by mise usage argument (stripping the usage_args eval prefix) and bun file execution expansion (by checking for code extensions or path separators).

v1.21.2 · May 21, 2026

maintenance · 57cac7e
Other
  drop vendor-specific output_tail reference from head/tail deny

Cleans up the output truncation blocker by dropping a vendor specific output tail reference from the head and tail deny rule.

v1.21.1 · May 21, 2026

polish · 0e0a0d4
Fixed
  improve head/tail and github block deny messages
Other
  replace generic "syntax highlighting" hint suffix with agent-actionable benefits
  polish modern hint messages for consistency
  rewrite hook deny messages with risk and remediation

Improves the clarity and usefulness of hook feedback. The denial messages for the output truncation and GitHub blockers now state the security risk and clear remediation steps. The modern hint suffix was replaced with agent actionable benefits. All other hints were polished for consistency.

v1.21.0 · May 13, 2026

polish · 9b2a6de
Added
  enforce no-rg-on-code rule, route to probe/chunkhound/serena/ast-grep
Other
  hints catalog, systemMessage tiering, length guard

Enforces a rule against running rg on code files. It routes searches to specialized tools such as probe, chunkhound, serena, and ast-grep. It introduces a hints catalog, system message tiering, and a length guard.

v1.20.0 · May 13, 2026

reasons · de952ff
Added
  help-menu reason prompts, new hints, tiered systemMessage
Fixed
  pass --edition 2024 to rustfmt in build.rs

Introduces detailed reason prompts to the help menu for rejected hooks. It also adds tiered system messages and updates the build script to pass the 2024 edition to rustfmt.

v1.19.2 · May 8, 2026

maintenance · 0480925
Fixed
  harden accept-edits fallback

Hardens the fallback behavior in accept edits mode. It ensures that the permission policy is correctly applied when resolving command wrappers.

v1.19.1 · May 3, 2026

maintenance · ebb6e6d
Fixed
  align client hook contracts

Aligns the hook interface contracts across the Claude, Gemini, and Codex clients. This ensures consistent decision behavior across all tools.

v1.19.0 · May 3, 2026

Codex · 024465c
Added
  add Codex CLI client support
Fixed
  gate worktree auto-approve on subagent agent_id
  fire Claude PermissionRequest for MCP tools

Adds support for the Codex command line interface client. It gates worktree auto approvals on the subagent agent ID. It also fires Claude PermissionRequest events for Model Context Protocol tools to streamline subagent flows.

v1.18.0 · April 30, 2026

git aliases · 69175dc
Added
  resolve user-defined aliases against ~/.gitconfig
Fixed
  split nested if-let to satisfy MSRV 1.86
  drop redundant plan-mode hard-deny on Write/Edit
Other
  restore HOME after with_temp_cache to stop sequential leak

Resolves user defined git aliases against the user git configuration file so that custom git shortcuts are evaluated correctly. It also splits nested if let blocks to support Rust 1.86. It drops redundant plan mode checks and prevents home directory leaks during tracking tests.

v1.17.0 · April 30, 2026

audit TUI · 8b48d7a
Added
  polish round, install patterns, doctor nudge, audit TUI
  close ask-audit gaps with broader find guard and --apply
  categorize ask-audit rules by gate-engine outcome
  add ask-audit to surface third-button-suppressing rules
  defer benign gate-ask to CC for prefix-suggestion prompt
  surface usage stats in the doctor report
  self-heal cache with single-tool re-probe
  collapse near-duplicate entries by pattern key
  hard-deny mutating tools in plan mode
Fixed
  post-review fixes on the 1.6.0 series
  skip pending append when settings already allow
Other
  cover defer wire format, ask-audit, and 24h tracking TTL
  reframe ask-audit around slip-click safety, drop bulk apply
  cover wire-format defer path for mise/pnpm wrappers
  bump to 1.6.0
  reframe skills around defer behavior
  replace 15min TTL with session-bounded GC
  tighten review/test-gate skill descriptions, bump to 1.5.9

Introduces the ask audit command to identify rules that shadow accept edits or suppress the third button in Claude Code. It adds an interactive review terminal user interface. It collapses duplicate pending entries and integrates plan mode checks to block mutations. It also defers benign asks to Claude Code to preserve the prefix suggestion prompt. It adds self healing capabilities to the tool detection cache.

v1.16.1 · April 24, 2026

maintenance · 7ace761
Fixed
  drop vendor-specific refs from head/tail deny message

Polishes the deny message for the head and tail truncation blocker. It removes vendor-specific references that did not apply to the general toolchain.

v1.16.0 · April 23, 2026

head/tail block · 6dad625
Added
  deny | head / | tail pipes with config toggle
Other
  warn about permissions.ask shadowing accept_edits_mcp

Adds a configuration toggle to block piping command outputs to head or tail. It also adds a configuration warning when user settings shadow the Model Context Protocol accept edits rule.

v1.15.0 · April 23, 2026

MCP approvals · 4c5aa93
Added
  auto-approve MCP tools in acceptEdits mode

Enables auto approvals for Model Context Protocol tools in acceptEdits mode. This streamlines editing workflows for subagents.

v1.14.0 · April 22, 2026

API hints · a53313b
Added
  nudge network tools to gh api for GitHub URLs

Nudges network tools to use gh api when requesting GitHub URLs. This reduces unnecessary web scraping or API token usage.

v1.13.0 · April 21, 2026

auto mode · 1078f0f
Added
  integrate with Claude Code classifier

Integrates with the Claude Code auto mode classifier. This enables hard ask promotion to deny, pending queue filtering, and PermissionDenied retry signals.

v1.12.1 · April 15, 2026

maintenance · 04889ff
Fixed
  unify home-directory path handling across gates
  enforce cargo fmt --check and restage crate-wide fmt
Other
  use generic user in fixtures

Unifies home directory path handling across all gates. It enforces strict cargo formatting checks in the continuous integration pipeline. It also uses generic users in test fixtures.

v1.12.0 · April 10, 2026

Monitor tool · e65011b
Added
  add Monitor tool support

Adds support for the Claude Code Monitor tool. This enables permission gating for background monitoring commands.

v1.11.0 · April 3, 2026

wrapper resolution · 35b587e
Added
  acceptEdits wrapper resolution for package manager invocations

Resolves package manager wrappers during acceptEdits mode. This ensures that linters and formatters can run without triggering prompts.

v1.10.0 · April 3, 2026

runtimes · fbdccdf
Added
  add runtimes gate, expand coverage across all gates

Consolidates Python, Node, Ruby, Deno, PHP, and other language runtimes into a single runtime gate. This provides unified security analysis across language execution commands.

v1.9.2 · March 31, 2026

maintenance · 6c6e252
Fixed
  remove redundant workflow_dispatch that races with push

Fixes a continuous integration race condition. It removes a redundant workflow dispatch trigger that raced with pushes.

v1.9.1 · March 31, 2026

maintenance · 4b7676e
Fixed
  remove approval context from additionalContext

Removes redundant approval context from the hook additionalContext response. This minimizes context token usage.

v1.9.0 · March 31, 2026

matchers · 8df9031
Added
  detect and update stale matchers on hooks add

Automatically detects and updates out of date matchers in the Claude configuration when registering hooks.

v1.8.0 · March 30, 2026

worktrees · 29fa637
Added
  auto-approve Edit/Write in agent worktrees
Fixed
  let gate-allowed commands participate in compound settings approval
Other
  clarify branch allow rule covers create too

Enables auto approvals for file edits inside agent worktrees during PermissionRequest events. It also allows gate allowed commands to participate in compound settings approvals. It clarifies that the branch allow rule covers creation too.

v1.7.3 · March 28, 2026

maintenance · 07d939c
Other
  remove MultiEdit tool and mcp-cli gate
  replace em-dash patterns with periods and commas
  bump to 1.5.8, add when_to_use to skills

Bumps the plugin to version 1.5.8. It removes the MultiEdit tool and the mcp cli gate. It replaces all em dash patterns in the source code and configuration with periods and commas.

v1.7.2 · March 25, 2026

maintenance · 763b556
Fixed
  resolve binary path via argv[0] and PATH lookup

Improves binary path resolution in hook scripts. It searches the environment PATH variable when argv[0] is not an absolute path.

v1.7.1 · March 25, 2026

maintenance · cf24984
Fixed
  use symlink path instead of canonicalized Cellar path

Resolves Homebrew installation path issues. It references the symlinked binary path rather than the canonicalized Cellar path.

v1.7.0 · March 25, 2026

Gemini · b31c96d
Added
  native BeforeTool/AfterTool hook support

Introduces native support for Gemini CLI BeforeTool and AfterTool hooks. It automatically translates payloads and responses to match the Gemini format.

v1.6.0 · March 22, 2026

coverage · e7f5c40
Added
  add gates for missing programs

Adds dedicated rules and gates for missing system programs. This expands command coverage and improves security check safety.

v1.5.10 · March 22, 2026

maintenance · 6422d4a
Fixed
  format generated code with rustfmt, prettyplease fallback
  run rustfmt on generated files to prevent dirty worktree
  use recursive globs so hooks trigger for all source files
  include expansion nodes in command argument extraction
  detect github_pat_ fine-grained personal access tokens
  detect Stripe sk_live_ and sk_test_ secret keys
  use atomic write-then-rename for hint tracker and tool cache
  split compound commands in fallback parser
  recover from poisoned mutex instead of panicking
  log serialization errors instead of silently swallowing
  strip transparent command wrappers before gate evaluation
  block entire .git/ directory in acceptEdits mode
Other
  remove unused tools from detection cache
  remove unused lsd from tool detection
  compile security regexes once via LazyLock

Provides a large reliability release. It adds fine-grained token detection for GitHub and Stripe. It uses atomic cache updates, strips transparent command wrappers, and blocks direct modifications to the git directory in accept edits mode. It also ensures generated code is formatted to prevent dirty worktrees.

v1.5.9 · March 21, 2026

maintenance · b401b57
Fixed
  remove ALWAYS, fix pipe false positives, add new detections
Other
  bump plugin versions to 1.5.7
  update skills and convert hook-reference to path-scoped rule

Polishes modern command hints and removes the redundant ALWAYS indicator. It updates plugin skills to match path-scoped rules.

v1.5.8 · March 21, 2026

maintenance · bd6973d
Fixed
  sync simulate_append test helper with new dedup logic
  per-subcommand gate evaluation for compound commands
Other
  add Windows x64 and arm64 build targets

Enables per subcommand gate evaluation for compound commands. It adds Windows target platform support to the automated build pipeline.

v1.5.7 · March 21, 2026

maintenance · a714abb
Fixed
  specify musl target for binary size check
  specificity-based ask/allow resolution and $HOME expansion
Other
  use dedicated app token for release automation
  auto-merge release-plz PRs and trigger release

Improves settings resolution by adding specificity based allow/ask matching. It expands the HOME variable in pattern matching. It also integrates release plz with custom bot authentication.

v1.5.6 · March 21, 2026

maintenance · 1b29246
Fixed
  stage build-generated files in pre-commit
Other
  add Homebrew as recommended install method

Stages build generated rules during pre-commit hooks. It documents Homebrew as the recommended installation method.

v1.5.5 · March 20, 2026

maintenance · 6b759cf
Fixed
  use actions/checkout for homebrew-tap push auth
Other
  bump build provenance attestation action

Corrects Homebrew tap repository push authentication in GitHub Actions. It integrates build provenance attestation to secure release binary publishing.

v1.5.4 · March 20, 2026

maintenance · f3c372a
Fixed
  Use CARGO_MANIFEST_DIR to detect package verify context
  Remove publish=false from Cargo.toml
  Remove name field from skills so prefix shows in autocomplete
Other
  Move plugin to subdirectory to prevent skill leakage

Fixes Cargo package verification issues in the release pipeline. It moves the plugin into a subdirectory to prevent skill leakage. It also removes the name field from skills to improve editor autocompletion.

v1.5.3 · March 20, 2026

maintenance · d3af03d
Added
  Switch to release-plz with homebrew tap automation
Fixed
  Skip codegen during cargo package verify
  Match import order to cargo fmt for idempotent codegen
  Sort custom handler lists for deterministic codegen
  Commit generated files so cargo package verify succeeds
  Remove musl default target so cargo package works in CI
  Ignore cross-session hint dedup test in shared process
  Remove name field from skills so prefix shows in autocomplete
Other
  Move plugin to subdirectory to prevent skill leakage

Switches the release workflow to release-plz with automated homebrew tap publishing. It moves the plugin to a subdirectory to prevent skill leakage. It fixes cargo package verification and cargo build issues under continuous integration by committing generated files, matching import order to cargo fmt, sorting custom handler lists, and skipping codegen during verification. It also ignores cross-session hint deduplication tests in shared processes.

v1.5.2 · March 18, 2026

maintenance · 55af0b2
Fixed
  Require all sub-commands to match settings for compound allow

Hardens security for compound commands. It requires all subcommands to match allowed patterns in user settings before granting auto approval.

v1.5.1 · March 14, 2026

maintenance · 044e763
Fixed
  Remove patch from acceptEdits auto-allow, add 20 security tests

Removes the patch command from the acceptEdits auto allow list to prevent arbitrary write bypasses. It backs this check with 20 new security tests.

v1.5.0 · March 13, 2026

safeties · f1cd14f
Added
  Smarter secret handling for .env and doc files

Improves secret checking heuristics. This prevents false positive leakage reports in documentation and environment files.

v1.4.0 · March 11, 2026

skills & doctor · e13491d
Added
  Add skill auto-approval and doctor command

Introduces the doctor command to diagnose hook health. It adds auto approval configurations for trusted project skills.

v1.3.0 · March 10, 2026

config · 662cb64
Added
  Add per-tier config toggles and Configuration docs

Adds granular configuration toggles in the config file. This enables or disables specific gate tiers.

v1.2.0 · March 10, 2026

MCP & reminders · 225407a
Added
  Add MCP tool matcher for PreToolUse hooks
  Add security reminders for Write/Edit/MultiEdit content scanning
Fixed
  Replace deprecated approve decision with proper allow/no-opinion

Implements PreToolUse hook support for Model Context Protocol tools. It adds content scanning security reminders for file write operations. It also replaces deprecated approval responses.

v1.1.0 · March 10, 2026

initial release · 0cf5508
Added
  Initial commit: Rust bash permission gate for Claude Code
  Integrate settings.json to respect user permissions
  Add declarative rules system with build-time codegen
  Add PermissionRequest hook support for subagent approval
  Add hooks subcommand for managing Claude Code hooks
  Add modern CLI hints via additionalContext
  Redesign review TUI with project-first dashboard layout

The initial public release of tool-gates. It features an AST based bash parser for precise command identification. It integrates with settings files. It checks against shell execution patterns. It provides a terminal user interface for review and hooks subcommand management.

Release automation via release-plz. Push to main triggers a version-bump PR; merging it cuts the GitHub release with cross-compiled binaries (linux x86_64/arm64, macos x86_64/arm64, windows x86_64/arm64) and updates the Homebrew tap. MSRV is Rust 1.97.1. Note: Releases prior to v1.5.4 have been purged on GitHub and do not have downloadable pre-built assets; Homebrew tap installation requires v1.5.6 or newer.

tool-gates · permission gate hook for Claude Code, Codex CLI, and Antigravity CLI, with deprecated Gemini CLI support. github.com/camjac251/tool-gates

13 gates · 400+ commands · built from rules/*.toml