Skip to content
CAI
Software that uses CAICheck a score

jacklandrin/OnlySwitch

51.1

Adequate · 30 September 2026

45.9k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

OnlySwitch is a macOS utility application that provides a centralized interface for managing system settings, controlling media playback, and monitoring hardware performance. It extends its functionality through a modular architecture that supports AI-driven AppleScript automation, a customizable desktop pet, and a companion iOS app for remote control via a secure local network protocol. The system also facilitates user customization through a gallery of community-contributed 'Evolutions' and persistent configuration management.

How it got here

2021–2023 — Initial scaffolding and feature expansion

23 changes.

This period established the OnlySwitch project's core architecture and modular switch system, introducing extensive macOS control capabilities such as display management, Bluetooth handling, and audio playback. It also integrated remote access support for iOS devices and implemented robust data persistence using Core Data to manage user preferences and complex switch configurations.

2024–2025 — OnlySwitch feature expansion and UI overhaul

33 changes.

This period focused on significantly expanding the OnlySwitch application with new modules for AI-driven automation, home screen widgets, and a comprehensive control dashboard. The work involved restructuring the codebase with centralized configuration and secure key storage, while introducing extensive new settings pages for system controls, evolution commands, and keyboard management. The interface was modernized with redesigned navigation, drag-and-drop capabilities, and updated localization standards to support these new features.

2026 — remote control and system monitoring expansion

31 changes.

This period focused on launching the OnlySwitch Remote iOS app and its underlying secure transport protocol, enabling users to control Macs and view system metrics from mobile devices. Concurrently, the macOS application expanded its native capabilities with new modules for desktop pets, stickers, sound mixing, and privileged power management, all supported by comprehensive test coverage.

Features

About page now displays live download counts and version history

The About settings page has been updated to fetch and display real-time data from GitHub. Users can now see the total number of app downloads and a scrollable list of version history notes, which are loaded asynchronously when the view appears. The page also includes links to the developer's website, GitHub repository, sponsorship page, and community channels (Telegram and Discord).

OnlySwitch/Features/Settings/About · high confidence

Add Apple Music and Spotify playback support

Users can now control playback for Apple Music and Spotify through the app. This change introduces a common \MusicPlayer\ protocol and specific implementations (\AppleMusicPlayer\ and \SpotifyPlayer\) that use Apple's ScriptingBridge to monitor playback state changes and send play/pause commands to the respective applications.

OnlySwitch/Player/MusicAppPlayer · high confidence

Add Dim Screen settings with external monitor sync support

The Dim Screen settings page now includes a new section for external displays, allowing users to enable a toggle that syncs external monitor brightness to the built-in display via DDC/CI. The existing brightness dimming controls (slider and timer) remain available for internal display adjustments.

OnlySwitch/Features/Settings/DimScreen · high confidence

Add Evolution and Built-In switch widgets

Users can now add two new widget types to their home screen: 'Only Widget - BuiltIn' and 'Only Widget - Evolution'. The Built-In widget allows selection from a predefined list of system switches (excluding specific exceptions like AirPods and Spotify) to control them directly. The Evolution widget displays the status of Evolution switches, fetching available options via App Intents and handling display errors gracefully. Both widgets support small-sized layouts and are configured through the widget setup interface.

OnlyWidget/Widgets · high confidence

Add EvolutionBarView and EvolutionBarVM for switchable evolution items

This change introduces a new SwiftUI view and its associated view model to display and control 'evolution items' within the OnlySwitch menu. The EvolutionBarView renders a row containing an icon, the item's name, a processing indicator, and either a toggle switch or a 'Run' button depending on the item's control type. The EvolutionBarVM manages the state, including a new 'hideMenuAfterRunning' setting that automatically hides the popover after a button-type item is executed, and handles command execution via the evolution command service.

OnlySwitch/Features/SwitchItem/EvolutionItems · high confidence

Add Shortcuts bar item with custom icons and post-run menu hiding

The ShortcutsItem feature now includes a dedicated bar view that displays a custom icon (falling back to a generic shortcuts icon) alongside the shortcut name and a Run button. The item supports a processing state, shown via a progress indicator, and can automatically hide the menu after the shortcut runs if the 'hideMenuAfterRunning' setting is enabled.

OnlySwitch/Features/SwitchItem/ShortcutsItem · high confidence

Add Sound Mixer to control per-app and system volume

A new Sound Mixer feature is available in the switch list popover, allowing users to adjust the system output volume and the volume of individual running applications. For scriptable media apps like Spotify and Music, volume is controlled via AppleScript. For other apps (including browsers), the mixer uses Core Audio process taps (macOS 14.4+) to create private aggregate devices that scale audio samples in real-time. The interface displays a system slider, a list of controllable apps with individual sliders and mute buttons, and the current output device.

OnlySwitch/Features/SoundMixer · high confidence

Add authenticator module with import, rename, and panel views

