Skip to content
CAI
Software that uses CAICheck a score

macadmins/nudge

62.5

Adequate · 1 October 2026

6.6k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Nudge is a macOS utility designed to prompt users to install operating system updates and security patches by integrating with Apple's SOFA and GDMF feeds for device compatibility and vulnerability data. It operates as a headless background service that registers as a login item, presenting a configurable SwiftUI interface to inform users of required updates, deadlines, and blocked applications. The system supports flexible deployment modes, including standard and simple UI layouts, and allows administrators to define complex policies for deferrals, grace periods, and asynchronous updates.

Features

Added Xcode schemes for testing and demo modes

The Xcode project now includes several new shared schemes to support different build configurations, specifically adding schemes for bundle-mode (JSON and profile), demo-mode, and simple-mode. These additions allow developers to easily switch between standard, testing, and simplified UI modes directly within the IDE.

Nudge.xcodeproj/xcuserdata/erikg.xcuserdatad/xcschemes · high confidence

Added specialized Xcode schemes for testing and debugging

New Xcode schemes have been added to the project to streamline development workflows. These include configurations for demo mode, simple mode, bundle-mode JSON, and profile modes, as well as a scheme that simulates specific OS versions and hardware IDs. Additionally, the standard Debug scheme now automatically disables random delays to improve the developer experience during testing.

Nudge.xcodeproj/xcshareddata · high confidence

Initial repository structure and documentation added

The repository now includes foundational documentation and configuration files to support development and distribution. A \.gitignore\ file has been added to exclude Xcode build artifacts, derived data, and packaging outputs. Project guidance is established through \AGENTS.md\ and \CLAUDE.md\, which define Swift/SwiftUI conventions, build commands, and testing simulation procedures. The \CHANGELOG.md\ provides a detailed history of changes, while \README.md\ and \SECURITY.md\ offer user installation instructions and vulnerability reporting guidelines. Additionally, a \LICENSE\ file (Apache 2.0) and a comprehensive \build\_nudge.zsh\ script for automated building, signing, and packaging are now part of the repository.

(repo-wide) · high confidence

Introduce SimpleMode UI layout with deferred update tracking

Adds a new SimpleMode view that presents a condensed interface for device update nudges. This layout displays the company logo, main header, and conditional sections for required OS version, required date, and days/hours remaining. It specifically supports user deferrals by showing a deferred count and allows users to defer updates, with the UI adapting to show an action button or information button based on device support status.

Nudge/UI/SimpleMode · high confidence

Support for new SOFA v2 data and GDMF asset feeds

Nudge now integrates with the SOFA v2 API and GDMF asset feeds to provide more accurate device compatibility and security information. The SOFA integration includes support for the new 'SupportedDevices' field, improved handling of cached feeds, and gzip decompression for better performance. Additionally, the new GDMF module allows Nudge to query and parse Apple's Global Device Management Feed, enabling detection of supported devices for various Apple platforms (iOS, macOS, tvOS, visionOS) and rapid security responses.

Nudge/3rd Party Assets · high confidence

Architecture

Project structure reorganized and build configuration updated

The Xcode project file has been updated to object version 56 and reorganized into logical groups (Common, Utilities, UI, Preferences, 3rd Party Assets, Example Assets). This change reflects the migration of source files into new modules and utilities, the addition of new UI components (such as BackgroundBlur, QuitButtons, and StandardMode), and the inclusion of new resources like the SMAppService plist for launch agent installation and example configuration files.

Nudge.xcodeproj · high confidence

Refactored Nudge utilities into modular components

The Nudge/Utilities codebase has been reorganized into distinct, single-responsibility files to improve maintainability and clarity. This change introduces Extensions.swift for reusable SwiftUI and Foundation helpers (such as accessible colors, date formatting, and localization), Logger.swift to centralize logging via the os framework with privacy controls, OSVersion.swift to standardize macOS version parsing and comparison, and dedicated modules for SoftwareUpdate, UILogic, and Preferences. This refactoring supports the broader feature set of major OS upgrades, deferral logic, and SOFA feed integration by providing a cleaner, more testable foundation for these capabilities.

Nudge/Utilities · high confidence

UI architecture refactored to SwiftUI App lifecycle with centralized state management

The Nudge application has been refactored to use the modern SwiftUI App lifecycle (Main.swift) and a centralized state management system (Defaults.swift). This change consolidates global configuration, UI constants, and application state into dedicated structures, replacing the previous scattered approach. Users benefit from a more stable window initialization process, including a fallback mechanism to recover the UI if the standard SwiftUI window creation fails, and improved handling of window properties such as movability and frame sizing across different modes (Standard and Simple).

Nudge/UI · high confidence

Behavioural changes

5 commits (0 fixes) modifying assets

A change to existing behaviour in assets — 5 commits, 5 files.

assets · medium confidence · unverified

Disable SwiftUI Previews in workspace settings

The workspace settings file has been created to explicitly disable SwiftUI Previews (PreviewsEnabled set to false). This ensures that preview rendering is turned off by default for the Nudge project workspace, potentially improving build performance or preventing preview-related issues during development.

Nudge.xcodeproj/project.xcworkspace · high confidence

Expanded configuration options for device support, application blocking, and SOFA feed integration

Nudge now supports a broader range of configuration options to manage user experience and device compatibility. Administrators can define acceptable and blocked application bundle IDs, control assertion usage (camera, screen sharing, assertions), and enforce minor updates. The update workflow includes new settings for asynchronous software updates, focus mode handling, and customizable SOFA feed URLs and refresh intervals. Additionally, major upgrade logic is enhanced with specific SLAs for actively exploited CVEs, support for targeted OS version rules, and the ability to fetch major upgrades from custom paths.

