This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# Run the application
python app.py
# Or run as module
python -m rivavoice# Run all tests
pytest
# Run specific test file
pytest tests/test_config.py
pytest tests/test_transcribers.py
# Run with coverage
pytest --cov=rivavoice --cov=pyscribetranscribe# Run flake8 linter
flake8 .
# Run black formatter (check mode)
black --check .
# Apply black formatting
black .# Build the macOS app bundle
python setup.py py2app
# Create icon from PNG
./create_icns.sh# Install from pyproject.toml
pip install -e .
# Install with dev dependencies
pip install -e ".[dev]"RivaVoice is a macOS speech-to-text application with these key components:
rivavoice/ - Main application package
__main__.py- Entry point with single-instance checking, permissions handling, and Qt application setupconfig.py- JSON-based configuration management using ~/.rivavoiceconfig.jsonconstants.py- All application constants, config keys, and defaultstray_manager.py- System tray integration for background operationutils.py- Shared utilities
rivavoice/ui/ - PyQt6-based UI components
main_window.py- Main application window with recording controlsrecording_view.py- Recording interface with visual feedback (pulsing orb)settings_view.py- Settings management interfaceonboarding.py- First-run onboarding flowcomponents.py- Reusable UI components (card-based design)
pyscribetranscribe/ - Audio recording and transcription
recorder.py- PyAudio-based audio recording with WAV file outputtranscriber.py- ElevenLabs API transcription clientopenai_realtime_transcriber.py- OpenAI WebSocket-based real-time transcription
- Configuration: Centralized in
constants.pywith Config class for persistence - Callbacks: Extensive use of callbacks for async operations (recording, transcription)
- Single Instance: Uses QLocalServer/Socket to ensure only one app instance
- Permissions: Handles macOS microphone and input monitoring permissions
- Background Operation: Runs as menu bar app (LSUIElement=True)
- PyQt6: UI framework
- pyaudio: Audio recording
- pykeybindmanager: Global keyboard shortcuts (FN key)
- requests: HTTP API calls
- websockets/aiohttp: Real-time transcription
- pyperclip: Clipboard integration
- ElevenLabs: Primary transcription service (scribe_v1 model)
- OpenAI: Alternative real-time transcription (gpt-4o-mini-transcribe)
Both require API keys configured in settings.