Ollama Setup
Point any Ollama client at the tapes proxy to capture every local-model conversation — no change to your client code.
Start Ollama
Start the Ollama inference server (defaults to http://localhost:11434):
ollama serve Pull the models you need
# A chat model
ollama pull gemma2
# The embedding model, for semantic search
ollama pull embeddinggemma Keep this terminal running and open a new one for the next steps.
Start the proxy
tapes stores sessions in PostgreSQL (with the pg_duckdb and pgvector extensions). The fastest way to bring one up is tapes local up, which also runs an Ollama container with embeddinggemma preinstalled. To use your own Ollama, skip tapes local up and pass your own Postgres DSN.
# Start Postgres (+ Ollama) in Docker
tapes local up
# Run the proxy, API, and derive worker against it
tapes serve --postgres "postgres://tapes:tapes@localhost:5432/tapes?sslmode=disable" This starts the proxy on :8080 (captures Ollama traffic), the API on :8081, and the ingest server on :8082. By default the proxy forwards to Ollama at http://localhost:11434. Keep this terminal running.
Point your client at the proxy
Send Ollama traffic to the proxy on :8080 instead of Ollama's :11434. The proxy forwards to Ollama and captures the turn. Any client that speaks Ollama's API works the same way — just set its base URL to the proxy. A quick test:
curl http://localhost:8080/api/chat -d '{
"model": "gemma2",
"messages": [{"role": "user", "content": "where is New York?"}]
}' The response comes back from Ollama as usual, and the request/response is appended to the raw turn log and derived into a session you can browse and search.
Verify It's Working
After a request or two, confirm the session was captured:
tapes sessions Your conversation appears in the list.
Troubleshooting
Connection refused to Ollama
The proxy forwards to Ollama at :11434. Make sure ollama serve is running, or point the proxy elsewhere with --upstream.
Model not found
Pull the model before using it:
ollama pull <model> Next Steps
Everything you capture is queryable the same way:
- Search your sessions — find past work by meaning (embeddings run on
embeddinggemmaby default) - Export a session — the API's session→traces→spans projection as JSONL
- Browse history in the Deck TUI — an ROI dashboard over sessions, traces, and spans
- Explore the API — the full read surface