All runtime behaviour in Spy Search is controlled by a single file:Documentation Index
Fetch the complete documentation index at: https://mintlify.com/JasonHonKL/spy-search/llms.txt
Use this file to discover all available pages before exploring further.
config.json in the project root. The file is read at startup by src/api/core/config.py, and it is also hot-reloaded in Docker — meaning you can update the file and restart the container without rebuilding the image.
Field Reference
The LLM provider to use. Must be one of:
The value is matched inside
| Value | Provider |
|---|---|
openai or gpt | OpenAI (or any OpenAI-compatible API, e.g. OpenRouter) |
ollama | Ollama (local) |
deepseek | DeepSeek |
google or gemini | Google Gemini |
xAI or gork | xAI / Grok |
Factory.get_model() in src/factory/factory.py.The model identifier string passed directly to the provider’s API. The
accepted values depend on the provider you have selected.Examples:
gpt-4o, deepseek-chat, gemini-2.0-flash, grok-beta,
qwen3:8b, meta-llama/llama-3.3-70b-instructArray of agent IDs to activate for each query. The Planner agent is always
instantiated internally and does not need to be listed here.Available values:
At minimum, include
| Value | Description |
|---|---|
reporter | Synthesizes a long-form report from gathered data |
searcher | Performs live web search via DuckDuckGo |
local-retrieval | Queries a local ChromaDB vector store for RAG |
"reporter" — the UI will auto-add it if missing.Path to the local file directory used by the
local-retrieval agent for
ChromaDB-backed RAG. Only required when local-retrieval is in agents.The path is relative to the project root.Override the API base URL. Leave empty (or omit the key) to use each
provider’s default endpoint.Useful for:
- OpenRouter —
https://openrouter.ai/api/v1 - Ollama —
http://localhost:11434(orhttp://host.docker.internal:11434in Docker) - Azure OpenAI — your deployment endpoint
- Custom proxies — any OpenAI-compatible proxy
BCP-47 language code that instructs the reporter agent to produce output in
the specified language. Examples:
en, zh, fr, de, ja.Example Configurations
- OpenAI (direct)
- OpenRouter
- Ollama (local)
- DeepSeek
Use OpenAI’s API directly with Set your key in
gpt-4o:config.json
.env:.env
How the File is Read
src/api/core/config.py exposes two helpers used throughout the application:
src/api/core/config.py
read_config() has two fallback paths:
- File missing: returns
provider: "openai",model: "deepseek-r1:1.5b", emptyagents. - File present but invalid JSON: returns
provider: "ollama",model: "deepseek-r1:1.5b", emptyagents.
config.json.
The frontend Settings page reads the live config via GET /get_config and writes
updates via the /agents_selection endpoint, so the file stays in sync with the
UI at all times.