Photo: Unsplash
Apple Shortcuts + AI Is the Automation Stack Nobody Talks About
Everyone building AI automations reaches for Python scripts, Zapier, or n8n. Meanwhile, there’s an automation runtime already installed on every Mac, iPhone, and iPad you own, with system-level hooks no third-party tool gets: clipboard access, Reminders, Calendar, camera OCR, dictation, hotkeys, and the Share Sheet. It’s Apple Shortcuts, and once you teach it to talk to an LLM, it becomes the most underrated AI stack in the Apple ecosystem.
I’ve been running Shortcuts against a local Ollama instance on my Mac Studio for over a year. Here’s the exact plumbing, plus four shortcuts I use every single day.
The core trick: calling Ollama from “Get Contents of URL”
Shortcuts has a built-in HTTP client called Get Contents of URL, and Ollama exposes an OpenAI-compatible REST API on localhost:11434. That’s the whole integration. No plugins, no middleware.
First, make sure Ollama is running and you have a model pulled:
brew install ollama
ollama pull llama3.1:8b
ollama serve
Then build a shortcut with a Get Contents of URL action configured like this:
- URL:
http://localhost:11434/api/generate - Method: POST
- Headers:
Content-Type: application/json - Request Body (JSON):
{
"model": "llama3.1:8b",
"prompt": "Summarize the following text in 3 bullet points:\n\n[Shortcut Input]",
"stream": false,
"options": {
"temperature": 0.3,
"num_predict": 400
}
}
The [Shortcut Input] part is a Shortcuts variable you insert with the magic-variable picker. The critical setting is "stream": false — Shortcuts can’t parse streamed chunks, so you want one complete JSON response. Follow it with a Get Dictionary Value action pulling the response key, and you have plain text you can pipe anywhere.
If you prefer cloud models, the official ChatGPT app and Claude app both expose native Shortcuts actions (“Ask ChatGPT”, “Ask Claude”) that accept text input and return text output — zero JSON required. I use local for private data and cloud actions when I need frontier-quality reasoning. Mix freely; Shortcuts doesn’t care.
Recipe 1: Summarize clipboard with a hotkey
This is the one I trigger 20 times a day.
- Get Clipboard
- Get Contents of URL → the Ollama POST above, with the clipboard as
[Shortcut Input] - Get Dictionary Value → key:
response - Show Result (or Copy to Clipboard if you want to paste the summary)
On macOS, open the shortcut’s settings, enable Use as Quick Action, and assign a keyboard shortcut — mine is ⌃⌥⌘S. Copy any wall of text, hit the hotkey, get three bullets in about 2 seconds on an M2 Max with an 8B model. No browser tab, no paste-into-chatbot ritual.
Recipe 2: Voice memo → transcript → tasks in Reminders
This one feels like cheating. I ramble into my iPhone while walking the dog, and tasks appear in Reminders.
- Record Audio (or accept a Voice Memo via Share Sheet)
- Transcribe Audio — this is a native Shortcuts action since iOS 18 / macOS Sequoia; it runs Apple’s on-device speech model, no API needed
- Get Contents of URL → Ollama, with this prompt:
Extract every actionable task from this transcript. Output one task per line, no numbering, no commentary. If there are no tasks, output NONE.\n\n[Transcript] - Split Text by new lines
- Repeat with Each → Add New Reminder into a list called “Inbox”
Add an If check for “NONE” before the loop so empty memos don’t create garbage reminders. The whole chain — 90 seconds of rambling to structured tasks — takes under 10 seconds.
Recipe 3: Photo of a document → OCR → structured Markdown note
Apple’s Live Text OCR is excellent and fully on-device. Shortcuts exposes it as Extract Text from Image.
- Take Photo (or Select Photos)
- Extract Text from Image
- Get Contents of URL → Ollama, prompt:
Reformat this OCR output as clean Markdown. Use a # heading for the document title, preserve any tables as Markdown tables, fix obvious OCR errors, keep all numbers exactly as written.\n\n[Extracted Text] - Save File to a folder your notes app watches (I save into my Obsidian vault’s
inbox/folder), or Create Note in Apple Notes
I use this for receipts, conference badges, whiteboards, and the paper letters Czech bureaucracy still insists on sending me. The LLM step is what elevates it from “raw OCR dump” to “note I’ll actually read later.”
Recipe 4: The daily AI briefing
Every morning at 7:00, my Mac builds me a briefing and pushes it as a notification.
- Find Calendar Events where Start Date is Today
- Get Current Weather (native action)
- Get Contents of URL → an RSS feed or news API of your choice (I pull two RSS feeds and grab the first 10 headlines)
- Combine all three with a Text action into one block
- Get Contents of URL → Ollama, prompt:
Write a 5-sentence morning briefing. Mention my first meeting time, whether I need a jacket, and the single most important news item. Be direct, no greetings.\n\n[Combined Text] - Show Notification (or Send Message to yourself)
Schedule it with a Time of Day personal automation. Set “Run Immediately” so it doesn’t ask for confirmation. Total cost: zero — it’s your own hardware and free data sources.
The cross-device magic: iPhone → your Mac’s model via Tailscale
Here’s the part that genuinely surprises people. Shortcuts sync via iCloud, so the same shortcut exists on your iPhone — but localhost:11434 means nothing there. The fix is Tailscale, the zero-config WireGuard mesh.
Install Tailscale on both devices, then on the Mac:
brew install --cask tailscale
# log in, then check your Mac's tailnet name:
tailscale status
Two more steps on the Mac. First, tell Ollama to listen on all interfaces, not just loopback:
launchctl setenv OLLAMA_HOST "0.0.0.0:11434"
brew services restart ollama
Then in your shortcuts, swap http://localhost:11434 for your Mac’s MagicDNS name, e.g. http://mac-studio.tailnet-name.ts.net:11434. Because Tailscale is an encrypted private mesh, this works from anywhere — my iPhone on mobile data in a Prague tram is hitting the Mac Studio in my office, getting 8B-model responses in 2–3 seconds, and none of the data ever touches a third-party server.
One refinement: create a Text action at the top of each shortcut holding the base URL, and reference it everywhere. When I’m on the Mac itself, I leave it as the Tailscale hostname anyway — it resolves locally with no measurable latency penalty, and I maintain one shortcut instead of two.
Why this beats the “serious” automation tools
I still use Python for heavy lifting. But Shortcuts wins on three axes that scripts can’t touch:
System integration. Reminders, Calendar, camera, dictation, Focus modes, NFC tags, the Action button on newer iPhones — all first-class triggers and targets. Replicating Recipe 2 in Python means fighting Apple’s EventKit permissions; in Shortcuts it’s one action.
Zero infrastructure. No cron, no virtualenv, no server. The automations sync to every device automatically and survive OS updates.
Invocation surface. Hotkeys on Mac, Share Sheet everywhere, Siri by voice, Back Tap on iPhone, menu bar items. The best automation is the one with the lowest activation cost, and nothing beats a double-tap on the back of your phone.
The limitations are real: no loops over streamed responses, debugging is painful (add Quick Look actions liberally to inspect intermediate values), and complex JSON manipulation gets clumsy. My rule of thumb — if a shortcut grows past 15 actions, the LLM call moves into a small Flask endpoint on the Mac and the shortcut just hits that instead. Shortcuts remains the trigger layer; that’s where it’s irreplaceable.
Start with Recipe 1. It takes five minutes to build, and once you’ve felt a local model respond to a system-wide hotkey, you’ll understand why I think this is the automation stack nobody talks about — and everybody with a Mac should be using.