NewAgent Observability — find failures before customers do.

Agent observability

Build agents that get better every day

Oodle keeps every session, finds the ones that went wrong, and tells you what to fix.
An agent trace in Oodle: orchestrator, customer assistant and product recommender agents on a timeline, with the transcript, cost, tokens, turns and signals

Trusted by AI-native teams

Cureskin
HappyPathWisdom AIFuelLookoutZaggle
CureFit
Fello
Distacart
Workorb
Effective AI
different.ai
LabraBedrockdata
Cureskin
HappyPathWisdom AIFuelLookoutZaggle
CureFit
Fello
Distacart
Workorb
Effective AI
different.ai
LabraBedrockdata
Cureskin
HappyPathWisdom AIFuelLookoutZaggle
CureFit
Fello
Distacart
Workorb
Effective AI
different.ai
LabraBedrockdata
Fello

3M+

agent traces a day

We have full visibility across millions of agent traces with zero sampling. We’re catching issues before our customers do.
FelloCase study
BuildFactory

Days → 20 min

to root-cause an agent issue

Debugging two or three issues would take someone the whole day. That situation has drastically gotten better with Oodle.
Bikram Bharti, BuildFactory

Setup

Two commands and you're in

Paste them into your coding agent and it does the rest. Or point OpenTelemetry at Oodle yourself. If you use the Langfuse SDK, only the endpoint changes.

your coding agent · your repo

# install the skill pack

# instruments your agents and sends traces to Oodle

Works with

  • OpenAI
  • Claude Code
  • LangChain
  • Vercel AI SDK
  • Pydantic AI
  • Google Gemini
  • Google ADK
  • LiteLLM
  • Langfuse SDK
  • OpenTelemetry
  • Codex
  • Factory Droid
  • OpenLIT
  • Traceloop
  • LiveKit
  • eve

Your data doesn't have to leave homeSOC 2 Type II, ISO 27001 and GDPR, in all three.

SaaS

Fully managed

Oodle runs everything. Up in under 15 minutes, 99.9% uptime SLA.

BYOB

Bring your own bucket

Oodle runs the compute. Your S3 holds the data, under your encryption keys.

BYOC

Bring your own cloud

The full stack in your VPC. Your keys, nothing leaves your network.

How it works

The process that improves your agents every day

1 · Ingest

Ingest everything without sampling.

Every session is kept in full. That is affordable because of how Oodle is built. Traces go straight to object storage in our own columnar format, and queries run on serverless compute that spins up per query and shuts down after. No disks and no provisioned compute is what lets you keep 100% of your data and query it cost efficiently.

Why Oodle is fast

  • Maximum concurrency: thousands of serverless invocations per query.
  • Read just the columns you need, not the entire row.

Why Oodle costs less

  • Object storage: 20× cheaper than disk based storage.
  • Custom columnar format: 600× compression for metrics, 20× for logs and traces.

How Oodle scales on demand

  • Serverless compute scales up for each query, then shuts down when the work is done.

2 · See

Search any conversation. Or let your agents go through them all.

Find any session in under a second, by sentiment, tool, user or the words in the conversation, and read the whole exchange: every reply, every tool call, what came back. Or hand it to your coding agent. Oodle’s MCP is built for agents, so it can work through every session and do the debugging for you.

Why this works: Search stays fast over every session because each query fans out across thousands of serverless workers instead of waiting on one busy cluster.

agent observability · sessions
Session IDTracesSentiment
0bxF9Zq5-3gWH-4RNj-xHoo-Bkr4eKoEtQLZ1-0.82
CYG0O2dR-uNq6-4Lpp-sMpM-NoG0zZl0Pc6a1
5PgrnZYZ-Y6Ge-4U4r-1yAX-hq0QYUQcZMjt1+0.00
EMo8gVqV-j5ZB-4MQH-Dvfm-3ApMKVqzCswR1+0.46
7TDLf4K7-I4K4-4Bly-tHQp-0Xouoloy2bMs1-0.29
KIA4QEqL-Z1sg-4UPA-3SJ2-F75vI6U2DJ9u1+0.46
0bxF9Zq5… · order_support_agent · 6 turns-0.82
  • UserI have a problem with my order #4471, the camera arrived broken.
  • AssistantSorry to hear that. Let me look up the order.getOrderDetails · 340ms
  • Tool{ "status": "delivered", "eligible_for_return": true }
  • AssistantFiling the return now.initiateReturn · 503
  • AssistantYour return has been filed. You’ll get a label by email.

3 · Find

Out-of-the-box insights into silent failures.

Every trace runs through sentiment analysis, a classifier and anomaly detection as it lands. The issues they raise are checked by Oodle’s AI agent, which verifies the evidence and removes the noise. Actual issues impacting your customers are surfaced to you.

Why this works: Running three analyses on every trace is only realistic when storage and compute cost this little. Same architecture, second pass over the data.

every trace · first pass
100% of tracesSentimentClassifier(Jev)AnomaliesIssues identifiedOodle’s AI agentverifies each one, removes the noiseSurfaced to you
slack · #agent-issues
O

