FAQ¶
Common questions about installation, configuration, agents, and troubleshooting.
Installation¶
Which Ollama models do I need?¶
| Model | Purpose | Required? |
|---|---|---|
qwen3:8b |
Language generation (main) | Yes |
qwen3-embedding:0.6b |
Vector memory embeddings | Only for memory_mode |
llava |
Screenshot captioning | Optional |
Pull with ollama pull <model>. Update model names in config/config.py if you use alternatives.
Can I run without a GPU?¶
Yes. PyTorch falls back to CPU. Install CPU-only PyTorch:
Expect slower transcription and TTS synthesis (3-5x slower than GPU).
Why does uv sync take so long?¶
The dependency tree includes heavy packages (transformers, chromadb, sentence-transformers, torch). First install can take 10+ minutes on a slow connection. Subsequent installs use the uv cache.
Configuration¶
How do I add a new agent?¶
Edit config/config.py — add an entry with a name, personality prompt, and traits. No code changes needed. The factory (build_agents()) creates agents from config data at startup.
See the Custom Agents Guide for a step-by-step walkthrough.
How do I change the TTS model?¶
Set tts_model in config/config.py to any Chatterbox-compatible model path. The faster fork supports multiple voice models — check the Chatterbox docs for available options.
How do I enable/disable modes?¶
Three ways:
- Voice: Say "analysis mode on" or "memory mode off"
- UI: Toggle checkboxes in the Tauri sidebar (Modes panel)
- Config: Set boolean flags in
config/config.py(requires restart)
The ten modes are: analysis, mute, auto_chat, memory, control, cloud, training, remote_mic, silence, legacy.
Tool Calling¶
Why isn't my tool executing?¶
Tool calls route through the RealToolHost security pipeline. Common issues:
- Missing manifest: The tool must have a registered
ToolManifestintools/schemas.py - Autonomy policy: Check your autonomy tier — higher side-effect levels require approval
- Persistent denial: Previously denied tools stay denied until revoked
- Timeout exceeded: Long-running tools are cancelled after their manifest timeout
Check the audit log for details: look for ToolExecutionError or ToolDeniedError events.
How do I add a custom tool?¶
- Define the tool schema in
tools/schemas.py - Register a handler via
ToolHostAdapter.register_handlers() - Create a
ToolManifestwith the appropriate side-effect level - The agent can now invoke it through the security pipeline
See the Security Guide for details on manifests and autonomy tiers.
Troubleshooting¶
"ModuleNotFoundError: No module named 'chatterbox'"¶
The TTS engine is installed separately:
git clone -b faster https://github.com/rsxdalv/chatterbox.git chatterbox
cd chatterbox && uv pip install -e . && cd ..
"Ollama connection refused"¶
Ensure Ollama is running: ollama serve or start the Ollama desktop app. The backend connects to 127.0.0.1:11434 by default.
TTS sounds distorted¶
Check your audio output device. On Windows, set VECTOR_MIC_INDEX to the correct device index if using loopback recording for remote mic mode.
"pynini not found" error on TTS startup¶
This is a conda-only dependency — pip wheels don't exist for pynini.
The app hangs during startup¶
Check the console output. Common causes:
- Model loading timeout: Large models (embedding, reranker) take time to load on CPU
- ChromaDB lock: Another instance may be running (
rm -rf data/chromadb/*.lock) - Port conflict: API server needs
127.0.0.1:8765free
Data¶
How do I back up conversations?¶
Conversations are stored in a SQLite database (WAL mode). Copy the .db file from the data directory while the app is stopped, or use the backup command via the API:
curl -H "X-Session-Secret: <your-secret>" http://127.0.0.1:8765/commands \
-d '{"command": "backup_conversations", "path": "backups/chat_$(date).json"}'
How do I clear the vector memory?¶
Delete the ChromaDB directory:
Embeddings are rebuildable from the SQLite store. Restarting with memory mode enabled will re-upsert documents.
Advanced¶
Can I use remote models?¶
Yes, enable cloud_mode to route through a cloud model (configured in config/config.py as language_model_cloud). All other modes use local Ollama inference.
How do I change the API port?¶
Edit the host and port parameters in core/api/api_server.py::ApiServer.__init__() — defaults to 127.0.0.1:8765.
Is there a REST API for external clients?¶
The local API server supports two endpoints:
GET /events— SSE event stream (agent responses, mode changes, status)POST /commands— Typed commands (29 command schemas) with JSON body
Authentication requires the X-Session-Secret header. See the API Reference for schema details.