Most of what goes wrong with an agent in production is explained by a deploy. A prompt changed, a model was swapped, a tool was rewritten, and the cost line or the pass rate moved a few hours later. This release is about closing the distance between the chart that moved and the change that moved it. Six additions, all live for every plan unless noted, with the SDK releases that feed them.
Version markers on the Spend and Verify charts
Every run can now carry a version: the build, prompt or release that produced it. Set AGENTPING_VERSION once in the environment, or pass it to init(), and every run from that process is labelled. A single run can override it, which is how you A/B a prompt without a separate agent.
agentping.init(version="2026.10.28")
with agentping.run("support-triage", version="prompt-v7") as r:
...
The Spend chart and the Verify pass-rate chart draw a vertical marker where each new version was first seen, labelled with the version and the agent. When cost per run doubles, the marker two buckets earlier is usually the answer, and you no longer have to go and find the deploy log to confirm it. The run page shows the version, the read API returns it, and over OpenTelemetry it is read from agentping.version on the span or service.version on the resource.
Time to first token on Pulse
Users judge a streamed answer by how quickly it starts, not by how long it takes to finish. Streamed calls now report ttft_ms, the time from the request to the first chunk of model output, and Pulse charts its p95 per agent next to run duration.
The SDKs measure it on streamed Anthropic, OpenAI, Gemini, Mistral, Cohere and Bedrock Converse calls, and the LangChain and Vercel AI integrations report it too. Housekeeping events such as Anthropic's message_start do not count; the clock stops on the first chunk that carries text or a tool call. Over OpenTelemetry it is read from gen_ai.server.time_to_first_token, the Vercel AI SDK's ai.response.msToFirstChunk or agentping.ttft_ms. One honest gap: the Laravel SDK cannot measure it, because laravel/ai stream events carry whole-second timestamps.
Chat sessions as one run over OpenTelemetry
A trace per message is the wrong unit for a chat agent. The cost of the conversation is spread over twenty runs, the evaluation only ever sees one turn, and a session that ends in a refund looks like twenty successes.
Traces that carry gen_ai.conversation.id are now stitched onto one run per team and conversation. Turns are numbered as they arrive, the run stays open while the conversation is alive, and it closes as a success after 30 quiet minutes. Hand the session from one agent to another and it stays one run, because the key is the team and the conversation, not the agent. The SDKs have had conversation() for the same thing without OpenTelemetry; the conversations guide covers both routes, and the OpenTelemetry page has the attribute names.
A fleet view on the Agents page
The Agents page used to be a list. It is now a table you can sort: last run, runs and failure rate over 24 hours, p95 duration over 24 hours, tokens over 24 hours, customers hit by failures, and spend. Sort by failure rate and the agent that needs attention is at the top; sort by customers hit and you know who to write to first. The status buckets (healthy, degraded, failing, silent) stay as the default order.
Prompts and completions on the run timeline
Until now the timeline told you a model call happened, what it cost and how long it took. It could not tell you what was said, which is the first thing you want when an evaluation fails.
Prompt capture is off by default and stays off until you turn it on:
agentping.init(capture_llm_content=True, llm_content_max_chars=4000)
agentping.init({ captureLlmContent: true, llmContentMaxChars: 4000 });
With it on, each llm_call carries input (the messages as {role, content}), system_instructions and output, each clipped at the cap, and the run page renders them as a conversation with the roles labelled. Every provider the SDKs instrument is covered, and the framework integrations send what their callbacks expose. Images, tool calls and tool results appear as short markers such as [tool_use lookup_order] rather than their payloads. Over OpenTelemetry the standard gen_ai.input.messages and gen_ai.output.messages attributes are read when your exporter records them. The field reference is in the events docs.
Alerts that arrive with the first pass done
An alert says something tripped. The investigation that follows is the same every time: open the agent, compare today with yesterday, find which customers were hit, read the error messages, check what deployed. Agent Ping now does that first pass and sends it with the alert.
Spend anomalies, missed schedules, failing rubrics and incidents opening from an alert rule arrive with one paragraph headed Investigation, at most four sentences, written by Claude from the agent's own runs:
Investigation: Failures rose from 0% to 75% over the last 24 hours while cost went from $2.00 to $11.00, with p95 duration up from 0.5s to 9.5s. Two customers were hit, acme (2 failed runs) and globex (1). Every failed run carries the error "RateLimitError: tool quota exceeded" and all of them ran version v2, which first appeared three hours ago; v1 runs did not fail.
The version label from the first section is what makes the last sentence possible. Webhooks get the same text in an additive investigation field, so existing integrations keep working. One summary is produced per alert and shared across every channel it goes to, and an alert is never held up by it: if the model call is slow or fails, the alert goes out as before without the paragraph. Investigations are on Team and Business plans. Details in the investigations docs.
The SDK releases
All of the above needs data the SDKs did not send before, so there is a release for each: Python and TypeScript 0.3.0, and new Go and Laravel versions. Each adds the version label, ttft_ms on streams and the capture switch; the changelog has the per-SDK notes, and each provider page under the docs says exactly what is captured for that provider.
If you are not on Agent Ping yet, the free plan covers two agents, and the five-minute try page will get a real run, with its version label, into your account.