Jev Voice is Kevin’s open-source app that lets you control your Mac by voice. It captures audio locally, transcribes with Whisper on your machine, sends one short request to the Jev model to pick a typed action, then runs the macOS action: open apps, type, search, scroll or press keys. Source: github.com/kevinbadi/jev-voice.
mic
|
v
energy VAD (silence marks the end of a command)
|
v
whisper.cpp (Metal, local, ~100 ms)
|
v
Jev / TypeSafe (one call, ~250 ms, typed action)
|
v
macOS actions (open, type, key, scroll)
|
v
say (spoken confirmation)What Is Jev Voice and How Does It Control Your Mac by Voice?
Jev Voice is a small voice layer for macOS that turns a spoken sentence into one typed action and runs it. You say a command, it comes back as an action with arguments, and code decides what happens next.
The README describes it in four lines: “Talk to your Mac. Local whisper.cpp + one Jev (TypeSafe) call per command + macOS automation.” That is the whole design. It is Kevin’s project, published at github.com/kevinbadi/jev-voice, and it asks for a TypeSafe key from console.typesafe.ai before it will run.
The important split is between understanding and doing. Jev Voice does not hand your command to a language model and let it write AppleScript. It sends the transcript to Jev, the TypeSafe System One model, which returns a typed action plus typed arguments in a single request. Your code owns execution.
How the Pipeline Works: Mic VAD to Local whisper.cpp to One Jev Call
Four stages run in order, and only one of them leaves the laptop.
First, the mic. An energy-based VAD (voice activity detection) watches the input stream. When you stop talking, the VAD closes the command, so you never press a stop button.
Second, transcription. The audio goes to whisper.cpp running on Metal, the GPU path on Apple Silicon. The README puts this at roughly 100 ms. The audio does not go to a transcription service, which is the reason the setup script downloads a model instead of asking you to sign up somewhere.
Third, the single Jev call. The transcript goes out once, and the reply is structured: an action name and the arguments that action needs. The README times this at about 250 ms.
Fourth, macOS automation. The action runs: an app opens, keys are pressed, text is typed, the screen scrolls. Then a local say call speaks the confirmation, so you get audio feedback without looking at the screen.
| Stage | Where it runs | What it produces |
|---|---|---|
| Energy VAD | Your Mac | A finished audio clip |
| whisper.cpp on Metal | Your Mac | A text transcript |
| Jev (TypeSafe) | Network, one request | Action plus typed arguments |
| macOS automation | Your Mac | App opened, keys pressed, text typed |
say |
Your Mac | Spoken confirmation |
Why Jev Selects Instead of Generating: Typed Actions and Typed Arguments
Jev never writes your text. Code produces the candidate values and Jev selects among them, which is what keeps a voice command from turning into an unbounded script.
Think about the command “open chrome”. A generating model might reply with a sentence, a code block, or a shell command. A selecting model replies with an action identifier and an argument drawn from a set your program already knows about. If the action is “open an app”, the argument has to be an app your code can resolve. Anything else is not representable.
This matters for safety and for debugging. When something goes wrong you are not reading prose and guessing what it meant. You are looking at a structured result with a fixed shape. And because the action vocabulary comes from your code, adding a command is a code change, not a prompt rewrite. The README frames this as Jev returning “a typed action plus typed arguments in a single fan-out request”.
How to Install Jev Voice on Apple Silicon macOS (Caps Lock to F18 Setup)
Install is three commands, and the third one does the heavy lifting.
cp .env.example .env
# add your TYPESAFE_API_KEY from console.typesafe.ai
./scripts/setup.sh
The setup script installs whisper-cpp plus ffmpeg, downloads the model, syncs the Python environment, and remaps Caps Lock to F18 using hidutil. It installs a LaunchAgent so that remap survives reboots. It puts a jev launcher in ~/.local/bin, and it opens the three permission panes macOS needs.
Grant the permissions to the terminal app you actually launch from, whether that is Terminal, iTerm or an editor’s built-in terminal. The README names three: Microphone, Accessibility and Input Monitoring. If a permission is missing when Jev Voice starts, it prompts for it and waits rather than failing silently.
The Caps Lock remap is the part people ask about. Caps Lock becomes F18 because F18 is a key macOS rarely uses, so it makes a clean push-to-talk trigger with no conflict. If you want your Caps Lock back, the repo includes ./scripts/uninstall-capslock.sh to undo it.
What You Can Do: Opening Apps, Typing, Searching, Scrolling and Pressing Keys
Two run modes cover the two ways people actually talk to a computer.
jev # hands-free: "Alfred, open chrome"
# or tap CAPS LOCK, then speak
jev --hold # hold CAPS LOCK to talk, release to run; no wake
In hands-free mode you speak a wake word first, and the example in the README is "Alfred, open chrome". You can also tap Caps Lock and speak. In --hold mode there is no wake word at all: you hold Caps Lock while you talk and release to run, which is useful in a shared room or when you are dictating longer text.
The command surface named in the README is opening apps, typing, searching, scrolling and pressing keys. That is deliberately a small vocabulary. It is the set of things you do with your hands while looking at a screen, which is exactly where a held key and a spoken sentence beat reaching for a trackpad.
How Fast Is It? Local Whisper Plus a 250 ms Jev Request
The README’s numbers are about 100 ms for local transcription and about 250 ms for the Jev request, so the network step is not the bottleneck.
The latency that dominates is the recording itself, plus the moment of silence the VAD needs to decide you finished. In --hold mode you remove that guess entirely: releasing Caps Lock is an explicit end-of-command signal, so the app does not wait out a silence window. That makes hold mode feel tighter for quick commands and hands-free the better fit for long ones.
Because transcription is local and Metal-backed, the 100 ms figure does not depend on your connection. The 250 ms figure does, since it is a network call to Jev. A slow connection moves that number and nothing else.
How to Add Your Own macOS Automation Commands
The README describes the shape of the system without listing a command file, so the honest answer is: you extend the typed action set in the code and Jev selects from it.
Here is the loop to work in. Say a command you want to support. Watch which action Jev selects. If the closest action exists but the argument does not resolve, that is a candidate for your vocabulary, not a prompt tweak. Add the action and its argument type in the app, then re-test the same sentence.
- Pick one task you repeat daily, like opening a specific project folder.
- Add an action for it with one argument type that matches how you would say it.
- Say it five different ways and see which phrasings still resolve.
- Keep the phrasings that worked. Delete actions that resolved to nothing useful.
This is the same discipline that makes agents reliable elsewhere: constrain what the model may return, then let ordinary code do the work. If you want to see that pattern applied to social accounts rather than macOS windows, the browser automation MCP post covers a related idea of an agent driving tools under a fixed contract. And for the Claude Code side of building tools like this, there is the Muster notification app post.
FAQ
How does Jev Voice control my Mac by voice without sending audio to the cloud?
Audio is transcribed on your machine by whisper.cpp running on Metal, and the resulting text is what goes to Jev in a single request. The audio file itself never leaves the laptop, and after Jev returns the typed action, macOS automation runs locally with a say confirmation.
What is the TYPESAFE_API_KEY and where do I get it for Jev Voice?
It is the key Jev Voice needs to call Jev, the TypeSafe System One model that turns your transcript into a typed action and typed arguments. You put it in .env during setup, and the README says to get it from console.typesafe.ai. Without it the pipeline stops before the action step.
Can I use Jev Voice without remapping Caps Lock to F18?
The setup script does the Caps Lock to F18 remap for you with hidutil and keeps it across reboots through a LaunchAgent, but it is separate from the rest of the install. Running ./scripts/uninstall-capslock.sh reverses the remap at any time. The remap exists so push-to-talk has a key that does not collide with normal shortcuts.
Which macOS permissions does Jev Voice need to work?
Three: Microphone to hear you, Accessibility so it can drive other apps, and Input Monitoring to watch the trigger key. Grant them to the terminal application you launch Jev Voice from, not to a different app. If one is missing at launch, the app asks for it and waits.
Does Jev Voice work on Intel Macs or only Apple Silicon?
The README labels setup as macOS on Apple Silicon, and it specifically cites Metal acceleration for whisper.cpp, which is the Apple GPU path. Treat Apple Silicon as the supported target. Nothing in the README lists Intel as supported, so do not plan around it.
Get started with Creator OS
Jev Voice is one way to put a machine between you and a pile of small actions. Creator OS does the same for publishing: one place to publish, schedule and reply across 11 platforms plus Skool, and it is reachable from the web app, the iOS app, a REST API, the @creatoros/cli CLI, a Claude Code plugin and a hosted MCP server, so an agent can run your accounts on your behalf. Plans start at $14.99/month for 11 platforms plus Skool, with the API, the MCP server and the CLI included, and you can start with a free trial at https://www.creatoros.ca/sign-up.
If you build things like Jev Voice, the Claude Code shorts workflow and the fleet of agents content workflow go further into the tooling. Watch the walkthroughs on the KevBuildsApps YouTube channel, including the launch video. The Jev Voice source is at github.com/kevinbadi/jev-voice, and the Creator OS docs are at https://www.creatoros.ca/docs.
Get started for $0
Free trial for new subscribers. Cancel anytime.