The most hardcore focus app for makers. A Mac menu-bar app that blocks distractions so you can do deep work.
Website · Install · How it works · Development
Ortus lives in your Mac menu bar and blocks your biggest distraction while you do deep work. When focus mode starts (manually or on a schedule), Ortus terminates Slack and keeps it terminated: reopen it and Ortus closes it again. When your session ends, Slack comes back on its own.
There is no "End Focus" button to talk yourself into. Quitting Ortus mid-session is blocked too. The only escape hatch is a hidden emergency end, rate-limited to once per week.
An optional AI chat (powered by your own Claude) lets you check what is happening in Slack without opening it, so you stay heads-down.
Willpower runs out. A locked session doesn't. Ortus holds the line so you can stay in the work.
curl -fsSL https://ortus.up.railway.app/install.sh | bashThis downloads the latest release into /Applications and launches it. Because it
installs via the terminal (not a browser download), macOS does not quarantine the
app, so Gatekeeper does not block it. Requires macOS 14 or later.
Grab the latest Ortus-macOS.zip from the
Releases page, unzip it, and
move Ortus.app to /Applications.
git clone https://github.com/scandolo/Ortus.git
cd Ortus
./build.sh # kills running instances, builds, and creates Ortus.app
open Ortus.appRequires macOS 14+ and the Swift 6 toolchain (Xcode).
To enable the AI Slack assistant, add a Claude API key and connect Slack via OAuth in Settings. Credentials are stored in the macOS Keychain.
- When focus activates, Ortus terminates all Slack processes.
- It watches for app launches and closes Slack again if it tries to start.
- An
NSApplicationDelegateinterceptsCmd+Qand termination requests so you cannot quit your way out. - When focus ends (or the scheduled window passes), monitoring stops and Slack relaunches on its own.
Your Slack token and Claude API key are stored in the macOS Keychain and are only ever sent to Slack and Anthropic respectively. Ortus sends anonymous, aggregate usage events (via PostHog) to help improve the app. There are no accounts.
Ortus is a SwiftUI macOS menu-bar app built with Swift Package Manager. It runs as
a MenuBarExtra with .window style (a popover panel) and no dock icon
(LSUIElement = true).
Ortus/
├── Package.swift # SPM config, macOS 14+, single executable target
├── build.sh # Build script: kills instances, builds, bundles Ortus.app
├── landing/ # The marketing site (ortus.up.railway.app), served by Caddy
└── Ortus/
├── OrtusApp.swift # @main entry, MenuBarExtra scene, quit-blocking AppDelegate
├── Models/ # ChatMessage, FocusSchedule + ScheduleStore, Slack API types
├── Services/
│ ├── FocusManager.swift # Core logic: focus state, Slack kill/monitor, schedules, emergency end
│ ├── ClaudeService.swift# Claude API client with an agentic tool-use loop
│ ├── SlackService.swift # Slack Web API client
│ ├── SlackOAuthService.swift # OAuth flow via a loopback HTTP server
│ ├── KeychainService.swift # macOS Keychain wrapper for secrets
│ └── Analytics.swift # Thin PostHog wrapper (anonymous usage events)
├── Views/
│ ├── OrtusTheme.swift # Design system: sunrise-amber accent, glass materials, tokens
│ ├── ContentView.swift # Tab container (Focus, Schedule, Chat, Settings)
│ ├── FocusView.swift # Timer, start button, grace period (no end button)
│ ├── ScheduleView.swift # Recurring schedules with inline editing
│ ├── ChatView.swift # AI chat with Claude
│ └── SettingsView.swift # API keys, Slack OAuth, preferences, emergency end
└── Tools/
└── SlackTools.swift # Tool definitions for Claude's tool-use
- No End Focus button. An easy escape defeats the purpose. Emergency end lives in Settings and is gated to once per calendar week. Developer mode (tap the version label 7 times) adds a dev-only end button.
- Inline editing in ScheduleView.
.sheet()spawns a newNSWindow, which makes theMenuBarExtrapanel lose key-window status and dismiss. Schedules are edited in place with state variables instead. - Quit blocking via AppDelegate.
applicationShouldTerminatereturns.terminateCancelwhile focus is active, blocking Cmd+Q, Dock quit, and programmatic termination. - Glass material design. Cards and the status ring use
.ultraThinMaterialwith continuous (supercircle) corner radii, adapting to light and dark mode.
PostHog for anonymous usage analytics. Everything else is Apple frameworks only (AppKit, Security, Network, UserNotifications, ServiceManagement).
MIT. Free and open source.