← All guidesThe full lessons are inside AI Monetizers.Try it free for 7 days
Full community guide

Build your own JARVIS — complete setup

An open source, browser-based voice assistant with a full Iron Man holographic interface. The brain is Claude Code running headless — no separate API key, billed to your existing account.

85GitHub stars
MITlicensed
Freeopen source

What you actually need

01Claude Code, installed and logged in. Install with npm install -g @anthropic-ai/claude-code, run claude once and log in. No separate API key — usage is billed to your existing account.
02Node.js 20 or newer, free from nodejs.org.
03Google Chrome or Edge, in a real browser window — not an embedded preview pane. Preview panes block microphone access; the page will load fine and simply never hear you.
04Optional: an ElevenLabs API key. Gives a better voice and sharper transcription. Without it, everything still works using the browser's own speech.

Install it

Clone and run

git clone https://github.com/adewaskar/jarvis cd jarvis npm install npm start

Then open the URL it prints — http://localhost:5173 — in a real Chrome or Edge window, click INITIALISE, allow the microphone, and say "Hey Jarvis."

Prefer two terminals? Run npm run bridge in one (the brain) and npm run dev in the other (the face), then open the same URL.

Voice — optional, not required

Without any key, JARVIS speaks and listens through the browser's built-in speech engine, and everything still works.

To upgrade the voice, set ELEVENLABS_API_KEY before starting the bridge, or add the key to your ElevenLabs MCP server config in ~/.claude.json. No flag to flip — it upgrades automatically on the next boot.

Connecting your tools

JARVIS reaches every MCP server already configured in your ~/.claude.json — it is not pre-wired to calendar, email, or revenue tools out of the box. If you want those, you need to have a compatible MCP server for them already set up.

Depending on what you have installed, that typically includes:

exa (web search) serper / serpapi higgsfield (images/video) elevenlabs (voice) android (your phone) playwright (browser control)

Servers added through your claude.ai account aren't stored on disk, so the bridge can't see them — only servers in your local ~/.claude.json file work here.

Enabling real actions

By default, JARVIS is read-only. Search, generation, and lookups run freely. Anything effectful — sending, tapping, deleting, installing, paying — is denied automatically, decided ahead of time, not asked in the moment (voice is a poor interface for a confirmation dialog).

To allow effectful actions

npm run bridge:writes

Read the decideTool() logic in bridge/server.mjs before enabling this. "Hey Jarvis, clean up my downloads folder" means something different with writes enabled.

Controls

Key / phraseDoes
"Hey Jarvis"Wakes him
SpaceTalk without the wake word
Just speakInterrupt him mid-sentence (barge-in)
VCycle the browser voice
EscapeStand down
DLive diagnostics panel
TOne-line audio self-test

Troubleshooting

Can't hear him, or he can't hear mePress D for the diagnostics panel, or T for a one-line audio self-test.
No voice at allConfirm you're in a real Chrome or Edge window, not an embedded preview, and that you allowed the microphone.
Bridge not reachableCheck that npm run bridge is still running in its terminal, and that nothing else is using port 8787.

MIT licensed by adewaskar. If you plan to monetize anything built on this, clearing the rights to the demo boot audio in public/audio/ is your own responsibility — it ships for demo purposes only.

Free for 7 days
Want more builds like this?

Inside the community: more AI builds, tool breakdowns, Claude skills, and how I'm actually monetizing this stuff.

Join free for 7 days →
7-day free trial · cancel anytime