TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
Power Tools — a fully-local macOS power-user toolkit driven by one hotkey: dictation, AI chat, OCR, screenshots, file cut/paste, window snapping, grid, Snap Assist, advanced paste, and more.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
The PowerToys of macOS. One hotkey, a whole toolbox — and the core tools never leave your Mac.
Website: powertools.geeksare.cool · Download the latest DMG檢視完整 README ↗The PowerToys of macOS. One hotkey, a whole toolbox — and the core tools never leave your Mac.
Website: powertools.geeksare.cool · Download the latest DMG
Power Tools puts a suite of power-user utilities behind a single hotkey. Hold Option + Shift, then speak or tap a letter/arrow: dictate into any app, open a Claude chat, snap and tile windows, OCR the screen, grab a screenshot, cut & paste files, transform your clipboard, or spotlight your cursor. If you've missed Windows PowerToys on the Mac, this is that — FancyZones-style snapping, Advanced Paste, Text Extractor, Color Picker, and Find My Mouse — plus on-device dictation and AI chat.
In the box: 🎙 Dictation · 💬 AI chat · ⌨️ Chord mode (multi-letter shortcuts, every menu item) · 🔀 ⌘Tab like Windows Alt-Tab · 🪟 Window snapping + Snap Assist · 🖐 Grab & Move (hold ⌃⌘, drag anywhere on a window) · 🎛 Snap palette (Moom-style) · 🗔 Saved layouts · ▦ Grid placement · 📋 Clipboard history (Win+V-style, text + images) · ⚡ Quick Capture → your own endpoints · 🔤 OCR (Text Extractor) · 🔊 Read Aloud · 📸 Screenshots · 🎥 Screen recording · 🔎 Google Lens · 🎨 Color Picker · 🗂 File cut/paste · 📝 Advanced Paste · 🖱 Find My Mouse · 🔇 Call-safe dictation
The app bundle and data folder are still named GRC Whisper / bundle ID com.grc.whisper so macOS permissions and saved keys survive the rename.
The core tools run entirely on this Mac. Dictation is on-device by default — speech recognition is Apple's on-device SpeechAnalyzer (macOS 26), text cleanup is Apple's on-device Foundation Model, and history lives in a local SQLite file. The only network calls are the opt-in AI features — AI chat, cloud cleanup, and Advanced Paste's smart transforms — and only when you invoke them, with your own API key. Little-Snitch-clean by design.
hold ⌥⇧ ──► mic (always-warm, 1s pre-roll) ──► SpeechAnalyzer (streams while you speak)
release ──► finalize (~0.2-0.6s) ──► Tier-0 cleanup (dictionary + fillers)
──► on-device LLM polish (deadline-guarded, falls back to Tier-0)
──► clipboard-swap paste into the focused app (your clipboard is restored)
Requires macOS 26+ (Apple Silicon) and Command Line Tools. No Xcode, no dependencies.
scripts/bundle.sh --install # builds, signs, copies to /Applications
open "/Applications/Power Tools.app"
Package.swiftexists for SwiftPM-capable toolchains, butscripts/bundle.shcompiles withswiftcdirectly — the CLT-only SwiftPM on this machine has a broken PackageDescription dylib.
TCC permissions attach to the app bundle's ID + signature, which scripts/bundle.sh keeps stable across rebuilds. Grant these when prompted (or pre-emptively in System Settings ▸ Privacy & Security):
Then verify with the menu bar ▸ Permission Doctor…, or:
"/Applications/Power Tools.app/Contents/MacOS/Power Tools" doctor
After a macOS update or if the hotkey dies, re-run the doctor — event taps occasionally need Accessibility re-granted.
After every rebuild/reinstall: toggle GRC Whisper off and on in the Accessibility list. Ad-hoc signatures pin the build hash, so a rebuilt binary silently loses the grant even though the checkbox still shows enabled.
The same binary doubles as a test/administration CLI:
grc-whisper transcribe file.wav # engine test (no permissions needed)
grc-whisper polish "um meet Tuesday scratch that Wednesday"
grc-whisper doctor # permission / model status
grc-whisper dict add KYAW "K Y A W,kayak" # term + comma-separated misheard variants
grc-whisper dict list
grc-whisper history 20
grc-whisper menu-chords com.apple.finder # chord codes for a running app's menus
grc-whisper chord-codes-test # chord code generation self-test
The personal dictionary does two jobs: deterministic replacement of misheard variants (Tier-0, works even with polish off) and a spelling authority passed to the LLM for phonetically-near matches.
~/Library/Application Support/GRC Whisper/config.json (also settable from the menu bar):
| key | default | notes |
|---|---|---|
hotkey | optionShift | optionShift (default, ambidextrous, any keyboard), fn, rightOption, rightCommand, ctrlOption, shiftCommand. fn isn't delivered by non-Apple keyboards — use optionShift or ctrlOption there. |
polish | apple | apple (on-device AI), claude/openai (cloud, opt-in), basic (dictionary+fillers only), off (raw) |
claudeModel | claude-haiku-4-5 | cloud model when polish: claude (change to claude-opus-4-8 for max quality) |
openaiModel | gpt-4o-mini | cloud model when polish: openai |
localeIdentifier | en_US | any of the ~30 SpeechTranscriber locales |
llmDeadlineMs | 2500 | polish deadline; on expiry Tier-0 text is inserted |
clipboardRestoreDelayMs | 600 | how long the transcript stays on the clipboard before restore |
maxUtteranceSeconds | 120 | hard cap per hold |
History, dictionary, and logs live in the same folder. Delete the folder to reset everything.
org.nspasteboard.ConcealedType so clipboard managers skip it, and restore only happens if the pasteboard still holds our session UUID (never clobbers something you copied mid-cycle).tapDisabledByTimeout, stale-hold expiry, and a 5s health check that revives silently-dead taps (a real macOS 26 failure mode). A stuck key can never eat your spacebar.Your hotkey doubles as a leader — hold Option + Shift and the overlay shows the menu (A ai · T text · R read · S shot · G lens · K color / C X V files · Y shelf · W palette · ← → ↑ ↓ win). Keep holding and tap a key, or just speak. Until you speak, the overlay shows the hint strip; the moment you talk it swaps to the live waveform.
Text & AI
KYAW → K Y A W, andrea → ahn-DRAY-ah). Case-insensitive, whole words only, longest entry wins; only the spoken audio changes (hold + T still copies the real text). UI edits apply immediately; the list is stored as pronunciations in config.json, where hand-edits load on the next launch.Files (with the Finder frontmost)
Windows
Clipboard & cursor
hold + P → Advanced Paste: a palette to paste the clipboard as plain text or transform it — clean text, single line, case changes, numbers only, contacts one per line (an Outlook/Gmail recipient line like Doug Lepping <[email protected]>; Willie Meredith <[email protected]> pastes as name, address, blank line, per person), then summarize, rewrite, bullets, markdown, or translate (AI transforms use your configured cloud model).
hold + H → Clipboard history (the Windows Win+V gap): a drawer slides in from the right edge with your recent copies — text AND images (screenshots included), with thumbnails; scroll for older ones. Digits, arrows or a click pick one (Esc, hold + H again, or a click anywhere else slides it away), it pastes into the app you came from and becomes the current clipboard. Recording is local (SQLite; last 200 text clips + 25 images, images capped at 5MB each), and anything marked concealed/transient by password managers is never recorded. Toggle in Settings ▸ General.
hold + D → New Document (the Windows "New ▸" gap): a small menu of document types — Word, Excel, Text, RTF, Markdown — creates the chosen blank file in the current Finder folder and selects it for renaming. Needs a one-time Automation permission for Finder (to read which folder is open); the Office files are valid minimal OOXML.
hold + K → Color Picker (the PowerToys Color Picker gap): the system magnifier loupe appears — hover any pixel anywhere on screen and click. A little palette then shows that color in every common format — HEX · RGB · HSL · HSV · CMYK, plus bare hex, raw values, and 0–1 floats — pick one (digit, ↑↓+↵, or click) and it's copied to your clipboard. Works across Retina/HDR displays; Esc cancels. No screen-recording grant needed — it's the macOS native sampler.
hold + M → Find My Mouse: dims every screen and sweeps a ring onto the cursor.
Notch strip — one live glance in the camera housing, shared by several features rather than owned by any one of them. Collapsed it is a row of dots flanking the notch: one per Claude Code / Codex / Cursor session, tinted by state, plus a quota dot once a usage window runs low. Hover a dot and the housing opens into the agent list — one row per session with its app's icon, state, model and program chips, branch, task, what it is doing right now, how long it has run and what it has spent; a waiting permission carries ✓ / ✕ on its row, so you answer without opening anything, and the last few finished sessions sit dimmed under , each with an ✕ to clear it. The band beside the camera says how many are active and carries ↻ and the module launcher. The module row stays with the list, so you can go straight from a session to Weather or Disk without folding it away. Click a dot to pin it open; — another app, another window — and it folds back into the housing (the ✕ in the band beside the camera does the same). Hover the at the end of the strip and a single row of module icons opens — the same row, same size, that a module’s tab bar shows, so nothing moves under the cursor when one opens (Usage, Hotkeys, Snap, Clock, a Calendar month with today ringed, a MacNotch-style Weather panel with feels-like, humidity, wind, UV, rain chance, pressure, sunrise/sunset and the next hours for each of your cities, a panel — CPU, GPU and memory gauges over load, processes, uptime, memory pressure, swap, and the battery’s charge, health, wattage and temperature — a mirror to check yourself before a call — it opens on a click, never a hover, and the camera runs only while the panel is open — a panel — each volume’s used/free bar with an ⏏ for anything ejectable, over the live read/write throughput and since-boot totals of each physical device — Ask, an Agent Pad tile that shows the agent list in the notch on hover, a Macro Pad tile that toggles the pad, and a ⚙ Settings tile that opens the app's settings window); move away and it folds back, click one to keep it, and a tab row moves between them or out. When it opens it grows out of the camera housing — the outer top corners round off and a large concave cove sweeps up into each side of the notch, so the panel reads as flowing out of the housing rather than a slab hung under it. Modules stay a small panel below the housing — the notch is a glance, not a window; the agent list is the one shape allowed to go wide — and with no agents running it keeps just the beside the camera, so the panels stay one hover away. Everything is optional in Settings ▸ Notch.
Quick Capture & Connections
call Rhett tomorrow p1 @calls → title "call Rhett" with priority 1, tomorrow's due date, and context "calls" — the panel shows what it parsed before you send. Natural-language dates ("friday", "july 12") via Apple's on-device date detector.%TEXT% (the captured line, JSON-escaped), %TODAY% (today as a Unix-seconds due date), %PRIORITY% (p0–p3, defaults 0), %DUE% (yyyy-mm-dd), %DUE_TS% (parsed due date in Unix seconds, today when absent), %CONTEXT% (@word). Example: {"title":"%TEXT%","priority":%PRIORITY%,"duedate":%DUE_TS%,"context":"%CONTEXT%"}.Chord mode (multi-letter shortcuts, in the spirit of KeyChord)
filt finds AutoFilter, Advanced Filter… and Clear Filters in Excel. Name matches get their own section, listed first when no code matches exactly; the highlighted row is what letting go runs. An exact code always wins.view lists everything in the View menu (letting go on just the name runs nothing); keep typing to narrow inside it — viewfo → Formula Bar, Formula Builder, Header and Footer… — and letting go runs the top one. Three letters of a menu name (vie) bring that menu up too. A menu name also reaches the same-named ribbon tab (below): viewgr → Gridlines..h Home, .i Insert, .v View, .da Data — and each command its tab's code plus its initials: .vgr Gridlines, .vzs Zoom to Selection. Typing a tab's code or name opens that tab in the app (the way Alt+W opens View) and lists its commands; letting go on a command presses it, and the ribbon goes back to the tab you were on (it stays put for a dropdown, and Esc puts it back too). Accessibility only shows the selected tab's buttons, so every tab chord mode opens is remembered (ribbon-cache.json) and its commands are then found by name from anywhere — gridl → Gridlines. .. learns the whole ribbon at once: it opens every tab (~3 s, the ribbon visibly flicks) and goes back. Toggle in Settings ▸ Keys ▸ Chord mode.T / R / S / G / F need Screen Recording permission the first time (System Settings ▸ Privacy & Security ▸ Screen Recording, then quit & reopen). OCR is also on the menu-bar mic ▸ Capture Text from Screen.
By default the AI cleanup runs on-device (free, private). If you want a frontier model for smarter rewriting, set Cleanup to Claude or OpenAI in Settings and paste an API key (stored in your macOS Keychain). Only the transcribed text is sent to the provider — never your audio; transcription always stays on-device. Any cloud failure/timeout falls back to the deterministic local cleanup. The default Claude model is claude-haiku-4-5 (fast); switch to claude-opus-4-8 in Settings for higher quality.
No network code exists in this repository. Speech models and the LLM are system-managed Apple on-device assets. Verify: grep -ri "http" Sources/ finds nothing but this README.
hold + Y → Shelf: a tray you drag files, text and images onto to park them, then drag back out somewhere else — the drag nobody can do in one go, across Spaces, between two windows that can’t both be on screen, or out of a mail message into a folder you haven’t opened yet. Drop several files at once; re-dropping one moves it back to the top rather than doubling it. The header carries a Copy / Move switch. On Copy (the default) dragging an item out never moves the original and the row stays, so you can drop the same file in five places; on Move the file is really relocated to wherever you drop it and the row goes with it. Text and images always copy — they have nowhere to move from. The mode is always visible in the header rather than hidden behind a modifier held at drag time, and it survives a restart. Rows go away with the ✕ per row, or Clear. Double-click opens a file or copies text/an image; right-click gives Copy · Reveal in Finder · Remove. Drag it by its header to dock it against any edge or corner, where it stays across restarts. The shelf itself is session-only: quitting empties it, and only its position is remembered. Toggle also in the menu bar.
hold + B → Macro Pad (an on-screen Stream Deck): a floating, draggable panel of buttons that swaps its profile with the app in front — and clicking a button never steals focus, so the keystrokes land in that app. First profile: Outlook filing — Settings ▸ Macro Pad turns a list of folder names into one-tap buttons, each running ⌘⇧M → folder name → ⏎ (Move to Folder). Add | keywords after a folder and the pad suggests buttons whose keywords appear in the open email. In Outlook the message itself is read through Accessibility — sender name and address, recipients, subject, body — so keywords can be email addresses too, and no Screen Recording is needed; other apps get a screenshot OCR'd on-device. The pad also remembers where each sender's mail went: file a few, and the folder lights up by itself the next time that sender (or anyone at that domain) shows up — on the Move box as ↩ Folder when it isn't a button, where Return files it. The Move box resolves what you type against Outlook's real folder list before sending it, so conf means Conference, not whatever the picker matched first. Favorites also learn: any folder you file into — from the Move box, the picker or the ring — joins the Favorites column by itself, most recent first, after the ones you listed (whose digits never move); Settings ▸ Macro Pad ▸ Learned favorites sets how many (default 8). Nothing leaves your Mac. While the pad is open, hold + 1…9/0 fires that button without clicking — tap several digits in one hold to file several emails; runs queue so keystrokes never interleave. Profiles for other apps are plain JSON in config.json (chord · typed text · Return per button). Docking: drag the pad (or the Agent Pad) near a corner or edge midpoint and it snaps there for good. The notch is not a pad berth — it belongs to the notch strip (below). Toggle also in the menu bar. Summon it: hold the hotkey + four-finger tap on the trackpad (three brings the Macro Ring instead) and the pad opens beside the cursor for one macro — fire a button and it goes back where it came from (its berth, or away if it was closed); a click anywhere else, Esc, or a second tap does the same. The berth is never overwritten by a summon. Or with no hotkey at all: a bare five-finger tap summons the same pad. macOS binds no tap at any finger count — its four- and five-finger gestures are all motion (Mission Control, App Exposé, space switching, Launchpad's pinch, Show Desktop's spread) — so five contacts landing flat is an unclaimed slot. Travel is what keeps them apart: a tap's fingers stay where they landed, so any gesture whose contacts move more than 8% of the pad from their landing spot is a swipe, pinch or spread and never fires the pad. Every tap the trackpad sees is written to the app log (trackpad: lines in ~/Library/Application Support/GRC Whisper/grc-whisper.log) with what it did or why it was dropped. Four fingers are offered too (Settings ▸ Macro Pad ▸ Bare tap fingers) but sit under the live four-finger swipes, so five is the default. This rides Apple's private multitouch framework and switches itself off if a macOS update removes it (toggle in Settings ▸ Macro Pad). Columns: the Outlook pad lays itself out as Favorites (folder moves) · Actions (Delete, Archive, Flag…) · Move — a search box: type a few letters of any folder and press Return to move the email there (recent-folder match, else Outlook's own picker). A per-button Group in Settings ▸ Macro Pad makes your own columns; a Name: line in the folders box does the same. Digits keep their config order.
ssntcoptssnconfig.json under chords: global codes start with a symbol (/f) and work everywhere; apps is keyed by bundle ID. Each sets a shortcut ("opt+cmd+l"), a menu path ("View,Show Sidebar") or a shell command (run with zsh -lc). Your code wins over a menu item that wanted the same letters; that item moves to its next free code. A starter set ships for Finder (gd Downloads, gh Home, up enclosing folder, nf new folder…) and everywhere (/f Finder, /t Terminal, /d Downloads…).
"chords": { "enabled": true, "autoMenu": true,
"global": { "/f": { "name": "Finder", "shell": "open -a Finder" } },
"apps": { "com.apple.finder": { "gd": { "name": "Go to Downloads", "shortcut": "opt+cmd+l" } } } }
Quit Power Tools before editing (a Settings change writes the in-memory list back); edits load on the next launch. Toggles in Settings ▸ Keys ▸ Chord mode. Check what an app's menus turn into with grc-whisper menu-chords <bundle-id>.