From clone to first capture — 10 minutes
Six steps. Five terminals. One end-to-end loop: gateway capturing Claude Code's traffic, dashboard showing the realtime feed, TUI rendering metric cards, and an MCP server letting Claude Code query its own past sessions.
What you'll have at the end
- A Recondo gateway on
:8443, TLS-MITM capturing all agent-to-LLM traffic - A PostgreSQL database with your first captured sessions, turns, and tool calls
- The dashboard at
http://localhost:5173rendering the realtime feed - The TUI in another pane updating metric cards within 500 ms
- Claude Code querying its own captured history via MCP — ask "what tools have I called in the last hour?" and watch it call
recondo_tool_call_stats
Prerequisites
gitClone the repoDocker + ComposePostgreSQL + MiniStack (S3/IAM/KMS emulation)Rust 1.80+Build the gateway and TUI (rustup)Node 20+ · pnpm 10+API and MCP services, dashboard buildAgent clientClaude Code, Cursor, or Goose2 GB disk · ports freeContainers, build artifacts, the ports belowPorts the stack needs free
:8443 · GatewayTLS-MITM listener for all agent traffic:4000 · APIGraphQL @ /graphql · REST @ /v1/*:4001 · MCPStreamable HTTP @ /mcp for agent introspection:5173 · DashboardReact + Vite dev server:5432 · PostgreSQLCaptures schema, append-only triggers:4566 · MiniStackS3 / KMS / IAM emulation
Optional but recommended: just (brew install just) and
tmux/screen for the multi-terminal layout below.
Step 1 — Clone & bootstrap
git clone github.com/recondodev/recondo
cd recondo
just setup # installs cargo-nextest (one-time, ~30s)
just dev-setup # starts Postgres + MiniStack and runs migrations (~2 min)
Manual control if you don't want the combined recipe:
just dev-infra · just api-migrate.
Step 2 — Start the stack (four terminals)
Terminal 1 · just dev-run-localGateway on :8443 writing to Postgres + local objectsTerminal 2 · just api-devGraphQL API on :4000Terminal 3 · just dashboard-devVite dev server on :5173Terminal 4 · (ready for Claude Code)Keep this terminal available for Step 4Step 3 — Install the gateway CA
# One-time: sync the gateway CA into the system trust store
just dev-trust Step 4 — Route Claude Code through the gateway
NODE_EXTRA_CA_CERTS=$HOME/.recondo/ca/ca.crt \
HTTPS_PROXY=http://localhost:8443 \
claude
Send a trivial prompt ("what time is it?") and wait for the response.
Open http://localhost:5173/ — within 5 seconds a new row appears
in the realtime feed with session id, user, timestamp, token count, and cost.
Step 5 — Run the TUI
cargo run -p recondo-tui
First run compiles in 30–60 seconds; subsequent runs are instant. The TUI lands on the
realtime lens — press s for sessions, c for cost, a for agents.
Full keybindings on the TUI page.
Step 6 — Register the MCP (optional)
recondo-mcp config claude-code >> ~/.claude/mcp_servers.json
Restart Claude Code, run /mcp to confirm recondo is registered,
then ask: "What tools have I called in the last hour?" — the agent invokes
recondo_tool_call_stats and returns structured results. Full setup
details on the MCP page.
Verify everything works
- Dashboard at
http://localhost:5173shows a non-zero session count - API responds at
http://localhost:4000/graphql(a GET returns 400 / 200, not connection refused) - TUI realtime lens (
d) renders metric cards within 500 ms of the dashboard - Claude Code invokes
recondo_tool_call_statswhen asked about recent tool usage
Where the data lives
~/.recondo/objects/req/Gzipped request bodies — content-addressable, deduplicated by SHA-256~/.recondo/objects/resp/Gzipped response bodies~/.recondo/captures/JSON metadata linking req/resp hashes, session id, timestampsPostgreSQL :5432Normalized schema — sessions, turns, tool_calls, costs, tokensCommon first-run problems
"Connection refused" on :8443
Gateway didn't bind. lsof -i :8443 to see what holds the port; verify Rust is
installed with rustup --version; re-check Terminal 1 for the
TCP listener bound to 127.0.0.1:8443 line.
"Invalid CA cert" / CERTIFICATE_VERIFY_FAILED
The agent doesn't trust the gateway's CA. Re-run just dev-trust. Last-resort
fallback for debugging only: NODE_TLS_REJECT_UNAUTHORIZED=0 —
do not use this in production; it disables certificate validation entirely.
Dashboard shows "No data" / GraphQL 500
The API can't reach Postgres. docker ps | grep postgres, then
psql -h localhost -U recondo -d recondo -c "SELECT COUNT(*) FROM sessions;"
(password recondo_dev). Zero rows means the gateway never wrote captures —
re-check Step 4.
"Another recovery in progress"
A prior gateway crashed while holding the recovery lock. Inspect with
lsof ~/.recondo/.recovery.lock. If a PID is alive, kill it; if the process is
gone, remove the stale lock and re-run just dev-run-local.
TUI doesn't show data
Verify the gateway and API are both running, then confirm you've sent at least one
prompt through Claude Code. For TUI-side debugging:
cargo run -p recondo-tui 2>&1 | tee tui.log.
Next steps
You're now end-to-end. Pick where to go deeper: