Fix your AI agent from the dashboard, not the codebase.
Engineers add two lines and Agent Doctor captures every LLM call, vector lookup and tool call in the pipeline. Then anyone on the team can override a prompt and re-run it on your own servers, so the people who know the domain can fix the agent themselves.
Override any prompt and re-run the whole pipeline on your servers.
A cardiologist with no coding background spots a wrong diagnosis, rewrites the faulty prompt from the dashboard, and re-runs the agent. The developer never gets paged.
+ POSITIVE EXAMPLE:
Input: chest pressure, diaphoresis, jaw pain
Output: Unstable angina (ACS). Order troponin, 12-lead ECG.
- NEGATIVE EXAMPLE:
Input: chest pressure, diaphoresis, jaw pain
Output: General anxiety. Lifestyle changes. ← wrong"
Developers build the pipeline and domain experts tune it.
An engineer can wire up the agent, but they can't judge a sound medical diagnosis or a legally airtight clause. Agent Doctor gives the people who can a dashboard to iterate on prompts and parameters, while the developer keeps ownership of the code.
Builds the pipeline
Writes the agent code, connects to databases, sets up tools, deploys to production.
history = ehr_db.lookup(patient_id)
research = pubmed.search(symptoms)
diagnosis = llm.generate(...)
return treatment_plan(diagnosis)
Adds two lines & a webhook
Drops in the SDK. Done. Back to building features.
agent_doctor.init(api_key="sk-...")
Reviews & ships
When the domain expert finds a winning prompt, the dev reviews it and ships it with the next release.
Sees every step visually
Opens the dashboard, sees the full pipeline trace. Every prompt, every output, every decision the agent made.
Tweaks prompts & parameters
Spots a bad prompt, rewrites it in plain English. Adjusts the temperature. Hits "Run". No code, no deploys.
+ "You are a board-certified cardiologist.
Prioritize differential diagnosis.
Cite relevant clinical guidelines."
Iterates until it's right
Compares runs side-by-side, uses Probe to debug, runs flakiness tests. All from the dashboard.
rank_diagnoses → treatment_plan → safety_review
Prompt: "Apply AHA guidelines for
cardiac symptom evaluation..."
Temp: 0.7 → 0.2
Your existing code. Unchanged.
Agent Doctor hooks into LLM SDKs, vector databases, and tool calls at the library level. Your pipeline code stays exactly as-is. Every step is auto-captured.
# Add these two lines, that's it import agent_doctor agent_doctor.init(api_key="sk-proj-...") # Your existing agent code, zero changes needed # LLM calls, vector DB queries and tool calls are auto-captured def handle_ticket(query, customer_id): # LLM call → auto-captured intent = openai.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": query}] ) # Vector DB lookup → auto-captured docs = pinecone_index.query(vector=embed(query), top_k=5) # Tool call → auto-captured policy = check_refund_policy(customer_id) # LLM call → auto-captured response = openai.chat.completions.create( model="gpt-4o", messages=[{"role": "system", "content": f"Docs: {docs} Policy: {policy}"}, {"role": "user", "content": query}] ) return response # Your webhook handler. payload is the run Agent Doctor sends. def on_run(payload): with agent_doctor.run_context(run_id=payload.run_id, overrides=payload.overrides): result = handle_ticket(payload.query, payload.customer_id) # Every step auto-captured. Overrides auto-injected. Done.
Two lines in, every step of your pipeline is in the dashboard.
Start freeProbe finds the broken node by asking you a few questions.
Tell it what the agent should have said and what it said instead. It walks the trace with you, asking three or four plain-English questions, and names the exact step that caused the failure. No logs, no code, no debugging skills needed.
- A chat, so anyone on the team can run it
- Checks the pipeline by halves, so it needs only a few questions
- Highlights the broken node in the trace
- Hands the fix straight to the prompt optimizer
All upstream nodes are healthy. The response_composer node received correct refund eligibility data but generated a "call support" response instead of processing the refund.
Suggestion: The prompt lacks explicit instruction to confirm eligible refunds directly.
Open in Prompt Optimizer →
Flakiness detection finds the step that answers differently every time.
Run your pipeline ten times with identical input. Per-node consistency scores show exactly which step is non-deterministic, and an AI report tells you why.
7/10 → Knowledge Base | 3/10 → Account Tools
MODERATE synthesize | Consistency: 0.72
STABLE validate | Consistency: 0.98
Root cause: Router prompt lacks explicit routing rules for password queries.
- Per-node consistency scores and decision divergence
- AI root cause report with a suggested fix
- Apply the fix, re-test, and verify from the same screen
The optimizer writes, tests and ranks better prompts for you.
Pick a node and define what "good" looks like. The optimizer generates prompt variants, runs them against your examples, and ranks the results. It starts with GEPA, a genetic strategy that evolves prompts across generations, with more strategies on the way.
- Evolves prompts across generations and keeps the fittest
- Rephrases, expands, compresses and recombines winning traits
- Ranks every variant by its score on your examples, with token cost weighed in
- Shows the winning prompt side by side with the baseline
Why not just use a regular observability tool?
Most LLM tracing platforms run experiments on their own cloud, so your agent can't reach your private databases, RAG, or internal tools during a test. They also keep prompt iteration locked behind code, leaving your domain experts out.
Common questions
init(). It auto-instruments your LLM calls, vector DB lookups, tool executions, and API requests at the library level, with no decorators, wrappers, or refactors required.Ready to diagnose and fix?
Install the SDK, open the dashboard, and let the whole team work on the agent.