Native macOS task capture. Hit a hotkey, get a screenshot, GPT-5.2 reads it, a structured task lands in Things 3.
Three hotkeys, one outcome:
| Hotkey | Mode |
|---|---|
⌘⇧T |
Quick capture — screenshot → AI → Things 3 |
⌘⇧⌥T |
Edit capture — type a prompt first, then same pipeline |
⌘⇧' |
Window picker — choose any open window to capture |
When you're in Arc, Chrome, or Safari, the current URL is automatically appended to the task notes as ref: <url>.
The AI extracts a title, prose context, 3-5 checklist items, tags, and an optional deadline. Tasks land in Things 3 via URL scheme.
- macOS
- Node 20+
- Homebrew (for Hammerspoon install)
- Things 3
- OpenAI API key
./setupThat's it. The script installs Hammerspoon if needed, builds the capture bundle, writes the Hammerspoon config, and prompts for your API key and scheduling preference. Hotkeys are live when it finishes.
To verify everything is working without making changes:
./setup --checkLives at ~/.taskbot/config.json:
{
"openaiApiKey": "sk-...",
"scheduling": "inbox"
}scheduling controls how the AI schedules tasks:
"inbox"— everything goes to Inbox, you triage (default)"auto"— AI picks Today / Tomorrow / Someday based on context
Hammerspoon watches bin/ and src/services/ for .ts changes. Edit a source file and the capture bundle rebuilds automatically. No manual build step needed during development.
- Hotkey fires in Hammerspoon
- Hammerspoon runs
node dist/capture.js(with optional--promptor--windowargs) - Capture script takes a screenshot, detects the frontmost app, grabs the browser URL if applicable
- GPT-5.2 vision analyzes the screenshot and returns structured JSON
- The result opens in Things 3 via
things:///add?...
The Hammerspoon config lives at ~/.hammerspoon/taskbot.lua if you want to remap the hotkeys.