
Your day is a markdown file. Drawer just slides it into view.
usecase-web.mp4
Drawer is a menu bar app for macOS. It lives at the top-left edge of the screen and slides out with a global hotkey. Inside is today's to-do list, read straight from a plain markdown file, plus a focus timer to work through it.
The list is just text, so you can edit it in Obsidian, an editor, or iCloud, and the panel stays in sync. Check a task off in the panel and the checkbox is written back to the file. Nothing to sync, no account, no database. Your tasks stay yours.
I keep my whole day in one markdown file. I wanted to see it and check things off without opening an app or switching windows. Drawer reads that file, shows today's tasks, and writes the checkboxes back. That is the whole idea. Every other feature is optional and can be switched off.
- Global hotkey to show and hide, default Control-Option-Space
- Today, Carried over, and Tomorrow sections, built from dated headings
- Collapsible Backlog and Archive sections, with
###subgroups - Focus timer with pause, resume, and a completion chime
- Pomodoro mode that runs a focus, short break, long break cycle
- A stopwatch that logs real hours against each task, with an end-of-day summary
- An idea board you jot to and swipe over to, kept in the same file
- Focus sounds, white, pink, brown, green, ocean, and a pick of check-off sounds
- A notes pad with a teleprompter that floats over other apps
- Swipe a row to delete it or flag it in progress
- Task notes, written back as indented lines under the task
- Eight themes, from calm system materials to art-directed worlds
- Turn any feature on or off, or strip the app down to Minimal
- Edits sync live from Obsidian, an editor, or iCloud
- Respects Reduce Motion
Switch in Settings, Command-comma.
- Liquid Glass: macOS 26 glass plate, the default
- Reminders: opaque and high-contrast
- Widget: rounded type, minimal chrome
- Medieval: aged parchment with a gold-ruled frame
- Pixel: an 8-bit game window with a bitmap font
- Dots: frosted glass over a cool dot grid
- Notebook: ruled paper with a handwritten feel
- Windows XP: the Luna desktop, blue title bar and beige toolbar
Tasks are markdown checkboxes under a dated heading.
## 2026-07-04
- [ ] Call the landlord (15m)
- [x] Done task
A ## heading with a date starts a day, and the tasks under it belong to that day. Weekday prefixes like ## Mon 2026-07-04 work too. ## Backlog and ## Archive collect tasks with no date and show collapsed at the bottom. Inside those, ### subheadings become group labels. A duration like (15m)sets the focus timer hint for a task.
Indent lines right under a task to give it a description. Everything indented until the next blank line is the note.
- [ ] Call the landlord
Ask about the lease renewal.
Mention the broken heater too.
It is meant to be easy to write by hand or by an AI. That is the whole format.
If you keep your file in a vault where you use an AI, copy .claude/skills/drawer-tasks/ into your own .claude/skills/ folder. It teaches the AI this format, so you can just say "add three tasks for tomorrow" and it writes them where Drawer will find them.
Drawer is free on the Mac App Store. That is the easiest way to get it, and it updates itself.
If you would rather have the app outside the sandbox, there is a signed and notarized build in Releases.
- Download Drawer-macOS.zip.
- Unzip it to get Drawer.app.
- Drag Drawer.app into Applications.
- Hotkey: show and hide
- Esc: hide, after clicking into the panel
- Plus: add a task to today
- Note: open the notes pad and teleprompter
- Light bulb: jot an idea, or swipe to the idea board
- Filter: hide completed, unchecked first
- Briefcase: start or end the stopwatch, then tap a task to track time
- Speaker: play a focus sound
- Arrows: expand to full height or collapse
- Circle: check off a task, written back to the file
- Timer field and play: start a focus session
- Menu bar icon: toggle, settings, quit
Drawer ships a Model Context Protocol server, so any MCP client (Claude Code, Claude Desktop) can read and write your drawer. It runs whether or not the app is open, and every write goes through the same byte-safe path the app uses.
The server binary lives inside the app bundle. Register it once:
claude mcp add drawer -- /Applications/Drawer.app/Contents/MacOS/drawer-mcp
By default it edits the same Drawer.md the app does. Point it elsewhere with
--file <path> or the DRAWER_FILE environment variable.
Five tools:
list_tasks— tasks by section (today, carried, upcoming, backlog, archive, all)add_task— add to today, a dated section, or the backlogtoggle_task— check or uncheck a task by idget_work_summary— logged hours for a day, per taskwrite_day_plan— write or merge a whole day's plan
It doubles as the AI fallback on Macs without Apple Intelligence: your Claude reads the file and plans through the same writer the in-app planner uses.
Smoke-test it end to end with scripts/mcp-smoke.sh.
A timesheet that drafts itself, waits for your nod, and never leaves your Mac. Turn it on in Settings (it is off by default and needs Accessibility permission). Drawer then watches which app and window is frontmost, groups that into work blocks, matches each block to an open task, and proposes a session. Nothing is ever written to your log without approval: every match lands in a review queue you clear from the menu bar, one tap. A green dot on the menu-bar icon means it is observing. No dot, not observing.
On a Mac with Apple Intelligence, the on-device model helps place blocks rules can't and writes a short end-of-day summary. Without it, deterministic rules do the work and unmatched blocks simply wait in the Unattributed bucket.
Privacy: Drawer reads app names and window titles plus system idle time, nothing
else. Window titles never appear in your work log or vault; only matched task
titles do. The raw trail lives 7 days on disk at
~/Library/Application Support/Drawer/raw-activity.jsonl, local only, then is
deleted. Raw titles can hold sensitive text, which is why they stay local and
short-lived and never reach the log. No network, no screen recording, no
keystroke content, ever.
It plans with your real speed, not your optimism. On a Mac with Apple
Intelligence, "Plan today" drafts a dated plan: the right tasks, ranked, with
durations calibrated from what similar tasks actually took. A preview card shows
every entry and minute value; nothing is written until you Accept, which commits
through the same writer the MCP server uses. It ranks by a priorities file you
pick in Settings (defaults to 0 Focus.md in the vault), prefers in-progress and
carried work, and stays within your recent daily capacity.
Without Apple Intelligence the button is hidden, but the MCP write_day_plan
path still lets your Claude plan into the same file.
Scrub through your week and watch the work happen. Drawer keeps an append-only
history of Drawer.md and a slider that replays it: tasks appearing, getting
checked off, carrying forward, sweeping into Archive. It is view-only in v1 — you
travel through time and watch, but there is no restore button.
History is a live-session timeline, not a complete audit of every edit ever:
snapshots are captured while the app runs (any change, from Drawer, the MCP
server, Obsidian, or an editor, debounced so one edit is one snapshot), and
changes made while the app is closed collapse into a single snapshot on next
launch. It keeps the last 500 versions, deduplicated by content hash so the
store barely grows. Everything is local, under
~/Library/Application Support/Drawer/history/; delete that folder to clear it.
make app && open Drawer.app
make install copies it to /Applications. make run reinstalls, resets
Drawer's Accessibility grant, and relaunches the installed copy; use it when
testing the right-Command tap or Work Mode, since the ad-hoc signature changes
each build and macOS ties the grant to the old one. Re-grant Accessibility once
after it launches.
macOS 26 or later. Swift 6.2.
swift test