Triple Whale · internal tool · macOS

Polisher

A menu bar app that fixes your writing in place. Select any text, in any app, press one shortcut, and it comes back with grammar, spelling and tone cleaned up. It runs on your own API key and takes about two seconds.

your time is more importnat than anywone here in the compay
⌘ `1.0s
Your time is more important than anyone else's here in the company.

01Install

Homebrew is the recommended path. It installs the signed app to /Applications and clears the quarantine flag, so macOS won't stop it on first launch. If you don't have Homebrew yet, install it first from brew.sh (one command, takes a couple of minutes).

brew install --cask Triple-Whale/tap/polisher

Then open Polisher from Applications. A small wand icon appears in your menu bar. That's the whole app; there is no main window.

Later, upgrade the same way:

brew upgrade --cask polisher

Without Homebrew

Download Polisher.dmg from the latest GitHub release and drag the app to Applications. If macOS says the app can't be opened, right-click it and choose Open, or clear the flag yourself:

xattr -cr /Applications/Polisher.app

From source

git clone https://github.com/Triple-Whale/Polisher.git
cd Polisher
bash build.sh
cp -r build/Polisher.app /Applications/

02Grant Accessibility access

Polisher reads the text you selected and types the polished version back over it. macOS only allows that through the Accessibility permission. The first time you press the shortcut, Polisher asks for it.

  1. Open System Settings › Privacy & Security › Accessibility.
  2. Turn on Polisher in the list. If it isn't there, click + and pick it from Applications.
  3. Press the shortcut again. No relaunch needed.
Note

If you reinstall or rebuild the app, macOS may treat it as a new binary and drop the permission. Toggle Polisher off and on in the Accessibility list to fix it.

03Add an API key

Click the wand icon, choose Settings, and open the API Keys tab. Paste your key in the OpenAI field and click Save. A green Key configured appears once it's stored.

Key

You don't need to create your own key. Reach out to Chezi Hoyzer on Slack and he'll set you up with one for Polisher. The Get API Key links in the app are there for people outside the company.

API Keys tab with Claude, OpenAI and Gemini fields, each showing Key configured
Keys are saved in the macOS Keychain, not in a plain file. You only need one provider filled in.

04Pick the provider and model

Open the Provider tab. Set Provider to OpenAI and Model to gpt-5.4. The Status line should read API key configured.

Model

The best fast model is still gpt-5.4. Polishing is a short, well-defined task, and you're waiting on the result with your cursor in a text field. 5.4 returns in about a second; newer models think longer and give you the same sentence back two to three seconds later.

Provider tab showing OpenAI selected with model gpt-5.4 and status API key configured
If the model list looks stale, click Refresh Models.

Real numbers from one machine, six months of daily use:

ModelPolishesAvg timeCost
gpt-5.43,8081.8s$3.09
gpt-5.5514.3s$0.23

Roughly a tenth of a cent per polish. The cost is not the reason to pick 5.4; the wait is.

05Use it

  1. Select text anywhere: Slack, Gmail, Notion, a code comment, a Jira ticket.
  2. Press ⌘ ` (Command plus the backtick key, top-left of the keyboard). That is only the default: open Settings › General, click the shortcut box and press any combination you prefer.
  3. A small floating Polishing… indicator appears near your cursor.
  4. About a second later, the selection is replaced with the polished text. Your clipboard is restored to whatever it held before.

It keeps your meaning, tone and line breaks. It fixes spelling, grammar and punctuation and tightens the phrasing. It never adds explanations or quotes around the result, so what lands is ready to send.

Wrong keyboard layout? It fixes that too

The system prompt is editable, and one addition earns its place for anyone who switches between Hebrew and English. Add this to the end of the prompt in the General tab:

If it's gibberish Hebrew which can't be translated to English it's probably
meant to be an English text and I forgot to switch keyboard language, in this
case replace to English. If it's gibberish in English letters it may be that I
meant to type Hebrew letters and forgot to replace keyboard language, in this
case replace to Hebrew and don't translate.

Now typing a whole sentence in the wrong layout is a one-shortcut fix instead of a retype.

Settings tour

Everything lives in one window with seven tabs. Open it from the wand icon › Settings.

General

The shortcut, launch at login, and the system prompt that tells the model how to polish. The shortcut is fully editable: click the shortcut box, press a new combination, and it takes effect immediately. Reset restores the default prompt.

General tab with Replace Mode shortcut, Launch at login checkbox and editable System Prompt
The prompt shown here includes the Hebrew/English layout fix from step 5.

Statistics

How many polishes you've run, characters in and out, average response time and what it has cost you, broken down per model. Useful for comparing models honestly before switching.

Statistics tab showing 3859 polishes, 1.8s average time, $3.32 total cost, and a per-model table

History

Your last 20 polishes, searchable. Click an entry to see the original next to the improved text, or use the copy icon to grab the result again. Clear All wipes the list.

History tab listing recent polishes with timestamps and a search field

Logs

A live trace of every step: hotkey received, text captured, request sent, response time and token count, text replaced. Filter by Info, Success, Error or Debug. This is the first place to look when something doesn't work.

Logs tab showing hotkey, capture, API and output entries with timings
Each polish is five lines. A missing line tells you exactly where it stopped.
API KeysOne field per provider: Claude, OpenAI, Gemini. Show reveals the key; Save stores it in the Keychain.
ProviderWhich provider and model handle the polish. Refresh Models re-fetches the list.
AboutVersion number and a link to the repo.

Troubleshooting

The shortcut does nothing

Almost always Accessibility. Check System Settings › Privacy & Security › Accessibility and make sure Polisher is on. Then open the Logs tab and press the shortcut: if you see a HotKey line but no Capture line, it's the permission.

I get the ⌘` window-switch instead

macOS uses ⌘ ` to cycle between windows of the front app. Polisher takes over that combination while it runs. If you rely on window cycling, change Polisher's shortcut in the General tab to something else, for example ⌃ ⌥ P.

Status says no API key

The key is saved per provider. If you set a key for Claude but the Provider tab points at OpenAI, it counts as missing. Either switch the provider or add the matching key.

Nothing happens in one particular app

A few apps don't expose selected text through Accessibility, mostly Electron apps in odd states and some browser-based editors. Copy the text, paste it into any plain text field, polish it there and paste it back. Check the Logs tab: a Capture line reading 0 chars confirms the app didn't hand over the selection.

Something else

Copy the Logs tab (the copy icon at the bottom right) and send it to Chezi Hoyzer on Slack.