Launch HN: Laminar (YC S24) – We trained a model to catch silent agent failures

6 points by skull8888888 ↗ HN
Hi HN, we’re Robert and Din from Laminar (https://laminar.sh). We’ve been building open-source observability for AI agents since 2024. Recently, we released flow-1, a model trained with RL to find errors in agent traces. On our benchmark (https://laminar.sh/blog/flow-1), it matches GPT-6-sol in detection quality while being 23x cheaper. This makes it affordable to analyze every production agent trace, without sampling.

Here’s a one-minute walkthrough: https://youtu.be/KJa3h6ZJNLQ

We also put together a post with example traces and analyses from flow-1 and other models: https://laminar.sh/blog/flow-1-in-action

Agent observability is crowded, so instead of a bullet list of how Laminar differs from X, we’ll explain how we’re solving agent observability from first principles.

Agents now run for many steps and fail implicitly. An agent can click the wrong button or cite the wrong document while every call completes successfully. These errors are the most useful ones to catch and understand. To find them, you need to understand what the agent was trying to do and inspect its LLM calls and tool results. Simply looking at the final agent output is not enough.

Collecting traces alone doesn’t solve this. A lot of agent observability platforms are still data collectors at their core. You can end up paying to store traces that nobody has time to read or extract value from.

Using another LLM to inspect traces is THE solution, but capable models are expensive at scale and cheaper ones often miss errors or flag unrelated things.

So we built our model to solve exactly this problem. We finetuned a small OSS model and then post trained it with RL on thousands of synthetic investigations of realistic agent workflows in software, legal, customer support, etc. We got a model that is both good at agent trace analysis and very cheap to run.

flow-1 runs inside a harness we call Signals. It acts as a coding agent, treating an agent trace like a repo, with each span (an LLM call, tool call, etc.) as a file. It starts from a compressed string representation of a full agent trace and a user prompt, then greps across spans and reads the relevant ones in full.

The beauty of Signals is that it can respond to a general prompt. You can ask it to identify user frustration, check whether your browser agent completed a checkout, and so on. It’s not limited to raw error detection. It returns findings as JSON in a schema users can freely define. We call these signal events.

Once you’re analyzing every trace, you also have too many individual events to read. That’s why we automatically group similar signal events into clusters. You can see recurring problems and how often they happen, then drill into individual events and the traces behind them.

You can use traces from a cluster to build an eval dataset for that type of failure. You can then use your favourite coding agent to hillclimb on those evals and check that the fix works across these cases before shipping it to prod.

Trace → analyze → catch errors and form clusters → fix → release. Making this loop easy is why we built Laminar.

We’ve put the same thought into the rest of Laminar. Our blog (https://laminar.sh/blog) explains how looking closely at how agents actually work led us to build 20x trace compression, a custom SQL query engine and automatic task extraction.

Laminar is Apache 2.0 and self-hostable (https://github.com/lmnr-ai/lmnr). We make money from the managed cloud.

We’d love to hear how you track your agents’ performance today. How much do you lea...

33 comments

[ 50.7 ms ] story [ 157 ms ] thread
Very cool. I liked the high level overview where you can view it like do a funnel analysis for failures. Good for fast decision making.

I wonder if you have thought of using this for the voice AI space for creating traces from many test calls to speed up testing of voice bots? It's true there are a lot of challenges _before_ one gets to the stage of running actual calls like creating good test data etc, but I wonder if you see a definite role for this framework in that space?

Congrats on the product! I love the design of the website and the app. Curious whether it was made in-house, by an external design agency, with AI models, or something else
Thanks! Our design is all done completely in-house.

Workflows are constantly changing but our design process happens across Figma, old-fashioned paper, and code.

To answer your question - we use cheaper models to just flag if something looks obviously flawed. That covers the vast majority of things because it's the propagation of obviously stupid stuff that causes a problem for our system. To the extent we are doing something sophisticated, we use an appropriate architecture, like it's built into the system.
Thanks for the response! Curious, can you expand on the architecture, how does that work? If you can share of course.
You should try the bullet points then earning someone reading the rest, that's where I bounced.
I can write some bullet points if you want. I'm serious, this is not a sarcasm. With which AO platform do you want a comparison?
Maybe this is me being the wrong persona since I clicked for the model and not the platform, but literally the moment my eye caught

> Agent observability is crowded, so instead of a bullet list of how Laminar differs from X, we’ll explain how we’re solving agent observability from first principles

my brain shut down and bounced minus the comment because it's a launch and maybe you'd want feedback.

I'd be using this for post-training in a custom harness: so what you focused on during post-training and what it excels at are the most interesting things

What's your 101 for agent observability?

Also, a question for everyone, how do you reuse traces as benchmarks (eval datasets)? Is it about being able to synthesise an agent session from the trace, and having another agent watch the first agent's behavior? Having trouble wrapping my mind around all the little details.

Good questions.

Agent observability is based on similar primitives as regular observability (OTEL), but is wildly different. Trace payloads are huge, and errors are much more subtle, they are not increased latency or elevated 500 response rate. We recommend tracing everything in detail, and reading a few traces manually at the beginning while you iterate. At scale, the answer is almost always use another LLM look at your traces, which is what this post is all about.

Evals are critical. I really recommend adopting the Anthropic's capability / regression eval model [1]. We also deeply believe that agent evals should be end-to-end, and as high-level as possible. This again often involves a quality LLM-as-a-judge, tuned on a set of manually labelled data.

With this idea in mind (to answer your question), we think that, for eval datasets, the most crucial bit is to be able to store input of what your agent was asked about in production. Collect a certain distribution of inputs for happy and unhappy cases, and then run evals on those inputs. That's why Laminar went great lengths to help our users automatically get actual inputs their users send to their agents [2].

[1] https://www.anthropic.com/engineering/demystifying-evals-for...

[2] https://laminar.sh/blog/extracting-tasks-from-agent-runs

The point about paying to store traces nobody reads hit home. We had the same problem with customer interviews. We did 8 of them and the notes just sat in a doc until we tagged each problem by how many customers it affected. Curious how you decide which flagged errors matter most. Is it how often they show up across traces, or do you weight them by user impact?
>Curious how you decide which flagged errors matter most

flow-1 actually predicts how critical each finding is

Interesting. Most of the failures I've seen aren't the agent doing something obviously daft, it's a tool call that returns fine but the result shouldn't be trusted. Stale cached data, or a web page or file with text in it that's basically trying to give the agent instructions. Everything after that looks reasonable, it's just built on a bad input.

Can flow-1 flag that kind of thing? And how does it tell the difference between the tool giving back something wrong and the agent misreading a result that was actually fine? From the trace alone those look pretty similar to me.

We ran into an interesting side effect of agent performance that we needed to explain in our results to our executive team. In our case we were rolling out an AI support agent that could help resolve customer problems. At the start we had calculated the total time and human cost per support ticket going back a few years. After a few months of running the AI agent, we found that both our time and cost per ticket had increased - but then digging in, the issue was that our overall cost and time had decreased and it was just that the more complicated issues the agent wasn't able to answer were the ones now going to the humans, skewing our per ticket cost up.

So in this case it's not that it was a different failure, it was that a signal that seemed to indicate failure was actually a signal of success.

hm, did the cost of tickets processed by an agent go down tho?
Yes, significantly - even when adding in vendor costs etc. In general though it is best at answering routine questions or ones a customer could get by reading the docs. The net result then is the ones left for the humans are the harder ones.

We’ve also heard from other companies that as the first line paper cut questions get answered, customer adoption increases - which further increases the “hard” support questions.

Lesson learned for me on that one that was rolling out a support agent led to both a better experience for our customers and an increased need for talented human engineers.

这类 trace 诊断如果能直接沉淀成回归测试,落地价值会很高。你们目前更看重单次高风险错误,还是跨 trace 反复出现的模式?
To your question about how we track ours: one failure I had left no trace at all. A morning run on a resident agent just didn’t happen. The host timer runs on the uptime clock, the Mac slept through the slot, and nothing retries. As far as I can tell from the post, Signals reads traces that exist. Do you do anything for the run that should have happened and didn’t, like diffing against an expected schedule?
Execution logs alone cannot reveal a missed run if it never produced a log entry. An independent monitor can expect a signal on a schedule and alert when it does not arrive within a grace period. For the sleeping-computer case, that monitor needs to run elsewhere; otherwise it can go to sleep along with the task.
Nice. One thing I'd want from a checker like this is a calibrated probability rather than a severity label. Decision models in the Jev style give a probability for every option in one forward pass. You can then pick a threshold and know roughly what share of traces you'll send for review. Does flow-1 expose anything like that, or is severity the only knob?
Does a trace shoe that the thing it inspected is the thing that shipped?
The failure I keep hitting with small local models isn’t a messy trace, it’s a confident “done” on a change that fails the tests. On a slice of 51 Aider Polyglot exercises with qwen3.5:4b, the bare model reported success 43 times and 37 of those failed.

Does Laminar catch that case, where the trace looks fine but the outcome is wrong, or does it need a test result to compare against?

we publish every agent transcript and most of our partial results (35 of 192) werent the model being dumb, they were the site returning a 403 or an empty js page and the agent working around it. a tool that flags those as errors would be mostly noise for us. does flow-1 separate environment failures from actual reasoning failures?
yes! we spend a lot of time on training to do exactly this.
nice, do you have an example where it caught that distinction? a blocked page followed by a successful fallback is the case i'd be most interested in seeing.
How do you calibrate the error-finding model against human labels? My worry with judge models is that they share the agent's blind spots, since both were trained on similar data. Do you see a measurable gap between what the model flags and what a human reviewer flags on the same traces?
Debugging agent traces is tough, so applying RL to error detection is a smart angle. That said, the post leaves out key details that matter to practitioners running evaluations:

1. What exactly counts as an error in your benchmark? Is it binary error vs. no error, or do you pinpoint root causes like tool failures or policy violations? How do you get ground truth—human labels, heuristics, or replayed failures?

2. What metrics beyond one detection score do you use? Precision, recall, false positive rate, and model calibration all impact real-world debugging value. Any measure of whether this actually speeds up fixes would be helpful too.

3. The “23x cheaper” claim needs context. What are typical trace lengths, token counts, decoding settings, latency, and throughput? Were the models tested under comparable conditions?

4. What failure modes have you observed? Do false positives occur when the model misattributes causes? Does your approach generalize well beyond your dataset, or does it rely on brittle triggers?

5. Finally, can you share datasets, trace formats, and evaluation scripts? Without these, it’s hard for others to verify or build on your results.

Addressing these points would make this more than a proof of concept—turning it into a practical, reproducible foundation for agent observability rather than just another hype cycle.

(comment deleted)
Sounds great. In my experience with support agents the failures that hurt most are the silent ones, where the tool call succeeds but returns the wrong record and nothing in the log flags it.

Does flow-1 catch that class or mostly the errors that already show in the trace?