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.
| 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.
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.
Three seconds of silence is what makes an assistant feel dead. Where mine went and what fixed it: