MIRA

March 21, 2026 · View on GitHub

Prerequisites

  • macOS 14.2+ (ScreenCaptureKit process tap support)
  • Rust stable (edition 2021)
  • Node.js 18+ and npm
  • Python 3.10+ (for sidecar build only)
  • Xcode Command Line Tools

Build Instructions

1. Bootstrap (sidecar + resources)

A single script builds the pyannote diarization sidecar, fetches SQLite extensions, and downloads/converts the ONNX models. Everything that needs Python shares one venv (sidecar-src/.venv).

./scripts/bootstrap.sh

This handles:

  • Pyannote sidecar — PyInstaller-bundled diarization binary (requires pyannote.audio, torch, PyInstaller). A HuggingFace token with access to pyannote/speaker-diarization-3.1 is required at runtime, not build time.
  • vec0.dylibsqlite-vec extension
  • silero_vad.onnxSilero VAD v5 model
  • yolo26n.onnxYOLO26n face detector, converted from .pt via ultralytics (installed automatically in the venv)

To fetch only resources without building the sidecar:

./scripts/bootstrap.sh --skip-sidecar

2. Install frontend dependencies

npm install

3. Build and run

npx tauri dev    # Development mode
npx tauri build  # Production build

Runtime Configuration

Set API keys in application settings:

  • OpenRouter API key — required for all LLM intelligence
  • HuggingFace token — required for pyannote diarization models

macOS Permissions

The app requires Screen Recording and Microphone permissions. Grant these in System Settings → Privacy & Security on first launch.

Known Limitations / Deferred Features

  • Voice Activity Detection (Silero VAD): Full Silero VAD is integrated; falls back to RMS energy gating if the ONNX model is unavailable
  • Incremental JSON streaming: SSE transport is implemented but observations are delivered atomically, not field-by-field
  • Face embedding re-identification (MobileFaceNet): Identity relies on IoU tracking + OCR + TalkNet; MobileFaceNet would add cross-session re-ID
  • OCR bounding boxes: Uses index-based position approximation; full CGRect extraction requires objc2-core-graphics bindings not in the dependency graph