Troubleshooting
This page collects diagnostics and fixes for common NeoMind issues, grouped by symptom. Each entry gives you the probe commands and the fix.
Diagnostic Starting Pointβ
For any issue, run these three commands first to gather context:
# 1. System overview (MQTT status, network, webhook, device count)
neomind system info
# 2. Service health
curl http://localhost:9375/api/health
# 3. systemd status (one-line install)
systemctl status neomind.service
CLI / API Keyβ
CLI commands return 401 Unauthorizedβ
Cause: The CLI can't provide a valid API key to the server.
Diagnose:
# 1. Is the env var set? (a WRONG value also causes 401 β auto-auth is completely skipped)
echo $NEOMIND_API_KEY
# 2. Are you in the project root? (auto-auth needs relative path data/api_keys.redb)
ls data/api_keys.redb
Fix by scenario:
| Scenario | Fix |
|---|---|
Set a wrong NEOMIND_API_KEY (e.g. doc placeholder) | unset NEOMIND_API_KEY, then run from project root |
| Not in project root | cd /path/to/neomind && neomind device list |
| Need cross-directory access | Get real key from server startup output, export NEOMIND_API_KEY=nmk_REAL_KEY |
| Connecting to remote server | Get the key from that server's startup output |
| Auto-auth worked before, suddenly 401 | Restart the server: CLI operations on api_keys.redb can cause redb lock conflicts |
β Key points:
- Once
NEOMIND_API_KEYis set (even to a placeholder), auto-auth is completely skipped. Alwaysunsetfirst.- Do NOT run
neomind api-key createwhile the server is running β it conflicts with the server's redb lock. To regenerate a key: stop the server, create the key, then restart.
Full API key setup walkthrough: Install & Setup β CLI API Key Setup.
Service Startupβ
neomind serve fails with "address already in use"β
Cause: port 9375 is occupied.
Probe:
# Who's holding 9375
lsof -i :9375 # macOS / Linux
netstat -ano | findstr 9375 # Windows
Fix:
- Kill the holder:
kill <PID> - Or run on a different port:
neomind serve --port 9376 - Or change the systemd service's
PORTenv var andsystemctl restart neomind
Startup fails with "permission denied" writing data/β
Cause: wrong ownership on the data dir (common after a manual install or a custom DATA_DIR).
Fix:
# chown to the user running neomind
sudo chown -R $USER:$USER /var/lib/neomind
# or loosen perms
sudo chmod -R u+rwX /var/lib/neomind
LLM / Ollamaβ
AI Chat doesn't respond / spinner foreverβ
Cause: the LLM backend is misconfigured or unreachable.
Probe:
# 1. Is Ollama running
ollama list # should list pulled models
curl http://localhost:11434/api/tags # should return JSON
# 2. Model name match
# Settings β LLM Backends must match `ollama list` exactly (including tag)
# 3. Backend capability in NeoMind
# The backend list shows whether the probe succeeded (Tools / Multimodal / Context)
Fix:
- Start Ollama:
ollama serve - Pull the model:
ollama pull qwen3.5:4b - Model name typo β fix in Settings to match
ollama list
Calling Ollama returns 404 / not foundβ
Cause: wrong API endpoint. NeoMind must use /api/chat (Ollama native), not /v1/chat/completions (OpenAI-compat).
Note: NeoMind hard-codes /api/chat internally β you don't need to change this. If you're testing with curl or writing a 3rd-party integration, use:
curl http://localhost:11434/api/chat -d '{
"model": "qwen3.5:4b",
"messages": [{"role":"user","content":"hi"}],
"stream": false
}'
Image upload: AI says "I can't see the image" or returns unknown variant image_urlβ
Cause: the current LLM backend doesn't support multimodal, or NeoMind misdetects capability.
Fix:
- Confirm the model itself supports vision (e.g.
qwen3.5:4b-vl/llava, not the text-onlyqwen3.5:4b) ollama pullthe vision model- Settings β LLM Backends β that backend's detail page β manually toggle Multimodal on (override auto-detect)
- Retry the conversation
Cloud backend returns unknown variant image_url, expected textβ
Cause: sending an image to a text-only cloud model (DeepSeek-V3, Qwen text tiers). NeoMind gates image sending on the capability toggle, but auto-detect mistakes can still cause this.
Fix: turn off the Multimodal toggle on that backend, or switch to a vision-capable cloud model (gpt-4o / claude-3-5-sonnet / qwen-vl / glm-4v).
Devices / MQTTβ
Device sent data but NeoMind shows nothingβ
Probe:
# 1. Is the MQTT broker connected
neomind system info | grep -A3 mqtt
# check mqtt.connected == true
# 2. Is the topic actually subscribed
neomind connector subscriptions
# 3. Did it land in "Pending" drafts (auto-discovery)
neomind device drafts list
# 4. Did the device hit the right broker IP
# the broker address in device code must be the NeoMind host's IP
Common causes:
mqtt.connected: falseβ MQTT module down; restart the server- Device connects to
localhostinstead of the server IP β fix device code - Network issue β
ping <SERVER_IP>/telnet <SERVER_IP> 1883
Connection refused on MQTTβ
- Service not running β
systemctl status neomind - Firewall blocks 1883 β
sudo ufw allow 1883(or cloud provider security group) - Another process holds the port β
lsof -i :1883
Auth failed / Not authorizedβ
Cause: MQTT auth is on.
Fix:
neomind system info
# read mqtt.auth_enabled and mqtt.credentials
Pass the credentials into device code: client.connect(client_id, username, password).
TLS handshake failed / Received corrupt messageβ
Cause: MQTT TLS is on (mqtts://) but the device connected in plaintext.
Fix:
- Switch device to
mqtts://+ trust the CA cert (download from Settings β MQTT) - Or turn TLS off in NeoMind (recommended only for isolated/test networks)
Extensionsβ
Extension shows Crashed / boot-loops after installβ
Note: NeoMind has crash-loop protection β an extension that crashes repeatedly is auto-disabled to protect the server.
Probe:
# Find extension logs
ls data/logs/
neomind extension list # status overview
neomind extension info <ID> # recent error for a specific extension
Fix:
- Arch mismatch (e.g. x86_64 binary on arm64) β reinstall the right platform build
- Required model not pulled β pull per the extension's docs
- Bad config β edit in the Extensions page, then restart the extension
Extension loaded but no dataβ
- DataSourceId typo β format must be
extension:<id>:<metric> - Command / metric not declared β check the extension manifest
- Process running but not publishing β check extension logs
Dashboard / Frontendβ
Dashboard widget spins forever, no dataβ
- Wrong data source β edit the widget, confirm Device + Metric
- Device has no data β
neomind device get <ID>and checklatest - WebSocket dropped β refresh the page; verify the reverse proxy forwards
Upgrade/Connectionheaders
Share link returns 404β
- Link expired β regenerate
- Reverse proxy doesn't forward
/share/β check the nginxlocation /block (try_files $uri $uri/ /index.html;)
Data & Storageβ
Where is the data directory?β
Defaults: /var/lib/neomind (one-line install), ~/.neomind (custom), data/ in the project root (dev mode). Override with the NEOMIND_DATA_DIR env var.
Key files:
| File | Purpose |
|---|---|
telemetry.redb | Time-series telemetry |
devices.redb / dashboards.redb / rules.redb | Business data |
sessions.redb | Sessions |
logs/ | Runtime logs |
Can I migrate data?β
Yes. Stop the service, copy the entire data dir to the new host at the same path, restart. redb is an embedded database β no dump/restore needed.
Backupβ
# Simple: stop + tar
sudo systemctl stop neomind
sudo tar czf neomind-backup-$(date +%F).tar.gz /var/lib/neomind
sudo systemctl start neomind
Log Locationsβ
| Deployment | Location |
|---|---|
| One-line (systemd) | journalctl -u neomind.service -f |
| Manual / Docker | <DATA_DIR>/logs/ |
| Dev mode (cargo run) | terminal stdout |
Useful probes:
# Tail logs live
journalctl -u neomind.service -f
# Errors only
journalctl -u neomind.service -p err
# Search multimodal / vision issues
journalctl -u neomind.service | grep -i "vision\|multimodal\|image"
Still Stuck?β
- Search GitHub Issues for the same symptom
- Ask the community: Discord
- When filing a new issue, attach: NeoMind version (
neomind --version),neomind system infooutput, relevant log snippet
Last updated: 2026-06-15