Skip to content
CAI
Software that uses CAICheck a score

kitlangton/Hex

47.4

Weak · 30 September 2026

10.5k

lines of production code

Swift

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Hex is a macOS application designed for local voice transcription and clipboard management, allowing users to record audio via hotkeys and paste transcripts directly into other applications. It supports multiple local transcription engines, primarily Parakeet, and provides extensive configuration options for text formatting, hotkey behavior, and system permissions. The system manages model downloads, audio playback history, and background recording states while maintaining a sandboxed, menu-bar-driven interface.

Features

Added sleep management client for macOS

A new \SleepManagementClient\ has been introduced to prevent the macOS display from sleeping during critical operations, such as voice recording. This client utilizes IOKit power assertions to manage the system's sleep state, allowing applications to explicitly prevent sleep with a specific reason and release the assertion when the operation completes. The implementation is provided as a dependency injection client with a live implementation that handles assertion lifecycle management, ensuring that previous assertions are released before creating new ones.

HexCore/Sources/HexCore/SleepManagementClient · high confidence

Introduce PermissionClient for managing system permissions

Added a new PermissionClient architecture that provides a unified, dependency-injection-friendly interface for checking and requesting microphone, accessibility, and input monitoring permissions. This client also exposes app activation events, allowing the application to reactively re-check permission states when the app becomes active.

HexCore/Sources/HexCore/PermissionClient · high confidence

Introduce dedicated Model Download settings UI with curated Parakeet recommendations

A new Model Download section has been added to the Settings, providing a dedicated interface for managing local transcription models. Users can now browse a curated library of models, view star ratings for accuracy and speed, and download specific models directly from the settings screen. The UI prioritizes Parakeet models, highlighting the best option for English or multilingual use cases with badges, and simplifies the initial setup by guiding users to download a model if none is currently selected.

Hex/Features/Settings/ModelDownload · high confidence

Introduce transcript persistence client for audio recording storage

Added a new \TranscriptPersistenceClient\ that handles saving transcription results and associated audio files to the application's support directory, as well as deleting audio files when transcripts are removed. This client is integrated with the dependency injection system, providing a live implementation for production use and a test value for unit testing.

HexCore/Sources/HexCore/TranscriptPersistenceClient · high confidence

New app features: permission management, model bootstrap, and paste-last-transcript shortcut

The app now manages microphone, accessibility, and input-monitoring permissions directly, exposing their status in the UI and requesting them when needed. A new model bootstrap system tracks readiness and prompts users to resolve missing models. Additionally, a keyboard shortcut can now paste the most recent transcript from the history into the active field, with configurable hotkey support and proper task cancellation handling.

Hex/Features/App · high confidence

New beta announcement banner and improved floating window behavior

Users will now see a new 'Meet the new Hex' beta announcement banner directing them to the Rust rewrite, alongside an auto-download progress banner for model updates. Additionally, the app's floating widget window (InvisibleWindow) has been updated to stay stationary across spaces, ignore mouse events to prevent interference, and dynamically track the mouse's screen to ensure it remains visible when moving between displays.

Hex/Views · high confidence

New internal tooling for changeset generation and Rust beta banner testing

Added two new scripts in the tools directory to support internal workflows: a non-interactive changeset creator (add-changeset.ts) that allows AI agents or scripts to generate versioned changeset files via command-line arguments, and a Rust beta banner capture script (capture-rust-beta-banner.ts) that automates the building and screenshotting of the Rust beta settings UI across light, dark, narrow, and dismissed states for regression verification.

tools · high confidence

Behavioural changes

1 commit (0 fixes) modifying bin

A change to existing behaviour in bin — 1 commit, 1 file.

bin · low confidence · unverified

App sandboxing enabled and update mechanism improved

Hex now runs with macOS app sandboxing enabled, requiring specific entitlements for audio input, user-selected file access, network client access, and library validation. To support this, the app icon is now explicitly defined in the bundle, and the Sparkle auto-update system has been configured with an installer launcher service to ensure updates function correctly within the sandboxed environment.

Hex · high confidence

Diagnostics logging subsystem initialization

The application now initializes a dedicated OSLog logger for the Diagnostics subsystem. This ensures that diagnostic logs are properly categorized and ready for use, improving the ability to trace and debug issues related to diagnostics within the app.

Hex/App/Diagnostics · high confidence

Faster recording startup and new prewarming indicator

The transcription feature now pre-warms the audio recorder in the background, significantly reducing the delay between pressing the hotkey and the start of recording. A new 'prewarming' status is displayed in the transcription indicator overlay with a 'Model prewarming...' tooltip to inform users of this background activity. Additionally, the hotkey processor has been refactored to support configurable minimum key times and double-tap lock settings, improving responsiveness and reducing accidental triggers.

Hex/Features/Transcription · high confidence

Hex repository archived in favor of Rust rewrite

