agent.run()startedsystem.idledetectedconnectionlostIdle sleep can interrupt the task or its network connection.
Keep builds, downloads, and local agents running during idle time. Choose a timer and a battery cutoff from the menu bar.
brew tap rekurt/maccoffee
brew install --cask maccoffee
Builds, downloads, and local agents may pause or lose connections when a laptop sleeps. Start a wake session before leaving a task running.
agent.run()startedsystem.idledetectedconnectionlostIdle sleep can interrupt the task or its network connection.
agent.run()startedwake.sessionactiveagent.resultcompleteThe wake session prevents idle sleep until its timer or battery cutoff ends it.
Control wake sessions from the menu bar. Settings apply to the current session.
Keep the Mac awake while allowing the display to sleep, or keep both system and display awake. Off releases every assertion.
Choose 30 minutes, 1, 2, 4, or 8 hours — or run indefinitely. Changing duration updates the active session immediately.
Choose a cutoff from 10% to 30%, with 15% as the default. A session stops when the battery reaches the threshold.
Native Launch at Login through SMAppService, with no privileged helper and no persistent pmset changes.
Switch instantly without interrupting an active wake session: EN, RU, DE, FR, ZH, JA, KO, and ES.
SwiftUI controls, local notifications, VoiceOver labels, and language switching. The Direct build also checks for updates.
The Direct build includes an optional local MCP server for Codex, Claude Desktop, and other stdio clients. Enable it in Settings and approve each new client.
Launch Mac Coffee once so the local app endpoint is available.
Enable MCP, then choose Set up an MCP client.
Select Codex, Claude Desktop, or Generic stdio.
The wizard preserves unrelated config and creates a timestamped backup.
Restart the client and approve its identity inside Mac Coffee.
# Mac Coffee MCP
[mcp_servers.mac_coffee]
command = "/Applications/Mac Coffee.app/Contents/Helpers/MacCoffeeMCP"
{
"tool": "maccoffee_set_session",
"arguments": {
"mode": "system",
"duration": "hours2",
"requestId": "agent-run-2026-09-01"
}
}
{ "active": true, "mode": "system", "remaining": 7200 }Status subscriptions, idempotent mutation IDs, and bounded in-memory activity give agents useful control without a remote service.
maccoffee_get_status
maccoffee_set_session
maccoffee_stop_session
maccoffee_set_battery_threshold
maccoffee_set_launch_at_login
maccoffee_set_language
maccoffee://statusmaccoffee://capabilitiesmaccoffee://activityManual sleep, lid closure, and macOS safety mechanisms still apply during a wake session.
IOKit releases the wake request when a session ends or the process terminates.
Disabled by default, local to the current macOS user, and unavailable in the App Store build.
New clients require approval. Credentials are bound to code identity and stored in Keychain.
No account, analytics, activity upload, or server is required to keep your Mac awake.
The Direct build routes stdio requests through a local XPC broker. The connection is limited to the current macOS user and needs no privileged helper.
Codex / ClaudeMacCoffeeMCPcurrent user onlyAppModelpower assertionInstall with Homebrew or download the signed and notarized DMG.
Requires macOS 13 Ventura or later · MIT licensed