Troubleshooting

Common problems, in roughly the order new users hit them.

Safe mode — is a customization breaking things?

If eVi behaves oddly and you suspect a project EVI.md, skill, plugin, hook, MCP server, memory, guardrail, or custom command, run with --safe-mode (or EVI_SAFE_MODE=1) to load none of them:

evi --safe-mode chat        # clean baseline — no customizations loaded
evi --safe-mode web         # same clean boot for the web / desktop UI

The REPL header shows SAFE MODE (customizations off). If the problem disappears in safe mode, re-enable customizations one at a time to find the culprit.

Safe mode is carried in the environment (EVI_SAFE_MODE=1), so it applies to the whole process tree — including the desktop app's sidecar and any subagents — and is never written to your config. It switches off:

Project contextEVI.md / AGENTS.md — including on a later /cd
Config overlaysyour profile and a repo's .evi.toml — safe mode is stock config
Memorythe prompt-side index and the remember/recall tools
Skillsthe catalog and invoke_skill / list_skills
Hooks~/.evi/hooks.toml + every plugin's hooks
Guardrails~/.evi/guardrails.toml
Commandsuser + plugin slash commands (and their tab-completion)
Pluginsbin/ PATH wiring
MCPexternal servers are never spawned
Output stylea user ~/.evi/styles/<name>.md can override a builtin — skipped
Keybindings~/.evi/keybindings.toml — stock keys
Transcriptsnot written

Inspection commands still work normally, so you can find and fix the culprit — evi plugin list, evi skill list and evi config show are unaffected.

"evi: command not found" after pip install -e .

The venv isn't on PATH. Either activate it (.venv\Scripts\Activate.ps1 on Windows, source .venv/bin/activate on Linux/macOS) or invoke directly:

.venv\Scripts\evi.exe --help

"LLM request failed: APIConnectionError"

eVi can't reach the backend. Check, in order:

  1. Is the backend actually running?
    • LM Studio: open the app, Developer tab, Start Server.
    • Ollama: ollama serve or check sudo systemctl status ollama.
    • llama.cpp: llama-server -m <path> must be running.
  2. Is [llm] base_url correct? Check with evi config show.
  3. Can you hit it manually? curl http://localhost:1234/v1/models for LM Studio, curl http://localhost:11434/api/tags for Ollama.
  4. Are you behind a proxy / VPN that's blocking localhost? Check HTTP_PROXY, HTTPS_PROXY, NO_PROXY.

"The model can't seem to call tools — it just describes them"

The model isn't tool-capable, or the temperature is too high.

"Permission denied" for every tool call (CLI)

Auto-approval might be off and you're sitting at a (approve y/n/a) prompt that hasn't been answered. Type a to allow everything for the session, then revisit auto.auto_approve in config.toml for a persistent fix.

ComfyUI image generation hangs or times out

The default 5-minute poll ceiling is generous, but a stuck workflow won't get unstuck. Check:

  1. ComfyUI itself is responsive: curl http://localhost:8188/system_stats.
  2. The checkpoint named in [comfy] default_checkpoint exists in ComfyUI's models directory. If not, the workflow fails immediately — tail ComfyUI's terminal for the actual error.
  3. The sampler/scheduler combo is valid (euler + normal is safe).

MCP server says "spawned but no tools registered"

The server probably failed to start. Tail eVi's stderr or check ~/.evi/logs/:

Confirm what did register: evi mcp list-tools.

Tauri desktop window stays on the loading shim

The bundled Python server didn't come up in 20 seconds. Common reasons:

Tail the Tauri stderr to see what py -3.13 -m uvicorn … actually did.

Scheduler / cron tasks aren't firing

evi dream reports zero transcripts to review

You ran chat sessions before tools.transcripts was on, or the day-dir under ~/.evi/transcripts/ doesn't exist yet. Confirm:

evi config show | grep transcripts
ls ~/.evi/transcripts/

Run a quick evi chat, exit, then ls ~/.evi/transcripts/<today>/.

STT: "no input device" / "PortAudioError"

sounddevice couldn't open the default mic.

Computer-use clicks miss the target

Multi-monitor or HiDPI scaling. Get a known-good baseline:

# In eVi chat:
> take a screenshot and read the file path back to me
> use screen_size to tell me the resolution

Coordinates are pixels on the primary display. For non-primary monitors or fractional scaling, you may need to compute offsets manually.

Tests hang or fail with "git: unknown switch -b"

Your git is <2.28. Upgrade:

winget install --id Git.Git -e

The worktree tests use git -c init.defaultBranch=main init as a broader-compat fallback, so they should pass on git ≥2.5.

"ImportError: cannot import name 'X' from 'evi.…'" after pulling new code

You're running the editable install but Python is caching old bytecode. Either delete __pycache__ dirs:

find . -name __pycache__ -exec rm -rf {} +

…or just pip install -e . again to refresh metadata.

Where to dig deeper

Edit on GitHub ↗