- ✓ 10,000 traces / month
- ✓ 7-day retention
- ✓ All SDKs, OTLP export
- ✓ Community Discord
Your agents made 14,302 tool calls today.
You watched five of them.
AgentGraph reads every span your agents emit in production — every prompt, every tool argument, every dollar — and tells you which tool they should have picked instead. One line to start.
Overview
Top spend by model
last 14 days- OpenAI
- Anthropic
- Bedrock
- Mistral
- Groq
- Together
- ·
- Datadog
- Honeycomb
- Grafana
- ·
- Postgres
- Clickhouse
- S3
- BigQuery
The whole agent, not just the LLM call.
Most tracing tools see the model. AgentGraph sees the loop around it — the retrieval, the tool you wired up last Tuesday, the validator step that swallows errors. Wrap your agent once. We attach the rest.
- Captured
- inputs · outputs · prompts · completions · tool args · results · errors
- Timing
- nested span tree with parent / child latency
- Pricing
- per call, attributed to agent · session · tenant
- Exports
- OTLP → Datadog · Honeycomb · Grafana · file
- 01retrieve_context256ms
- 02plan · gpt-4o594msprompt · 1,820 tokens · $0.0091model: gpt-4o · temp 0.2
- 03stripe.charge328mssuggested swap · −42ms · −$0.0008try finch.payments (score 0.97)
- 04postmark.send148ms
- 05verify · claude-3.5-haiku408msvalidator · pass · 408ms14 invariants checked
- 06audit_log.write73ms
What one row in the waterfall actually contains.
12 fields, captured automatically. See the SDK spec →
Read every trace like a Stripe invoice.
We price every token at the model's live rate, sum tool fees, and attribute the total to the agent, session, and customer that triggered the run. Your CFO gets a CSV. Your on-call gets a webhook. Your agent gets a budget.
- Models
- OpenAI · Anthropic · Mistral · Together · Groq · Bedrock
- Rollups
- per agent · session · customer · model · day
- Alerts
- webhook on trace ≥ threshold, daily digest, hard cap
- Pipe
- S3 · BigQuery · Snowflake · Postgres
If you can't see the call, you can't fix the agent. Every other tracing tool stops at the LLM. AgentGraph keeps going.
The tool your agent should have used.
We score every tool call against alternatives in your registry — schema compatibility first, then latency, cost, reliability. When something dominates, we open a PR. You click merge.
- Inputs
- 14 days of traces · your tool registry · pricing API
- Scores
- fit · latency · cost · reliability · region
- Output
- side-by-side compare, in-app swap, or GitHub PR
- Guardrails
- shadow mode → traffic split → cutover
One line. Then five.
Then nothing else for a while.
Bring your own LLM client, your own retrieval, your own tool registry. We watch what you call, not how you orchestrate it. TypeScript + Python today; Go next month.
- ✓Auto-instruments OpenAI & Anthropic SDKs.
- ✓Captures inputs, outputs, tool args & results — redact what you need.
- ✓OpenTelemetry export to Datadog, Honeycomb, or your own collector.
- ✓Self-host on a single VM. No Kafka, no Cassandra.
import { AgentGraph } from "@agentgraph/sdk"; import { stripe, postmark, openai } from "./tools"; const ag = new AgentGraph({ apiKey: process.env.AG_KEY }); export async function checkout(order: Order) { const trace = ag.trace({ agentId: "checkout-agent", sessionId: order.sessionId, userId: order.userId, }); // each step records latency + cost; pass a StepType + name const ctx = await trace.step("retrieval", "fetch_context", async (span) => { span.setInput({ orderId: order.id }); const docs = await fetchContext(order); span.setOutput({ docs }); return docs; }); const plan = await trace.step("llm_call", "plan", async (span) => { span.setModel("gpt-4o").setInput({ ctx }); return openai.complete(ctx); }); await trace.step("tool_call", "stripe.charge", () => stripe.charge(order)); await trace.step("tool_call", "postmark.send", () => postmark.send(order)); await trace.flush(); // POST /v1/ingest return { ok: true, plan }; }
# Python SDK — coming soon. # # We're building a native Python client with the same # trace / step API as the TypeScript SDK. # # Until then, any Python service can ingest traces by # POSTing to /v1/ingest directly — see the curl tab.
# no SDK? POST a trace directly. curl -X POST https://agentgraph.dev/v1/ingest \ -H "Authorization: Bearer $AG_KEY" \ -H "Content-Type: application/json" \ -d '{ "agentId": "checkout-agent", "env": "prod", "status": "completed", "steps": [ { "type": "llm_call", "name": "plan", "model": "gpt-4o", "input": { "ctx": "..." }, "tokenUsage": { "prompt": 1820, "completion": 412, "total": 2232 } }, { "type": "tool_call", "name": "stripe.charge", "toolName": "stripe", "latencyMs": 328, "costUsd": 0.004, "input": { "amount": 8240, "currency": "usd" } } ] }'
What you're spending. What you'd save.
Rough numbers. Tune the sliders to your traffic. Recommendations typically reclaim 8–14% by routing to a cheaper-equivalent model on suitable spans.
Three things AgentGraph will never do.
Rewrite your prompts.
We tell you what your prompt cost and how it performed. The prompt is yours. We don't suggest "better" phrasings or A/B them behind your back.
Route your model calls.
No proxy. No middleware in your request path. Your agent talks to OpenAI; we read the trace after. If we're down, you don't notice.
Train on your data.
Your traces, prompts, and tool arguments are not used to train any model — ours or anyone else's. EU + US regions; redact at the SDK.
What we do that the tools you already have don't.
We're not replacing your APM. We sit on top of it, focused on the one surface those tools can't see well: the loop your agent runs.
| AgentGraph | Datadog APM | LangSmith | OTel alone | |
|---|---|---|---|---|
| Span-level trace of agent loop | ✓ | ~ | ✓ | ✓ |
| Tool calls (not just LLMs) | ✓ | ✓ | ✕ | ✓ |
| USD on every span, live rates | ✓ | ✕ | ~ | ✕ |
| Tool-swap recommendations | ✓ | ✕ | ✕ | ✕ |
| Schema-aware compare drawer | ✓ | ✕ | ✕ | ✕ |
| Self-host on a single VM | ✓ | ✕ | ~ | ✓ |
| OTLP export to your stack | ✓ | ✓ | ✕ | ✓ |
| Time to first trace | ~2 min | ≥30 min | ~5 min | ≥1 hr |
Pay for traces, not seats.
- ✓ Unlimited retention
- ✓ SSO & SCIM
- ✓ Recommendations + GitHub PRs
- ✓ Self-host (single VM)
- ✓ Dedicated Slack channel
The ones engineers actually ask us.
Do you store my prompts and completions?
By default, yes — that's the whole point of a trace. You can disable storage globally, redact specific fields at the SDK, or hash inputs/outputs before they leave your process. EU data stays in EU. We never train on customer data.
How is this different from LangSmith?
LangSmith is an LLM evaluations platform that includes tracing. AgentGraph is a runtime observability + tool-intelligence layer that includes tool recommendations. We OTLP-export to LangSmith if you want both. Most teams use AgentGraph for production, LangSmith for prompt iteration.
Can I self-host?
Yes, on the Scale plan. A single Postgres + Clickhouse instance handles ~40M spans/day on commodity hardware. We ship a Helm chart and a docker-compose. Recommendations are the only feature that requires reaching our control plane (an opt-in feature).
Which models and providers do you support?
Cost attribution: OpenAI, Anthropic, Mistral, Groq, Together, Bedrock (including Claude on Bedrock), Vertex (Gemini), Azure OpenAI, Cohere. Auto-instrumentation: OpenAI & Anthropic SDKs today; Bedrock + Vertex shipping this quarter. Anything else, you trace manually with t.step().
Are you in my request path?
No. The SDK buffers spans in-process and ships them to us out of band. If AgentGraph is down, your agent doesn't notice — spans queue up locally. We're never a proxy.
What happens if I exceed the free tier?
When you hit your plan's free trace limit, new ingests get a 402response and we email you. Opt in to billing to keep ingesting — we won't surprise-charge you before you do.
- Span-level OTLP export. Push individual spans to your existing OpenTelemetry collector — no batching at our end, no buffering in your process.
- Recommendations: shadow mode. Score a suggested tool against live traffic without routing to it. Surfaces in the same compare drawer.
- Tool registry & PRs. Connect a GitHub repo as your tool registry. Recommendations open a branch with the swap, scored.
- Python SDK. Same surface as TS —
ag.trace(),t.step(),t.tool(). Auto-instrumentsopenaiandanthropic.
Two minutes from npm install to a trace.
Private beta. Free for the first 10,000 traces / month. No credit card.