Oodle app 9:02 AM

3 issues affecting customers in order_support_agent · last 24h

  • 🔴 Sentiment drops after initiateReturn fails

    41 of 603 sessions · new

    Users ask a third time, then stop replying. No error anywhere in the trace.

  • 🔴 checkInventory returns product_not_found

    176 of 318 sessions · recurring

    The agent tells the user it worked.

  • 🟠 initiateReturn hits DeadlockDetected

    47 of 595 sessions · new

    The agent tells the user the return was filed.

Open in OodleFix in Claude CodeFix in Cursor

4 · Score

Smarter evals.

Don’t pay for expensive LLM evals on every trace. Chain evaluators so the cost-efficient ones decide what the expensive ones look at: sentiment on every session, a domain classifier on the unhappy ones, and a code check or an LLM judge only where it applies. Hover a box to see what it does.

Why this works: The cost-efficient evaluators can afford to run on every trace for the same reason: there is no always-on compute to pay for between questions.

evaluations · dependencies
  • AISentiment

    LLMActivesmall model

    100% of sessions

    Scores every user turn from −1 to +1 with a small model. A fraction of a cent per session, so it applies to everything.

    100% of sessions · Scores every user turn from −1 to +1 with a small model. A fraction of a cent per session, so it applies to everything.

  • </>Runtime checks

    CodeBuilt in

    100% of sessions

    Tool errors, timeouts, loops and empty replies, read straight from the trace. No model, no cost, always on.

    100% of sessions · Tool errors, timeouts, loops and empty replies, read straight from the trace. No model, no cost, always on.

  • AIDomain classifier

    LLMActivegpt-4o-mini

    18% · negative sentiment only

    Labels the conversation: refund, shipping, account, other. A cost-efficient call, made only when sentiment is negative.

    18% · negative sentiment only · Labels the conversation: refund, shipping, account, other. A cost-efficient call, made only when sentiment is negative.

  • </>Refund policy check

    CodeActive

    6% · refunds with negative sentiment

    Plain code: does the amount the agent promised match the policy table? Deterministic, so it only makes sense once the classifier says this is a refund.

    6% · refunds with negative sentiment · Plain code: does the amount the agent promised match the policy table? Deterministic, so it only makes sense once the classifier says this is a refund.

  • AITask failure

    LLMActiveclaude-sonnet-4

    6% · refunds with negative sentiment

    Reads the whole session and decides whether the customer got what they asked for. The expensive one, so it goes last, on the sessions the cost-efficient tiers flagged.

    6% · refunds with negative sentiment · Reads the whole session and decides whether the customer got what they asked for. The expensive one, so it goes last, on the sessions the cost-efficient tiers flagged.

5 · Improve

Prove the fix before you ship it.

The conversations that went wrong become your test cases. Change the prompt, replay it against them, and see the score before and after. Release the prompt that scores better. The same evals keep watching production, so if the problem comes back you know before customers do.

prove the fix
0bxF9Zq5… · order_support_agent · 6 turns-0.82
“Your return has been filed.” — it wasn’t. initiateReturn returned 503.

returns-failures · 24 conversations like this one

Tool failed → agent claims success20
Deadlock → agent retries 4×4

Step 1 · Failing conversations

Real conversations, kept as test cases.

Now change the prompt.

Pay for what you send

0 GB5000 GB
11825

Pro plan estimate

125.0 GB/mo ingested · 90 days retention

ItemUsageRateCost
Ingested GB125.0 GB (125 GB incl.)$100 + $1/GB over$100
Retention90 days30d incl. + $0.10/GB/mo$25
Queries (UI, MCP, CLI, API)Unlimited$0$0
Estimated monthly total$125

Questions people ask us

What is a signal, and does computing one call an LLM?

A signal is a tag Oodle puts on a session as it arrives: a tool failure sorted by cause, a loop, an outage the agent ran into, or a conversation that stalled. It's worked out from what the tool returned and what the conversation did, not by asking a model, so it applies to every session at no extra cost. Each one says which tool was involved and why it fired.

How are insights generated, and how much should I trust them?

Once a day Oodle goes through the last day of traffic looking for tool failures, loops, slowdowns, cost outliers, empty responses, abandoned sessions and the like. Each finding gets example traces and a count of how widespread it is, then a second pass checks it against the traces and marks it real, unclear, or likely noise. Findings that keep recurring are merged; ones that stop fade out.

Can I tell Oodle what counts as a failure for my agent?

Yes. Write it in plain English on the settings page, for example "a refund over $500 must never be issued without a lookup first". The daily pass looks for it, and anything it finds shows up in the same list as everything else, with traces attached.

What does a Fix link actually do?

It opens your coding agent (Claude Code or Cursor) with the prompt already written: the finding, the failing tool, and a few example trace IDs, plus a note to read the traces through Oodle's MCP server before proposing a fix. Nothing is sent until you press enter. Each editor can be switched off per instance.

Try it on your agents

Two commands to set up. Free to start.