The repository has been archived as the project has been rewritten in Rust. The README now directs users to the new beta at hex.kitlangton.com and the source at anomalyco/hex. This repository preserves the original Swift app, its history, and its releases, with the README updated to reflect that this is the legacy Swift version. A Homebrew cask (hex.rb) and SwiftLint configuration (.swiftlint.yml) have been added to support the legacy project.

(repo-wide) · high confidence

Improved audio playback reliability and logging in History

The History feature now uses a dedicated AudioPlayerController to manage playback state, ensuring that playback is properly reset and tracked even after completion, which prevents stale player states. Additionally, all audio-related errors are now logged via the application's structured logging system instead of printing to the console, providing better visibility into playback issues.

Hex/Features/History · high confidence

Introduce Parakeet transcription engine and refine audio capture and hotkey reliability

Users can now use the Parakeet local transcription engine alongside existing models, with support for multiple variants, automatic legacy cache migration, and the ability to delete cached models. Recording reliability is improved through a 'super-fast' capture mode that keeps a warm buffer to reduce startup latency and prevent clipped endings, while hotkey monitoring is hardened to survive sleep cycles and macOS Sequoia permission changes. The pasteboard client now offers a choice between simulated typing and clipboard-based pasting, and sound effects are optimized to shut down the audio engine when idle to reduce background resource usage.

Hex/Clients · high confidence

Introduce word remappings and output formatting controls

A new Word Remappings view allows users to define custom word removals and replacements that apply to every transcript, alongside toggles to automatically convert output to lowercase or strip punctuation. This replaces the previous LLM-based text transformation approach with explicit, user-configurable rules for cleaning and standardizing transcript text.

Hex/Features/Remappings · high confidence

The menu bar extra now includes a "Paste Last Transcript" button that copies the most recent transcription to the clipboard, with support for a configurable keyboard shortcut. Additionally, when the app launches at login, it now stays hidden in the background (suppressing the Settings window and foreground UI) to provide a quieter startup experience, while the settings window title bar is no longer transparent.

Hex/App · high confidence

Migrate settings storage to HexCore with new transcription and UI options

The application's user settings have been migrated to the HexCore module, introducing a new \HexSettings\ struct that persists configuration to disk. This change adds several new user-configurable options: a \recordingAudioBehavior\ setting (defaulting to \doNothing\ instead of previous behaviors), controls for \lowercaseTranscripts\ and \removePunctuation\, a \soundEffectsVolume\ slider, and toggles for \wordRemovals\ and \wordRemappings\. It also introduces \doubleTapLockEnabled\ to allow disabling double-tap lock mode, \hasDismissedRustBetaBanner\ to manage UI banners, and \selectedModel\ to support multiple Parakeet model variants. Legacy settings like \pauseMediaOnRecord\ are handled via backward compatibility during the migration.

HexCore/Sources/HexCore/Settings · high confidence

Modernized logging infrastructure and centralized configuration constants

HexCore now uses structured \os.Logger\ instances for consistent, categorized logging across the application, replacing previous logging mechanisms. Additionally, timing thresholds and default settings (such as hotkey double-tap windows and minimum key durations) have been extracted into a central \HexCoreConstants\ enum to ensure uniform behavior and easier tuning. Storage path management has also been updated to use the Application Support directory with automatic migration from legacy Documents locations, ensuring Parakeet model caches are correctly located and accessible.

HexCore/Sources/HexCore · high confidence

New core models for hotkeys, transcription, and text transformations

This change introduces a set of foundational data models in HexCore that power recent feature updates. It adds \Modifier\ and \Modifiers\ structs to support per-side selection for hotkey modifiers (e.g., distinguishing left vs. right Command), and \KeyboardCommand\ to represent simulated key presses like Cmd+Enter. For transcription, it defines \ParakeetModel\ to support multiple model variants (English V2 and Multilingual V3) and \Transcript\/\TranscriptionHistory\ to store pasted transcripts with metadata. Finally, it provides \TranscriptFormattingApplier\ for lowercase/punctuation removal, \WordRemappingApplier\ with escape-sequence support, and \WordRemovalApplier\ for pattern-based text cleanup.

HexCore/Sources/HexCore/Models · high confidence

Redesigned Settings interface with new configuration options and permission management

The Settings view has been reorganized into distinct sections (General, History, Hot Key, Language, Microphone, Model, Permissions, Sound) to improve usability. New user controls include toggles for 'Prevent System Sleep while Recording', 'Super Fast Mode', and 'Copy to clipboard', as well as a picker for 'Audio Behavior while Recording' (Pause Media, Mute Volume, or Do Nothing). Users can now configure a dedicated hotkey for pasting the last transcript, adjust sound effects volume, and select a specific input microphone with a refresh button. The Permissions section now explicitly displays status for Microphone, Accessibility, and Input Monitoring, with direct buttons to grant access. Additionally, an About section provides version info, a changelog viewer, and links to GitHub and sponsor pages.

Hex/Features/Settings · high confidence

