yazinsai/OpenOats
57.6
Adequate · 1 October 2026
42k
lines of production code
Swift
primary language
2
measurements over time
What this system is
OpenOats is a native macOS application designed for recording meetings and generating notes, built in Swift to replace a previous Python prototype. It manages the full meeting lifecycle through a state machine, handling audio capture, transcription via WhisperKit, and integration with local LLM endpoints for note generation. The system supports automatic updates via Sparkle, installation through Homebrew, and includes tools for benchmarking transcription accuracy and debugging AI persona behaviors.
Features
Add Homebrew Cask for OpenOats
Users can now install and update the OpenOats application via Homebrew using the new \openoats.rb\ cask. The cask is configured to install version 1.87.1 from the official GitHub releases, requires macOS Sequoia, and includes automatic update support. It also defines a cleanup routine to remove associated application support, cache, and preference files when the app is removed.
Casks · high confidence
Initial multilingual transcription benchmark suite
Added a new benchmarking tool in the \benchmark\ directory to evaluate OpenAI Whisper model performance across Polish, Spanish, French, and German. The suite includes a Python script (\run\_benchmark.py\) that runs the Whisper CLI against audio samples defined in \samples.json\ and outputs Word Error Rate (WER), Character Error Rate (CER), and latency metrics to \results.json\. This allows users to compare the accuracy and speed of the \large-v3-turbo\, \small\, and \base\ models on multilingual content.
benchmark · high confidence
New Sidecast Debug tool for testing personas and LLM integration
A new standalone debug interface is available at tools/sidecast-debug, allowing users to test the Sidecast persona system and LLM integration against YouTube videos. The tool features a local Express proxy (port 3001) to fetch YouTube transcripts, a Vite-based UI (port 3000) with a three-panel layout for configuration, video playback, and output, and support for multiple LLM providers (OpenRouter, Ollama, OpenAI-compatible). Users can configure persona behaviors (verbosity, cadence, evidence policy), adjust generation intensity, and manage settings via a custom model picker and export/import functionality.
tools, tools/sidecast-debug · high confidence
Removals
Removed Python prototype files from the On The Spot app
The Python prototype implementation for the On The Spot app has been removed. This includes the core logic for speech-to-text transcription, knowledge-base search, and UI theming, as well as supporting modules for microphone streaming, session storage, and macOS-specific window overlay tuning. These files are no longer part of the application.
ots · high confidence
Architecture
Introduces new application architecture with AppContainer, AppCoordinator, and dedicated controllers
The app has been restructured around a new container and coordinator pattern to improve testability and state management. \AppContainer\ now handles bootstrap logic and service initialization, while \AppCoordinator\ centralizes the meeting lifecycle state machine and cross-cutting state. Dedicated controllers have been introduced for specific domains: \LiveSessionController\ manages live recording side effects and state, \MeetingDetectionController\ handles the auto-detection lifecycle, \NotesController\ owns notes and history business logic, and \MenuBarController\ manages the status item. This change also includes a new \AppUpdaterController\ that safely handles the Sparkle updater, specifically skipping it during unbundled development runs to prevent startup errors.
OpenOats/Sources/OpenOats · high confidence
Behavioural changes
Build and packaging infrastructure migrated from Python/PyInstaller to native Swift with Sparkle and Homebrew support
The macOS application build process has shifted from the legacy Python-based 'On The Spot' (PyInstaller) pipeline to a native Swift build for 'OpenOats'. The new build script (build\_swift\_app.sh) compiles the Swift source, constructs the .app bundle, embeds the Sparkle framework for auto-updates, and handles code signing and notarization. Packaging is updated to create a styled DMG with a drag-to-Applications layout, and Homebrew cask updates are now automated via a dedicated script. The old build\_macos\_app.sh has been removed.
scripts · high confidence
Introduce pure meeting lifecycle state machine and external command handling
The app now uses a pure, testable state machine (MeetingState) to manage the meeting recording lifecycle, replacing ad-hoc state tracking with explicit transitions for starting, stopping, discarding, and finalizing sessions. This change is supported by new domain models for external commands (ExternalCommand) to handle deep links and menu bar actions, and updated data structures for speakers (Speaker) and utterances (Utterance) to support the new flow. Additionally, the Info.plist has been updated to reflect the new app name 'OpenOats' and bundle ID 'com.openoats.app', and the system now allows HTTP connections to local network LLM endpoints via NSAllowsLocalNetworking.
OpenOats/Sources · high confidence
OpenOats replaces Python prototype with native macOS app and adds legal compliance
The project has been renamed to OpenOats and transitioned from a Python/Tkinter prototype (app.py, desktop\_app.py) to a native macOS application distributed via Homebrew cask and DMG, requiring macOS 14.2+. A new MIT license is included, and the app now enforces a recording consent acknowledgment and displays a legal disclaimer regarding jurisdiction-specific recording laws before use.
(repo-wide) · high confidence
Test coverage
Add macOS UI smoke test harness; Initial test suite for core OpenOats modules.
Dependencies
Migrate from Python prototype to Swift-based OpenOats app
The project has replaced the previous Python-based prototype (defined in the deleted pyproject.toml and requirements.txt) with a new Swift application named OpenOats. This change introduces a Swift Package Manager structure (Package.swift) targeting macOS 14.2+, integrating key dependencies such as FluidAudio 0.13.5, WhisperKit 0.17.0, and Sparkle 2.9.0 for native audio processing, transcription, and update capabilities. Additionally, a new sidecast-debug tool has been added using Node.js dependencies.
(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 → 58 (+1.5)
- Rubric changed (rubric-2026.09.11 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 78 → 78 (+0.2)
- Architecture 61 → 69 (+7.7)
- Maturity 65 → 65 (+0.0)
- Readiness 51 → 51 (-0.3)
- Security 64 → 72 (+7.7)
- Domain Modelling 100 → 100 (+0.0)
- Accessibility 54 → 54 (+0.3)
- Performance 100 (new)
Resolved (37)
- ClassTooLong: StreamingTranscriber (OpenOats/Sources/OpenOats/Transcription/StreamingTranscriber.swift)
- Dependency hygiene PARTLY measured — npm pinning read, dependency currency not (no pnpm-resolved versions to grade)
- Documentation: no installation or build instructions (README.md)
- Documentation: no installation or build instructions (docs/superpowers/plans/2026-03-26-realtime-suggestions.md)
- Documentation: no usage examples (README.md)
- Documentation: no usage examples (docs/superpowers/plans/2026-03-26-realtime-suggestions.md)
- Duplicated block (20 lines × 2) (OpenOats/Sources/OpenOats/Intelligence/OpenRouterClient.swift)
- Edited copy of a member (48 corresponding lines) (OpenOats/Sources/OpenOats/App/LiveSessionController.swift)
- Hotspot: OpenOats/Sources/OpenOats/App/LiveSessionController.swift (OpenOats/Sources/OpenOats/App/LiveSessionController.swift)
- Hotspot: OpenOats/Sources/OpenOats/App/MeetingDetectionController.swift (OpenOats/Sources/OpenOats/App/MeetingDetectionController.swift)
- Hotspot: OpenOats/Sources/OpenOats/App/NotesController.swift (OpenOats/Sources/OpenOats/App/NotesController.swift)
- Hotspot: OpenOats/Sources/OpenOats/Intelligence/BatchTextCleaner.swift (OpenOats/Sources/OpenOats/Intelligence/BatchTextCleaner.swift)
- Hotspot: OpenOats/Sources/OpenOats/Intelligence/LiveTranscriptCleaner.swift (OpenOats/Sources/OpenOats/Intelligence/LiveTranscriptCleaner.swift)
- Hotspot: OpenOats/Sources/OpenOats/Intelligence/SidecastEngine.swift (OpenOats/Sources/OpenOats/Intelligence/SidecastEngine.swift)
- Hotspot: OpenOats/Sources/OpenOats/Intelligence/SuggestionEngine.swift (OpenOats/Sources/OpenOats/Intelligence/SuggestionEngine.swift)
- Hotspot: OpenOats/Sources/OpenOats/Models/SidecastPreset.swift (OpenOats/Sources/OpenOats/Models/SidecastPreset.swift)
- Hotspot: OpenOats/Sources/OpenOats/Storage/SessionRepository.swift (OpenOats/Sources/OpenOats/Storage/SessionRepository.swift)
- Hotspot: OpenOats/Sources/OpenOats/Transcription/BatchAudioTranscriber.swift (OpenOats/Sources/OpenOats/Transcription/BatchAudioTranscriber.swift)
- Hotspot: OpenOats/Sources/OpenOats/Transcription/TranscriptionEngine.swift (OpenOats/Sources/OpenOats/Transcription/TranscriptionEngine.swift)
- Hotspot: OpenOats/Sources/OpenOats/Views/MeetingDetailPane.swift (OpenOats/Sources/OpenOats/Views/MeetingDetailPane.swift)
- …and 17 more
New (63)
- ContentView.contentWithLifecycle (cognitive 25) (OpenOats/Sources/OpenOats/Views/ContentView.swift)
- ContentView.contentWithLifecycle (cyclomatic 20) (OpenOats/Sources/OpenOats/Views/ContentView.swift)
- ContentView.rootContent (cognitive 31) (OpenOats/Sources/OpenOats/Views/ContentView.swift)
- ContentView.rootContent (cyclomatic 18) (OpenOats/Sources/OpenOats/Views/ContentView.swift)
- ControlBar.body (cognitive 52) (OpenOats/Sources/OpenOats/Views/ControlBar.swift)
- ControlBar.body (cyclomatic 31) (OpenOats/Sources/OpenOats/Views/ControlBar.swift)
- Coverage not measured — Swift suite
- Duplicated block (10 lines × 2) (OpenOats/Sources/OpenOats/Wizard/ProviderSetupStepView.swift)
- Duplicated block (10 lines × 4) (OpenOats/Sources/OpenOats/Wizard/ConfirmationStepView.swift)
- Duplicated block (11 lines × 2) (OpenOats/Sources/OpenOats/Views/HomeTimelineWorkspaceView.swift)
- Duplicated block (11 lines × 2) (OpenOats/Sources/OpenOats/Wizard/ConfirmationStepView.swift)
- Duplicated block (13 lines × 2) (OpenOats/Sources/OpenOats/Intelligence/OpenRouterClient.swift)
- Duplicated block (15 lines × 2) (OpenOats/Sources/OpenOats/Views/HomeTimelineWorkspaceView.swift)
- Duplicated block (16 lines × 3) (OpenOats/Sources/OpenOats/Wizard/ConfirmationStepView.swift)
- Duplicated block (17 lines × 2) (OpenOats/Sources/OpenOats/Intelligence/SidecastEngine.swift)
- Duplicated block (18 lines × 2) (OpenOats/Sources/OpenOats/Audio/SystemAudioCapture.swift)
- Duplicated block (20 lines × 2) (OpenOats/Sources/OpenOats/Wizard/LanguagePrivacyStepView.swift)
- Duplicated block (23 lines × 2) (OpenOats/Sources/OpenOats/Wizard/LanguagePrivacyStepView.swift)
- Duplicated block (5–9 lines × 3) (OpenOats/Sources/OpenOats/Views/SidecastSettingsTab.swift)
- Duplicated block (7 lines × 2) (OpenOats/Sources/OpenOats/Settings/SettingsStore.swift)
- …and 43 more
Changes since last survey
- 4 commits — 3 feature/other, 1 fixes
By area
- OpenOats/Sources — 2 commits
- (root) — 1 commit
- Casks/openoats.rb — 1 commit
Notable commits
- fix: Support macOS Sonoma 14.2+ and fix system audio capture (#721)
- change: Accept full chat-completions URLs for OpenAI-compatible providers (#724)
- change: Let local model downloads use a custom Hugging Face Hub endpoint (#723)
- change: Remove ApiSmart sponsor from README
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
yazinsai/OpenOats 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 c6c6f164d0d7294958252c8a2f7f662c1c5e2c70 — 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.