Skip to main content
An AI trace (input, output, reasoning) only tells you what the model did. It doesn’t tell you whether that was actually useful: did the user accept it, edit it, cancel it, escalate it to a human? That’s what a signal is: an event you send us about user or product behavior. A journey is the thread that ties a user’s signals to the AI traces that happened around them, even across multiple calls or agents. Every signal and every trace carries the same journey_id, so DataFramer can line them up into one timeline.

The pieces

Browser SDK

@dataframer/signals: runs in your frontend, sends track/identify/group events, and generates the journey id.

Server Instrumentation

dataframer-journey: runs in your backend, picks up the journey id, and stamps it onto your Langfuse traces automatically.

Connect AI Observability

Already using an observability tool? Connect it and DataFramer pulls the traces in directly. Langfuse and LangSmith are supported today.

How it fits together

You only need the browser SDK if you want to capture user/product events. You only need the server library if you want your AI traces auto-tagged with the journey id. If your traces already live in an observability tool (Langfuse or LangSmith today), you don’t need either: just connect it and DataFramer pulls them in. Most setups combine the SDK with one of the other two.
Both packages are already published: npm install @dataframer/signals and pip install dataframer-journey work today. This feature is early; reach out at [email protected] if you hit anything unexpected.