Users can now manage TOTP authenticator accounts directly within the app. The new Authenticator module includes a settings view for importing accounts via QR scan results (supporting both standard \otpauth://\ and Google Authenticator \otpauth-migration://\ formats), renaming accounts with custom names, and deleting individual or all accounts. A panel view provides a quick-access interface to view and copy current TOTP codes, with support for SHA1, SHA256, and SHA512 algorithms. The module also includes a separate PureColorView feature for screen testing with color cycling and keyboard locking capabilities.

Modules/Sources/Authenticator · high confidence

Add data models for Mac pairing and dashboard layouts

New model structs have been introduced to support Mac device management and UI configuration. PairedMac defines the structure for storing paired Mac details, including identifiers, display names, and connection status. MacDashboardLayout and MacSystemMonitorLayout provide the data structures for persisting user preferences regarding control selection, ordering, and visible system metrics on the Mac dashboard.

OnlySwitchRemote/Models · high confidence

Add header wrappers for system control APIs

This change introduces several new header files in the OnlySwitch/Header directory to support new and existing system-level controls. It adds CBBlueLightClient.h and CBTrueToneClient.h to interface with private CoreBrightness APIs for managing blue light reduction and True Tone display settings. A new MenuBarClientCoreBridge.h is added to handle menu bar item visibility. Additionally, OnlySwitch-Bridging-Header.h is created to expose Objective-C and C functions for Bluetooth power state, display brightness (including DDC/CI support), and CoreGraphics services, while ProcessUsage.h provides a Swift-friendly wrapper for libproc's process resource usage buffer.

OnlySwitch/Header · high confidence

Add in-app update check and download UI

Users can now check for new versions of OnlySwitch directly within the app. A new Update view displays the latest available version and provides a 'Download' button to fetch the DMG installer, which automatically opens the disk image and terminates the application after a short delay.

OnlySwitch/Features/Update · high confidence

Add privileged access recovery UI

A new settings screen allows users to manage the privileged helper status directly. The interface displays the current state (enabled, not installed, requires approval, disabled, or unavailable) and provides specific actions such as installing, repairing, or removing the privileged access, or opening System Settings for approval.

OnlySwitch/Features/Settings/PrivilegedAccess · high confidence

Add remote System Monitor view and configuration to OnlySwitch Remote

This change introduces a new System Monitor feature in the OnlySwitch Remote app, allowing users to view real-time system metrics (CPU, GPU, memory, disk, and network) from a paired Mac. The implementation includes a configurable layout where users can choose which widgets are visible and their order, a waterfall grid layout for iPad and list layout for iPhone, and detailed metric cards with gauges, usage charts, and hardware details. The feature handles connection states, streaming data, and error messages for unavailable or unsupported Macs.

OnlySwitchRemote/Features/SystemMonitor · high confidence

Add signed privileged helper for system power management

A new privileged helper bundle (com.jacklandrin.OnlySwitch.PrivilegedHelper) is introduced to allow the app to execute privileged system commands. The helper exposes an XPC service that accepts requests to modify power settings via /usr/bin/pmset, enforcing strict code-signing requirements to ensure only the main OnlySwitch app can invoke these operations.

OnlySwitchPrivilegedHelper · high confidence

Added Xcode schemes for OnlySwitch, OnlySwitchRemote, and OnlyWidgetExtension

The project now includes dedicated Xcode schemes for the main OnlySwitch app, the new OnlySwitchRemote iOS app, and the OnlyWidgetExtension. These schemes configure build, test, and launch actions for their respective targets, with the main app and remote app schemes including a pre-action script to automatically increment the build version during archiving. The widget extension scheme is configured to launch alongside the main app using the WidgetKit simulator.

OnlySwitch.xcodeproj/xcshareddata · high confidence

Added audio spectrum visualization components

Introduced a new audio spectrum analysis and display module within the CommonPlayer. This includes a RealtimeAnalyzer class that processes AVAudioPCMBuffer data using FFT to generate frequency band amplitudes, and a SpectrumView NSView that renders these amplitudes as animated gradient bars for left and right audio channels.

OnlySwitch/Player/CommonPlayer/AudioSpectrum · high confidence

Added keyboard brightness control utility

The application now includes a new utility module in OnlySwitch/Utilities/KeyboardBrightness that enables programmatic control of keyboard backlighting. This addition introduces a singleton KeyboardManager and a BrightnessControl class that interface with the private CoreBrightness framework to allow users to adjust keyboard brightness levels, toggle auto-brightness, manage idle dimming settings, and trigger light flash effects.

OnlySwitch/Utilities/KeyboardBrightness · high confidence

Adds SwiftUI view modifiers for cursor, focus, visibility, and window sizing

This change introduces a new set of SwiftUI view and scene modifiers to the application's modifier library. Users benefit from improved interaction handling through a new cursor modifier that changes the mouse pointer on hover, and a focus modifier that allows views to respond to the Return key for specific actions. Additionally, a visibility modifier provides more control over hiding or removing views, a generic view modifier simplifies conditional view transformations, and a window size modifier ensures content-size resizability on macOS 13.3 and later.

OnlySwitch/Modifier · high confidence

Initial project structure and feature scaffolding

The OnlySwitch project is initialized with a comprehensive set of source files and build configurations, establishing the core architecture for the application. This includes the main app entry point, settings management, and a modular switch system covering macOS controls such as Dark Mode, True Tone, Night Shift, Bluetooth, and Spotify integration. The project also scaffolds features for the Evolution Gallery, Pomodoro Timer, and OnlyControl remote access, alongside dependencies like ComposableArchitecture (TCA), Sparkle, and Alamofire.

OnlySwitch.xcodeproj · high confidence

A new Evolution Gallery has been added to the Settings, allowing users to browse a list of available evolutions, view their details (name, icon, author, description), and install them directly from the app. The gallery view fetches the list of available items, checks their installation status, and provides a refresh button to reload the catalog. Each item in the gallery can be installed via a dedicated button, which triggers the installation process and updates the UI to reflect the installed state.

OnlySwitch/Features/Settings/Evolution/EvolutionGallery · high confidence

Added the EvolutionGalleryService, which provides the capability to fetch a list of evolution gallery items (from a remote JSON source or a local fallback file), check if a specific item is installed, and add new items to the gallery. This service is implemented using the Dependencies framework to support both live and test environments.

OnlySwitch/Features/Settings/Evolution/EvolutionGallery/EvolutionGalleryService · high confidence

Introduce Mac settings for iOS remote access

Added a new Remote Access settings interface for macOS that allows users to enable remote control from iOS devices, configure a display name, and manage pairing codes. The feature includes a UI for starting and canceling pairing sessions, copying pairing codes with visual feedback, and revoking access for paired iPhone or iPad devices.

OnlySwitch/Features/RemoteAccess/Settings · high confidence

Introduce Only Control dashboard with draggable item reordering

The Only Control module now provides a dashboard view where users can manage control items in a grid layout. This update adds the ability to drag and drop items to reorder them, with the new position persisted via a weight-based state model. The dashboard also supports presenting detailed views for specific items, such as an Authenticator popover, and handles tap interactions to toggle switch states or trigger actions.

Modules/Sources/OnlyControl · high confidence

Introduce Only Control dashboard with tabbed sections for switches, authenticator, sound mixer, and system monitor

Users now have access to a new Only Control dashboard that consolidates switch management, 2FA authenticator details, sound mixer controls, and system monitoring into a single window. The interface features a custom tab bar allowing users to switch between these sections, with the default view displaying active switches and a large clock. Additional sections provide access to Authenticator codes, Sound Mixer settings, and real-time system resource monitoring via the SystemMonitor component. The dashboard also displays AirPods battery levels when connected and supports dragging interactions across the window.

OnlySwitch/Features/OnlyControl · high confidence

Introduce OnlyAgent AI Commander with multi-step AppleScript automation

Users can now use the new OnlyAgent module to generate and execute AppleScript commands via AI. The feature supports multiple model providers including Ollama, OpenAI, Codex, Gemini, and Claude, with a unified service layer for managing API keys and model selection. It introduces a multi-step execution mode for complex tasks, allowing the AI to plan, execute, and retry steps automatically. The UI includes a prompt dialogue with streaming responses, a thinking indicator, and an AppleScript editor for review and manual execution.

Modules/Sources/OnlyAgent · high confidence

Introduce OnlyRemote promotion and iOS remote access support

The app now includes a promotional campaign for OnlyRemote, displaying a window that encourages users to download the companion iOS app for controlling the Mac from iPhone or iPad. This feature is supported by new local network permissions (Bonjour and NSLocalNetworkUsageDescription) in the Info.plist to enable device discovery, and the app now handles specific URL schemes (onlyswitch://) to trigger switches remotely. The campaign logic tracks user acknowledgment to avoid repeated prompts and provides direct links to the App Store and the iOS Remote settings within the app.

OnlySwitch · high confidence

Introduce OnlySwitch Remote iOS app with system monitor and demo mode

The OnlySwitch Remote iOS app is now available, allowing users to pair with and control Macs remotely. The app features a dashboard for controls and a new system monitor tab to view Mac performance metrics. It includes a first-run pairing flow to connect Macs and a built-in demo mode that lets users explore the interface with sample data without needing a paired Mac.

OnlySwitchRemote/App · high confidence

Introduce PreferencesObserver singleton for observing app preferences

A new \PreferencesObserver\ class has been added to the ViewModel layer, providing a shared, main-actor-isolated observable object that exposes the current \Preferences\ instance via a \@Published\ property. This allows UI components to reactively observe changes to the application's preferences through standard Combine patterns.

OnlySwitch/ViewModel · high confidence

Introduce System Monitor feature with dashboard, menu bar indicators, and settings

Users can now monitor real-time system metrics (CPU, GPU, memory, disk, and network) via a new System Monitor section in the OnlySwitch popover panel, which displays history charts and detailed hardware information. The feature also adds configurable menu bar status items that keep sampling active even when the popover is closed, and a dedicated settings view to toggle which metrics appear in the dashboard and menu bar.

OnlySwitch/Features/SystemMonitor · high confidence

Introduce System Monitor module with live metrics sampling

Added a new System Monitor module that provides real-time system metrics to users. This includes a client for streaming snapshots, formatters for displaying data rates and percentages, and a reducer that manages the sampling lifecycle. The feature automatically starts sampling when the monitor is visible, handles stream failures by recording errors, and restarts the sampling stream after a brief delay if it ends unexpectedly, ensuring continuous monitoring while the user is viewing the metrics.

Modules/Sources/SystemMonitor · high confidence

Introduce animated Desktop Pet with Pomodoro timer support

This change adds a new Desktop Pet module that displays an animated, draggable character on the desktop. The pet features idle animations (swaying, blinking) and visual feedback when dragged. It includes a Pomodoro timer integration, displaying a badge with the current phase (focus or break) and remaining time, which dynamically adjusts the pet's canvas size and halo color. The implementation includes a borderless floating panel, drag-and-drop interaction logic, and a context menu to close the pet.

Modules/Sources/DesktopPet · high confidence

Introduce background noise player with track management and caching

Added a new background noise feature that allows users to play ambient sounds such as White Noise, Pink Noise, and environmental tracks like Forest Walking or Soft Rain. The implementation includes a track manager that supports switching between tracks, persisting the selected track via preferences, and downloading audio files on demand from GitHub. Users can also clear the downloaded audio cache to manage storage space.

OnlySwitch/Player/BackNoisesPlayerItem · high confidence

Introduce curated privileged evolution operations

The Evolution settings feature now supports a curated allowlist of privileged operations, such as disabling clamshell sleep, which can be executed via a privileged helper without requiring the user to write custom shell or AppleScript commands. This change introduces a new \EvolutionCommandService\ that validates requested operations against a compiled catalogue before execution, ensuring that only trusted, pre-defined actions gain elevated privileges. The diff also adds the full editor UI and dependency wiring for managing these evolutions, including a pre-execution command field for shell scripts.

OnlySwitch/Features/Settings/Evolution · high confidence

Introduce iOS remote app with local network discovery and tabbed navigation

The OnlySwitch Remote iOS app is now available, allowing users to find and connect to their OnlySwitch Macs on the local network via Bonjour. The app features a tabbed interface with 'Controls' and 'System Monitor' pages, and includes localized strings for multiple languages to support international users.

OnlySwitchRemote · high confidence

Introduce modular AudioStreamer with download, parsing, and reading components

The AudioStreamer module has been restructured into distinct, reusable components to handle audio streaming from remote URLs. This change introduces a \Downloader\ for fetching binary data with progress and state tracking, a \Parser\ using Audio File Stream Services to convert incoming binary data into audio packets, and a \Reader\ that converts those packets into LPCM format for playback via AVAudioEngine. These components are wired together in the \Streamer\ class, which manages the AVAudioEngine graph, handles playback state, and exposes a unified interface for streaming audio.

OnlySwitch/Player/CommonPlayer/AudioStreamer · high confidence

Introduce modular Sticker feature with Composable Architecture

The StickerView module has been refactored into a modular implementation using the Composable Architecture (TCA). This change introduces a new StickerReducer to manage state (content, color, preview/collapse modes) and persists stickers via a file-based cache. The UI is now composed of distinct views: StickerBarView (with collapsible title and hover actions), StickerContentView (supporting both text editing and Markdown preview), and StickerColorSelectorView. Users can now toggle between edit and preview modes, change sticker colors, and collapse the view, with changes automatically saved to the application support directory.

Modules/Sources/StickerView · high confidence

Introduce new UI components and AirPods settings interface

This change adds several new SwiftUI and AppKit integration files to the application. It introduces a settings interface for AirPods, allowing users to view paired devices and select a specific one via \AirPodsSettingView\ and \AirPodsSettingVM\. Additionally, it adds visual components including a blurred sound wave visualization (\BluredSoundWave\, \SoundWaveView\), a generic visual effect view (\VisualEffectView\), a host window finder utility (\HostingWindowFinder\), and a protocol for bar providers (\BarProvider\).

(repo-wide) · high confidence

Introduce new definition modules for keyboard shortcuts, window management, and settings persistence

This change adds several new definition files to the OnlySwitch/Define location, establishing foundational components for the application's UI and configuration. It introduces a keyboard shortcut definition for invoking the popover, a new enum for music playback states, and logic for opening and managing the Settings and Update windows. Additionally, it adds notification effects for switch list changes, defines the appearance modes for the switch list (including a new 'Only Control' mode), and implements a custom property wrapper for handling Codable user defaults.

OnlySwitch/Define · high confidence

Introduce privileged helper client for system power settings

Added a new privileged operations module that allows the app to manage low-power mode and clamshell sleep settings via a root-level helper daemon. This includes the helper's launchd plist, a typed XPC interface for secure communication, and a dependency-injected client that handles helper installation, status monitoring, and operation execution with a 10-second timeout.

OnlySwitch/PrivilegedOperations · high confidence

Introduce remote connection dependency layer with atomic pairing and persistence

This change adds the foundational dependency clients for the OnlySwitchRemote feature, establishing the interface and live implementations for remote Mac discovery, connection, and state management. It introduces \RemoteConnectionClient\ to handle the full lifecycle—including Bonjour discovery, atomic pairing flows with rollback support, session selection, and control sending—backed by \RemotePersistenceClient\ for durable state storage and \RemoteKeychainClient\ for secure credential management. The implementation also includes a \RemoteReviewDemoClient\ to simulate remote sessions for App Store review purposes and a \RemoteSystemSettingsClient\ to guide users to system settings when network access is required.

OnlySwitchRemote/Dependencies · high confidence

Introduce remote host infrastructure for pairing, catalog monitoring, and lifecycle management

This change adds the core host-side components for the OnlySwitch remote access feature, including \RemoteHost\ to manage TCP listeners, peer sessions, and pairing windows, \RemoteCredentialStore\ to handle device pairing records and keychain storage with transactional repair logic, \RemoteCatalogMonitor\ to poll and stream control catalog updates, and \RemoteStatusScheduler\ to manage real-time status subscriptions for remote clients. It also introduces \RemoteHostClient\ as a dependency-injection wrapper for these services, enabling the application to start, stop, and pair with remote devices while maintaining secure, race-free session lifecycles.

OnlySwitch/Features/RemoteAccess/Host · high confidence

Introduce secure remote transport with pairing, framing, and encryption

The RemoteTransport module now provides the core primitives for establishing and maintaining secure remote connections. This includes a pairing code generator for device pairing, a wire protocol codec that handles framing, sequence validation, and payload encoding/decoding, and a network I/O layer built on Network.NWConnection that manages connection lifecycle and concurrent receive/send operations. Cryptographic capabilities are added via handshake crypto for authentication proofs and revocation verification, and session crypto that derives directional keys using ECDH (P-256) and HKDF, then encrypts/decrypts messages using AES-GCM with strict counter-based replay protection.

Modules/Sources/RemoteTransport · high confidence

Introduce transactional Mac pairing flow with discovery and error handling

The app now includes a dedicated pairing interface that discovers OnlySwitch-enabled Macs on the local network, allows the user to select a target, and validates a 12-character pairing code. This flow supports transactional pairing, providing specific error messages and recovery steps for issues such as unavailable devices, identity mismatches, invalid or expired codes, rate limiting, and protocol version incompatibilities.

OnlySwitchRemote/Features/Pairing · high confidence

Introduces bundled ad model and structured system monitor preferences

The app now supports displaying bundled advertisements via a new AdsModel that loads and validates HTTPS URLs from a local JSON file, controlled by a new 'showAds' preference. Additionally, system monitor settings are now persisted using a versioned StoredSystemMonitorPreferences structure to ensure data integrity and allow for future migrations, replacing the previous flat storage approach.

OnlySwitch/Model · high confidence

Introduction of OnlyWidget with Evolution support

A new widget extension has been added to the application, enabling users to view app data directly on their home screen. The widget bundle now includes support for the 'Evolution' view alongside the built-in view, allowing users to track their progress or history. To facilitate data sharing between the main app and the widget, the extension is configured with an application group entitlement, and the necessary Info.plist and entitlements files have been created to register the WidgetKit extension.

OnlyWidget · high confidence

New Customize settings screen for managing switches and shortcuts

Users can now access a dedicated Customize view in Settings to toggle individual switches on or off, assign keyboard shortcuts via the KeyboardShortcuts framework, and access specific configuration options for certain switch types (such as enabling/disabling menubar icon hiding or radio station playback). The interface enforces a minimum of four active switches and provides error toasts when this limit is exceeded.

OnlySwitch/Features/Settings/Customize · high confidence

New General Settings UI with Desktop Pet, Menu Hiding, and Backup Options

The General settings page has been redesigned to include a new 'Desktop Pet' toggle, a 'Hide Menu after Running' option, and a 'Backup' section for exporting and importing all settings. The view also retains controls for language, appearance, menu bar icon selection, keyboard shortcuts, update checks, and cache management.

OnlySwitch/Features/Settings/General · high confidence

New Key Light settings page for keyboard brightness control

A new Key Light settings page has been added to the app, allowing users to adjust keyboard brightness via a slider and toggle automatic brightness adjustment in low-light conditions. This feature is implemented using the Composable Architecture and integrates with the system's keyboard manager to persist brightness preferences.

OnlySwitch/Features/Settings/KeyLight · high confidence

New Settings interface for managing paired Macs and dashboard controls

The app now includes a dedicated Settings section that allows users to pair new Macs, manage existing connections (including forgetting a Mac or re-pairing if credentials expire), and configure the remote dashboard. Users can select which controls (Built-ins, Shortcuts, Evolutions) appear on the dashboard, reorder them, and view connection status and last-connected timestamps for each paired Mac. The interface also provides an About view with version information and a How-to-use guide.

OnlySwitchRemote/Features/Settings · high confidence

A new Shortcuts settings view has been added, allowing users to manage installed Apple Shortcuts via toggles and custom keyboard shortcuts. The interface includes a gallery section that fetches shared shortcuts from GitHub, displaying specific icons for each item instead of a generic placeholder, and provides direct links to install them.

OnlySwitch/Features/Settings/Shortcuts · high confidence

New Switch module introduces core infrastructure and initial switch definitions

The new Modules/Sources/Switches module provides the foundational architecture for the application's toggle features. It defines the SwitchProvider protocol and SwitchType enum, establishing a standardized interface for managing switch states and UI metadata. The module also includes ShellCommandDefine.swift, which contains the shell scripts and AppleScript commands required to execute system-level changes (such as toggling Dark Mode, hiding the desktop, or managing the Dock), and ShortcutAppearanceCache.swift for persisting custom icon data for Shortcuts. This change establishes the backend logic and data structures that enable the UI to present and control these switches.

Modules/Sources/Switches · high confidence

New SwitchBar UI components for AirPods, Pomodoro, and Privileged Access

This change introduces the visual components for the SwitchBar in the menu bar. Users will now see AirPods battery levels displayed as colored indicators (with low-battery warnings) when the AirPods switch is active. A countdown timer view is added for the Pomodoro Timer switch, showing remaining time and status color. Additionally, the bar now supports a progress indicator for operations like Xcode cache cleaning and handles privileged access requirements for Low Power Mode by displaying alerts to install or authorize the helper.

OnlySwitch/Features/SwitchItem/SwitchBar · high confidence

New and updated system control switches

This update adds several new switches to the Only Switch interface, including AI Commander (a prompt dialogue window), AirPods connection management, Apple Music playback control, a Google Authenticator toggle, and switches for F-Key mode, key light brightness, and low power mode (which now uses a privileged helper). It also introduces new switches for hiding desktop icons, ejecting discs, emptying the trash or pasteboard, and showing dock recent items. Existing switches have been updated: the Autohide Dock and Autohide Menu Bar switches now use dedicated AppleScript commands, the Dim Screen switch includes auto-dimming with a configurable percentage, the Keep Awake switch supports both timed and scheduled sleep prevention, the Hide Menu Bar Icons switch now supports auto-collapse, and the Mute switch uses a polling mechanism for real-time status updates.

OnlySwitch/EverySwitch · high confidence

New menu bar icon hiding feature with macOS 27 support

Users can now hide menu bar icons via a new setting in the general preferences. The implementation uses a legacy marker-spacer method on older macOS versions and switches to a native visibility assertion API on macOS 27 for more reliable hiding. This feature includes a new status bar item to control the hiding state and integrates with the existing menu bar icon configuration.

OnlySwitch/StatusBar · high confidence

New remote catalog provider for built-in, shortcut, and evolution controls

The remote access feature now exposes a comprehensive catalog of available controls via the new \RemoteCatalogProvider\. This provider aggregates three distinct categories of controls: built-in system switches (such as Dark Mode, Bluetooth, and AirDrop), user-installed keyboard shortcuts (displayed with their specific icons), and 'Evolution' items (custom user-defined controls). For each control, the system now provides detailed descriptors including availability status, current on/off state, and secondary information, allowing remote clients to accurately discover and interact with the full range of OnlySwitch capabilities.

OnlySwitch/Features/RemoteAccess/Catalog · high confidence

New settings pages for Keep Awake and Night Shift schedules

The app introduces dedicated configuration screens for Keep Awake and Night Shift, allowing users to manage device behavior more precisely. For Keep Awake, users can now choose between a fixed duration (from 1 minute to 1 hour, or never) or a daily schedule with specific start and end times. Similarly, Night Shift settings now include a slider to adjust screen warmth strength (10%–100%) and a toggle to enable a daily schedule with custom start and end times.

OnlySwitch/Features/Settings/KeepAwake, OnlySwitch/Features/Settings/NightShift · high confidence

New utility modules for system controls and app management

This update introduces a suite of new utility classes in the OnlySwitch/Utilities directory to support recent feature additions. BluetoothDevicesManager handles AirPods battery retrieval and connection management via shell scripts and IOBluetooth. CBTrueToneClient++ exposes True Tone status and control. DisplayManager manages built-in display brightness using DisplayServices. WallpaperManager handles cache clearing and size calculation for desktop images. Updater integrates Sparkle for automatic update checks. SupportedLanguage expands the app's localization support to include Czech, Slovak, Korean, French, Somali, and Brazilian Portuguese. Additional utilities include IOService for low-level I/O access, EffectSoundHelper for UI sounds, and SystemInfo for version tracking.

OnlySwitch/Utilities · high confidence

Secure API key storage and settings backup with explicit allowlists

The app now stores sensitive API keys in the macOS Keychain instead of UserDefaults, with an automatic migration for existing OpenAI keys. To support this, a new settings backup format has been introduced that uses an explicit allowlist of exportable keys, ensuring that secrets and internal state are never included in backups. The backup system also explicitly handles Evolution shell commands, requiring user acceptance before importing potentially unsafe scripts.

Modules/Sources/Extensions · high confidence

Sync external monitor brightness with built-in display

OnlySwitch now keeps external monitors in lock-step with the built-in display's brightness. When the user dims or brightens the built-in screen (via F1/F2 keys, Control Center, or the Dim Screen switch), the app automatically mirrors that level to all connected DDC/CI-capable external displays. At the built-in panel's minimum, external monitors are powered off via DPMS to go fully dark, and they power back on as brightness rises again.

OnlySwitch/Utilities/DDC · high confidence

Architecture

Centralized app configuration and UI constants

This change introduces a new Defines module that centralizes core application constants, providing a single source of truth for UI layout dimensions (such as popover and window sizes), color themes (including specific palettes for stickers and general theming), and notification names used for internal communication. It also defines error types for switch operations and enumerates supported unit types, establishing the foundational structure for the app's visual and behavioral consistency.

Modules/Sources/Defines · high confidence

Behavioural changes

Added Xcode workspace and scheme configuration for the OnlyAgent module

The project now includes the necessary Xcode workspace and scheme files to build and run the OnlyAgent module. This adds the IDE workspace check file and a dedicated scheme that configures the build, test, launch, profile, analyze, and archive actions specifically for the OnlyAgent target, enabling developers to work with this module in Xcode.

Modules/.swiftpm · high confidence

Added mock resources and updated AI model definitions

This change introduces several new resource files to the application. It adds AdsMarket.json to define promoted applications and services, and includes Latest\_release\_mock.json and Releases\_mock.json which provide static data for release history and update checks. Additionally, a new shell script, battery-airpods-monterey.sh, is added to handle Airpods battery level retrieval on macOS Monterey. The models.json file is also updated to include new AI model configurations, adding entries for GPT-5.5, various GPT-5.x and GPT-6 variants, Gemini 3.x models, and Claude 5 models.

OnlySwitch/Resource · high confidence

Automated build version bumping and Sparkle framework re-signing

Added a new shell script to automatically increment the CURRENT\_PROJECT\_VERSION in Xcode project files, streamlining the build versioning process. Additionally, introduced a script to re-sign nested components within the Sparkle framework (including XPC services and helper executables) using the Developer ID identity, ensuring proper notarization and code signature validity when distributing the application outside of Xcode's standard archive workflow.

Scripts · high confidence

Data model version bump to 2.x with new EvolutionCommandEntity attributes

The CoreData model has been upgraded to version 2.x, introducing a new \EvolutionCommandEntity\ alongside the existing \RadioStations\ entity. This new entity supports storing detailed command configurations, including icons, identifiers, and specific on/off/status commands, which enables the application to persist and manage more complex switch behaviors and privileged operations.

OnlySwitch/CoreData/OnlySwitch.xcdatamodeld · high confidence

Hide Menu Bar Icons setting now warns about macOS 27 limitations

The Hide Menu Bar Icons settings view now detects macOS version 27 and displays specific warnings to users. On this version, hiding icons requires Accessibility permission and may stop working after macOS updates. Additionally, the feature will hide system items like Now Playing, Camera, AirDrop, Focus, and Timer, as the OS prevents OnlySwitch from keeping these items visible while the hide feature is active.

OnlySwitch/Features/Settings/HideMenubarIcons · high confidence

Introduce Core Data persistence with backup/restore and migration support

The app now persists user settings and configurations using Core Data, replacing previous storage methods. This change introduces a new backup and restore system for Evolution commands and Radio Stations, allowing users to export and import their settings. The implementation includes logic to prevent duplicate radio stations during import and ensures that Evolution commands are correctly mapped to their entities. Additionally, the persistence layer handles automatic lightweight migration for store updates, ensuring existing data is preserved and migrated seamlessly when the schema changes.

OnlySwitch/CoreData · high confidence

Introduce EvolutionListService for managing privileged evolution commands

The app now uses a dedicated \EvolutionListService\ to load and manage the list of user-created 'Evolutions' (custom commands). This service handles Core Data persistence, including a migration that updates legacy 'Clamshell' entries to use the new privileged operation identifiers, ensuring they no longer execute legacy sudo commands. It also manages the removal of evolution items from both the data store and user defaults.

OnlySwitch/Features/Settings/Evolution/EvolutionListService · high confidence

Introduce Remote Control Protocol v1.4 with Transactional Pairing and New Capabilities

This release updates the remote protocol to version 1.4, introducing transactional pairing to improve security and reliability during device connection. It adds support for remote sound mixer controls, allowing users to adjust system and app volumes, as well as system monitor data for CPU, memory, disk, and network usage. The update also includes hardened credential revocation and lifecycle management to prevent race conditions, ensuring a more stable and secure remote control experience.

Modules/Sources/RemoteCore · high confidence

Introduce unified audio player with improved background noise quality

A new CommonPlayer module has been added to centralize audio playback for both Radio and BackNoises switches. This change improves the quality of background noise playback by switching from AVPlayer to AVAudioPlayer for local sound files, while retaining AVPlayer for radio streaming. The new player integrates with macOS Now Playing and remote command centers, ensuring that play/pause actions from Airpods or the menu bar correctly refresh the switch status for both radio stations and background noises.

OnlySwitch/Player/CommonPlayer · high confidence

Migrate string files to string catalogs

The localization system has been updated to use the modern \.xcstrings\ string catalog format instead of the legacy \.strings\ files. This change consolidates all localized text into a single, structured JSON-based file (\Localizable.xcstrings\), which supports richer metadata and improved tooling integration for managing translations across all supported languages.

Localization · high confidence

Migrate string resources to modern string catalogs

The localization files in OnlyWidget have been converted from the legacy format to the modern .xcstrings string catalog format. This change updates the underlying storage structure for all localized strings (such as 'AirPods' and 'Autohide Dock') to use Apple's current localization standard, ensuring compatibility with latest Xcode tooling and improved string management workflows.

OnlyWidget/Localization · high confidence

New widget views with Evolution theme support

The widget UI now includes dedicated views for error states and small widgets, featuring a new SpectrumView background that applies a distinct pink-to-indigo gradient and adjusted saturation/brightness when the unit type is set to Evolution.

OnlyWidget/Views · high confidence

Radio station editing and persistence logic

The RadioPlayerItem module now includes a ViewModel that manages the lifecycle of radio stations, allowing users to edit station titles and URLs. When editing is completed, the ViewModel validates the input (ensuring the title is not empty and the URL is valid) and persists the changes to the local Core Data store. It also synchronizes these updates with the active player instance if the edited station is currently selected, ensuring the player reflects the new configuration.

OnlySwitch/Player/RadioPlayerItem · high confidence

Redesigned OnlySwitch remote dashboard with new tile visuals and status indicators

The OnlySwitch remote dashboard has been redesigned with a new visual style and improved status feedback. Control tiles now display detailed status badges (On, Off, Working, Offline, Unavailable, etc.) with distinct colors and icons, and support both system symbols and PNG icons with correct rendering modes for shortcuts. The layout adapts to iPhone landscape and accessibility settings, using a glass-effect surface on iOS 26+ and a thin material fallback on earlier versions. A new Mac picker allows selecting paired Macs, and the dashboard includes a collapsible Sound Mixer bottom surface. Connection states (connecting, authenticated, offline, revoked) are shown with appropriate messages and symbols.

OnlySwitchRemote/Features/Dashboard · high confidence

Redesigned settings interface with expanded feature list

The Settings view has been restructured to use a sidebar navigation layout (split view on macOS 13.3+, standard navigation on earlier versions) and now includes new configuration pages for Authenticator (TOTP), System Monitor, Pomodoro Timer, iOS Remote Access, and Model Providers (macOS 26.0+). The Model Providers option is conditionally hidden on older macOS versions. The view also integrates stores for Evolution, Key Light, and Remote Access features, and adds a button to toggle the sidebar visibility.

OnlySwitch/Features/Settings/SettingsView · high confidence

Redesigned switch list with sectioned navigation and settings window integration

The OnlySwitch popover now features a tabbed interface (System Monitor, Controls, Authenticator, Sound Mixer) via a new section bar, replacing the previous flat list layout. The view supports both single-column and dual-column switch arrangements, allows users to reorder switches via drag-and-drop, and integrates a dedicated Settings window that can be toggled from the popover. This change also introduces a new SettingsWindow manager to handle window lifecycle and appearance, and adds a RollingText component for scrolling labels.

OnlySwitch/Features/OnlySwitchList · high confidence

Secure remote command execution with caching and validation

The remote access feature now includes a \RemoteCommandRouter\ that validates actions against control types (e.g., preventing state changes on buttons) and caches recent request results to avoid redundant processing. This change introduces a \RecentRequestCache\ actor to store up to 512 results and ensures that shortcut executions and 'Evolution' command runs are properly routed and secured, addressing the security concern in shortcut execution.

OnlySwitch/Features/RemoteAccess/Commands · high confidence

Fixes

Fix macOS 15 popover positioning and add secure input component

This update introduces two new design components to improve stability and usability. AppKitProgressView resolves a popover positioning issue on macOS 15 and below by using a SwiftUI ProgressView, while switching to a performant NSViewRepresentable on macOS 26+. Additionally, SecureInputView provides a reusable text input field with a toggleable visibility button, allowing users to easily show or hide sensitive text entries.

Modules/Sources/Design · high confidence

Test coverage

Added comprehensive test coverage for OnlySwitch Remote iOS features; Added comprehensive test coverage for the Remote Access feature set; Added test coverage for Authenticator, Remote Core, Desktop Pet, and System Monitor modules; Added test coverage for ads decoding, switch operations, and macOS 27 menu bar hiding; Added tests for privileged operation helpers and access management; Added tests for the System Monitor feature.

Dependencies

Initialize build version configuration files for macOS and iOS apps

Added new xcconfig files to define the initial build numbers for the macOS app (OnlySwitch) and the iOS remote app (OnlySwitchRemote). The macOS app is set to build number 278, while the iOS remote app is set to build number 10.

Config · high confidence

Updated Swift Package Manager dependencies and resolved versions

The project's Swift Package Manager configuration has been updated to resolve dependency versions and align with the latest package definitions. Key updates include upgrading the Swift Composable Architecture (TCA) to version 1.26.2, Firebase iOS SDK to 12.6.0, and Alamofire to 5.5.0. Additionally, the resolution files reflect changes in transitive dependencies such as NetworkImage (6.0.0 to 6.0.1 in the Modules package) and CombineSchedulers, ensuring consistent build states across the Modules and OnlySwitch workspace packages.

(dependencies) · high confidence

Housekeeping

Initial workspace configuration added

The Xcode workspace for the OnlySwitch project has been initialized with standard configuration files. This includes the workspace definition linking to the project, workspace settings that disable SwiftUI Previews, and the IDE workspace check file to ensure consistent build settings.

OnlySwitch.xcodeproj/project.xcworkspace · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 58 → 51 (-6.7)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 90 → 85 (-5.0)
  • Architecture 91 → 89 (-2.2)
  • Maturity 67 → 66 (-0.4)
  • Readiness 35 → 30 (-4.7)
  • Security 100 → 100 (+0.0)
  • Event-Driven 79 → 79 (+0.3)
  • Performance 61 (new)

Resolved (29)

  • Change coupling: AppDelegate.swift ↔ OpenWindow.swift (OnlySwitch/AppDelegate.swift)
  • Documentation: written for insiders (references/writing-better-tests.md)
  • Duplicated block (14 lines × 2) (OnlySwitchRemote/Dependencies/RemoteConnectionClient+Live.swift)
  • Duplicated block (8 lines × 2) (OnlySwitchRemote/Dependencies/RemoteReviewDemoClient.swift)
  • Hotspot: Modules/Sources/OnlyAgent/Settings/ClaudeSettings/ClaudeService.swift (Modules/Sources/OnlyAgent/Settings/ClaudeSettings/ClaudeService.swift)
  • Low cohesion: LowPowerModeSwitch (LCOM4 4) (OnlySwitch/EverySwitch/LowPowerModeSwitch.swift)
  • No assertions: discoveryPresentationTimesOutAfterEightSecondsWithoutStoppingTheStream (OnlySwitchRemoteTests/PairingFeatureTests.swift)
  • No assertions: hamburgerPushesNormalSettings (OnlySwitchRemoteTests/RemoteAppFeatureTests.swift)
  • No assertions: pairAnotherSuccessLoadsTheNewMacLayoutBeforeDelegating (OnlySwitchRemoteTests/SettingsFeatureTests.swift)
  • No direct assertions: testAutohideDockSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testAutohideMenuBarSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testDarkModeSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testDockRecentSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testHiddenDesktopSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testHiddenFilesSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testKeepAwakeSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testLowPowerModeSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testMuteMicSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testMuteSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • No direct assertions: testNightShiftSwitch (OnlySwitchTests/EverySwitchTests.swift)
  • …and 9 more

New (169)

  • AXMenuBarVisibleItemResolver.itemsToKeepVisible (cognitive 18) (OnlySwitch/StatusBar/MenuBarAccessibilityItemResolver.swift)
  • ControlTilePresentation.init (cognitive 17) (OnlySwitchRemote/Features/Dashboard/ControlTilePresentation.swift)
  • Coverage not measured — Swift suite
  • DashboardFeature.body (cognitive 49) (OnlySwitchRemote/Features/Dashboard/DashboardFeature.swift)
  • DashboardFeature.body (cyclomatic 53) (OnlySwitchRemote/Features/Dashboard/DashboardFeature.swift)
  • Duplicated block (11 lines × 2) (OnlySwitchRemote/Features/Pairing/PairingView.swift)
  • Duplicated block (11–15 lines × 4) (OnlySwitch/Features/OnlySwitchList/OnlySwitchListView.swift)
  • Duplicated block (12 lines × 2) (OnlySwitch/Features/Settings/DimScreen/DimScreenSettingView.swift)
  • Duplicated block (12 lines × 2) (OnlySwitchRemote/Features/Pairing/PairingFeature.swift)
  • Duplicated block (12–13 lines × 2) (OnlySwitch/Features/Settings/Evolution/EvolutionEditor/EvolutionEditorView.swift)
  • Duplicated block (14 lines × 2) (Modules/Sources/Authenticator/AuthenticatorPanelView.swift)
  • Duplicated block (14 lines × 2) (OnlySwitch/Features/OnlyControl/OnlyControlView.swift)
  • Duplicated block (14 lines × 2) (OnlySwitchRemote/App/RemoteAppFeature.swift)
  • Duplicated block (15 lines × 2) (OnlySwitch/CoreData/RadioStations+Fetch.swift)
  • Duplicated block (16 lines × 2) (Modules/Sources/Defines/ColorDefine.swift)
  • Duplicated block (17 lines × 2) (OnlySwitchRemote/Dependencies/RemoteConnectionClient+Live.swift)
  • Duplicated block (19 lines × 2) (OnlySwitch/Features/OnlyControl/OnlyControlView.swift)
  • Duplicated block (19 lines × 2) (OnlySwitchRemote/Features/Dashboard/ControlTileStatusBadge.swift)
  • Duplicated block (20 lines × 2) (Modules/Sources/Authenticator/AuthenticatorPanelView.swift)
  • Duplicated block (22 lines × 2) (OnlySwitch/Features/Settings/KeepAwake/KeepAwakeSettingView.swift)
  • …and 149 more

Changes since last survey

  • 116 commits — 89 feature/other, 27 fixes

By area

  • OnlySwitch/Features — 51 commits
  • OnlySwitch.xcodeproj/project.pbxproj — 11 commits
  • Modules/Sources — 10 commits
  • (root) — 9 commits
  • OnlySwitchRemote/Features — 8 commits
  • Config/Versions — 7 commits
  • (repo) — 3 commits
  • Localization/Localizable.xcstrings — 3 commits
  • OnlySwitch/PrivilegedOperations — 3 commits
  • OnlySwitchTests/SystemMonitor — 3 commits
  • OnlySwitchRemote/App — 2 commits
  • OnlySwitch/Assets.xcassets — 1 commit
  • OnlySwitch/EverySwitch — 1 commit
  • OnlySwitch/Header — 1 commit
  • OnlySwitch/Resource — 1 commit
  • OnlySwitch/StatusBar — 1 commit
  • OnlySwitchRemote/Dependencies — 1 commit

Notable commits

  • fix: Fix AirPods battery header layout
  • fix: Fix Apple Silicon temperatures and dark monitor contrast
  • fix: Fix Only Control tab indicator layering
  • fix: Fix system monitor process names
  • fix: Fix system monitor process sampling fallback
  • fix: Fix system monitor process usage buffer
  • fix: Merge pull request #217 from mvanhorn/fix/188-macos-menu-bar-recovery
  • fix: fix battery volume position
  • fix: fix hide menu bar icons on macOS 27
  • fix: fix list height
  • fix: fix notarization issue
  • fix: fix shortcuts icon render mode
  • fix: fix shortcuts invoke issue(#220)
  • fix: fix the reconnecting issue
  • fix: fix: classify M3 temperature sensors
  • fix: fix: configure privileged XPC client interface
  • fix: fix: coordinate system monitor background sampling
  • fix: fix: correct privileged recovery state messaging
  • fix: fix: harden privileged helper packaging
  • fix: fix: harden system monitor collection
  • …and 96 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

jacklandrin/OnlySwitch was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 30 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 51050555cbdadb5d0366d36d11c374c00850121a — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-cb25ca4feafa.