Nudge/Preferences · high confidence

New postinstall scripts and launch agent/daemon definitions for Nudge

The build assets now include dedicated postinstall scripts (for essentials, logger, launchagent, nudge, and suite) and new plist definitions for the Nudge launch agent and a new Nudge Logger launch daemon. These changes ensure that the Nudge application, its logging subsystem, and the associated launch agents are correctly registered and initialized on the system after installation, with the logger specifically configured to stream logs to /var/log/Nudge.log.

_build\assets · high confidence

Nudge v2.1.4: Headless background operation and entitlement cleanup

Nudge has been updated to version 2.1.4 to run as a background utility rather than a standard application with a visible window. The app is now configured as a UI element (LSUIElement) in Info.plist, and the legacy ContentView and NudgeApp entry points have been removed. To support this headless mode, a new SMAppService plist has been added to register Nudge as a login item that runs at system startup and every 30 minutes. Additionally, the app's entitlements have been simplified: the app sandbox and file access permissions have been removed, and the debug entitlement for task attachment has been explicitly disabled in the release configuration.

Nudge · high confidence

Refactored UI into reusable common components

The Nudge UI has been restructured by extracting shared interface elements into the Nudge/UI/Common directory. This change introduces dedicated SwiftUI views for the company logo (now supporting remote images and base64 encoding), quit buttons (with logic for dual-button modes and deferral menus), the deferral date picker, and informational buttons. It also adds a new background blur window controller for the main window and a device information sheet. This refactoring centralizes common UI logic, improving code maintainability and consistency across the application's interface.

Nudge/UI/Common · high confidence

Refactored post-install scripts to handle LaunchAgent and LaunchDaemon reloading

The Nudge installer now uses dedicated post-install scripts to manage background services. The new \postinstall-launchagent\ script detects the current console user and reloads the Nudge LaunchAgent only when a user is logged in, avoiding issues during setup or login window phases. A new \postinstall-logger\ script unloads and reloads the Nudge logger LaunchDaemon. Additionally, \postinstall-nudge\ now explicitly kills any running Nudge process before the new agent is loaded, ensuring the application restarts cleanly with the updated configuration.

Nudge/Scripts · high confidence

Standard mode UI refactored into modular left, right, and screenshot components

The Standard mode interface has been restructured into distinct, reusable SwiftUI views: LeftSide (displaying OS version, deferral counts, and active CVEs), RightSide (handling headers, main content text, and screenshot display), and ScreenShotZoom (a dedicated sheet for viewing screenshots). This modularization improves code maintainability and ensures consistent layout behavior across the standard mode window, while preserving existing functionality such as remote image support and user deferral tracking.

Nudge/UI/StandardMode · high confidence

Updated example configuration assets with new preferences and multi-language support

The example configuration files (JSON and mobileconfig) have been refreshed to reflect the latest Nudge capabilities. The main example now includes multi-language support for update URLs and UI text (English, Spanish, French, German), new user interface options like \showRequiredDate\ and \showRequiredOSVersion\, and updated optional features such as \aggressiveUserExperience\ and \asynchronousSoftwareUpdate\. Additionally, new tester assets have been added to demonstrate advanced features including SOFA feed integration, application blocking, and specific UI strings for unsupported device states.

Example Assets · high confidence

Test coverage

Added comprehensive unit tests for OS version parsing and grace period logic; Added simulation testing for grace-period deadline logic; Versioning update and cleanup of UI test scaffolding.

Housekeeping

Added default breakpoint configuration file

A new Breakpoints\_v2.xcbkptlist file has been added to the project's user-specific debugger settings, establishing a default breakpoint bucket structure for the Xcode debugger.

Nudge.xcodeproj/xcuserdata/erikg.xcuserdatad/xcdebugger · 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 64 → 62 (-1.1)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 88 → 89 (+1.4)
  • Architecture 100 → 100 (+0.0)
  • Maturity 60 → 60 (+0.0)
  • Readiness 51 → 50 (-0.7)
  • Security 80 → 80 (+0.0)

Resolved (3)

  • Documentation: no installation or build instructions (README.md)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (Nudge/Preferences/PreferencesStructure.swift)
  • Members sharing a duplicated core (7 members, 50+ identical tokens) (Nudge/Preferences/PreferencesStructure.swift)

New (10)

  • Duplicated block (10–11 lines × 2) (Nudge/UI/Main.swift)
  • Duplicated block (14 lines × 5) (Nudge/Utilities/Preferences.swift)
  • Duplicated block (15 lines × 4) (Nudge/Utilities/Preferences.swift)
  • Duplicated block (25 lines × 3) (Nudge/Utilities/Preferences.swift)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (Nudge/Preferences/PreferencesStructure.swift)
  • Members sharing a duplicated core (5 members, 50+ identical tokens) (Nudge/Utilities/Preferences.swift)
  • Members sharing a duplicated core (7 members, 50+ identical tokens) (Nudge/Preferences/PreferencesStructure.swift)
  • Preferences.swift.getDesiredLanguage (cognitive 42) (Nudge/Utilities/Preferences.swift)
  • UILogic.swift.shouldBailOutEarly (cognitive 17) (Nudge/Utilities/UILogic.swift)
  • UILogic.swift.shouldBailOutEarly (cyclomatic 17) (Nudge/Utilities/UILogic.swift)

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

Survey your own repository

macadmins/nudge 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 1 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit fff4fe6c57d3f9b29194ce03945f0d9a21e40f5d — 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-e569280dd5e2.