A macOS menu bar app that does two things:
- Keeps your Mac awake while long-running jobs (builds, downloads, agents) finish — without changing system settings.
- Tracks coding agents (Claude Code, Cursor, VS Code Copilot, Copilot CLI, Windsurf, Codex CLI) and notifies you the moment they finish, fail, or need your attention — on your Mac and on your iPhone via the free DoomCoder Companion iOS app.
No accounts, no servers, no telemetry. Notifications travel through your own private iCloud container.
New to DoomCoder? Every control in the app has a hover tooltip (the ⓘ icon) explaining what it does. See docs/features.md for the full reference.
| Mode | What it does |
|---|---|
| Screen On | Display stays fully lit. Mac never sleeps. Good for glancing at progress. |
| Screen Off | Display sleeps after a short delay; Mac CPU stays awake. Saves power and reduces screen burn. |
Toggle from the menu bar, or globally with ⌥ Space.
Auto-disable the sleep blocker after 1 / 2 / 4 / 8 hours (or leave it running indefinitely). Tap a duration tile in the panel to set it — the elapsed time is shown live in the panel header.
When using Screen Off mode, the display wakes when you move the mouse. DoomCoder will put it back to sleep automatically after a configurable idle interval (default: 5 minutes). Adjust in Configure → Settings → Screen Off.
DoomCoder holds an IOPMAssertion — the same kernel-level flag used by Amphetamine, Lungo, and caffeinate.
- ✅ Zero CPU / < 10 MB RAM — one flag in the kernel, no polling
- ✅ Auto-released on crash, quit, or disable
- ✅ No system settings modified — nothing to clean up
- ✅ Session timer — auto-disable after 1 / 2 / 4 / 8 hours
- ✅ Launch at Login (optional)
- ✅ Sparkle auto-updates
- ✅ Global hotkey (⌥ Space, rebindable)
| Agent | Notification events | Config location |
|---|---|---|
| Claude Code | Completed, failed, waiting approval, session start, tool calls | ~/.claude/settings.json |
| Cursor | Completed, failed, session start | ~/.cursor/hooks.json |
| VS Code Copilot | Completed, failed, waiting input, session start | ~/.copilot/vscode-hooks/doomcoder.json |
| Copilot CLI | Completed, failed, waiting approval, session start, tool calls | ~/.copilot/hooks/doomcoder.json |
| Windsurf | Completed, failed, waiting input, session start | ~/.codeium/windsurf/hooks.json |
| Codex CLI | Completed, failed, session start, tool calls | ~/.codex/hooks.json |
VS Code hooks support multiple variants simultaneously: VS Code Stable, VS Code Insiders, VSCodium, Cursor, and Windsurf — choose which settings.json files to patch in Configure → VS Code.
DoomCoder installs a lightweight dc-hook binary into each agent's hook configuration. When an agent fires a hook event, dc-hook writes a JSON envelope to a Unix socket that DoomCoder is listening on. The binary is stored in ~/Library/Application Support/DoomCoder/dc-hook so it survives app relocations and Xcode rebuilds.
- Open the panel (click the menu bar icon or press ⌥ Space).
- Click Configure in the Agent Tracking card.
- Select an agent in the sidebar.
- Check prerequisites, then click Install.
- The green health dot in the sidebar confirms events are flowing.
DoomCoder backs up your config before writing and can Repair hooks if they drift out of sync.
Use Track Agents (accessible from the main panel) to:
- Enable or disable notifications per agent without uninstalling hooks.
- Pause all notifications temporarily (the Pause toggle resets when DoomCoder quits — it's in-memory only).
Events are still recorded in the local log even when an agent is paused or disabled.
Standard macOS notification banners. Grant permission once; they work system-wide.
Requires the free DoomCoder Companion iOS app. Notifications mirror to your phone in 1–5 seconds via your private iCloud container — no third-party server, no tokens, no QR codes. Sign in to the same iCloud account on both devices.
Choose exactly which events trigger a notification under Configure → Notification Channels → Notify me when…:
| Event | Default |
|---|---|
| Session completed | ✅ On |
| Errors | ✅ On |
| Permission requests | ✅ On |
| Agent responses | Off |
| Session started | Off |
| Sub-agent activity | Off |
| Tool usage | Off |
Each agent can override the global channel settings — for example, send Claude Code completions to your iPhone but skip VS Code Copilot. Enable Use custom channels in the agent's detail pane.
DoomCoder Companion (iOS 26+) mirrors every Mac notification to your iPhone in 1–5 seconds. It shows the same agent list, per-agent status, and a 7-day notification log. Install from the App Store and sign into the same iCloud account as your Mac — that's the entire setup.
| Setting | Default | Where |
|---|---|---|
| Launch at Login | Off | Configure → Settings → General |
| Global hotkey | ⌥ Space | Configure → Settings → General |
| Screen Off re-arm interval | 5 min | Configure → Settings → Screen Off |
| Auto-revert completed sessions | 30 s | Configure → Settings → Session Lifecycle |
| Redact prompt text in local history | On | Configure → Settings → Notifications & Privacy |
Full details: docs/features.md
- Live Events — real-time event stream per agent in the Configure window.
- Logs view — browsable, filterable history of all hook events and notifications. Export to JSON or CSV. Accessible in Configure → Logs.
- Raw log files — stored in
~/Library/Logs/DoomCoder/, retained for 7 days. Click Reveal Logs in Configure → Settings → Diagnostics. - Connection Doctor — runs a synthetic test event end-to-end to verify the hook pipeline works.
Download the latest .zip from Releases, unzip, drag DoomCoder.app to /Applications, and double-click to open.
DoomCoder is signed with an Apple Developer ID and notarized by Apple — no Gatekeeper prompts, no extra steps.
First launch: macOS may ask for Accessibility permission — only needed for the ⌥ Space global shortcut. You can skip it if you don't need the hotkey.
git clone https://github.com/katipally/Doom-Coder.git
cd Doom-Coder
open DoomCoder.xcodeprojRequires Xcode 26, macOS 26, Swift 6. Sparkle is pulled via SPM.
MIT. See LICENSE.
