See what your agent did, step by step

Trace every turn of an AI agent: model calls with their tokens, tool calls, retrievals, and KiviDB's own semantic cache and memory calls. Sent with any OpenTelemetry SDK over OTLP/HTTP, kept in...

Kivi Lens records each turn of an agent as a trace: the model calls and their tokens, tool calls, retrievals, and the semantic cache and memory calls KiviDB answered for it. Send spans with the OpenTelemetry SDK you already use. They are kept in one of your databases, for as long as you choose, up to 30 days.

One turn, every step

  • A waterfall Every span of a turn on one timeline, nested under its parent, with its duration. Click one for its attributes and events.
  • Model calls and tokens Spans with the OpenTelemetry GenAI attributes (gen_ai.request.model, gen_ai.usage.input_tokens and output_tokens) show as model calls, and each trace totals its tokens.
  • Errors stand out A span with an error status marks its trace. Filter the list to errors, by service, by time, or by words in span names and attributes.

Any OpenTelemetry SDK, no KiviDB SDK

  • OTLP over HTTP Kivi Lens takes OTLP/HTTP, protobuf or JSON, at /lens/{id}/v1/traces, with an ingest key. The stock exporters for Python, Node, Go, Java and .NET work as they are, and so does an OpenTelemetry Collector.
  • Ingest keys A key writes to one lens and nothing else. It is shown once, stored as a hash, limited to 600 requests a minute, and revoked from the console.
  • Bodies up to 4 MB gzip is accepted. A span that is not valid OTLP is counted and reported back to the exporter; the rest of the batch is kept.

KiviDB's own calls, in your trace

  • Send a traceparent Semantic cache lookups and puts, agent memory recall, search and adds, context tool calls, intent matches and playbook discovery that carry a W3C traceparent header are recorded as children of your span.
  • What it records The operation, how long it took, hit or miss, scores, counts and ids. Never the payload, beyond a 120-character preview.
  • Never in the way These spans are written in the background. If the queue is full or the write fails they are dropped and counted, and the call itself is not slowed.

Check what agents learned

  • From the trace to the memory A memory span lists the memory ids it read or wrote, and opens the store it came from.
  • Search by actor, words or meaning Each store on the database opens in Agent Memory, where long-term memories are searched by actor, by words and by meaning, and sessions are listed.
  • Read-only here Kivi Lens itself never changes a memory.

In your database, within limits

  • Retention you choose A trace is kept 1 to 30 days after its last span arrived (7 by default), as keys with that TTL.
  • Ceilings Each lens has a most-traces and a most-megabytes ceiling. Past either, the oldest traces are removed first, and the console counts them.
  • Per-trace limits 10,000 spans and 16 MB a trace, 64 KB an attribute value (longer ones are cut and marked). Everything dropped is counted.

Questions

What does it cost?

No extra charge beyond the database: traces use the database's own memory, up to the ceiling you set.

Can an assistant read traces?

Yes, over the KiviDB MCP server: lens_search_traces and lens_get_trace, both read-only.

Does it work on sharded databases?

Not yet. A lens runs on a database without shards.

Does it accept OTLP protobuf?

Yes. Kivi Lens takes OTLP/HTTP in protobuf (the default of most SDKs) and in JSON. It has no gRPC endpoint, so use the HTTP exporter.

Trace your next agent turn

Create a lens on a database in the console's Lens section, make an ingest key, and point your exporter at it.