Everything Meowdoro does
Meowdoro is a focus timer that lives around your MacBook’s notch and keeps an eye on Claude Code and Codex while you work. This page lists every feature and how it works, for you, a search engine or an agent checking on your behalf.
- Focus timer
- Agents in the island
- Focus without interruptions
- Agents on other machines
- Statistics
- How it connects
- Privacy
- Performance
- Updates
- Requirements
A focus timer in the notch
- Focus, short break and long break. 25, 5 and 15 minutes, with the long break after 4 rounds. Every length and the number of rounds can be changed; a phase that has already started keeps its length.
- The island is the whole interface. No Dock icon, no menu bar icon and no system notifications: the black island beside the notch is the notification. Click it to open it, right-click it for Settings and Quit.
- A cat beside the notch. It sits at its laptop during focus; on a break you see an orange mug. When a phase ends, the island slides out with a bigger cat and what comes next.
- The time as digits, a ring or a bar, counting down or up. It flashes twice when a minute is left.
- Overtime. After a phase ends, the time keeps counting up (+3:12) until you start the next one. Or the next phase starts on its own, if you turn that on.
- A fresh start after a night away. After 4 hours with nothing running, the timer starts over from the first round.
- Name your focus. Click “Focus” in the island and type what it’s for. The name goes into the journal.
- Auto-pause, if you want it. A focus can pause after 5 minutes without keyboard or mouse, or during a call while the camera or microphone is in use, with the time rewound to when it began. The island says why, with a cat in a headset or asleep on its laptop, and offers Start when you’re back. Both are off by default and need no permissions.
- A sound at the end of a phase: a purr, a beep or nothing, at its own volume.
- Do Not Disturb during focus, through two Shortcuts that Settings adds in two clicks. On macOS only Shortcuts can switch a Focus mode on and off.
- Any Mac, any screen. On a Mac without a notch, or on an external display, the island is a small bar in the middle of the top edge, as tall as the menu bar. It can live on the screen with the notch or on the main display, and hide over full-screen apps.
Agents in the island
- Claude Code and Codex. Claude Code in the terminal or in Claude Desktop, Codex in the terminal or in ChatGPT. Settings → Agents on this Mac shows a tile for each agent it finds, with a green ring once it’s connected; “Connect all…” connects every one.
- Every session and what it’s doing: working, waiting for you, finished or failed, grouped by agent. Each session takes one line: its name, or what the agent needs from you (a question, a permission, an error). Two-line rows are a setting away.
- Questions wait. When a turn ends on a question for you, the session shows as waiting, with the question, until you answer.
- Jump to the session. A click opens it in Claude Desktop or ChatGPT, or brings forward the app where the agent runs.
- Read sessions dim. A finished session you’ve seen, in the island or in Claude Desktop or ChatGPT, dims, stops counting on the badge and leaves the list 15 minutes later.
- A context ring per session shows how full its context window is. Past a threshold (50% by default) it turns orange, and the break card suggests
/compact. - Codex’s 5-hour and weekly limits as one small pie for the fullest window. It turns orange from 80%, or when the window would run out before it resets, with the time it would run out.
- Codex accounts. This Mac and the machines signed in to the same ChatGPT account share one group and its limits; another account gets its own group, labelled with its masked email.
- Design tools. Sessions that work in Figma, Canva and other design tools over MCP say so, as “→ Figma”, and a right-click opens the Figma file.
- Sessions that send nothing (open since before the plugin was installed) show up in grey with what to do: type
/reload-pluginsin them, or restart them. - Through
/compact. A session stays in the island while Claude Code compacts it. - Too old to connect? A Claude Code older than 2.1.89 skips plugin hooks; its tile and the island say “Update needed”, and sessions started after the update show up by themselves.
Focus without interruptions
- Working with agents, or updates on hold. One switch in the opened island. With agents on, a number beside the cat counts sessions that need you, and anything new that needs you slides out as one line for 4 seconds, without a sound. With updates on hold, nothing shows until you press Peek.
- Breaks without agents. From the moment you start a break until you start the next focus, the island shows the cat and the time only: no number, no list, no pop-ups, even when agents are waiting.
- One summary when you’re back. The “Break’s over” card says what happened while you rested, for example “While you rested: 1 waiting · 1 finished”.
- The end of a phase comes first. When an agent event and the end of a phase arrive together, the phase wins.
- A good moment for
/compact. If a session’s context is filling up, the break card names it: the agent can compact while you rest.
Agents on other machines
- VMs, Linux servers and other Macs. A small helper sends the status of Claude Code and Codex there to your Mac. Settings → Remote agents gives you a one-line command to run on that machine.
- Encrypted end to end. AES-256-GCM, with a key made on your Mac and carried in the setup line. The relay at relay.meowdoro.com forwards ciphertext only and keeps the last 300 events of a channel for 30 minutes, in memory, with nothing on disk. You can run your own relay instead.
- Status, never content. Agent, session, event, the project’s folder name, the session’s title, a tool’s name when it asks for permission, context and limit numbers, the machine’s name and a few more fields, all listed in the privacy policy. Never prompts, tool inputs or outputs, file contents, paths or the agent’s replies.
- Code you can read. The helper is Python 3.8+ with the standard library only, published in lc66/meowdoro-public. The install script checks its SHA-256 before running it.
- Several Macs can watch one machine, up to 8, each with its own key. Settings shows each machine’s agents: connected, waiting for Codex hooks to be trusted, too old, or not there.
Statistics
- The day, the week or the month: focus time, finished sessions, rest, and the work-to-rest ratio, with a chart by hour or by day.
- Projects. A focus with agents on screen counts for every project worked on during it: its agents did something, or you wrote to them or opened their session.
- Journal. Every focus and break of the day, with its name and projects. Rename a focus, or delete a record entered by mistake.
- Care. Breaks without agents (the breaks you took to the end), how long agents waited for you while you rested or kept updates on hold, and calm focus: rounds with updates on hold, finished without peeking.
How it connects to your agents
- Through each agent’s own plugin system. Connect shows you the commands, then runs them:
claude plugin marketplace addandclaude plugin install meowdoro@meowdoro --scope userfor Claude Code,codex plugin marketplace addandcodex plugin add meowdoro@meowdorofor Codex. Disconnect runs the matching remove commands. You can copy them and run them yourself. - Never edits your agents’ settings. The plugin is installed, updated and removed only with Claude Code’s and Codex’s own commands, and the agent records it itself. Meowdoro only reads their files, and doesn’t take over Claude Code’s status line.
- Hooks that never block. Each hook passes its event to the app through a Unix socket only your user can open, prints nothing, always exits successfully and gives up after 3 seconds. With Meowdoro closed it finishes in about 10 ms. Claude Code counts the plugin as 0 tokens of context.
- It listens and never answers. No hook replies to an agent or waits for a decision, so nothing gets approved and no agent gets slowed down.
- Codex asks you first. Codex runs plugin hooks only after you trust them in
/hooksor ChatGPT → Settings → Hooks. Until then Meowdoro tells you where to do it. - Context from token counts. The ring comes from the token counters at the end of a session’s transcript, read off the main thread and at most every 20 seconds while an agent works. Meowdoro doesn’t read or keep the conversation, and it doesn’t open your Keychain for Claude’s limits.
- Updates go through the agent too. When the plugin changes, Meowdoro updates it with the agent’s own update command.
Privacy
- No account, and no analytics in the app. Settings, statistics, the journal and the session list stay on your Mac.
- Two connections at most. A daily check for updates on GitHub, and, only if you turn on agents on other machines, the encrypted relay.
- Auto-pause asks for nothing. It reads how long ago you last typed or moved the mouse, and whether a camera or microphone is in use, from public macOS APIs: no Input Monitoring, Accessibility, Camera or Microphone access.
- The full text is in the privacy policy.
Performance
- A native Mac app written in Swift and SwiftUI.
- Measured in a macOS virtual machine on Apple silicon with Meowdoro 0.1.9: a running focus used about 0.02% of CPU and 60–100 MB of memory. Over an hour under load, with an agent event every 5 seconds, memory didn’t grow and settled at 47 MB.
- Wakes once a second, when the digits change. Transcripts are read from the end: a few milliseconds on a 64 MB file.
- The helper on other machines idles at about 0.03% of CPU and 17 MB.
Updates
- Meowdoro updates itself. Once a day it looks for a newer version. The island says when there is one, and Install shows what’s new, installs it and restarts.
- Signed updates only. Meowdoro installs only updates signed with its own key (Sparkle with EdDSA signatures).
- Your call. Settings → Check for updates automatically turns the daily look off; Check Now, or Check for Updates in the island’s right-click menu, looks right away.
- The helper on other machines doesn’t update itself. Settings and the island say when a newer one is out; running its line again updates it.
- Every change is in the changelog.
Requirements
- macOS 14 Sonoma or later, on Apple silicon or Intel.
- For agents: Claude Code 2.1.89 or newer for the plugin’s hooks, and Codex with plugin support.
- For agents on other machines:
python33.8 or newer andcurlon that machine. - Interface language: English.
- Price: free before December 2026; then a one-time purchase of $20 for one Mac.
Download for Mac
$20Free before December 2026macOS 14 or later · Apple silicon and Intel