The Problem A macOS utility that records microphone and system audio simultaneously, then transcribes on‑device, is useful for meeting notes, but the repository provides no automated way to verify that changes do not break recording or transcription behaviour.

What This Does Quill is a menu‑bar app that captures two separate audio tracks – mic.caf from the default input and system.caf from Core Audio process taps – and writes them to ~/Recordings/<yyyy.MM.dd‑HHmm>/. After stopping a recording, TranscriptionEngine.swift (backed by ParakeetEngine.swift) transcribes each track separately, applies start‑offset alignment, and merges the results into a speaker‑tagged transcript.json and transcript.md. Configuration lives in ~/.config/quill/config.json; options such as mic_voice_processing and on_stop hook are read from that file. The build is performed with swift build -c release and the binary installed to /usr/local/bin/quill.

How It Is Wired Execution starts at Sources/quill/Quill.swift, which imports Config.swift to load user settings, then creates a RecordingSession.swift that coordinates MicRecorder.swift and SystemAudioRecorder.swift for the two audio tracks. When the user stops recording, Quill.swift triggers TranscriptionCoordinator.swift, which queues TranscriptionEngine.swift (the Parakeet model via FluidAudio’s Core ML port). The module graph contains 13 source files with 0 internal modules and 0 import edges, so there are no circular dependencies or hidden hubs – any change touches a flat set of files, making the impact of modifications easy to reason about, albeit without automated verification.

How To Use It

  • Clone the repository: git clone https://github.com/moses-y/quill
  • Build & install: ``sh cd quill swift build -c release sudo cp .build/release/quill /usr/local/bin/quill ``
  • Run: quill from a terminal or via the LaunchAgent.
  • Configure (optional): edit ~/.config/quill/config.json to set recordings_dir, transcription.enabled, mic_voice_processing, or on_stop hooks.

Real‑World Use A user starts a meeting, clicks the menu‑bar feather to record, and later stops the recording. While they leave for lunch, Quill transcribes both tracks on‑device; when finished a notification fires and the transcript appears in ~/Recordings/2025.08‑12-1430/. The separate mic and system tracks enable simple diarization (“me” vs “them”) without a speaker‑identification model.

Code Health & Issues

  • MEDIUM – Deep nesting in Sources/quill/Audio/MicRecorder.swift (max indentation depth 6) makes control flow hard to follow; flatten with early returns/guard clauses.
  • MEDIUM – High branching density in Sources/quill/Config.swift (29 branch points over 49 lines); decompose decision logic or use a strategy dispatch.
  • HIGH – No test suite; 13 source files have zero test coverage, so regressions reach production undetected. Add at least one test per public entry point and a CI step that runs them.
  • HIGH – No CI/CD pipeline; there is no automated build or test gate. Add a GitHub Actions workflow that builds the project and runs tests on every push and pull request.

The Bottom Line Quill delivers a clean, on‑device recording + transcription experience with minimal dependencies and a flat module graph, making it easy to understand the data flow. The main risks are the absence of tests and CI, plus some cognitive‑load hotspots in the audio and config modules. It is well‑suited for individual macOS users who need quick, local meeting notes, but teams requiring rigorous change‑control should add test coverage and a CI gate before relying on it for critical workflows.