Work / AI Systems

Project Omni

The native Rust half of a hold-to-talk AI dictation app: global hotkey, streamed audio, screen capture, typed-back text.

Status
explored
Role
Solo: directed Cursor’s agent phase by phase
Timeline
Apr 2026 →
  • Rust
  • Tauri 2
  • Tokio
  • tokio-tungstenite
  • cpal
  • rdev
  • xcap
  • enigo
  • React 19
  • Tailwind

TL;DR

  • The idea: hold Cmd/Ctrl+Shift+Space, speak, and the text streams into whatever app has focus.
  • I directed Cursor’s agent through the native Tauri 2 / Rust client in one four-phase session, type-checking after every phase.
  • The cloud transcription relay was never built, so Omni stays a client-side spike.

What I built

Three threads do the work. A global rdev listener catches the chord. A session loop grabs one RAM-only screen frame (the hook for screen context; nothing touches disk) and opens the microphone with cpal. A Tokio relay streams raw PCM over a WebSocket and uses enigo to type returned tokens into the focused app while the chord is held.

A React 19 settings screen runs native permission probes: microphone, Accessibility and Screen Recording on macOS, and the microphone consent store and UI Automation on Windows. By design the client holds no API keys.

The hard part

Never block the audio callback. Capture runs on a real-time thread, and the network doesn’t.

A bounded 128-slot queue that drops audio when full → the capture callback can never stall behind a slow socket → under a long network stall you lose audio instead of freezing the app. The relay reconnects with backoff from 500 ms to 30 s, so a flaky connection recovers without hammering the server.

Status

Explored. Every phase type-checked, but the transcription relay the client talks to was never built, so there was nothing to run it against end to end.

Verified numbers

MetricValueSource
Rust lines across 13 files~1,032local: project-omni/src-tauri/src/
Relay reconnect backoff500 ms → 30 slocal: project-omni/src-tauri/src/relay.rs:101
PCM queue, drop-on-full128 slotslocal: project-omni/src-tauri/src/relay.rs:61
m.mittal
Home
Work
Research
Lab
About
Experience
Now
Résumé
Uses
Colophon
Contact
AccountWardin-build
Redlbuilt
The Councilresearch
BEMAresearch
EXIT LIQUIDITYin-build
NEXUSarchived
Warrant + Forgebuilt
Concordarchived
BlueCollarPalin-build
Chispenbuilt
Warrant Portalbuilt
JobAppin-build
Night/Dayexplored
BLACKSITE: NULLin-build
SlugBitesbuilt
Riptidebuilt
AeroBitesarchived
Internbuilt
CAD & 3D printingexplored
ForgeCouncilexplored
ADDE: adversarial due-diligence engineexplored
Model routing in practiceexplored
AI due-diligence market mapexplored
Quorumarchived
Colossus Wakeexplored
FitFindrbuilt
Project Omniexplored
Oblivionexplored
MeetWisebuilt
EyeOSexplored
LinkLeap AIexplored
Up-Toexplored
Offline speech-to-notes (Java)explored
AI-assisted game production pipelineexplored
COLLAPSEarchived
THE TRIALSarchived
EcoNodearchived
ESP32-S3 / LoRa benchexplored
CleanPlaybuilt
Rezonyrbuilt
Habit Tracker Telegram Botbuilt
Job Board Aggregatorin-build
Visual Hand Trackbuilt
CLI Task Trackerbuilt
All work44 entries
Can’t Hallucinate, Can Still Be Wrong: Calibration of a Typed-Decision Model Under Input Noisepaper
Disagreement as Signal: A Hybrid Multi-Agent and Council Architecture for Error Detection in LLM Systemspaper
Killing Good Ideasessay
Uncorrelated Failure Modesessay
ADDE: adversarial due-diligence engineexplored
AI due-diligence market mapexplored
AI-assisted game production pipelineexplored
Aura Chatexplored
Colossus Wakeexplored
EcoNodearchived
ESP32-S3 / LoRa benchexplored
EyeOSexplored
FitFindrbuilt
ForgeCouncilexplored
LinkLeap AIexplored
MeetWisebuilt
Model routing in practiceexplored
Offline speech-to-notes (Java)explored
Oblivionexplored
Print benchexplored
Project Omniexplored
Provably-fair outcome enginebuilt
Quorumarchived
Up-Toexplored
Copy hello@mitanshm.com
Switch theme
Play motion
RésuméPDF
Open GitHub ↗mit37
Open LinkedIn ↗
Toggle layout gridh
Toggle single-key shortcuts/ h