Setup

Download, drag,
answer the cards

A signed Mac app with its own backend inside. No Python, no terminal, no build step. Ten minutes from download to the first thing she does for you.

Apple Silicon (M1-M4) is the default. On an Intel Mac, use the Intel build.

macOS 13 Ventura or newerApple Silicon or IntelGoogle ChromeA Claude plan or an OpenRouter keyA Gemini keyA Fish Audio key
Install

Three steps

Open the disk image

Double-click Justine.dmg. A window opens with Justine and an Applications shortcut.

Drag, then open

Drag Justine onto Applications and double-click her there. She starts her backend and opens the welcome cards.

Answer eight cards

Who you are, which brain, the voice key, four permissions, a persona, your files, your people, your connections. Re-run it any time, it edits, never duplicates.

Card 2 · The brain

Your Claude login, or a key

Both are your account. The card that asks makes the difference clear.

Recommended

Claude subscription

Justine installs the Claude Code CLI if it is missing and opens its login. Sign in once with the Claude account you already pay for.

  • Full brain, real builds, no per-token bill
  • The dashboard shows your five-hour and seven-day windows
  • When the login expires she tells you, she sounds like a human who lost their glasses, not an error code

OpenRouter key

Paste one key, choose a model on the card: Claude Sonnet or Opus, Gemini Flash, GPT, Grok.

  • No Claude Code install; tools run in-process
  • Pay per use on your OpenRouter account
  • Builds that spawn Claude Code sessions need the subscription path
Card 3 · Her voice

Two keys, both free to start

Her ears and mouth are a Gemini Live socket; her spoken voice is Fish Audio. The card links to each, and stores what you paste in a file on your Mac.

Gemini API key

From Google AI Studio. Powers the live conversation, listening, answering, interrupting. Pick one of eight voices on the card by listening to them.

Fish Audio key

From fish.audio. Her spoken voice for the longer things, the report, a document read back, the night call.

Where they go

Into .env beside her data, through a writer that only ever reports "set" or "not set" back to the page. Never into a Justine server, there is none.

# .env, on your Mac, and only there
GEMINI_API_KEY=set
FISH_API_KEY=set
JARVIS_BRAIN=claude          # or: openrouter
USER_NAME=Adwait
JARVIS_DATA_DIR=~/Justine     # memory, knowledge, runs, the tool token

# Never read. Scrubbed from every child process.
# ANTHROPIC_API_KEY=…

What the settings page writes. The values are shown here as "set" because that is all the page itself is ever allowed to see.

Card 4 · macOS permissions

Four switches, each with a reason

The card opens the exact System Settings pane for each one and tells you when it is granted. Nothing is requested that she does not use.

Microphone

To hear you. Audio goes to the live socket while she is awake and nowhere while she sleeps.

Privacy & Security → Microphone

Accessibility

Real mouse and keyboard, and answering a permission prompt in a Terminal window with a keystroke when you say yes.

Privacy & Security → Accessibility

Screen Recording

One downscaled screenshot when you ask her to look. Never on a timer, never saved, never sent anywhere but the model answering that one question.

Privacy & Security → Screen Recording

Automation

AppleScript to Chrome, Terminal, Keynote and the Adobe apps. macOS asks the first time she reaches each app.

Privacy & Security → Automation
Troubleshooting

If something is off

"Justine is damaged and can't be opened"
The release build is signed and notarized by Apple and opens without a warning. If you were handed an unsigned test build instead, right-click the app and choose Open once; macOS remembers the choice.
She cannot hear me
Check Microphone in System Settings for Justine, and that the Gemini key on card 3 says "set". The orb brightens when she hears sound; if it stays still, the microphone is the problem, not the key.
She hears me but answers with silence
Usually the Fish Audio key, or the Claude login has expired. Open the dashboard's Usage tab: an expired login shows there in plain words, and she will say so out loud the next time she needs the brain.
Chrome things do not work
Chrome must be installed and, for a site, signed in once by you. The first time she reaches Chrome, macOS asks for Automation, say Allow. The Connections page lists every site and whether it is ready.
I have an ANTHROPIC_API_KEY in my environment
Leave it or remove it, she never sees it. Every Claude Code process she starts has ANTHROPIC_* removed from its environment first, and the first-run check warns you it is there so you are not surprised.

Ten minutes from now

Download, drag, open, talk.