Repository navigation
14 Troubleshooting
Updated: 2026-08-21
Common issues and how to fix them. If your problem isn't here, open a GitHub issue with the Bug report template — include OS, branch, commit SHA, and a minimal repro.
curl http://localhost:8766/health
# curl: (7) Failed to connect to localhost port 8766Debug :
-
Is the process running ?
- Docker :
docker compose -f docker/nokido/docker-compose.yml ps - Windows NSSM :
nssm status LaForge-Master - Linux/macOS systemd :
systemctl status laforge-master - Native : check if
python -m tools.nokido_hubis still alive.
- Docker :
-
Is the port in use by something else ?
- Windows :
Get-NetTCPConnection -LocalPort 8766 -State Listen - Linux/macOS :
lsof -i :8766orss -tnlp | grep 8766
- Windows :
-
Check the boot log :
- Docker :
docker compose logs laforge-hub --tail=100 - Native :
tail -100 logs/laforge-hub.log - Look for tracebacks or "Address already in use".
- Docker :
The hub returns 401 when :
-
Authorizationheader is missing. - The bearer doesn't match any value in
_AGENT_TOKENS(vault-backed). - The token was rotated but the client hasn't been restarted.
Fix :
# Check what the vault has
nokido-secrets status | grep FORGE_TOKEN
# Force-load the agent token in your client config (Codex/Gemini/...)
# then restart the client.
# Last resort : regenerate the token
nokido-vault set -k FORGE_TOKEN_CODEX
# (paste new value, also update client config to match)The hub validates Origin per MCP 2025-03-26 spec. Allowed by default :
http://127.0.0.1*, http://localhost*, app://, null.
If your client sends a different origin, either :
- Set
Origin: app://my-clientin your client config. - Or edit
tools/nokido_hub.py::mcp_postto allow your origin.
Usually a client-side config issue. Try :
# Test directly via curl
curl -s -X POST http://127.0.0.1:8766/mcp \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_TOKEN>' \
-H 'X-Agent-Name: <YOUR_AGENT>' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'If this returns 25 tools, the hub is fine. The client isn't passing the right headers, or it's caching an old session.
Codex CLI specific : Codex treats an absent enabled_tools as
empty whitelist. Always list explicitly in ~/.codex/config.toml.
See 04 — MCP clients setup.
Either :
- The
methodfield is misspelled. Should betools/call(with slash). - The tool name isn't in the registry. Check
tools/nokido_hub.py::_AGENT_RING[YOUR_AGENT]and the ring policy.
Common cause : a stale Python process holding the WAL lock.
# Find processes holding the DB
lsof RAG/embeddings.db # Linux/macOS
handle.exe RAG\embeddings.db # Windows (Sysinternals)
# Kill stale ones
kill <PID>
# Force checkpoint
sqlite3 RAG/embeddings.db "PRAGMA wal_checkpoint(TRUNCATE);"Check the priority chain :
nokido-secrets statusIf the key shows in Dans .env seulement, the vault doesn't have it but
the .env fallback works. Migrate :
# Re-read .env value
KEY_VALUE=$(python -c "
from forge_secrets import _dotenv
print(_dotenv('YOUR_KEY') or '')
")
# Push to vault
nokido-vault set -k YOUR_KEY <<< "$KEY_VALUE"You're missing libsecret or a keyring daemon.
# Debian/Ubuntu
sudo apt install libsecret-1-0 gnome-keyring
# Headless server (no GUI)
pip install keyrings.alt
# This installs a file-based fallback. Less secure but works.Open http://127.0.0.1:8766/admin/providers. Check :
- Is the key present in the vault ? (✓ green badge).
- Is the quota exhausted ? (orange/red percentage).
- Has
forge_provider_watchermarked it as unhealthy ?
If quota is 100 %, the cascade will skip this provider — you should see the call route to the next one automatically.
litellm version drift can break specific providers. Check :
pip show litellm
# litellm 1.40.0+ requiredAlso check the provider's API hasn't changed shape (Anthropic v1 → v2, Mistral free → paid migration, etc.).
docker compose logs laforge-hub --tail=200Common causes :
-
Nokido.envmissing or has bad format → mounted but unreadable. - Port 8766 already bound on the host → swap port mapping in
docker-compose.yml("18766:8766"for example). - The hub crashed on RAG/embeddings.db migration — check
LAFORGE_DB_MIGRATE=1env to force migration on next start.
docker exec laforge-ollama ollama list
# (empty)
# Pull a model
docker exec laforge-ollama ollama pull qwen2.5-coder:latestModels persist in the ollama_data volume, so this is a one-time step.
faiss-cpu wheels are picky about glibc + numpy versions. The
Dockerfile pins Python 3.12 specifically because faiss-cpu binary wheels
target this version. If you must change Python, you may need to
compile faiss from source (~10 min).
Don't restart LaForgeMCP directly — it's owned exclusively by
LaForge-Master (the supervisor service). Restart the supervisor :
nssm restart LaForge-MasterOr, if you need to restart both :
nssm stop LaForgeMCP
nssm stop LaForge-Master
nssm start LaForge-Master
# (Master will start MCP)PowerShell 7+ required. Check : $PSVersionTable.PSVersion. Should be 7+.
If you see this with LAFORGE_PYTHON — that's not a command, it's a
constant in CLAUDE.md. Replace with the absolute path :
~/miniforge3/python.exe (or your equivalent).
OSError: [WinError 206] The filename or extension is too long
Enable Windows 10/11 long path support :
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -ForceReboot. Affects FAISS build and some RAG paths.
xcode-select --installThe Keychain is locked. Unlock :
security unlock-keychain ~/Library/Keychains/login.keychain-dbEven after apt install libsecret-1-0, you may need a running keyring
daemon. Check :
ps aux | grep -E "gnome-keyring|kwallet"If nothing : start gnome-keyring-daemon (GNOME) or kwalletd5 (KDE)
manually. Headless : use keyrings.alt (file-based fallback).
RuntimeError: CUDA error: no kernel image is available for execution on the device
The torch wheel is built for a different CUDA than your driver. Pin explicitly :
pip install torch==2.4.0 --extra-index-url https://download.pytorch.org/whl/cu121Match cu121 to your driver (nvidia-smi shows CUDA version).
The forge_embed_auto_trigger.py daemon embeds chunks in batches of 200.
⚠ Embedder moved (2026-06-03) — the live embedder is
NokidoLlamaEmbed:8099 (BGE-M3 Q8_0 GGUF, llama.cpp GPU/CPU). The ONNXbrain_worker:5557 services (NokidoBrainWorker,NokidoBrainWorkerRust,NokidoEmbedWorkerIsolated) are disabled ('bad allocation' OOM Cast node). Allembed()calls route viaforge_embed_router→ :8099 first.
If embedding hangs, check the live embedder :8099 :
# HTTP (BGE-M3 GGUF, OpenAI-compat) — expect a 1024-float embedding
curl http://127.0.0.1:8099/v1/embeddings -H "Content-Type: application/json" \
-d '{"input":"ping"}'
# Restart if down (NSSM service, supervised wave 4) :
nssm start NokidoLlamaEmbed # or via the supervisor :8765The dead brain_worker :5557 (ZMQ ONNX) only matters if you repair + re-enable
it (services.toml → disabled = false, re-export the onnxruntime model). Until
then, :8099 is the embedding path.
from forge_rag_engine import RAGEngine
rag = RAGEngine()
results = rag.search("your query", k=5)
print(results) # if empty list :Causes :
- The FAISS index is stale → rebuild :
python tools/forge_rebuild_local.py. - The query matches nothing in
rag_chunksAND nothing in FTS5 → try the raw FTS5 query (ring 0 SQL). - BGE-M3 scores all below the threshold → lower the threshold in
forge_rag_engine.py::DEFAULT_SCORE_MIN.
The firewall has a configurable false-positive tolerance. To see the reason :
from forge_semantic_firewall import get_firewall
fw = get_firewall()
pf = fw.pre_flight(your_prompt, context="", ring=2)
print(pf.reason if not pf.ok else "OK")Common false positives :
- French negation (
ne … pas) triggering some injection patterns. - Code with
system/assistant/toolkeywords.
Adjust thresholds in app/forge_prompt_guard.py::DETECTION_THRESHOLD or
add the prompt to app/forge_semantic_firewall.py::ALLOWLIST_PATTERNS.
forge_llm_router: cascade exhausted, returning degraded envelope.
Means no provider succeeded. Check :
- All keys in vault ?
nokido-secrets status. - Any provider online ?
curl https://api.groq.com/healthetc. - Local ollama up ?
curl http://localhost:11434/api/tags. - Quota all exhausted ?
If everything fails, you're offline or all your keys are invalid.
The agent's heartbeat is missing. Each MCP request writes
sandbox/<agent>.heartbeat. So either no agent has called yet, or the
hub itself isn't writing them.
ls -lt sandbox/*.heartbeatIf empty, restart the hub. If files exist but TUI doesn't see them, check
LAFORGE_ROOT env var matches the actual repo path.
The terminal is swallowing the keys. Try :
- Use Windows Terminal (not legacy cmd.exe) on Win.
- Use iTerm2 (not Terminal.app) on macOS for better escape support.
- On Linux, ensure your terminal supports
terminfocapabilitykf1-kf12.
Last resort : wipe state, keep code.
# Stop everything
docker compose down -v # WARNING: removes volumes !
# or
nssm stop LaForge-Master
# Wipe runtime state (KEEP source)
rm -rf sandbox/*
rm -rf logs/*
rm -rf RAG/embeddings.db # WARNING: nukes the RAG !
# (then re-import from seed)
# Re-init
bash install.sh
python tools/forge_db_bootstrap.py # bootstrap RAG from versioned seeds
# Start fresh
docker compose --profile core up -dNokido-labs/nokido · AGPL-3.0 (licence commerciale disponible) · wiki genere depuis docs/wiki de v0.20.12 (5fbcdc8) — corrections : ouvrir une issue ou une PR sur le depot.
Nokido
English
- 01 — Installation
- 02 — Quick Start
- 03 — Architecture overview
- 04 — MCP clients setup
- 05 — LLM providers
- 06 — Hub API reference
- 07 — Security model
- 08 — Vault & secrets
- 09 — TUI reference
- 10 — Docker profiles
- 11 — Cross-OS notes
- 12 — AMI cognitive stack
- 13 — Hardware roadmap
- 14 — Troubleshooting
- 15 — Glossary
- 16 — FAQ
- 17 — First launch
- 18 — Launchers & service files
- 19 — Knowledge Pack
- 20 — Modules Reference
- 21 — SSoT Cross-CLI
- 22 — Governance, cognition & self-safety
- 23 — Orchestration & Workflows
- 24 — Cloud peers (claude.ai, ChatGPT)
- OpenAI Gateway souverain
- Nokido — Wiki
- SearXNG Keeper
- Web Egress Gateway —
:7779
Français
- Accueil
- 01 — Installation
- 02 — Démarrage rapide
- 03 — Aperçu architecture
- 04 — Configuration clients MCP
- 05 — Providers LLM
- 06 — Référence API hub
- 07 — Modèle de sécurité
- 08 — Vault & secrets
- 09 — Référence TUI
- 10 — Profils Docker
- 11 — Notes multi-OS
- 12 — Pile cognitive AMI
- 13 — Roadmap matérielle
- 14 — Troubleshooting
- 15 — Glossaire
- 16 — FAQ
- 17 — Premier lancement
- 18 — Lanceurs & fichiers services
- 19 — Knowledge Pack
- 20 — Référence des modules
- 21 — SSoT Cross-CLI
- 22 — Gouvernance, cognition & auto-sûreté
- 23 — Orchestration & workflows
- 24 — Pairs cloud (claude.ai, ChatGPT)