How I Built Jarvis

Everything it's made of. No signup, nothing held back.

This one is different from most: it runs your actual computer. You say "open Steam" and Steam opens. Not a chatbot in a browser tab — a thing with hands.

Hearing and voice run on your own graphics card, so they're free and work offline. Only the thinking goes out over the internet.

Built solo in three weeks. Here's the whole stack.


The parts

What you need What I used Free? Notes
Hearing faster-whisper yes, local Use large-v3-turbo, not large-v3. Roughly 4x faster, barely worse
Voice OmniVoice yes, local Clones a voice from 10 seconds. Apache 2.0, fine to sell
Voice, alternative Chatterbox yes, local 23 languages, MIT. Slower than OmniVoice for me
Thinking Claude API, cheapest model pennies Anything smarter is also slower. For commands, fast beats smart
Hands Python + Windows API yes The part nobody talks about. See below
Face one HTML file yes Runs in a browser, or in its own window via WebView2

That's it. Six pieces. No framework, no cloud, no Docker.


The part everyone skips: hands

Every "build your own Jarvis" video stops at "and then it replies." Replying is the easy half. Making it do something is where the actual work is.

Opening programs. Don't hardcode a list — you'll be adding to it forever. Read the Start Menu instead: %APPDATA% and %PROGRAMDATA% under Microsoft\Windows\Start Menu\Programs. Every .lnk in there is a program the user actually has. Add their Desktop too — plenty of installers put the shortcut only there.

Steam games don't create shortcuts at all. Read Steam's own files: libraryfolders.vdf for the drives, then every appmanifest_*.acf gives you a name and an ID. Launch with steam://rungameid/<id> and Steam starts itself if it isn't running.

Some apps hide. Claude, Discord, Slack and anything else built on Squirrel install into a folder named after the version — app-1.2.3 — which changes on every update. Don't guess the path. Glob for the .exe under %LOCALAPPDATA%, %LOCALAPPDATA%\Programs and Program Files, take the newest.

Volume, media keys, typing: ctypes straight into user32.dll. No library needed.

Closing windows: EnumWindows to find them, PostMessage with WM_CLOSE to close politely. Never kill the process — you'll lose someone's unsaved work.


Making it feel fast

Three seconds of silence is what makes an assistant feel dead. Where mine went and what fixed it: