Skip to content
CAI
Software that uses CAICheck a score

vinzdg/codenotch

54.8

Adequate · 1 October 2026

64.3k

lines of production code

Swift

with Rust

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Codenotch is a cross-platform system utility for macOS, Windows, and Linux that monitors and displays real-time usage, quotas, and costs for various AI coding assistants and local runtimes. It provides a persistent, draggable interface that tracks session activity, token consumption, and spending limits across providers like Claude, Gemini, and Ollama. The system also includes features for local cost attribution, custom endpoint management, and secure device pairing.

Features

Adds a new Phone Link capability that allows connecting a phone to the Mac over the local network. The implementation includes a local HTTP server (PhoneLinkServer) that listens on private network interfaces, a pairing flow (PhoneLinkPairing, PhoneLinkPairingView) that generates time-limited QR codes, and a crypto layer (PhoneLinkCrypto) using AES-GCM for encrypting wire traffic and HMAC-SHA256 for request signing. Secrets are stored in the macOS Keychain (PhoneLinkKeychainSecretStore) rather than local files, and paired devices are persisted in a local JSON registry (PhoneLinkRegistry). The feature is currently disabled by default (PhoneLink.isAvailable = false) until a companion phone app is available, and the server enforces local-network-only access, rate limiting, and nonce replay protection.

Sources/PhoneLink · high confidence

Introduce Windows port of Codenotch

This change adds the initial Windows implementation of the Codenotch application, a system tray utility that provides usage tracking and status for AI coding assistants. The port includes core modules for activity monitoring (Cursor, Codex, Antigravity), usage quota retrieval via the Antigravity CLI or local bridges, Claude authentication, and UI components such as the notch, backdrop, and carry mechanics. It also introduces platform-specific features like autostart via Windows Registry, ConPTY-based CLI execution, and adaptive pill theming.

windows/codenotch · high confidence

Introducing Codenotch for Windows

A new Windows port of the Codenotch usage notch is now available, bringing the same edge-sitting pill design to Windows (and Linux) as the macOS original. The app displays AI allowance and Claude status for providers including Claude, Codex, Cursor, Grok, GitHub Copilot, OpenCode, and Antigravity. It features a carried notch that follows the mouse around screen edges, a hover card with per-window usage bars, and a tray menu for readings. The Windows version includes a dedicated hook for Claude Code integration, automatic token renewal, and an updater mechanism that checks for signed feeds or falls back to manual installer downloads.

windows · high confidence

Local cost tracking and project-level spending attribution

The app now calculates local usage costs by reading session transcripts from Claude Code and Codex, attributing token consumption to specific projects, and displaying the estimated spend per project in the hover card and a new Activity window. Users can view daily, weekly, and monthly breakdowns of sessions, active time, and costs, with support for subscription and API billing models, automatic plan detection, and configurable currency exchange rates.

Sources/Features · high confidence

The menu bar item now displays usage limits (percentages and reset countdowns) for providers with five-hour windows, controlled by a new opt-in setting. Active provider icons pulse in the menu bar to indicate live activity, and session completion sounds are played via AVAudioPlayer to bypass system alert-sound settings. The app also enforces single-instance startup by retiring older copies and adds a TerminalCommand helper to run CLI sign-in commands in the user's preferred terminal emulator.

Sources/App · high confidence

New localization system and support for Claude Desktop usage cache

The app now includes a custom localization engine (L10n.swift) that allows users to override the system language setting independently of the OS, ensuring test stability and consistent UI copy. A comprehensive string catalog (Localizable.xcstrings) adds translations for multiple languages including German, French, Indonesian, Japanese, Korean, Portuguese (Brazil), Russian, Simplified/Traditional Chinese, Ukrainian, Uzbek, and Turkish. Additionally, the app can now read usage data from Claude Desktop's HTTP cache by vendoring the Zstandard decoder (v1.5.7) to decompress cached response bodies, a capability previously unavailable on macOS. The Info.plist also updates the minimum system version to macOS 15.0 and adds a network usage description for phone-link features.

Sources · high confidence

New model and usage tracking infrastructure for local runtimes and custom endpoints

