🧪 ForgeDesktop (beta) — read before opening
The attached build is unsigned (no Apple Developer ID), so macOS Gatekeeper blocks it after download. Right-click → Open does not work on macOS 15 or later. To run it:
# move ForgeDesktop.app to /Applications first, then: xattr -dr com.apple.quarantine /Applications/ForgeDesktop.appIt is a menu bar app — look for the anvil icon in the status bar, not the Dock.
Building from source avoids this entirely: locally built apps are never quarantined.
A patch release, but a consequential one — three of these are things forge claimed to do and did not.
forge no longer deletes permission rules you already had
forge recorded the entire resolved preset as "what forge added". If you already had Read or Bash(git status:*) in your settings, forge claimed them as its own — and removed them on your next preset change or uninstall.
Reproduced against the real code: a user with three rules applies a preset, and unmerging leaves them with one.
forge now separates what it actually added from what it merely found already present, and only ever removes the former. Your manifest migrates automatically on the next forge install.
The if: hook filter never worked
It was written onto the hook group. Claude Code accepts if only on individual hook entries, so it was silently discarded — meaning commit-validator and db-guard ran on every single Bash call instead of only on git commits and database commands.
The v1.3.0 notes claimed a 95-99% reduction in process spawns from this feature. That reduction never happened. It does now.
forge can update its own hooks
Hook groups were deduplicated by command string, a key that cannot express "same hook, new definition". Once a hook was installed, its timeout, matcher and if filter were frozen forever.
This is why fixing the if: placement alone would have reached only fresh installs — everyone with forge already installed would have kept the broken shape.
Hooks forge stopped shipping are now removed
A plan-checkpoint entry dropped back in 1.3.0 is still registered on installed machines. Removal is driven by the install manifest, so it covers every hook forge has ever installed — and never touches a script you put in ~/.claude/hooks/ yourself.
Also fixed
forge statsreported an install from today as "1 day ago" — the UTC timestamp was read in local time, and on macOS the baseline drifted through the day instead of sitting at midnightsecret-filterran its 13 credential patterns over the output of every tool; now scoped to the ones whose output can carry secrets
Tests: 969 — 780 CLI (bats-core, macOS/Linux/Windows) + 189 desktop (XCTest).