JARVIS
ENFR

When something is red

omarchy-jarvis doctor names every dependency, green or red, with no guessing and no LLM involved. Its exit code is the number of problems. This page is one entry per line it can print, in the order it prints them.

Run it first. Whatever it says is fine, is fine.

omarchy-jarvis doctor          # the whole check
omarchy-jarvis doctor --mic    # plus a real half-second capture
omarchy-jarvis doctor --quiet  # only the red lines

✗ claude (le cerveau)

Claude Code is not installed or not on PATH. Install it from claude.com/claude-code and sign in — Jarvis never handles your credentials, it just runs claude -p.

Green but he still says “I could not reach my brain”? Check omarchy-jarvis status | grep brain. quota <epoch> means you hit a usage limit and he will resume by himself; down means the last call failed. The reason is in memory/trace/<today>.log.

✗ voxtype (l’oreille)

The transcriber is missing. Install it from voxtype.io. It is a separate project with its own configuration; Jarvis only writes a derived config with the language pinned, and calls it.

Installed but transcribing nothing? The Whisper model is probably absent — ./bootstrap.sh puts ggml-small.bin in ~/.local/share/voxtype/models/.

✗ pw-record / ✗ pw-play

PipeWire’s command-line tools are missing. On Arch they are in pipewire itself; elsewhere look for a pipewire-tools or pipewire-utils package. There is no fallback to ALSA or PulseAudio.

✗ piper : une synthèse réelle

This check does not test that the file exists — it actually synthesizes a short phrase, because a voice model truncated by a full disk is present, executable and silent. Re-run ./bootstrap.sh; it re-fetches only what is missing or broken.

Also check you have room: the models are 60 MB each and a partial download is the classic cause.

✗ voix anglaise

models/en_GB-alan-medium.onnx is missing. ./bootstrap.sh.

✗ micro (…) présent

Jarvis records from one named node rather than the system default, because the default has been seen wandering off to a webcam mid-session. The name is effect_output.j493-mic — an Asahi-specific node that will not exist on your machine.

List yours and pin it:

pactl list sources short
export JARVIS_MIC=alsa_input.pci-0000_00_1f.3.analog-stereo

Set it permanently in the systemd units, or leave JARVIS_MIC unset — if the named node is absent, Jarvis falls back to the system default, which is usually right.

✗ micro : capture réelle (only with --mic)

The node exists but records silence. Check it is not muted (wpctl set-mute @DEFAULT_AUDIO_SOURCE@ 0), that nothing else holds it exclusively, and that your desktop’s portal is not blocking access.

✗ daemon wake (hey Jarvis)

The wake daemon is not running. It is optional — the push-to-talk key works without it — and it starts from your compositor’s autostart:

o.exec_on_start("omarchy-jarvis-wake")   -- ~/.config/hypr/autostart.lua

Start it now with omarchy-jarvis-wake &. If it exits immediately saying already running, another copy holds the lock; that is the check working.

He does not hear his name. The model is trained on native English. Say héï djâ-vis, the English way. A fresh clone has no accent verifier, so the threshold is 0.30; the score trace is at $XDG_RUNTIME_DIR/jarvis/wake-score, and JARVIS_WAKE_THRESHOLD overrides it. Train a verifier on your own voice with wake/train-verifier and it rises to 0.8 with far fewer false positives.

✗ venv wake + openwakeword

./bootstrap.sh builds wake/venv. If it failed, the usual cause is that onnxruntime has no wheel for your Python version — build the venv against an older interpreter:

rm -rf wake/venv && python3.12 -m venv wake/venv
wake/venv/bin/pip install openwakeword onnxruntime numpy scikit-learn joblib

✗ planches du poisson / ✗ poisson conforme à l’âme

The sprite sheets are missing, or they no longer match the five appearance settings in SOUL.md. Both are one command:

omarchy-jarvis look           # regenerate from the soul
omarchy-jarvis look random    # roll a new fish first

The sheets live in ~/.local/share/jarvis/sprites/, deliberately outside the plugin directory — the shell hot-reloads on any change in there.

✗ greffon installé

The mascot plugin is not in ~/.config/omarchy/plugins/. Run ./install.sh, then omarchy plugin enable macarchy.jarvis.

This one is expected to be red if you are not running Omarchy and Quickshell. Nothing else breaks: the fish is the body layer, and every call into it is || true.

✗ unités systemd installées et actives

The user units are missing or stopped. ./install.sh installs and enables them. To check by hand:

systemctl --user is-active jarvis-tick.timer jarvis-inbox.path
systemctl --user list-timers jarvis-tick.timer

jarvis-tick.timer is the pulse — the watchdog, the rounds, the dreams, the conversation rotation and the inbox retries all hang off it. Without it, those stop the moment anything wedges. jarvis-inbox.path watches ~/Jarvis/input.

✗ omarchy-jarvis pointe sur ce dépôt

~/.local/bin/omarchy-jarvis resolves somewhere else — usually a second checkout. Whichever one you meant, run its ./install.sh.

~/Jarvis is missing or its memory symlink does not point at this checkout’s memory/. Any Jarvis command recreates the box; the symlink is ln -s <checkout>/memory ~/Jarvis/memory.

✗ settings.json valide

.claude/settings.json is not valid JSON, which means the brain is running with no tool allowlist. Fix it before speaking to him again:

python3 -m json.tool .claude/settings.json

✗ prompts (ronde, rêve, digestion)

One of memory/HEARTBEAT_PROMPT.md, DREAM_PROMPT.md or DIGEST_PROMPT.md is missing. They are tracked; git checkout memory/ restores them.

✗ connaissance à jour (omarchy)

memory/knowledge/ was generated against an older Omarchy. It is rebuilt by introspection, no LLM involved:

omarchy-jarvis index

The pulse does this automatically after an Omarchy update.


Things doctor cannot see

He is stuck. omarchy-jarvis state says thinking and nothing moves. Press the key — while transcribing or thinking it cancels. Or:

omarchy-jarvis cancel
omarchy-jarvis watchdog    # what the pulse runs every 60 s

doctor reports a state older than ten minutes as a problem, with the command to clear it.

He answers an empty room. Whisper hallucinates on silence — « Sous-titres réalisés par la communauté d’Amara.org » is the classic. Raise JARVIS_WAKE_THRESHOLD, or train the accent verifier so the wake word stops firing on ambient noise.

He speaks the wrong language. SOUL.md’s langue setting pins the whole conversation — what his ears expect and which voice answers. Set it to fr or en rather than leaving it on auto: under auto he guesses, once per reply, and detection is unreliable on short phrases. The Control Center sets it in one click, and the change applies to the next sentence.

Nothing at all happens on the key. Check the binding reached the compositor: hyprctl binds | grep -A2 jarvis. A binding edited in ~/.config/hypr/bindings.lua needs the config reloaded before it exists.

Still stuck

Open an issue with the output of omarchy-jarvis doctor. If the problem is behavioural rather than structural, memory/trace/<date>.log is the black box — read it before pasting it, it is a log of your machine.