The application now includes a comprehensive set of model types to support monitoring local AI runtimes (such as Ollama and LM Studio) and custom API endpoints. This includes \LocalModelBrand\ for automatic model identification, \LocalModelPerformance\ for tracking generation speed, \LocalRuntimeReading\ for monitoring loaded models and memory usage, and \LocalTokenLedger\ for maintaining a daily token usage history. Additionally, \CustomEndpoint\ has been introduced to manage user-defined API endpoints with secure keychain storage, health checks, and configurable usage tracking (currency or tokens). The system also features new watchers (\UsageLimitWatcher\, \UsageResetWatcher\, \ThresholdNotifier\) that detect limit exhaustion, usage resets, and threshold crossings (80%/100%) to trigger appropriate notifications via the notch or macOS banners.

Sources/Model · high confidence

New session activity monitors and ownership logic for Claude, Gemini, Grok, Kimi, and LM Studio

The application now includes dedicated activity monitors for several AI providers, allowing the interface to display real-time session states. Claude sessions are now correctly attributed to their specific account profiles even when hosted by the Claude desktop app, and their busy/idle status is determined by reading transcript files rather than relying on potentially missing registry status. Gemini activity is monitored across CLI, OpenCode, and Hermes sources, with Hermes sessions using database leases to detect active turns. Grok monitors both TUI and headless runs, scanning processes off the main thread to avoid UI lag. Kimi sessions are tracked by matching running processes to working directories and reading wire logs for turn states. Additionally, LM Studio metrics are now collected, showing loaded models, generation speed, and a daily token ledger.

Sources/Sessions · high confidence

New usage providers for Amp, Apify, and Google Antigravity

The app now monitors usage and quotas for three additional AI platforms. Amp support reads the API token from the local secrets file and displays agent and orb usage limits. Apify support retrieves the API token from the environment, settings, or CLI keychain to show the monthly platform spend against the account's custom usage cap. Google Antigravity support discovers multiple isolated user profiles (e.g., \\~/.gemini/antigravity-work\) and parses their quota envelopes to display usage for Gemini and third-party models like Claude and GPT.

Sources/Providers · high confidence

Behavioural changes

Codenotch 1.20.0 release with cost tracking and UI updates

This update introduces a new Costs section that displays project spending against login allowances on a daily, weekly, and monthly basis, along with live-updating figures and a countdown timer during active sessions. The menu bar item now dynamically adjusts its width to fit the text, and the app adds support for Abacus.AI credits for custom endpoints while ensuring OpenCode and Grok sessions remain signed in. The release also includes polished Portuguese (Brazil) localization and requires macOS 15.0 or later.

site · high confidence

Fixes persistent macOS keychain password prompts for local development builds

Local development builds of Codenotch no longer trigger repeated keychain access prompts on launch. This is achieved by introducing \Scripts/sign-local.sh\, which creates and applies a stable self-signed code-signing identity to the app bundle, allowing macOS to persist 'Always Allow' keychain grants. Additionally, \Scripts/fix-keychain-partitions.sh\ updates existing keychain items to include the app's Team ID in their partition list, resolving the specific mismatch that caused the prompt loop. A new test script (\Scripts/test-signing.sh\) validates the Makefile's signing logic against various certificate scenarios.

Scripts · high confidence

New Settings panel with extensive customization options

The Settings panel has been redesigned with a dark, flat aesthetic and titles for every pane. Users can now customize the notch's appearance with new surface styles (Liquid Glass, Dark glass, Solid black), size options (Small, Medium, Large), and accent colors. Usage tracking is more flexible, with options for color transition styles (Hard step, Colour ramp), weekly limit rings (Off, Inside, Outside), and menu bar limit visibility. The panel also includes new configuration views for custom endpoints, DeepSeek pricing, and local AI providers like LM Studio and Ollama, along with language and display preferences.

Sources/Settings · high confidence

Notch can now be dragged around the entire screen perimeter and auto-folds for full-screen apps

The notch is no longer restricted to a single edge; it can be dragged along the full screen border (top, right, bottom, left) and will smoothly wrap around corners as a single continuous shape. It also automatically folds away when a full-screen application is active, and the cursor is now correctly updated even when the notch is not the frontmost app.

Sources/Notch · high confidence

Redesigned Liquid Glass surfaces and appearance-aware color ramps

The Notch panel now uses a Liquid Glass aesthetic with a new Dark Glass surface style that maintains a black bezel appearance regardless of the Mac's system theme. Colors in the design system are now resolved dynamically based on the current appearance (Light or Dark mode) to ensure proper contrast, including specific adjustments for tooltips and usage rings. The usage ring's color now ramps continuously across the full 0-100% range using per-appearance interpolation. Additionally, the system supports macOS's 'Reduce Transparency' accessibility setting, which adjusts the glass effect accordingly.

