Skip to content

Quick Start

This guide assumes you have Docker Desktop installed. If you prefer a native Bun install or a source checkout, see Installation, then continue from Step 2.

Terminal window
docker run -d --name jarvis \
-p 3142:3142 \
-v jarvis-data:/data \
ghcr.io/vierisid/jarvis:latest

The daemon boots and listens on port 3142. All state lives in the jarvis-data volume.

Since 0.9, access is JWT-only by default. You enroll each device from the machine running the brain:

Terminal window
docker exec jarvis jarvis enroll "my-desktop"

On a native install, run it directly:

Terminal window
jarvis enroll "my-desktop"

This mints a long-lived enrollment token and prints it. Keep the terminal open; you paste this token into the sidecar in Step 4.

Enrolling an existing name re-mints its token. Add --rotate to also invalidate all previously issued tokens for that device.

Install the sidecar on the machine you want Usejarvis to see and control:

Terminal window
bun install -g @usejarvis/sidecar

Or download the prebuilt binary for your platform (macOS, Linux, Windows) from the releases page and extract it.

Then run it:

Terminal window
jarvis

The sidecar is the machine-level actuator: desktop automation, browser automation, terminal, filesystem, clipboard, and screenshots. Even a single-machine setup needs it, because the Docker container cannot reach your host desktop.

On first run, the sidecar opens a connect window. If you are self-hosting, click Paste your enrollment token, paste the token from Step 2, and connect. You can also pass it on the command line:

Terminal window
jarvis --token <your-token>

The token is stored locally at ~/.jarvis/sidecar.yaml, so subsequent runs reconnect automatically.

Once the sidecar connects, open the dashboard:

http://localhost:3142

On first boot, the dashboard guides you through:

  1. Primary LLM provider and API key
  2. Voice (TTS) choice
  3. A conversational profile interview
  4. A short tour

LLM providers and API keys are stored in the database and encrypted keychain, not in config.yaml.

The dashboard is the main control plane for:

  • Chat
  • Tasks
  • Memory
  • Authority
  • Awareness
  • Workflows
  • Goals
  • Settings

Good first prompts are tasks that exercise the system, not toy questions. For example:

  • “Summarize what this project actually does.”
  • “Open the docs and tell me what is missing.”
  • “Create a workflow that posts a Telegram summary every morning.”
  • “Plan my day from my current goals.”

The daemon does not need to live on the machines it controls. Repeat Steps 2 to 4 for every additional machine: enroll a new device name on the brain, install the sidecar on the target machine, paste that device’s token. See Desktop Control for the full setup.

Terminal window
jarvis sidecars list # list enrolled devices
jarvis revoke <sid> # revoke a device
jarvis enroll "name" --rotate # re-enroll and invalidate old tokens

On Docker, prefix each command with docker exec jarvis.

Most people should do these next:

  1. Review Authority & Safety before raising autonomy
  2. Connect a sidecar on every machine you want real desktop/browser control on
  3. Set daemon.brain_domain before exposing the daemon beyond localhost

You are in a good state if all of these are true:

  • The daemon container is running (docker ps), or jarvis status shows it running on a native install
  • The sidecar shows as connected
  • The dashboard connects successfully
  • Chat messages stream normally
  • Your selected LLM provider responds

If any of that fails, go to Troubleshooting.