- contact@insightclickiq.com
- Every click, every session, explained by AI
If you ship an AI agent or a copilot, its quality, speed and cost are part of the product. InsightClickIQ records each model call, tool call and thumbs-up as an event next to the clicks and sessions of the people using it, and watches them the way it watches checkout.
Send $ai_generation events and the AI agents dashboard template appears: generations, failed generations, p95 latency and people using agents with a comparison; generations per day by agent; p50 and p95 latency; errors per day; error rate by agent; tokens and cost by model; thumbs-down by agent; top tools with their failures and p95.
On the Insurance 360 demo, two internal agents made 2,037 generations for 119 people in the last 30 days: claims-copilot 1,289 (20 errors) and renewal-assistant 748 (33 errors). Sonnet carried 1,145 generations for about $11, Haiku 892 for about $2.76 (illustrative demo rates).

| Event | Properties |
|---|---|
$ai_generation | agent, model, provider, input and output tokens, latency_ms, cost_usd, status ok or error, error, trace_id, tool_calls |
$ai_tool_call | agent, tool, latency_ms, status, trace_id, error |
$ai_feedback | agent, trace_id, rating (up, down or 1–5), comment |
$ai_session | Links an agent conversation to the product session it happened in |
| Prompt and response text | Dropped by the SDKs unless you opt in, and dropped again at ingest unless the project allows it |
The Python SDK (pip install insightclickiq-sdk, no dependencies) batches on a background thread and never blocks a request. clickiq.ai.trace times a block, records each tool inside it, and sends one generation on exit, with status error and the exception if it raised. The LangChain callback handler records every LLM call and tool run of a chain without touching its code. Browser copilots use clickiq.ai.generation from the snippet.
import clickiq
clickiq.init("ciq_…", "https://clickiq.example.com")
with clickiq.ai.trace(agent="claims-copilot", model="claude-sonnet-4-6", user_id="u_42") as t:
with t.tool("policy_lookup"): # a timed $ai_tool_call
policy = lookup(claim)
reply = llm.invoke(prompt)
t.set(input_tokens=reply.usage.input, output_tokens=reply.usage.output)
t.feedback("up") # $ai_feedback for the same trace
# LangChain: one handler, every model call and tool run
from clickiq.langchain import ClickIQCallbackHandler
chain.invoke({"question": q}, config={"callbacks": [ClickIQCallbackHandler(agent="claims-copilot")]})Type them into Ask, give them to an agent as a goal, or send them through MCP from your own assistant.
A latency or error signal per agent, with a recommendation.
Tokens and dollars by model beside adoption and outcomes.
Thumbs-down share by agent, in a weekly report that writes itself.
cost_usd; InsightClickIQ does not price tokens itself. Prompt and response text is not analysed unless you opt in. The dashboard template appears only once $ai_generation events have arrived.