A friendly walkthrough of every feature, trigger and placeholder. Keep it open in a tab while you build your shortcut library.
MultiShortcuts Pro for Mac is a free script for Hammerspoon, plus an optional rule file for Karabiner-Elements that adds the hold-for-⌘ keys. Setup takes about five minutes.
Download Hammerspoon from hammerspoon.org, open the .dmg and drag Hammerspoon into Applications. It's free and open source.
Open Hammerspoon. macOS asks for Accessibility permission, which any keyboard tool needs to read keystrokes and type for you. Go to System Settings → Privacy & Security → Accessibility and turn Hammerspoon on.
In the Hammerspoon menu bar icon choose Open Config. Put MultiShortcutsPro.lua in that ~/.hammerspoon/ folder, then add this line to init.lua in the same folder (create the file if it isn't there):
require("MultiShortcutsPro")
Hammerspoon menu → Reload Config. An MSP item appears in your menu bar, and a welcome message explains the basics.
Hold ; for ⌘ and hold Caps Lock for ⌥ use Karabiner-Elements, a free keyboard tool that handles tap-or-hold keys reliably.
Open Notes. Type -= and today's date appears. Select a word, hold ; and press C: it's copied. Tap Caps Lock, then a: Claude opens.
Go no further than this, and your Mac is already easier to use. It's just the beginning.
The modifier keys sit at the corners of the keyboard, so every copy, paste and save means a stretch. These keys put them under your fingers. Each one still types its normal character when you tap it.
| Key | Tap | Hold |
|---|---|---|
| ; | Types ; (so the ; commands still work) | ⌘ Command. Hold ; + C copies, + V pastes, + Z undoes, + Tab switches apps. |
| ` | Types ` | ⌥ Option |
| Caps Lock | Types `, the launcher key. Caps Lock, then a, opens Claude. | ⌥ Option. Shift + Caps Lock is the real Caps Lock. |
| Middle mouse (wheel) button | Types ;. Click the wheel, then press V to paste. | ⌘ Command. Select text, hold the wheel, press C to copy. Shift + middle click is a normal middle click. |
Every key is a separate rule in Karabiner-Elements → Complex Modifications: enable the ones you want, remove the ones you don't. For the mouse rule, also tick your mouse under Devices so Karabiner can see it. There's an alternative mouse rule that makes the wheel act like Caps Lock instead (click = `, hold = ⌥). Enable only one of the two mouse rules.
A key counts as held after 200 ms. If you press the next key before letting go of ; or ` (a fast roll while typing), it counts as typing, not holding, so you never get ⌘ or ⌥ by accident. To change the 200 ms, edit the three 200 values in a rule's parameters in Karabiner-Elements (100 to 1000 ms works well).
` is left of 1. On ISO keyboards that key is labelled § and the rule for ` may need editing.Tap ;, then a letter. The ; is held back for a moment, so it never replaces your selection. If no command letter follows, ; is typed as usual. Lowercase is what you use most; the Capital is the rarer or riskier twin.
| Keys | Command |
|---|---|
| ;c ;v ;x | Copy, paste, cut |
| ;z ;y | Undo, redo |
| ;a | Select all |
| ;A | Select all and copy, in one step |
| ;e ;E | Line end (⌘→) |
| ;l | Line start (⌘←) |
| ;L | Lock screen (⌃⌘Q) |
| ;8 | Emoji & symbols picker (⌃⌘Space). Shift+8 is *, like long-press * in SpeedKee. |
| ;s ;S | Save, Save As |
| ;f ;h | Find, find & replace (⌘⌥F) |
| ;p ;o | Print, open |
| ;n ;N | New, new window |
| ;t ;w ;W | New tab, close tab, close window (⌘⇧W) |
| ;b ;i ;u | Bold, italic, underline |
| ;r ;d | Refresh, developer tools (⌘⌥I) |
| ;T ;B | Top, bottom of document |
| ;U ;D | Page up, page down |
Typing normally is safe: a ; right after a letter (as in this;and) is treated as punctuation. Turn the commands off in the menu: MSP → ; Commands.
;x, it replaces the built-in ;x command.New installs start in Starter mode with the built-in shortcuts only: the hold keys, the ; commands, the ` launchers and the = dates.
When you want your own shortcuts, choose MSP → Unlock Full Features…. That turns on the ⌥ hotkeys (⌥T, ⌥A, ⌥E and the rest), the editor, and adds a few sample text shortcuts. It's free; nothing to buy.
A trigger is the short string you type to fire a shortcut. There are two kinds.
Triggers that end in a capital letter, or contain a digit or a symbol, fire the moment you type the last character.
| Trigger | Why it's instant |
|---|---|
| mP | Ends in a capital P |
| addr1 | Contains a digit |
| `g | Contains a symbol (the ` launcher key) |
| -= | Symbols only |
All-lowercase triggers wait for you to finish the word with a space, return, tab, or . , : ? !, so they never fire inside a real word. The character you typed is kept after the expansion.
| Trigger | How it fires |
|---|---|
| addr | Type addr then space |
| qp | Type qp then space or ? |
Add $$ to the end of the trigger in your shortcut file: addr$$ 1 Main St fires as soon as you type addr.
Good triggers are memorable, fast to type, and don't collide with real words. This convention scales to hundreds of shortcuts.
| Pattern | Example | Meaning |
|---|---|---|
| Word + capital | mP | "my Pleasure" |
q + letter (questions) | qp | What's your phone number? |
j + letter (exclamations) | jg jj | That's great! / That's great!! |
| lowercase / Capital twin | jt jT | Thank you! / Thank you very much! |
| ai + verb + cap | aiSU | AI Summarize prompt |
` + letter or number | `g `1 | Launch something |
q and j are the Mac stand-ins for SpeedKee's ? and ! keys. Few English words are just "q" or "j" plus one letter, so they're safe word triggers.| You want to… | Use | What happens |
|---|---|---|
| Create a shortcut | ⌥T ⌥A ⌥W ⌥D ⌥C | Adds a new trigger. If the trigger already exists, you're asked before it's replaced. |
| Change or delete one | ⌥E (or ⌥L / ⌥M) | Opens a searchable list. Pick one, edit or delete it. |
Every save writes a timestamped backup to ~/.hammerspoon/MultiShortcutsPro/backups/.
The = family is built in. Examples assume today is October 28, 2026.
| Trigger | Types |
|---|---|
| -= | October 28, 2026 (today) |
| =- | 10/28/26 (today, short) |
| 1-= 2-= 3-= | November 4 / 11 / 18, 2026 (1, 2, 3 weeks from today) |
| 1m= 2m= | November 28 / December 28, 2026 (1, 2 months) |
| 1y= | October 28, 2027 (1 year) |
Months are clamped: one month after January 31 is February 28 (or 29), not March 3. The built-ins are ordinary lines in your shortcut file, like 1-= {when:+7d}, so you can change them. If you delete one, it comes back on the next start; to replace one, give its trigger your own text.
| Placeholder | Result |
|---|---|
| {when:+3d} | October 31, 2026 (d, w, m or y) |
| {when:+1w,short} | 11/04/26 |
| {date:%A} | Wednesday |
| {date:%B %d} | October 28 |
| {time:%I:%M %p} | 03:31 PM |
Launchers live in ~/.hammerspoon/MultiShortcutsPro/launchers.txt, one per line: trigger target. With the hold keys on, tap Caps Lock to type the `.
`s Safari `n Notes `m Messages
`g https://voice.google.com `a https://claude.ai `mom facetime:5551234567
`r ~/Documents/recipes.md `b ~/Documents/budget.numbers `d ~/Downloads
| Link | What it does |
|---|---|
tel:5551234567 | Call through your iPhone |
facetime:5551234567 | FaceTime video call (facetime-audio: for audio) |
sms:5551234567 | Open Messages to that number |
mailto:friend@example.com | New email |
maps:?q=coffee | Search in Maps |
Launchers are checked when shortcuts load and every time one fires:
.command, .sh, .scpt, .applescript, .workflow, .pkg, and programs without an extension. Also blocked: javascript:, file: and other link types not listed above.| Trigger | Opens |
|---|---|
| `a | Claude |
| `c | Google Calendar |
| `e | Gmail |
| `g | Google Voice |
| `1 `2 `3 | Numbered favorites: change them to what you use most |
Keep your most-used AI prompts two keystrokes away. Works with Claude, ChatGPT, Gemini, or any AI chat in your browser or desktop app.
| Trigger | Expands to |
|---|---|
| aiSU | Summarize the following in 3 bullet points: |
| aiEX | Explain this like I'm a smart 12-year-old: |
| aiTR | Translate the following to plain English: |
| aiPR | Proofread this for grammar and clarity: |
| aiCO | Continue writing in the same voice and tone: |
Typing the same instruction to an AI more than twice? Make it a shortcut: ⌥T, paste the prompt, pick a trigger.
Shortcuts work in every texting app on your Mac: Messages (iMessage and SMS through your iPhone), Google Voice, WhatsApp, Telegram and Signal.
| Sample trigger | Expands to |
|---|---|
| mP | My pleasure! |
| omW | On my way! |
| brB | Be right back! |
| tyS | Thank you so much! |
| hruD | How are you doing? |
These samples are added when you unlock Full Features, along with qp, jg, jj, jt and jT.
| Placeholder | Result |
|---|---|
| {clip} | Current clipboard text ({clip:upper}, {clip:lower}) |
| {cursor} | Puts the cursor here after expanding |
| {prompt:Question?} | Asks you for text before expanding |
| {user} {comp} | Your login name, your computer's name |
| {when:…} {date:…} | Dates (see section 07) |
Press keys, wait, and switch apps inside an expansion. Modifiers: ^ = ⌘, ! = ⌥, # = ⌃, + = ⇧.
| Token | Action |
|---|---|
| {key:^s} | Press ⌘S |
| {key:^+z} | Press ⌘⇧Z (redo) |
| {key:{tab}} | Press Tab (also {return}, {esc}, {up}, {f5}…) |
| {wait:500} | Pause 500 ms |
| {focus:Notes} | Switch to Notes |
Example: sendX {key:^a}{key:^c}{focus:Messages}{wait:300}{key:^v} copies everything and pastes it into Messages. The space you type after a word trigger isn't added to a sequence.
MultiShortcuts Pro for Mac, MultiShortcuts Pro for Windows and SpeedKee for Android share one format:
; lines starting with "; " are comments mP My pleasure! addr$$ 1 Main St[NEWLINE]Chicago, IL 60601 `a https://claude.ai
trigger expansion.[NEWLINE].$$ at the end of a trigger makes it fire instantly.| File | Location |
|---|---|
text_expansion.txt | ~/.hammerspoon/MultiShortcutsPro/ |
launchers.txt | ~/.hammerspoon/MultiShortcutsPro/ |
| Backups | ~/.hammerspoon/MultiShortcutsPro/backups/ |
Edit the files in any text editor; changes load within a second. To move shortcuts between your phone and computer, use the phone ⇄ PC converter. Text shortcuts and websites transfer; app launchers, file paths, Mac-only placeholders and multi-line text don't.
The hold keys come from Karabiner-Elements. Check that it's running, that Input Monitoring is allowed for it, and that the MultiShortcuts Pro rules are enabled under Complex Modifications.
Make sure the Caps Lock rule is enabled and that `a is in your launchers (⌥L). Try both slowly and fast: either way should open Claude.
Adding an app to Accessibility needs an administrator. Ask IT, or use the built-in alternatives on the Locked-down Mac page, including a converter that moves your text shortcuts into Text Replacements.
Right-click Hammerspoon in Applications → Open → Open. After that it opens normally.
After a Hammerspoon update, remove it from System Settings → Privacy & Security → Accessibility and add it again.
Some games, virtual machines and remote-desktop apps capture the keyboard below where Hammerspoon can see it. That's by design.
| Hotkey | Action |
|---|---|
| ⌥T | Add text expansion |
| ⌥A | Add app launcher |
| ⌥W | Add web launcher |
| ⌥D | Add document or folder launcher |
| ⌥C | Turn selected text into a shortcut |
| ⌥E | Edit all shortcuts |
| ⌥L ⌥M | Edit launchers / text expansions |
| ⌥Q | Pick an expansion from a list |
| ⌥Z | Undo last expansion |
| ⌥B | Back up shortcut files now |
| ⌥P | Pause / resume |
| ⌥R | Reload |
| ⌥⇧S | Screenshot (⌘⇧4) |
| ⌥H | Help |
In Starter mode only ⌥Q, ⌥Z, ⌥P, ⌥R and ⌥H are active.