Skip to content
Samuel Fayn

Independent project

MALT

A hands-free voice assistant for macOS that takes real actions across email, documents, deployments, and the browser.

Role
Sole engineer
When
Oct 2026 – Present
Stack
  • Python
  • PyObjC
  • Vosk
  • Whisper
  • Kokoro TTS
  • Claude Code
  • MCP
  • TypeSafe Jev

MALT, screen by screen

Tour · 3 screens

Listening

Vosk, a speech recognizer running on the Mac, hears “Malt,” and Whisper, a second recognizer, double-checks the word.

01 / 03or swipe the screen

MALT runs on a Mac, so there is no website to visit. The screenshots show MALT’s own overlay and settings window, rendered through MALT’s JavaScript API.

01 / 03 · One request, end to end

of requests sent to the right Claude model, up from 88%
98%
lower AI cost than sending every request to Claude Opus
58%
faster answers to simple requests, which go to a smaller, quicker model
4–6×
from the end of a simple request until Malt starts speaking
~1 s
The problem

Say “Malt” or press Control-M, then ask for something. Malt carries out the request using every tool Claude Code can already reach on the Mac, and answers out loud.

What I built
  1. 01

    Wired MCP and AppleScript links to Gmail, Drive, Claude Docs, Vercel, Sprint Tracker, and Chrome, so multi-step tasks like checking email, updating sprints, and deploying sites run by voice.

  2. 02

    Designed a four-tier model router on TypeSafe’s Jev that raised the accuracy of model picks from 88% to 98%.

  3. 03

    Cut token costs 58% versus using Opus as the default model, and ran simple requests 4× to 6× faster.

Write-up

How MALT is built

01

Picking the right model

Malt keeps one Claude Code session running in the background (headless, over stream-json), so Malt can switch Claude models between requests without losing the conversation. Before each request, Jev answers four quick questions in about 100 ms: is the request about code, how big is the job, how many steps does the job take, and how much reasoning is needed. Malt’s own rules turn Jev’s answers into a model choice: Haiku, Sonnet, Opus, or Fable. If Jev has not answered within 0.8 seconds, simple keyword rules decide instead.

Diagram of MALT’s request path: wake, transcribe, route, act, speak

Each step of a request. Steps 01, 02, and 05 run on the Mac itself.