This release rebuilds custom signals around a different primitive: atoms. Until now, defining a custom signal meant typing a prompt and hoping the LLM interpreted you correctly. Every backfill was a fresh LLM run. Now you compose signals by clicking coloured tokens drawn from the same vocabularies our pipeline already extracts. Same rule shape across customers means shared caches, deterministic compiles, and a live preview that shows you exactly what the rule will surface before you save it.
The composer flow
Three surfaces, left to right: a palette of atoms, a canvas where you compose, and a live preview that updates 400ms after every click. No syntax. No "compile and wait." Click an atom, see what changes.
The cost gradient
Every preview also tells you how the rule will run. Four tiers, driven by what's already cached across customers and whether you added a free-text rider on top of the atoms:
The free-text rider
Atoms cover the patterns we've seen across thousands of customers. They won't cover everything. Below the canvas sits a small textarea, the rider, for clarifiers atoms can't express ("must mention SAP HANA in the headline", "only if the role is senior level"). Adding a rider flips the pill to orange because we still need an LLM verifier, but the atoms ensure that verifier only sees a pre-filtered slice of the corpus, not the whole thing.
The company-signals graph
Open any company detail page and look for the new Graph view button next to "Send email." Every signal Surfacer extracts about that company laid out as an interactive node map. The company sits at the centre. Around it, one node per signal category (jobs, growth, drift, pricing, hiring intent, snapshots, news, custom signals) colour-coded to match the dashboard's Live Signals badges. Empty categories are quietly hidden so sparse companies don't get phantom edges.
This is for the moment when you want to see the shape of a company's activity at a glance, not just read facts off the detail page.
Why atoms?
Two reasons: cost and quality.
Cost. Two customers picking the same atom combination produce identical rules. One canonical compile, one canonical evaluation, one cache that serves everyone. The platform gets cheaper for everyone the more customers use it.
Quality. Atoms map directly onto the structured facets our pipeline already extracts. When you say "Automotive", the rule matches against our computed industry tag, not whatever the LLM guessed "automotive" meant today. Fewer false positives, no drift between rules.
How to use it
- Hit + Create a signal from the Custom Signals page.
- Click 2 to 4 atoms from the palette. Pick an event type first, then narrow with industry, region, or size.
- Watch the plain-English summary and the live preview update. Green pill means you're inheriting a cached rule, save and the matches appear immediately.
- Yellow pill means save anyway. We'll backfill against your historical corpus in the background.
- Need precision atoms can't express? Add a rider. Pill flips orange, verifier runs on the atom-filtered slice.
What's next
Three more pieces of the composer are queued: a templates ribbon (popularity-sorted starter signals you apply in one click), smart text-to-atom suggestions that convert riders back into atoms as you type, and edit / duplicate / pause from the list view without recomposing.
The atom catalog itself is also growing. Telemetry tells us which combinations get picked, abandoned, or hit the orange tier because the catalog couldn't express the intent. That feedback drives what we add next.