Laminar
Open-source tracing for AI agents: see every step, prompt, and tool call your agent made.
by Laminar
Overview
Laminar records what your AI agent actually did. Your code sends a trace of every model call and every tool call, and Laminar shows you the run as a tree you can open and read: the prompts, the answers, how long each step took, and where it went wrong. It speaks OpenTelemetry, so it collects from the same instrumentation the rest of your stack uses.
Features
- Full traces of agent runs, nested step by step, with search over them
- Dashboards over your span data, and a SQL editor for your own questions
- Datasets built from real traces, so your test cases come from real runs
- Evaluations you can run over a dataset and compare between versions
- Labels and human review queues for scoring runs by hand
- Works with the OpenTelemetry standard, and with the Python and JS SDKs
- moose provisions and manages the database it needs, so there is nothing to wire up
Setting up
The first account you register after install becomes the owner, and it creates the first workspace and project. Open the project, then Settings, to get the project API key your application sends traces with.
Point your SDK at this app's address and turn on HTTP export. The
Laminar SDK sends spans over gRPC by default, and gRPC cannot reach the app
through this box. In the JS SDK pass forceHttp: true; anywhere else set
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf. Without it the SDK reports no
error and no trace ever arrives.
Good to know
- Apps running somewhere else can send traces, and the app stays private. moose keeps this app owner-only, so the pages are behind the box login. The tracing API is the exception: it answers without it, and the project API keys you mint are what guards it.
- Anyone who can open the pages can sign in as anyone. Laminar's self-hosted sign-in accepts any email address with no password. The box login in front of the app is the real protection here, so think twice before you make the whole app public from its page.
- Images and very large steps are not kept. A span carrying an image, a document, or more than about half a megabyte of text needs an object store, which this app does not include. The step still appears in the trace, but that content is dropped rather than saved. Ordinary text steps, which is nearly all of them, are stored in full.
- The browser agent is not included. Laminar can drive a web browser for you, but that runs as its own separate service, so it is not part of this app. Tracing, dashboards, datasets, and evaluations are unaffected.
- Evaluations and chat need your own model provider key. You paste it into the app, and the provider bills you directly. Tracing, dashboards, and datasets use no model and cost nothing.
- Email invitations need your own email provider key. Add it in this app's settings on this box. Without it an invitation is still recorded, it is just not emailed, and you can add people by having them sign in once and then granting them access.
- This is a heavy app. It runs a web tier, a Rust ingestion server, and a ClickHouse analytics database, alongside moose's managed database. Trace history grows with use.