Act on live customer behavior.
Signals tells you what your customer is doing right now so your product can respond while they are still on the page.
Below is your own visit to this page, computed by Signals as you read.
Signals, about you
connectingSee live events firing as you browse this page on the left; what Signals computed about you on the right, refreshed every few seconds.
Add the Signals MCP server to Claude Code, Cursor or any MCP client, then run this. The agent adds the SDK, defines the attribute and wires the read into your own app.
$ npx plugins add snowplow/skills
> Use the Snowplow MCP server and Signals skill, then help me plan and implement a use case. Make sure everything is tested and works as intended.
trackPageView(); // browser tracker, already on this pageAttribute(name="pages_last_5_min", events=["page_view"], aggregation="category_count", property="page_urlpath", period=timedelta(minutes=5))
await signals.getServiceAttributes({ name: "signals_site_session_service", attribute_key: "domain_sessionid", identifier: "…", // your session id, once set });
Attributes computed from events in <1s, served in 6ms p50 · 10ms p95, in-region.
Runs in our cloud or yours, AWS or GCP. Scales with your traffic.
Any attribute over your events, on any key, over any window. One definition serves live from the stream and from your warehouse history.
Your data knows. Your product doesn't.
Behavior is collected. Nothing computes it, serves it, or flags it fast enough to act inside the session. Signals computes what your customer is doing right now and serves it to your app while they are still there. Deciding what to do with it stays in your stack: your ranker, your messaging tool, your agent.
"Our recommender doesn't know what the user did thirty seconds ago."
"We built a profile API. Now two engineers maintain it forever and it pages us."
"Our data scientists build features in notebooks that never make it to production."
"Our support agent has amnesia. It can't see the customer has been stuck on the same page for four minutes."
One event in. One answer out. Within a second.
One definition serves live from the streaming engine and builds the training set over warehouse history, so production features match what data science trained on. Managed SaaS or private deployment in AWS or GCP, identical architecture.
Views, searches, adds, abandons. The SDK you already run sends the event.
view_price · 3× in 10 minutesRecomputes what you defined, on the stream, before the customer has moved. One definition, live and against history.
showing_price_hesitation = trueReads it mid-render, or a trigger pushes it wherever acts on it.
Ranker moves value options upUse cases that require real-time customer context.
In-session personalization and recommendations
Rank against what this customer is doing now, not last night's segment. Signals supplies the attributes; your ranker decides.
showing_price_hesitation = true02Real-time features for ML
One definition builds the training set over warehouse history and serves the live value, so the features in production are the features the model trained on.
one definition: train and serve03Customer-aware agents
Hand an agent this customer's recent activity in a form a model can use, so it already knows they have been stuck on the same page for four minutes.
agentic context: JSON or narrative04State for System One models
System One models answer typed questions about the state you send. Signals puts the customer's recent behavior in that state, current as of this click.
state: JSON, current at this clickCreate your first live attribute today.
Add the Signals plugin or MCP server. Run one prompt.
Claude Code, Cursor or any MCP client. The agent adds the SDK, defines the attribute and wires the read into your app.
$ npx plugins add snowplow/skills> Use the Snowplow MCP server and Signals skill, then help me plan and implement a use case. Make sure everything is tested and works as intended.
Add the SDK and Signals starts collecting.
Behavioral events flow in with schema validation. No event stream to build first.
Say what you want to know: how often, how recently, in what order.
An attribute is a computed property of whatever you key on. Console or code, deployed through CI/CD.
# illustrative
Attribute(
name="showing_price_hesitation",
events=["view_price", "remove_from_basket"],
window="10m", key="user_id",
)Your app asks Signals. Or a rule fires the moment it happens.
Attributes served at 6ms p50. Real-time triggers evaluate conditions continuously and deliver to your app, Braze, Kafka, webhooks or Pub/Sub.
See an attribute updating against your own traffic in the first session.
The free tier runs on the real engine: no card, no sales call. Add the SDK, define one attribute, watch it change while you click around your own product.