Refactor settings storage and introduce new model state management

The application's settings storage has been migrated to use a centralized \HexCore\ module, with the previous \HexSettings\ model now acting as a type alias for \HexCore.HexSettings\ and utilizing a new migration-aware file URL for persistence. This change also introduces new state models to support recent feature additions: \HotkeyPermissionState\ tracks accessibility and input monitoring permissions, \ModelBootstrapState\ manages the status and progress of model loading, and \Language\ models support the new output language selection and decoding options for transcription.

Hex/Models · high confidence

Refined hotkey activation logic and model matching utilities

The application introduces a new HotKeyProcessor that implements press-and-hold and double-tap lock recording modes, including a 0.3s safety threshold for modifier-only hotkeys to prevent OS shortcut conflicts and dirty-state handling to avoid accidental re-triggering. A new RecordingDecisionEngine enforces minimum recording durations, specifically ensuring modifier-only activations last at least 0.3s before proceeding to transcription. Additionally, a ModelPatternMatcher utility is added to support glob-pattern matching for model selection, resolving patterns to concrete model names with a preference for downloaded, non-turbo variants.

HexCore/Sources/HexCore/Logic · high confidence

Xcode project restructured with new dependencies and debug build separation

The Xcode project has been upgraded to version 26.2 and the app's marketing version bumped to 0.8.5. A new 'Hex Debug.app' build configuration is now available, allowing developers to run a separate debug instance alongside the release build. The project now integrates several new frameworks including HexCore, FluidAudio, MarkdownUI, Inject, Swift Sharing, Swift Case Paths, and Swift Identified Collections, while retaining existing dependencies like WhisperKit, Sparkle, and the Composable Architecture. Localization support has also been added via a new Localizable.xcstrings resource file.

Hex.xcodeproj · high confidence

Test coverage

Added test coverage for recording, model, and UI features; Added test coverage for settings migration, transcript formatting, and hotkey processor edge cases.

Dependencies

Updated Swift package dependencies and added HexCore module

This release updates several Swift package dependencies, including Composable Architecture (1.17.1 to 1.26.0), Swift Dependencies (1.6.3 to 1.14.1), Sparkle (2.6.4 to 2.9.4), and Swift Argument Parser (1.3.0 to 1.7.0). It also introduces a new HexCore module with its own Package.swift and resolved dependencies, adding libraries like Sauce, swift-log, and swift-dependencies. Additionally, new dependencies such as fluidaudio, inject, NetworkImage, swift-cmark, swift-jinja, and swift-markdown-ui have been added to the main project's Package.resolved.

(dependencies) · 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 56 → 47 (-8.5)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 92 → 91 (-1.4)
  • Architecture 97 → 88 (-9.6)
  • Maturity 58 → 58 (-0.1)
  • Readiness 37 → 37 (+0.2)
  • Security 94 → 95 (+1.6)
  • Event-Driven 72 → 37 (-35.5)

Resolved (4)

  • Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
  • Hotspot: Hex/Clients/KeyEventMonitorClient.swift (Hex/Clients/KeyEventMonitorClient.swift)
  • Hotspot: Hex/Features/Transcription/TranscriptionFeature.swift (Hex/Features/Transcription/TranscriptionFeature.swift)
  • Off-boarding risk: anonymized user #1

New (38)

  • Coverage not measured — Swift suite
  • Duplicated block (11 lines × 2) (Hex/Features/Remappings/WordRemappingsView.swift)
  • Duplicated block (12 lines × 2) (HexCore/Sources/HexCore/StoragePaths.swift)
  • Duplicated block (8 lines × 2) (Hex/Features/Settings/ModelDownload/ModelDownloadView.swift)
  • Floating branch dependency: sauce
  • Floating branch dependency: sauce
  • Hotspot: Hex/Features/App/AppFeature.swift (Hex/Features/App/AppFeature.swift)
  • Hotspot: Hex/Features/Settings/SettingsFeature.swift (Hex/Features/Settings/SettingsFeature.swift)
  • Inconsistent naming for event processing methods. One takes a specific event type as an argument, while the other is a parameterless method implying a specific event type (mouse click). This suggests a potential design inconsistency where mouse events are handled differently than key events, or one is a convenience wrapper.
  • MethodTooLong: DependencyValues.permissions (Hex/Clients/KeyEventMonitorClient.swift)
  • MethodTooLong: SettingsFeature.body (Hex/Features/Settings/SettingsFeature.swift)
  • Off-boarding risk: anonymized user #1
  • Outdated: combine-schedulers
  • Outdated: fluidaudio
  • Outdated: sparkle
  • Outdated: swift-argument-parser
  • Outdated: swift-case-paths
  • Outdated: swift-clocks
  • Outdated: swift-cmark
  • Outdated: swift-collections
  • …and 18 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

kitlangton/Hex 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 f58d52c4cc47b3b810174060bfb8dc6f99976870 — 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.