Docker Compose is the recommended way to deploy Spy Search for most users. It bundles the FastAPI backend and React frontend into a single orchestrated stack, handles all Python and Node.js dependencies inside the container, and eliminates the need to manage virtual environments or install Playwright manually on your host machine.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.
Prerequisites
- Docker Desktop (includes Docker Compose) — download from docker.com
- If you are on Linux and installed Docker Engine without Docker Desktop, install the Compose plugin separately:
- If you are on Linux and installed Docker Engine without Docker Desktop, install the Compose plugin separately:
- An LLM API key — for OpenAI, DeepSeek, Gemini, Grok (xAI), or Anthropic; or Ollama running locally for a fully free setup
Deployment Steps
Copy and configure config.json
config.json to match your chosen LLM provider. Select the tab below for your setup:- OpenAI / OpenRouter
- Ollama (Local / Free)
The default example routes through OpenRouter using the OpenAI-compatible API, which lets you access hundreds of models (including Llama, Mistral, and GPT-4o) with a single API key:To use the native OpenAI API instead, remove the
base_url field (or set it to "https://api.openai.com/v1") and set "model" to an OpenAI model such as "gpt-4o".| Config Field | Description |
|---|---|
provider | LLM provider: openai, deepseek, gemini, xai, anthropic, or ollama |
model | Model identifier as expected by the provider |
agents | Active agent roles — ["reporter"] enables the full pipeline |
db | Path for the local ChromaDB vector store (resolved inside the container) |
base_url | Provider API base URL — must be http://host.docker.internal:11434 for Ollama inside Docker |
language | Output language code: "en", "zh", "ja", etc. |
Set your API key
Create a If you are using Ollama, you can create an empty
.env file in the project root with your provider’s API key:.env file or skip this step entirely — no key is needed.Build and start the stack
Run the following from the project root:The Check that the container is running:
--build flag ensures Docker rebuilds the images with the latest code and dependencies. On first run this will take a few minutes while layers are downloaded and compiled.To run the stack in the background (detached mode):Access the application
Once the stack is up, both ports are immediately available:
Open http://localhost:8080 in your browser to start using the search UI, or call the API directly:
| Service | URL |
|---|---|
| Backend API | http://localhost:8000 |
| Interactive API Docs | http://localhost:8000/docs |
| React Frontend | http://localhost:8080 |
Port Reference
| Port | Service | Description |
|---|---|---|
8000 | Backend API | FastAPI application served by Uvicorn |
8080 | React Frontend | Vite-built React UI |
Configuration Hot-Reload
config.json is volume-mounted into the container, which means any changes you make to the file on your host are immediately reflected inside the running container — no restart is required. This lets you switch models or providers on the fly during development.
Ollama users: The
base_url in your config.json must be set to http://host.docker.internal:11434 when running inside Docker. Using http://localhost:11434 will not work because localhost inside the container refers to the container itself, not your host machine. host.docker.internal is the correct DNS name that Docker provides for reaching services on the host from within a container.Stopping the Stack
To stop the running container:Next Steps
Introduction
Understand the Planner → Searcher → Reporter agent pipeline.
Quickstart
Prefer a local Python install? Follow the 5-minute quickstart guide.