Sources/DesignSystem · high confidence

Windows notch UI redesigned to match macOS layout and behavior

The Windows Codenotch interface has been rebuilt to mirror the macOS experience, introducing a pill-shaped notch that can be carried around the screen edges (including corners) via a move handle, with an adaptive folded state that blends with the background. The UI now features a hover card with a shaped tail, usage rings sized to 44px (matching the Mac's 44/70 ratio), and a settings window with a sidebar layout, Mica-style transparency, and controls for theme, notch size (Small/Medium/Large), and weekly ring style (including dashed). The notch respects Windows animation settings and reduced motion preferences, and the interface supports multiple edges (left, right, top, bottom) with appropriate mirroring and positioning of the pill, card, and tail.

windows/codenotch/ui · high confidence

Test coverage

Expanded test coverage for new providers and UI accessibility; New CI scripts to validate UI scripts and test localized/auth behaviors.

Dependencies

Initial Windows port of Codenotch

This change introduces the Windows version of the Codenotch application, adding a new Rust-based codebase under the \windows/\ directory. The implementation uses Tauri v2 for the UI framework and includes specific dependencies for Windows system integration, such as \rusqlite\ to read Cursor's credential database and \native-tls\ to leverage the OS's native TLS stack (Schannel) for secure updates and API communication. The package also defines a \codenotch-hook\ utility for reporting hook events and auto-starting the main app.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 61 → 55 (-6.5)
  • Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 86 → 45 (-40.9)
  • Architecture 96 → 98 (+2.4)
  • Maturity 69 → 68 (-0.4)
  • Readiness 62 → 60 (-1.5)
  • Security 75 → 80 (+4.8)
  • Accessibility 52 → 62 (+10.4)
  • Performance 61 (new)

Resolved (33)

  • Change coupling: AppDelegate.swift ↔ NotchRootView.swift (Sources/App/AppDelegate.swift)
  • Change coupling: TooltipCard.swift ↔ NotchViewModel.swift (Sources/Features/TooltipCard.swift)
  • Change coupling: TooltipCard.swift ↔ NotchWindowController.swift (Sources/Features/TooltipCard.swift)
  • Duplicated block (12 lines × 3) (Sources/Notch/NotchRootView.swift)
  • Duplicated block (13–14 lines × 2) (Sources/App/AppDelegate.swift)
  • Duplicated block (6 lines × 2) (Sources/Providers/DevinLocalProvider.swift)
  • Duplicated block (6 lines × 2) (Sources/Providers/KimiUsage.swift)
  • Duplicated block (8 lines × 2) (Sources/Providers/CursorUsage.swift)
  • Duplicated block (9–11 lines × 4) (Sources/Providers/CommandCodeProvider.swift)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Hotspot: Sources/Notch/FullScreenDetector.swift (Sources/Notch/FullScreenDetector.swift)
  • Hotspot: Sources/PhoneLink/PhoneLinkRequestHandler.swift (Sources/PhoneLink/PhoneLinkRequestHandler.swift)
  • Hotspot: Sources/Providers/CredentialCache.swift (Sources/Providers/CredentialCache.swift)
  • Hotspot: Sources/Providers/DevinUsage.swift (Sources/Providers/DevinUsage.swift)
  • Hotspot: Sources/Sessions/OllamaRelayServer.swift (Sources/Sessions/OllamaRelayServer.swift)
  • Low cohesion: Preferences (LCOM4 5) (Sources/Settings/Preferences.swift)
  • Low cohesion: StatusItemController (LCOM4 4) (Sources/App/StatusItemController.swift)
  • Members sharing a duplicated core (4 members, 50+ identical tokens) (Sources/Providers/ClaudeOAuthProvider.swift)
  • …and 13 more

New (257)

  • AccountRow.body (cognitive 31) (Sources/Settings/SettingsView.swift)
  • AccountRow.body (cyclomatic 29) (Sources/Settings/SettingsView.swift)
  • AmpUsage.parse (cognitive 35) (Sources/Providers/AmpUsage.swift)
  • AmpUsage.parse (cyclomatic 31) (Sources/Providers/AmpUsage.swift)
  • Change coupling: AppDelegate.swift ↔ ProviderGlyph.swift (Sources/App/AppDelegate.swift)
  • Change coupling: UsageModel.swift ↔ ProviderAccount.swift (Sources/Model/UsageModel.swift)
  • Change coupling: config.rs ↔ i18n.rs (windows/codenotch/src/config.rs)
  • Change coupling: i18n.rs ↔ traymenu.rs (windows/codenotch/src/i18n.rs)
  • Change-coupling hub: GlyphOutline.swift → AppDelegate.swift, UsageModel.swift, SettingsView.swift (Sources/Providers/GlyphOutline.swift)
  • Change-coupling hub: ProviderRing.swift → AppDelegate.swift, TooltipCard.swift, Preferences.swift, SettingsView.swift (Sources/Features/ProviderRing.swift)
  • ClassTooLong: CustomEndpointsSettingsView (Sources/Settings/CustomEndpointsSettingsView.swift)
  • ClassTooLong: NotchViewModel (Sources/Notch/NotchViewModel.swift)
  • ClassTooLong: ReleaseNotes (Sources/Settings/ReleaseNotes.swift)
  • ClassTooLong: UsageStore (Sources/Model/UsageStore.swift)
  • ClaudeOAuthProvider.fetchSnapshot (cognitive 18) (Sources/Providers/ClaudeOAuthProvider.swift)
  • ClaudeOAuthProvider.fetchSnapshot (cyclomatic 19) (Sources/Providers/ClaudeOAuthProvider.swift)
  • CodexActivityMonitor.liveConversations (cognitive 23) (Sources/Sessions/CodexActivityMonitor.swift)
  • CodexActivityMonitor.liveConversations (cyclomatic 18) (Sources/Sessions/CodexActivityMonitor.swift)
  • CodexOpenRollouts.paths (cognitive 27) (Sources/Sessions/CodexActivityMonitor.swift)
  • CodexRolloutActivity.state (cognitive 34) (Sources/Sessions/CodexActivityMonitor.swift)
  • …and 237 more

Changes since last survey

  • 300 commits — 275 feature/other, 25 fixes

By area

  • (repo) — 92 commits
  • windows/codenotch — 59 commits
  • Sources/Notch — 51 commits
  • Sources/Providers — 27 commits
  • Sources/App — 13 commits
  • (root) — 11 commits
  • Sources/Localizable.xcstrings — 9 commits
  • Sources/Model — 8 commits
  • .github/workflows — 5 commits
  • Sources/Sessions — 5 commits
  • Sources/Settings — 5 commits
  • site/Codenotch.dmg — 5 commits
  • Sources/Features — 3 commits
  • Tests/UsageBandTests.swift — 2 commits
  • Sources/Costs — 1 commit
  • Tests/CustomEndpointTests.swift — 1 commit
  • Tests/KimiUsageTests.swift — 1 commit
  • Tests/StatusItemSummaryTests.swift — 1 commit
  • site/Codenotch-1.20.0.dmg — 1 commit

Notable commits

  • fix: Fix Liquid Glass dim palette test
  • fix: Fix Windows update checks without signed feed
  • fix: Fix tests and compile errors for NotchFleet
  • fix: Fix the QianwenAI ring's gateway call, which read nothing
  • fix: Merge #368: fix(providers): detect ZCode Start Plan
  • fix: Merge #369: fix(localization): translate Japanese release notes
  • fix: Merge #377: fix(localization): polish Brazilian Portuguese translations
  • fix: Merge #391: Fix Windows update checks before signing is configured
  • fix: Merge #398: fix(providers): macOS — OpenCode reads its sign-in from SQLite opencode.db
  • fix: Revert "Add menu bar reset display preference"
  • fix: Revert "Show native provider menu icons and refresh shared usage more often"
  • fix: Revert "Take every animation back off the join"
  • fix: fix(i18n): register Indonesian bundle localization
  • fix: fix(localization): polish Brazilian Portuguese translations
  • fix: fix(localization): translate Japanese release notes
  • fix: fix(model): ensure LimitWindow decodes older archives without prefersUsedText
  • fix: fix(notch): clamp tooltip tail offset to prevent modal deformation
  • fix: fix(providers): detect ZCode Start Plan
  • fix: fix(providers): macOS OpenCode reads its sign-in from SQLite opencode.db
  • fix: fix(providers): update OpenCode to read OAuth tokens from SQLite opencode.db
  • …and 280 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

vinzdg/codenotch 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 6e8b0f828741233240d5fb10f7d52cf8eaf6efe4 — 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.