Regex and thresholds are great for common patterns. But sometimes the thing you care about is more specific.
How it works
You can now write custom function detections in neatlogs. Pick a target, write a function, and return a boolean. Your code runs against a snapshot of every span or trace in scope, and anything that returns true gets flagged.
Use it for checks that need your own logic, like marking traces where cost, latency, metadata, and span content combine in a way simple rules can’t express. You can also train a classifier on your own labeled spans and run it across your traces as a detection, giving you another way to catch patterns that are easier to recognize than hard-code.
Release notesv1.17.0Custom function detectionsSeptember 2026
Write detection logic in code and run it across every span or trace in scope.
EnhancementCost analytics by metadata: Group trace cost by any metadata key, so you can see spend by customer, feature, model, or any other tag you send.
EnhancementBroader PII redaction: Server-side redaction now covers every supported span kind.
FixedMore reliable trends and evals: Detection trends and evals now handle large repeated query arrays more gracefully.
Every trace can now be reviewed automatically, not just the ones your team has time to open.
How it works
Build custom AI evaluators with your own rubric and verdict schema. Use an LLM judge for a fast one-pass review, or an agent judge when the evaluation needs to inspect span data, call tools, or check external context first.
Agent judges can use connected integrations, custom MCP servers, or allowlisted HTTP fetches during review.
Test an evaluator against a real trace in the playground, then assign it per question alongside your human reviewers.
Evals now live at /evals, with old /feedback links redirecting automatically. Trace and span eval results are also exposed to agents querying over MCP, so evaluation outcomes can feed back into debugging and investigation workflows.
Session Replay turns a run into a player you can step through, watching the agent's structure unfold, where time went, and what each step decided, in order.
A span tree shows the shape of a run, but not how it played out. Replay lets you move through it in sequence, where it branched, where it stalled, what each step decided, which is usually faster than reading a static tree when you're trying to understand behavior.
A persistent shell wraps every replay: transport controls, a structure graph, a timeline that exposes concurrency and idle gaps, and an inspector for the selected step. Switch the center between a narrative Story walkthrough and a proportional Tree-plus-gantt view. It runs on your live traces or bundled demo architectures, and reads the same span data as Traces, so anything your instrumentation captures shows up with no extra setup.
Analytics rolls all your traces into one dashboard, so you watch cost, latency, error rates, and detection trends across your whole system instead of one run at a time.
A single trace tells you what happened in one run: it won't tell you that p95 latency crept up this week or which model is quietly driving your bill. Analytics gives you that aggregate view and groups recurring failures together, so a regression shows up as a trend instead of a surprise.
The dashboard is built from widgets you can show, hide, and reorder, a KPI strip, cost breakdown by model or workflow, tool latency, error clusters, and detection trends. One filter bar scopes everything by time range, workflow, model, tool, or detection, and every number drills straight back into the traces behind it, since it's all computed from the same span data.
Stop alt-tabbing between Neatlogs and your code. Push a triage result to Cursor or Claude Code and keep debugging without losing context.
Continue investigations in your editor
Go from root cause to code fix without rebuilding context.
Finding the root cause is only half the job. The actual fix happens in your editor. Instead of switching tools and reconstructing the investigation, you can continue from where it left off.
Send any triage result directly to Cursor or Claude Code. The handoff includes the root cause, supporting evidence, affected traces, and recommended fixes, so your AI coding assistant has the context it needs from the start.
Stop context switching. When you find a bug in Neatlogs, push your investigation directly into Cursor or Claude Code. See the trace context, root cause, and suggested fix without leaving your editor. Neatlogs is no longer just a dashboard, it's part of your coding loop.
FeatureClick 'Send to IDE' and your triage result opens in Cursor or Claude Code with full trace context
FeatureReal-time streaming: watch investigation summaries, root causes, and code suggestions arrive as you debug
FeatureIDE-native preview cards show span details, error stacks, and suggested fixes at a glance
FeatureOne-click deep dive: jump from your editor back into Neatlogs to explore related traces
FeatureOptimized streaming pipeline eliminates jank and reduces latency for multi-turn debugging sessions
Your traces are yours. If you're on LangSmith or Braintrust and curious about Neatlogs, migrate your trace history in minutes. No data loss. No manual work.
Bring your trace history with you
Evaluating a new observability platform shouldn't mean starting from an empty dashboard.
Neatlogs can now import traces from LangSmith and Braintrust, so you can explore your existing workloads from day one.
Imported data includes traces, spans, metadata, attributes, cost information, and source attribution for every trace. We also filter out low-signal infrastructure spans, making it easier to focus on your agents rather than the underlying framework.
Whether you're evaluating Neatlogs or planning a migration, your existing history comes with you.
Bring your existing traces into Neatlogs without friction. We've built native importers for LangSmith, Braintrust, and Raindrop that preserve full trace fidelity, automatically calculate costs, and intelligently surface only the traces that matter. Your data stays accurate. Your workflow stays simple.
FeatureImport traces from LangSmith and Braintrust with full provenance and cost attribution, no data loss, no manual mapping
FeatureRaindrop integration to bridge bookmarks and saved articles into your trace library
EnhancementSmart filtering removes noise (pure HTTP calls) and promotes root agent workflows to the surface
EnhancementImport history with one-click rollback if you need to undo a migration
EnhancementTenant-aware tagging ensures imported data lands in the right project automatically
AI Search is now on neatlogs. Describe what you're looking for in plain English and we'll find the matching traces, no filter-building required.
Search your traces in plain English
Ask questions about your traces without writing filters or queries.
AI Search understands natural language, whether you're looking for a specific failure or investigating patterns across multiple traces. Use Fast mode for quick lookups or Pro mode for deeper investigations across spans and traces.
You can ask questions like:
• Show me traces where the agent failed to call a tool • Find runs from last week where token count exceeded 10,000 • Which model generated the most errors today?
AI Search also remembers context within a session, so you can ask follow-up questions naturally without repeating yourself.
PII Redaction is now available on neatlogs. Two layers: mask before export from your process, redact before storage on the backend.
Keep sensitive data out of your traces
Protect sensitive information without sacrificing observability.
You can now redact PII before it leaves your application or before it's written to storage in Neatlogs. Built-in detection covers common entities like names, email addresses, phone numbers, and financial information, and you can choose which span types are affected.
Client-side redaction gives you complete control over what gets sent to Neatlogs, while server-side redaction uses Presidio to automatically identify and remove sensitive data before it's stored.
Two-layer PII protection: client-side masking before export and server-side Presidio redaction before storage. Configure entity types, operators, and affected span types from Settings.
FeatureServer-side Presidio redaction: detects and redacts names, emails, phone numbers, and addresses before storage
FeatureClient-side masking via mask parameter in neatlogs.init() or per-span on @span and trace()
Featurepii_enabled and pii_span_types parameters in neatlogs.init() for programmatic control
Prompt management is now on neatlogs. Every edit creates a new version. Promote to production with a label change, no redeploy needed.
Manage prompts without redeploying
Update prompts independently of your application code.
Store prompts in Neatlogs and fetch them at runtime instead of hardcoding them. Test changes in the Playground before promoting them to production, keep a complete version history, and roll back instantly if needed.
If you're already using Langfuse, you can import your existing prompts from Experiments → Prompts → Import.
Sessions are now on neatlogs. Group every turn of a chatbot or multi-turn workflow under a single session, one parameter change.
Group related traces into sessions automatically
Keep every trace from a conversation together without managing session IDs yourself.
Enable auto_session and Neatlogs automatically groups all traces produced by your process into the same session. If you already manage conversation state externally, you can provide your own session ID instead.
Release notesv0.8.0Sessions for multi-turn appsJanuary 2026
Group traces from the same conversation under a single session. One parameter change instruments chatbots, voice assistants, and any multi-turn workflow.
Featureauto_session=True in neatlogs.init(): generates a session ID at startup and attaches it to every trace automatically
Featuresession_id parameter for supplying your own identifier when you manage conversation state externally
FeatureSession timeline view in the dashboard grouping all turns from the same conversation
Comments are now on neatlogs. Pin context directly to any span, highlight what you're referencing, and tag the right person, without leaving the trace.
Discuss traces where the work happens
Keep feedback attached to the trace instead of scattered across chat messages and issue trackers.
Comment directly on any output, failed tool call, suspicious span, or attribute. Every comment stays attached to the exact part of the trace you're discussing, making it easy to review findings and collaborate without losing context.
Use @mentions to bring teammates into the conversation and reactions to keep discussions organized.
Release notesv0.7.0Leave comments directly on tracesDecember 2025
Debugging context now stays attached to the exact span, output, or tool call your team is reviewing.
FeaturePin a comment to any span, highlight the specific content you’re referring to, and tag teammates with @mentions when you need another set of eyes
FeatureComments are team-wide, persist across sessions, and support reactions for quick acknowledgement
EnhancementDiscuss agent behavior right where it happened instead of moving screenshots into Slack or losing context in side threads
Traces are the core of neatlogs. Every agent run is captured as a full span tree, LLM calls, tool invocations, retrievals, with inputs, outputs, timing, and cost.
Understand every agent run from end to end
See the complete execution path behind every request.
Neatlogs captures each agent run as a trace, showing the full span hierarchy, execution order, and where time was spent. Inspect prompts, completions, token usage, costs, timing, and other metadata for every span.
Whether you're debugging failures or investigating performance, traces give you the context you need to understand what happened.
Detections are now on neatlogs. Rules that run against your traces automatically and flag the spans that match, no manual scanning.
Automatically flag runs that need attention
Surface important runs without manually inspecting every trace.
Create detections using regex patterns, numeric conditions, built-in PII detection, or semantic classifiers. Matching runs are automatically labeled in the traces list, and you can filter by detection type to quickly review related issues.
Release notesv0.6.0Flag important spans automaticallyNovember 2025
neatlogs can now run rules across your traces and mark the spans that match, so you can spot issues without opening every run one by one.
FeatureCreate regex detections for exact patterns, condition detections for numeric thresholds like total_tokens > 8000 or latency_ms > 5000, and classifier detections for semantic checks that look at meaning instead of exact text.
FeatureDetection badges now appear on the traces list, so you can scan runs at a glance and filter the entire list by detection type in one click.
You can now instrument OpenAI, Anthropic, LangChain, CrewAI, and a dozen vector databases on neatlogs with a single init call, no decorators, no wrappers.
Instrument your AI stack with a single configuration option
Capture LLM calls, tool invocations, retrievals, and more without adding manual wrappers.
Pass the libraries you use to instrumentations and Neatlogs automatically instruments supported frameworks and SDKs. Just make sure neatlogs.init() runs before importing any instrumented library.
Added Anthropic, Azure AI Inference, Amazon Bedrock, Google GenAI, and LiteLLM to auto-instrumentation. CrewAI and LangGraph support with first-class prompt template binding.
FeatureAnthropic, azure_ai_inference, bedrock, google_genai, and litellm added as instrumentation keys
FeatureCrewAI support via neatlogs.bind_templates() and neatlogs.register_crewai_task()
Featurelanggraph instrumentation key for graph-level span capture
FeatureMCP_TOOL span kind for tools invoked via Model Context Protocol
Featureinstructor and guardrails added as supported instrumentation libraries
EnhancementSpan deduplication handles overlapping spans when two instrumentation layers cover the same call
Earlier releases9
Release notesv1.1.0Log CaptureApril 2026
Capture logs as structured spans alongside your traces. Three mechanisms: neatlogs.log(), stdlib logging auto-capture, and stdout capture, all opt-in.
Featureneatlogs.log(msg_template, level, data): structured log messages with keyword arguments stored as span attributes
Featurestdlib logging auto-capture inside active spans at or above log_level (default WARNING)
Featurecapture_stdout=True on @span and trace() to capture print() output
Featurecapture_logs parameter in neatlogs.init() to enable globally
EnhancementDebug mode now echoes captured logs to stderr in real time
Release notesv1.5.0TypeScript SDKJune 2026
Instrument TypeScript and Node.js agents with the same one-call setup as the Python SDK.
Featureneatlogs for TypeScript/Node: call init() once and your LLM and agent calls are traced automatically
FeatureSame trace, span, and session model as the Python SDK, so the dashboard works identically across languages
FeatureRuns in Node and edge runtimes
Release notesv1.6.0Go SDKJune 2026
Trace Go LLM and agent apps without hand-rolling spans.
Featureneatlogs Go SDK: initialize once and capture LLM calls, tool invocations, and workflow spans
FeatureContext-based span propagation that follows Go idioms
FeatureFeeds the same trace view as the Python and TypeScript SDKs
Release notesv1.7.0Browser SDKJune 2026
Send traces straight from front-end web apps, no backend proxy required.
FeatureZero-dependency browser client for tracing client-side LLM and agent calls
FeatureBatches and ships spans directly to Neatlogs from the browser
Release notesv1.8.0Prompt templates in every traceJune 2026
See which prompt template and variable values produced each run.
FeaturePrompt template tracking: the template and the values bound into it are recorded on the span
FeatureCompare runs by template to see how a prompt change moved your outputs
Release notesv1.10.0End-user identityJune 2026
Attach your app's end-user to every trace and slice the dashboard by who was affected.
FeatureSet an end-user on a trace, then filter and analyze traces by user
FeatureAnswer "which users hit this error?" without rolling your own tagging