HookAnchor is a powerful command launcher for macOS that provides instant access to applications, files, URLs, and custom commands through a keyboard-driven popup interface.
Download HookAnchor
HookAnchor-{version}.dmg from releasesInstall the Application
First Launch - Bypass macOS Security
Because HookAnchor is not signed with an Apple Developer certificate, macOS will block it on first launch. Follow these steps:
Important Notes:
Grant Permissions: Allow accessibility permissions when prompted
You’re Done!: Press Option+Space (⌥Space) from anywhere to open HookAnchor
Setup Keyboard Trigger (choose one method below - Option 1 is recommended)
You can trigger HookAnchor using any of these methods:
HookAnchor includes a native global hotkey system that works out of the box!
By default, HookAnchor uses Option+Space (⌥Space) to show the popup from any application.
To change the hotkey:
Open the configuration file:
open ~/.config/hookanchor/config.yamlFind the global_hotkey line (around line 21):
global_hotkey: "Option+Space"Change it to your preferred key combination:
global_hotkey: "Option+`" # Option+Backtick
global_hotkey: "Command+Shift+Space" # Cmd+Shift+Space
global_hotkey: "Control+Space" # Control+SpaceSave the file and restart HookAnchor
Supported keys: - Modifiers:
Option, Command, Control, Shift - Keys: Space, Return,
Enter, , Backtick - **Format**: Use+` to combine (e.g.,
“Option+Space”, “Command+Shift+Return”)
Advantages: - ✅ Works from any application system-wide - ✅ No third-party software needed - ✅ No system settings to configure - ✅ Just works!
If you use Keyboard Maestro:
/Applications/HookAnchor.appFor using Caps Lock as trigger:
Download Karabiner-Elements
Install and grant permissions
Add this rule to use Caps Lock:
{
"description": "Caps Lock opens HookAnchor",
"manipulators": [{
"type": "basic",
"from": { "key_code": "caps_lock" },
"to": [{ "shell_command": "open /Applications/HookAnchor.app" }]
}]
}HookAnchor works with any tool that can launch applications: - BetterTouchTool: Assign to gestures or keys - Alfred: Create a workflow to launch HookAnchor - Raycast: Add as a script command - Hammerspoon: Configure in Lua script
Once you’ve set up your keyboard trigger, press your chosen key combination to open the HookAnchor popup. The popup displays a searchable list of all your commands.
Commands are organized into patches (groups). When you see a command like:
Work > Project Setup
This means “Project Setup” is in the “Work” patch.
Similar commands are automatically grouped into submenus. For example:
Git >
Pressing Enter on this opens a submenu with all Git-related commands.
Launch anything from one place: - Applications - Websites - Folders - Shell commands - Custom scripts
HookAnchor scans configured folders for markdown files and creates commands from: - Anchor files (markdown files matching folder names) - Code blocks in markdown - Links in markdown files
Use hook:// URLs from anywhere:
open "hook://terminal" # Opens Terminal
open "hook://slack" # Opens SlackCapture context from any application: 1. Press + in the
popup 2. Enter a name for the command 3. Wait for countdown 4. Click on
any window/application 5. HookAnchor creates a command for it
| Type | Description | Example |
|---|---|---|
| app | Launch macOS applications | Terminal : app TerminalChrome : app Google Chrome |
| url | Open websites in default browser | GitHub : url https://github.comGoogle : url https://google.com |
| folder | Open folders in Finder | Downloads : folder ~/DownloadsProjects : folder ~/Documents/Projects |
| cmd | Execute shell commands | List Files : cmd ls -laServer : cmd npm run dev |
| anchor | Navigate to project folders with markdown files | My Project : anchor ~/Projects/MyProject/MyProject.md |
| alias | Reference other commands | Term : alias TerminalGH : alias GitHub |
| Key | Action |
|---|---|
| Escape | Close popup |
| Enter | Execute command |
| Arrow Keys | Navigate commands |
| / | Launch first folder matching search |
| = | Template: Edit command from current input |
| ; | Template: Edit currently selected command |
| + | Template (Grab): Capture window/app after countdown |
| > | Template (Alias): Create alias to last executed command |
| ! | Template (Sub Anchor): Create anchor as subfolder of last executed |
| & | Template (Sub Markdown): Create markdown note in same folder as last executed |
| ` | Show history viewer |
| ? | Show keyboard shortcuts |
| Cmd+Shift+H | Open User Guide (HTML documentation) |
% for anchor)+Create commands in markdown files within your configured
markdown_roots:
# My Commands
Terminal : app Terminal
Chrome : app Google Chrome
GitHub : url https://github.comEdit ~/.config/hookanchor/config.yaml to add custom
functions and templates.
gh → GitHubtm → Terminalsl → Slackdev-server → Development serverdev-build → Development builddev-test → Development testsVerify your keyboard trigger is properly configured:
Test launching manually:
open /Applications/HookAnchor.appCheck HookAnchor process is running:
ps aux | grep HookAnchorCheck logs for errors:
tail -f ~/.config/hookanchor/anchor.logCheck markdown_roots configuration
Force rescan with ` key
Verify file permissions
Check scanner is finding files:
ha --rescanHookAnchor uses a separate URLHandler app for stability
Check URL handler registration:
/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -dump | grep hook:Should show com.hookanchor.urlhandler
max_rows in configurationmerge_similar if not neededscan_interval_secondsTo start fresh with default configuration:
# Backup current config, then remove it to regenerate defaults
cp ~/.config/hookanchor/config.yaml ~/.config/hookanchor/config.backup.yaml && rm ~/.config/hookanchor/config.yaml
# Restart HookAnchor to load defaultsTo restore commands from a previous backup:
# Copy an earlier version of commands.txt from backups folder
# This will load previous commands over the existing commands
cp ~/.config/hookanchor/backups/commands_YYYYMMDD_HHMMSS.txt ~/.config/hookanchor/commands.txt
# Or restore the cache file to replace current commands with earlier version
cp ~/.config/hookanchor/backups/cache_YYYYMMDD_HHMMSS.json ~/.config/hookanchor/commands_cache.jsonBoth files in the backups folder use matching timestamps, so you can restore both from the same point in time.
Use the CLI help system for detailed information:
ha --help # General help and command overview
ha --help-config # Configuration reference
ha --help-templates # Templates and scripting guideAdditional resources: - Logs: Check
~/.config/hookanchor/anchor.log for debugging -
Issues: Report bugs at
https://github.com/oblinger/hookanchor/issues
Action types specify what kind of command to execute. These are used in command definitions to tell HookAnchor how to handle the command.
| Action Type | Description | Example |
|---|---|---|
app |
Launch macOS applications | Terminal : app Terminal |
url |
Open websites in default browser | GitHub : url https://github.com |
folder |
Open folders in Finder | Downloads : folder ~/Downloads |
cmd |
Execute shell commands | List : cmd ls -la |
anchor |
Navigate to project folders with markdown files | Project : anchor ~/Project/Project.md |
alias |
Reference other commands | GH : alias GitHub |
markdown |
Open markdown files in Obsidian | Notes : markdown ~/Documents/notes.md |
doc |
Open document files (Word, Excel, etc.) | Report : doc ~/Documents/report.docx |
chrome |
Open URL in Chrome | Gmail : chrome https://mail.google.com |
safari |
Open URL in Safari | News : safari https://news.ycombinator.com |
brave |
Open URL in Brave browser | Web3 : brave https://ethereum.org |
notion |
Open Notion pages | Tasks : notion https://notion.so/tasks |
slack |
Open Slack channels | Team : slack https://team.slack.com/archives/... |
contact |
Open contact cards | John : contact john@example.com |
text |
Open text files | Todo : text ~/Documents/todo.txt |
console |
Open Google Cloud Console | GCP : console https://console.cloud.google.com |
obs_url |
Open Obsidian URLs | Daily : obs_url obsidian://open?vault=MyVault |