github ognistik/macrowhisper v1.4.0

6 hours ago

Important

macOS Tahoe 26.3 is finally out, solving a bug that was preventing me from pushing this update. If you are on macOS 26.1 or 26.2, I suggest you hold back from updating to this version of Macrowhisper unless you update your OS to 26.3. Otherwise, you will encounter issues granting Macrowhisper accessibility permissions. Fortunately, 26.3 fixes this issue.

Please note that I've revised the documentation for the following sections to clarify some of the new features:

  • Available Settings
    • Now covers the new redactedLogs, nextAction, clipboardIgnore, and inputCondition
  • Regex Replacements
    • Specifically trigger regex behavior for voice triggers (since you can now add advanced raw regex patterns)

Breaking

When an insert action is empty "". Macrowhisper will no longer close Superwhisper's recording window nor leave the result on user's clipboard.

  • It will respect the user's settings per action. So, to get the previous behaviour, set noEsc to false and restoreClipboard to false
  • You may also use ".none" which serves as a quick template that does the same.
  • This is only for those insert actions where the user didn't want the result automatically inserted in the front app.

Added

  • New clipboardIgnore setting in config defaults. User can set app names or bundle IDs to indicate applications whose clipboard interactions shouldn't be captured by the {{clipboardContext}} placeholder.
    • Implemented retroactive cleanup for clipboard in case the detection from an app happens half a second later.
  • New redactedLogs setting in config defaults. This is set to true by default.
    • Now there's more privacy for the dictation and any context capture (even in the logs).
    • User can set it to false to get more detailed information to better diagnose bugs.
  • New nextAction field which allows action chaining!
    • Only one insert action is allowed in the chain
    • There's protection for endless loops, but tt is suggested you keep your chains short and predictable.
    • Clipboard restoration only happens until the last action executes
    • Only the moveTo setting of the last action applies.
  • New input condition for insert actions.
    • Conditionally applies selected insert options depending on whether execution starts in an input field.
    • This means you can have clipboard restoration, Escape simulation, move the recording folder, chained actions, etc. conditionally executed depending on whether you are currently in an input field or not.
    • You now have total control over things like autoPaste

Changed

  • Impovement. Implemented getUTF8Environment() helper that:
    • Checks if LANG is already set with UTF-8 encoding
    • If yes, uses it as-is
    • If LANG exists but without UTF-8, appends .UTF-8 to the base locale
    • If LANG doesn't exist, uses system locale (Locale.current.identifier) with .UTF-8
    • Sets both LANG and LC_ALL to ensure UTF-8 encoding
    • Applies to Shell Scripts and AppleScripts
  • Impovement. Macrowhisper correctly ignores transient/concealed clipboard types.
  • Improvement. Clipboard restoration now restores the contents of your pasteboard from the moment dictation started.
    • This approach is more consistent than attempting to synchronize with Superwhisper and detect the correct clipboard after an action executes.
  • Improvement. Closes clipboard monitoring sessions when recording happens without actions — it prevents zombie sessions to stay active
  • Fix. The removal of trigger words or phrases was happening only on result (without LLM), but now it's also happening on llmResult. This ensures that it will never appear once {{swResult}} is formed.
  • Fix. Added validation for result when llmResult is present in the meta json file. For some reason, Superwhisper now writes llmResult before result in those cases. This fixes voice triggers not working when LLMs are being used.
  • Fix. When a recording starts, there's now a 2.5-second where repeat clipboard capture is suspended.
    • Fixes prevents {{clipboardContext}} placeholder contamination
    • If the user is on an app where there is no selected text range (for example, Finder), Superwhisper attempts a clipboard operation. Prior to this fix, this would unexpectedly appear in Macrowhisper capture.
    • Clipboard capture for {{clipboardContext}} still works during this period. It just won't capture the same thing more than once.

How to Update

If Installed through Homebrew

brew update
brew upgrade macrowhisper
macrowhisper --restart-service
Why do you need to re-grant accessibility permissions after update?

MacOS stores accessibility permissions tied to the absolute file path, not the application signature. Since Macrowhisper is a single binary application rather than an app bundle, when Homebrew upgrades it, the application gets placed in a version-specific folder. Each brew upgrade causes the binary to be stored at a different path, which macOS treats as a completely different application, effectively resetting the accessibility permissions.

You'll notice multiple versions of Macrowhisper appearing in your System Settings → Privacy & Security → Accessibility panel after updates. You can manually remove these stale entries when upgrading, but unfortunately there's no automatic workaround as long as you install using Homebrew due to this path-based permission system.

Alternative installation option: If you prefer not to re-grant accessibility permissions after each update, you can install Macrowhisper using the script instead of Homebrew (you do need to uninstall using Homebrew first).

If Installed with Script

curl -L https://raw.githubusercontent.com/ognistik/macrowhisper/main/scripts/install.sh | sh
macrowhisper --restart-service

Don't miss a new macrowhisper release

NewReleases is sending notifications on new releases.