A plain-English activity monitor for macOS built with native SwiftUI.
Quick Start · Installation · Usage · Architecture · Development · Resources
Tip
From the repo root, run cd Lucid && make run to build Lucid.app and launch it locally on macOS.
Lucid turns cryptic process names like mds_stores, configd, and distnoted into plain-English descriptions so you can quickly understand what is running on your Mac, how much CPU or memory it is using, and where it likely came from.
git clone https://github.com/tanRdev/lucid-task-manager.git
cd lucid-task-manager/Lucid
make runThis builds Lucid.app from source and opens it locally.
- macOS 14 or newer
- Swift 6.0+ toolchain (
swift-tools-version: 6.0) - Full Xcode (not Command Line Tools alone) to run
make test/swift test— XCTest ships with Xcode
git clone https://github.com/tanRdev/lucid-task-manager.git
cd lucid-task-manager/Lucid
make appThe generated app bundle is placed in the Swift build output directory and ad-hoc signed (codesign --verify --deep --strict must pass).
cd Lucid
make runcd Lucid
make installOr open Lucid/Package.swift in Xcode and run the app there.
cd Lucid
make dmg VERSION=1.1.0Set CODESIGN_IDENTITY to a Developer ID Application identity for distribution signing. Optionally set NOTARYTOOL_PROFILE to notarize with notarytool.
Note
Lucid disables App Sandbox so it can inspect running processes. Development builds work locally; distributing the app outside development requires Developer ID signing and notarization.
If Gatekeeper blocks an unsigned or ad-hoc build:
- Right-click Lucid.app in Finder → Open → Open again, or
- Remove quarantine in Terminal (developer machines only):
xattr -d com.apple.quarantine /Applications/Lucid.appPrefer Developer ID–signed and notarized builds for end users.
- Launch Lucid.
- Browse live processes; sort by name, origin, description, CPU, memory, PID, or ports.
- Search from the toolbar (
⌘F). - Filter by origin or listening port from the sidebar.
- Inspect a process in the inspector for path, ports, and actions.
- Terminate only unprotected processes (system-origin processes are blocked).
| Origin | Meaning |
|---|---|
| System | Likely macOS / Apple system software. Protected from termination by default. |
| User | Likely user-installed or user-owned apps and tools. |
| Unknown | Classification evidence was weak — treat carefully. |
Origin is a heuristic ownership signal, not a guarantee that quitting a process is safe for your work.
| Feature | Description |
|---|---|
| Plain-English process names | Maps hundreds of common macOS processes to human-readable descriptions |
| Real-time monitoring | Tracks per-process CPU (Activity Monitor–style) and host memory used |
| Port visibility | Shows listening ports in the sidebar, table, and inspector |
| Safer process termination | Confirms destructive actions; blocks system-origin processes; verifies PID + start time |
| Native macOS interface | NavigationSplitView, toolbar search, and process inspector |
| Zero third-party dependencies | Uses Swift Package Manager with Apple frameworks only |
Lucid/
├── LucidApp.swift # App entry point and lifecycle
├── ContentView.swift # Navigation split, table, inspector
├── Models/
│ ├── LucidProcess.swift # Process model + ProcessIdentity
│ ├── ProcessOrigin.swift # Origin classification (not termination policy alone)
│ └── SystemStats.swift # Host CPU/memory summary
├── Services/
│ ├── ProcessMonitor.swift # @MainActor UI state + ProcessSampler actor
│ ├── DarwinProcess.swift # Darwin process API interop
│ ├── ProcessDictionary.swift # Human-readable process name mapping
│ └── PortScanner.swift # Actor-isolated `lsof` port detection
├── Views/
│ ├── Content/ # Table, settings, inspector chrome
│ ├── Shared/ # Origin indicators
│ └── Sidebar/ # Filters, ports, status
└── Theme/
└── LucidTheme.swift # Colors and spacing
proc_listallpids()enumerates running processes.proc_pidinfo()collects CPU time, resident memory, start time, and uid.proc_name()/proc_pidpath()identify executables.- Host
vm_statistics64provides Memory Used (active + wired + compressed). NSWorkspace.shared.runningApplicationsfills in GUI app names.lsof -iTCP -sTCP:LISTEN -n -Pmaps listening ports to PIDs.
ProcessMonitor publishes UI state on the main actor. Sampling runs in a dedicated ProcessSampler actor and uses real monotonic intervals between samples for CPU deltas.
Warning
Some root-owned processes expose limited metrics without elevated privileges, so they may appear with partial CPU or memory information.
cd Lucid
# Requires full Xcode selected via xcode-select
make test
make app
make runCI (.github/workflows/ci.yml) on macos-14 runs:
swift testswift build -Xswiftc -warn-concurrency --target Lucidswift build --configuration release --target Lucid./build-app.sh debugplus strictcodesignverification
Contributions are welcome. Lucid is open source under the MIT License.
- Report bugs — Open an issue with steps to reproduce
- Suggest features — Describe the problem you're solving before proposing solutions
- Improve process mappings — Add or refine human-readable descriptions in
ProcessDictionary.swift - Submit pull requests — Fork the repo, branch off
main, and open a PR with a clear description
git clone https://github.com/tanRdev/lucid-task-manager.git
cd lucid-task-manager/Lucid
# Install Xcode, then:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
make test- Follow existing Swift conventions and formatting
- Add tests for new functionality
- Keep commits focused and descriptive
- Run
make testbefore opening a PR (requires Xcode)
Lucid is licensed under the MIT License. See the LICENSE file for details.