tapes Overview
Today's agent tools are opaque. Once a session ends, all of that context is lost: the decisions, the errors, the lessons learned.
tapes records every request and response between your agent and model providers. It acts as a proxy server that captures and stores conversation history, allowing you to inspect, search, and verify what happened. Learn more on why transparent telemetry changes everything.
We are working to establish standards within Agent Trace, an open specification.
Quick Start
Install
curl -fsSL https://download.tapes.dev/install | bash Run
# 1. Bring up Postgres (with pg_duckdb + pgvector) and Ollama
tapes local up
# 2. Run the proxy and API against the local Postgres
tapes serve --postgres "postgres://tapes:tapes@localhost:5432/tapes?sslmode=disable" tapes local up pulls the embeddinggemma model automatically. The proxy listens on :8080, API on :8081, ingest on :8082. Schema migrations run automatically.
Use
Start an interactive chat session, search conversations, checkpoint previous states, or explore sessions in Deck:
# Start a chat session
tapes chat --model gemma3
# Search conversation turns
tapes search "What's the weather like in New York?"
# Open the Deck TUI
tapes deck --since 720h
# Checkout a previous conversation state for context check-pointing and retry
tapes checkout abc123xyz987
tapes chat All commands interact through the proxy, which forwards to your upstream LLM and stores conversation history.
Play
Explore the TUI with demo data and get a feel for the Deck workflow.
# Seed demo data and open Deck
tapes deck --demo Save
Sessions persist in Postgres as soon as tapes serve is pointed at a database. For per-project config, initialize a .tapes/ directory:
tapes init Creates .tapes/config.toml with project-local settings — pin a Postgres DSN, embedding model, or provider preset here. See Config.
Upgrading from v0.4.x or earlier? tapes no longer supports SQLite storage. Use tapes local up to bring up a local Postgres, then run the sqlite-import utility to copy your old ~/.tapes/tapes.sqlite into it.