Show HN: Intencion – Product analytics that improves your AI agents continuously

sakuraiben1 pts0 comments

Intencion · Product analytics for AI agents<br>Sign inStart free

Product analytics for the agents you ship.<br>Product analytics for AI agents. Every run is captured end to end: what the user wanted, the steps your agent took, and how it ended. Fix the biggest problem, build what users keep asking for, and your agent gets a little better every week.<br>Start freeSee the live demo<br>Built for teams running a customer-facing agent in production, support and operations first, where a failed run is a real ticket or lost revenue.<br>One line to install. About 1 ms to capture a call, flushed in the background, so your model response returns before anything is sent. Zero added latency on the request path. Prefer a walkthrough? Book a demo.

What users want from your agentlast 7 days · 4,210 runs<br>IntentRunsResolved<br>Refund a charge<br>1,204<br>96%

Track my order<br>880<br>92%

Change my plan<br>410<br>61%

top failurecan't verify identity · 43%verify_user → lookup_account → escalate<br>Cancel subscription<br>260<br>79%

Book a callback new<br>118<br>build next

1 intent to fix1 to build next

Not observabilityNot another tracing tool.<br>Observability tells you the model ran. Intencion tells you whether the user got what they came for, and what to build so more of them do.

The product layerWhat users wanted, and whether they got it.<br>Spans, tokens, and latency tell you what the system did. They are not the question that sets your roadmap. Intencion maps the intent behind every run to the path your agent took and how it ended, then ranks what to fix and what to build next.

CoexistsWorks alongside your stack.<br>It sits next to your tracing (Langfuse, LangSmith, Datadog) and your product analytics (Amplitude, PostHog). Keep your stack and add one line. We are not a span format and do not ask you to re-emit traces. An OpenTelemetry bridge for teams that already emit spans is on the roadmap.

Not thisPer-call metrics<br>Tokens, latency, and traces, one span at a time.

But thisPer-intent resolution<br>Every user goal, grouped, with how many runs actually resolved.

And thisWhat to build next<br>The asks your agent cannot handle yet, ranked by how often they come up.

The taxonomy compounds. Every run sharpens your intent clusters, so the longer it runs the better it labels your traffic. Your intent map is built from your own runs, which is hard to copy.

Every run makes the next one better.<br>Add the SDK once. After that you can see what users want, where your agent succeeds, and where it falls short. Each week you fix the biggest problem and ship what people keep asking for, so the agent keeps getting better. That is the loop.

Users say what they want<br>intent captured

Your agent takes steps<br>tool calls traced

It works, or it doesn't<br>outcome detected

You see what to fix and build<br>ranked by impact

You ship it, the loop repeats<br>improvements compound

OutcomesYou define success, not a model.<br>No model guesses whether your agent worked. A run that returns is a success. A run that throws is a failure, and the error message becomes the reason. Need nuance? Set it yourself. It is deterministic and the same on every replay, so there is no classifier to babysit and no accuracy rate to chase.<br>How outcomes work, in the docs →

run.ts<br>// default: returns → success, throws → failure

run.ok(); // force success<br>run.fail("card declined"); // failure + reason<br>run.abandon(); // user gave up

It compoundsSmall wins, stacked.<br>Illustrative example. "Change my plan" resolves 61 percent, and "can't verify identity" is 43 percent of its failures, all on the path verify_user → lookup_account → escalate. Fix that one step and the intent climbs toward the 90s. Do that every week, top problem and top request, and it adds up: high 70s into the 90s in a month.

Resolved runs, week by weekexample<br>78%84%89%93%Week 1Week 2Week 3Week 4▲ +15 points in a month<br>Week 1fixed identity verification<br>Week 2fixed a refund edge case<br>Week 3shipped order tracking<br>Week 4shipped callback booking

One lineWorks with your stack, no rewrites.<br>Patch your model client once and every call is captured: model, tokens, latency, outcome. It patches at the class level, so calls your framework makes internally (LangChain, the OpenAI Agents SDK, LlamaIndex) are captured too. When your agent calls tools, wrap the run and record each step. No decorators sprinkled everywhere. Published for TypeScript and Python.<br>Read the docs →

agent.ts<br>import { Intencion } from "@intencion/sdk";<br>import Anthropic from "@anthropic-ai/sdk";

const ix = new Intencion({ apiKey });<br>const anthropic = ix.instrumentAnthropic(new Anthropic());

// every call captured: model, tokens, latency, outcome.<br>// instrumentOpenAI(new OpenAI()) works the same way.

tools.ts<br>await ix.run({ intent: "refund_request", input, user }, async (run) => {<br>const order = await lookupOrder(id);<br>run.step({ name: "lookup_order", tool: "orders-db", status: "success" });

const refund = await issueRefund(order);<br>run.step({ name: "issue_refund", tool: "payments", status: "success" });

return...

agent week intent intencion build model

Related Articles