Laminar
An observability platform for tracing, evaluating, alerting on, and debugging AI agent runs.
- Source repo
- lmnr-ai/lmnr
- Stars
- ★ 3.5k
- Last updated
- today
- License
- Apache-2.0
- Primary language
- TypeScript
- FA score
- 41/100 · Major gaps
At a glance
- How it runs
- Works with
- Universal · cross-platformOpenAI API · Claude API
- Cost
- Free tier plus a paid hosted plan
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- An agent team using OpenAI, Anthropic, or Gemini that needs to inspect the traces and spans from individual production runs.
- Not a fit if
- Teams that need fully offline operation with no data leaving their machines
- Small teams unwilling to maintain ClickHouse, Postgres, and other services
- Users who want zero LLM key or AWS credential configuration
- Source review
- 41/100 · Major gaps 2 safety controls not found
What does this agent do, and when should you use it?
Laminar is an open-source observability platform for AI agents with tracing, Signals, Evals, dashboards, and data annotation and datasets. Its OpenTelemetry-native SDK can automatically trace integrations including Vercel AI SDK, Browser Use, Stagehand, LangChain, OpenAI, Anthropic, and Gemini. MCP and CLI access let a coding agent query traces, spans, metrics, and events with SQL for investigation and debugging. It can be self-hosted through Docker Compose, with the lightweight UI exposed at localhost:5667, while production deployments can use the full Compose stack or the managed platform. Its server-side AI workers and frontend AI features can use Gemini, OpenAI-compatible endpoints, or Anthropic Claude through AWS Bedrock.
An application initializes the TS SDK with Laminar.initialize({ projectApiKey }) or the Python SDK with Laminar.initialize(project_api_key=...). The SDK automatically records supported framework and provider calls, while custom functions can be traced with TypeScript's observe({name: 'poemWriter'}, async ...) wrapper or Python's @observe() decorator; these capture function inputs and outputs as tracing data. Laminar presents the resulting runs in real time, supports full-text search across span data, builds dashboards over traces, metrics, and events, and visualizes and compares evaluation results. Through MCP or the CLI, a coding agent can issue SQL queries over traces, spans, metrics, and events. Signals read agent runs and send a Slack notification when a user-defined plain-English behavior matches.
- An agent team using OpenAI, Anthropic, or Gemini that needs to inspect the traces and spans from individual production runs.
- An engineer building with LangChain, Vercel AI SDK, Browser Use, or Stagehand who wants automatic tracing with minimal instrumentation work.
- A development team running evaluations locally or in CI/CD that needs an SDK and CLI to run evals and a UI to compare outcomes.
- An operations owner investigating looping agent behavior who wants to define a Signal such as “agent is stuck in a loop” and receive a Slack alert.
- A team that wants its coding agent to diagnose incidents by querying trace, metric, and event data through MCP or a CLI.
- A team that needs a locally deployed observability stack and can run the supplied Docker Compose deployment.
How do you install or deploy this agent?
For the self-hosted quick start:
git clone https://github.com/lmnr-ai/lmnr
cd lmnr
docker compose up -dThen open http://localhost:5667. Before SDK use, create a project and generate a project API key. The repository says self-hosted SDKs require baseUrl and correct ports, but does not provide a complete copyable self-hosted SDK configuration. To enable frontend AI features or server-side AI workers, choose LLM_PROVIDER=gemini with LLM_API_KEY, LLM_PROVIDER=openai with LLM_API_KEY, or LLM_PROVIDER=bedrock with AWS credentials and AWS_REGION in the root .env.
How do you use this agent?
For TypeScript, run npm add @lmnr-ai/lmnr, then initialize with Laminar.initialize({ projectApiKey: process.env.LMNR_PROJECT_API_KEY }); wrap custom functions with observe({name: 'poemWriter'}, async (topic) => { ... }). For Python, run pip install --upgrade 'lmnr[all]', call Laminar.initialize(project_api_key="<LMNR_PROJECT_API_KEY>"), and add @observe() to functions you want to trace. Use the UI to inspect traces and evaluation results, and use the available MCP or CLI access when a coding agent needs to query traces, spans, metrics, or events.
What are this agent's strengths and limitations?
- Combines automatic tracing of supported frameworks and providers with explicit function-level
observeinstrumentation for custom application code. - Places tracing, Signals, Evals, SQL querying, dashboards, and dataset annotation in one platform, keeping run data and evaluation workflows together.
- Its MCP and CLI access provide a direct path for coding agents to investigate operational data with SQL.
- The repository describes a Rust implementation, 20x trace compression, a real-time trace engine, full-text span search, and a gRPC tracing exporter.
- It offers both Docker Compose self-hosting and a managed option, with multiple documented provider paths for server-side AI features.
- Self-hosted SDK configuration requires
baseUrland correct ports, but the supplied material does not include a complete copyable configuration example. - Frontend AI features such as chat-with-trace and SQL-with-AI, plus server-side AI workers, require an external LLM provider and relevant API keys or AWS credentials.
- The quick Compose stack is positioned for quick starts and lightweight use; production use is directed to the managed platform or
docker-compose-full.yml, requiring further deployment evaluation. - Self-hosted deployments collect anonymized usage telemetry by default unless
LAMINAR_TELEMETRY_DISABLED=trueis set. - Using a custom Postgres schema alongside another Drizzle-managed service may require manual intervention because of migration-journal conflicts.
How does this agent compare with similar options?
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Laminar This agent | 41 · Major gaps | Self-hosted serviceFreemium | ★ 3.5k | today | TypeScript | OpenAI API · Claude API |
| OpenInference | 71 · Some gaps | Library / SDKFree | ★ 1.3k | today | Python | OpenAI API · Claude API |
| traceAI | 69 · Some gaps | Library / SDKFree | ★ 266 | 4d ago | Python | — |
| TMA1 | 51 · Major gaps | Self-hosted serviceFree + model costs | ★ 124 | 7d ago | Go | Codex · Claude Code |
How does FollowAgents rate this agent?
Why each dimension lost points
Evidence: README mentions anonymous telemetry but does not specify data flow; optional LLM provider configuration involves API keys; Slack integration may send notifications. Deductions: no user confirmation mechanism, no data retention/deletion details, no rollback mechanism, insufficient dependency security info.
Evidence: CI workflow (backend-build-and-test.yml) and test files (cache-exists-expiry.test.ts, slack-handle-interaction.test.ts) indicate some test coverage. Deductions: dependency availability not explicit, failure messages handled in Slack test route but overall insufficient.
Evidence: README provides multiple use cases (tracing, signals, evals, MCP/CLI, dashboards, datasets), TS/Python quickstarts, self-hosting and managed platform. Deductions: capability boundaries not explicit, trigger precision (e.g., signals conditions) not detailed, environment fit (custom Postgres schema) limited.
Evidence: README well-structured, install instructions (docker compose, npm, pip), example code, Apache-2.0 license. Deductions: naming stability not explicit, known limitations not listed, versioning/changelog not provided, maintenance responsibility not explicit.
Evidence: Output usability (UI, dashboards, SQL queries) described, marginal value (20x compression, high performance) claimed. Deductions: cost-benefit not quantified, performance claims lack benchmarks.
Evidence: Feature list in README has doc links but no concrete evidence. Deductions: claims (e.g., 20x compression) lack benchmark support, cross-source corroboration insufficient, fact/inference separation not explicit.
- Not found in source: confirmation before actingTurn on (or add) a confirmation step before it acts, and try it in a sandbox or test environment before real data.
- Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
- Anonymous telemetry is enabled by default; opt-out requires setting LAMINAR_TELEMETRY_DISABLED=true, but the specific data collected is not disclosed.
- LLM provider configuration involves API keys; ensure secure storage to avoid leakage.
- Slack integration may send notifications; be mindful of permissions and user confirmation.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
Release notes excerpt
What's Changed * Drop first tag from blog post header line by @Rainhunter13 in https://github.com/lmnr-ai/lmnr/pull/2561 * fix(span-view): render overview input and output in their own formats (LAM-2372) by @laminar-coding-agent[bot] in https://github.com/lmnr-ai/lmnr/pull/2562 * feat(dashboards): multiple dashboards per project (LAM-2292) by @laminar-coding-agent[bot] in https://github.com/lmnr-ai/lmnr/pull/2426 * Say data access instead of retention in welcome and trial-ending emails by @olzhik11 in https://github.com/lmnr-ai/lmnr/pull/2558 …View on GitHub ↗ -
Release notes excerpt
What's Changed * Fix signal events horizontal scrolling by @kolbeyang in https://github.com/lmnr-ai/lmnr/pull/2539 * feat: shorten signals step by @olzhik11 in https://github.com/lmnr-ai/lmnr/pull/2529 * fix: preserve newlines in signal alert emails by @kolbeyang in https://github.com/lmnr-ai/lmnr/pull/2546 * fix: send onboarding welcome email once across tabs by @olzhik11 in https://github.com/lmnr-ai/lmnr/pull/2547 * Simplify workspace invitation email styling by @kolbeyang in https://github.com/lmnr-ai/lmnr/pull/2549 …View on GitHub ↗ -
Release notes excerpt
What's Changed * feat: opencode format by @olzhik11 in https://github.com/lmnr-ai/lmnr/pull/2534 * fix(LAM-2357): persist full column visibility in saved views by @laminar-coding-agent[bot] in https://github.com/lmnr-ai/lmnr/pull/2526 * fix: log clearer warning on consumers with older qw (primarily non docker) by @dinmukhamedm in https://github.com/lmnr-ai/lmnr/pull/2535 * feat(notifications): SIGNAL_EMPTY_TRACE email via a Resend template (LAM-2359) by @laminar-coding-agent[bot] in https://github.com/lmnr-ai/lmnr/pull/2527 …View on GitHub ↗
FAQ
Can Laminar be self-hosted?
docker-compose-full.yml for production.Which providers can power its AI features?
Do I need to manually instrument every function?
observe or Python @observe() for custom functions.Does self-hosting send telemetry?
LAMINAR_TELEMETRY_DISABLED=true to opt out.