Skip to main content
Clusters group similar signal events together to help you discover patterns and debug at scale. Clustering applies to LLM signals (signal events), not span events emitted from code.

What Are Clusters?

Every signal event has a payload field containing JSON data. Clusters group events by extracting a string value from this JSON using a simple Mustache-style template (top-level keys only), then grouping events with similar extracted values. For example, if your events have payloads like {"error_message": "Connection timeout", "url": "..."}, you can cluster by {{error_message}} to group similar errors together. Common patterns that emerge:
  • Similar failures - Errors with the same root cause, regardless of surface differences (for example, 47 failures all caused by lazy-loaded content).
  • Behavioral groups - Events that share a common action or intent (for example, all “search for product” events).
You control clustering by defining a Mustache template that extracts the value to cluster on. Laminar renders the template and sends the extracted content to the clustering service, which groups similar events and names clusters.

Set up clustering

Start Clustering dialog with value template input for a signal
  1. In Signals, click your signal to open it.
  2. In the Events tab, click Start Clustering.
  3. Enter a Value Template - a Mustache string like {{content}} or {{error_message}} that extracts the value to cluster on from the event’s payload JSON. (Only top-level keys like error_message are supported.)
  4. Click Start to populate the clusters table.

How Clustering Works

Every signal event stores its data in a payload JSON field. When you start clustering:
  1. Laminar renders your Mustache template against each event’s payload JSON (top-level keys only)
  2. The template extracts a string value (for example, {{content}} pulls the content field)
  3. Laminar sends the extracted content to the clustering service, which assigns/updates clusters
As new signal events arrive, Laminar sends them for clustering so the cluster view can stay current.

What You Can Do With Clusters

Understand user behavior - See what users are actually trying to accomplish, not just what buttons they clicked. Intent clusters reveal the “why” behind actions. Debug at scale - When something breaks, find all similar failures instantly. One fix addresses an entire cluster of issues. Spot unusual patterns - Unusual clusters can stand out when you scan the grouped events. Track trends - See how behavior changes over time. New clusters emerging? Old patterns disappearing?

Viewing Clusters

In the Laminar dashboard:
  1. Go to Signals and open your signal.
  2. In the Events tab, use the Clusters table to see grouped patterns.
  3. Click a cluster name to open the events list filtered by that cluster.

Example: Finding Extraction Failures

Your browser agent extracts product data. Some extractions fail. Each extraction.failed event has a payload like:
{
  "error_message": "Element not found: .product-price",
  "url": "https://shop.example.com/item/123",
  "selector": ".product-price"
}
Instead of searching through logs:
  1. Start clustering with the template {{error_message}}
  2. View clusters to see failures grouped by similar error messages
  3. One cluster shows 47 failures, all on sites with lazy-loaded content
  4. Another cluster shows 12 failures, all with the same malformed selector
  5. Fix each root cause once, verify with the cluster members