Mac Apps
desktop-organizer
What It Does
Section titled “What It Does”Watchdog daemon that runs in the background and watches ~/Desktop. Whenever a new file lands, it analyzes the contents with GPT-4o (vision for images and PDFs, GPT-4o-mini for metadata-only), suggests a PARA folder destination inside Google Drive, announces the suggestion via say, and pops a native macOS dialog asking Move or Skip. One file at a time, conversational, no auto-move surprises.
When To Use
Section titled “When To Use”- When the Desktop is becoming a swamp and you want the AI to nudge you on every new file before it disappears into clutter.
- As a continuous background service — runs all day, asks one question at a time as files appear.
- For one-off cleanup sweeps with
--sweepto process the existing pile before going into watch mode.
How It Works
Section titled “How It Works”- File lands on
~/Desktop. - 2-second settle check (waits for size to stabilize so it does not analyze a half-downloaded file).
- AI analyzes contents — vision for images and PDFs, metadata only for everything else.
sayannounces the file and the suggested PARA destination.- macOS dialog pops with Move / Skip.
- File moves to the picked PARA folder in Google Drive, or stays put.
Where It Lives
Section titled “Where It Lives”- Repo:
~/apps/desktop-organizer/ - OpenAI key: loaded from
shared-secrets.envviaconfig.py - PARA root:
~/Library/CloudStorage/GoogleDrive-ojhurst@gmail.com/My Drive/
Architecture
Section titled “Architecture”| File | Purpose |
|---|---|
config.py | Paths, constants, env loader (OpenAI key) |
analyzer.py | File analysis via OpenAI API (vision + text models) |
organizer.py | Speech (say), macOS dialogs (osascript), file moving |
watcher.py | Entry point, watchdog handler, queue-based main loop |
source .venv/bin/activatepython3 watcher.py # Watch mode — runs foreverpython3 watcher.py --sweep # Process existing files first, then watchpython3 watcher.py --dry-run # Analyze only, do not movepython3 watcher.py --sweep --dry-run # Analyze existing pile, no moves, exitPARA Destinations
Section titled “PARA Destinations”| Folder | Use For |
|---|---|
1 Projects/ | Active projects with goal + deadline |
2 Areas/ | Ongoing responsibilities |
3 Resources/ | Reference material by topic |
4 Archive/ | Completed / inactive |
Dependencies
Section titled “Dependencies”Python 3, watchdog, openai, plus the macOS built-ins say, osascript, sips, and qlmanage.
Known Gaps / Quirks
Section titled “Known Gaps / Quirks”- macOS only — relies on
sayandosascriptfor the announce + prompt loop. - Costs OpenAI tokens per file. Vision calls on PDFs and images are not free; metadata-only calls are nearly free.
- Suggestion quality is whatever GPT-4o produces. The dialog always lets you Skip, so a bad suggestion costs one click, not a misfiled file.