<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://productionnotes.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://productionnotes.dev/" rel="alternate" type="text/html" /><updated>2026-10-09T18:28:59+00:00</updated><id>https://productionnotes.dev/feed.xml</id><title type="html">Production Notes</title><subtitle>Production engineering notes on enterprise AI agents, workflows, and SRE — by Sabith K S, Principal Engineer at StackGen.</subtitle><author><name>Sabith K S</name></author><entry><title type="html">AI Agent Evals in CI/CD: Flakes, Retries, and Missing Results</title><link href="https://productionnotes.dev/blog/ai-agent-evals-cicd-flakes/" rel="alternate" type="text/html" title="AI Agent Evals in CI/CD: Flakes, Retries, and Missing Results" /><published>2026-10-07T23:30:00+00:00</published><updated>2026-10-07T23:30:00+00:00</updated><id>https://productionnotes.dev/blog/ai-agent-evals-cicd-flakes</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="ci-cd" /><category term="testing" /><category term="reliability" /><category term="observability" /><category term="aiden" /><summary type="html"><![CDATA[Keep live agent trials deliberate, report missing tasks and failed attempts, and match trial IDs to traces before trusting a CI result.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Multi-Agent Handoff Testing: Catch Context Loss Before Production</title><link href="https://productionnotes.dev/blog/multi-agent-handoff-testing-context-loss/" rel="alternate" type="text/html" title="Multi-Agent Handoff Testing: Catch Context Loss Before Production" /><published>2026-10-07T19:00:00+00:00</published><updated>2026-10-07T19:00:00+00:00</updated><id>https://productionnotes.dev/blog/multi-agent-handoff-testing-context-loss</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="multi-agent" /><category term="testing" /><category term="handoff" /><category term="context-engineering" /><category term="aiden" /><summary type="html"><![CDATA[Test the brief passed from a worker to its parent: settled facts, open gaps, size limits, and a clear stop condition.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to Test AI Agent Loops Without Overfitting</title><link href="https://productionnotes.dev/blog/test-ai-agent-loops-with-evidence/" rel="alternate" type="text/html" title="How to Test AI Agent Loops Without Overfitting" /><published>2026-10-07T15:30:00+00:00</published><updated>2026-10-07T15:30:00+00:00</updated><id>https://productionnotes.dev/blog/test-ai-agent-loops-with-evidence</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="testing" /><category term="debugging" /><category term="reliability" /><category term="loops" /><category term="aiden" /><summary type="html"><![CDATA[Detect stalled agent loops from outcomes and evidence, not repeated tool names; test the stop rule with stubbed calls.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Deterministic Checks vs LLM-as-a-Judge for Agent Evals</title><link href="https://productionnotes.dev/blog/deterministic-checks-vs-llm-judge/" rel="alternate" type="text/html" title="Deterministic Checks vs LLM-as-a-Judge for Agent Evals" /><published>2026-10-07T02:00:00+00:00</published><updated>2026-10-07T02:00:00+00:00</updated><id>https://productionnotes.dev/blog/deterministic-checks-vs-llm-judge</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="llm-as-judge" /><category term="testing" /><category term="reliability" /><category term="verification" /><category term="aiden" /><summary type="html"><![CDATA[Check verifiable facts with code and use a calibrated model judge for questions that require reading and interpretation.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The AI Agent Testing Pyramid: What Belongs in CI?</title><link href="https://productionnotes.dev/blog/ai-agent-testing-pyramid/" rel="alternate" type="text/html" title="The AI Agent Testing Pyramid: What Belongs in CI?" /><published>2026-10-06T22:00:00+00:00</published><updated>2026-10-06T22:00:00+00:00</updated><id>https://productionnotes.dev/blog/ai-agent-testing-pyramid</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="testing" /><category term="ci-cd" /><category term="reliability" /><category term="benchmarking" /><category term="aiden" /><summary type="html"><![CDATA[Use fast tests for agent bounds, contract checks for facts, and a small number of live trials for whole jobs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI Agent Evaluation: Why the Grader Must Be Separate</title><link href="https://productionnotes.dev/blog/ai-agent-evaluation-separate-grader/" rel="alternate" type="text/html" title="AI Agent Evaluation: Why the Grader Must Be Separate" /><published>2026-10-06T16:30:00+00:00</published><updated>2026-10-06T16:30:00+00:00</updated><id>https://productionnotes.dev/blog/ai-agent-evaluation-separate-grader</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="llm-as-judge" /><category term="testing" /><category term="benchmarking" /><category term="reliability" /><category term="aiden" /><summary type="html"><![CDATA[Separate the agent from its grader, check facts with code, and run the installed build in the trial environment.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Same Incident, Five Models: Rank Investigators Without Mixing the Exam</title><link href="https://productionnotes.dev/blog/same-problem-sre-model-bake-off/" rel="alternate" type="text/html" title="Same Incident, Five Models: Rank Investigators Without Mixing the Exam" /><published>2026-09-18T22:00:00+00:00</published><updated>2026-09-18T22:00:00+00:00</updated><id>https://productionnotes.dev/blog/same-problem-sre-model-bake-off</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="sre" /><category term="benchmarking" /><category term="evaluation" /><category term="tokenomics" /><category term="rca" /><category term="aiden" /><summary type="html"><![CDATA[Random CI reruns mix model skill with incident difficulty. Freeze one checkout outage, swap only the bound model, and rank on Correct first, then wall time and new input tokens.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Session Efficiency Should Not Beat Accuracy</title><link href="https://productionnotes.dev/blog/session-efficiency-should-not-beat-accuracy/" rel="alternate" type="text/html" title="Session Efficiency Should Not Beat Accuracy" /><published>2026-09-16T19:00:00+00:00</published><updated>2026-09-16T19:00:00+00:00</updated><id>https://productionnotes.dev/blog/session-efficiency-should-not-beat-accuracy</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="benchmarking" /><category term="evaluation" /><category term="tokenomics" /><category term="metrics" /><category term="sre" /><category term="aiden" /><summary type="html"><![CDATA[We labeled a score 0-100 and watched a perfect, cheap, fast agent run print 125. Cap budget bonuses at 1.0 so efficiency never grades above how often you were Correct.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Chat Completions vs Responses API (and Why Agents Feel Slow)</title><link href="https://productionnotes.dev/blog/chat-completions-vs-responses-api/" rel="alternate" type="text/html" title="Chat Completions vs Responses API (and Why Agents Feel Slow)" /><published>2026-09-10T05:00:00+00:00</published><updated>2026-09-10T05:00:00+00:00</updated><id>https://productionnotes.dev/blog/chat-completions-vs-responses-api</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="openai" /><category term="reasoning" /><category term="debugging" /><category term="tokenomics" /><category term="aiden" /><category term="golang" /><summary type="html"><![CDATA[OpenAI Chat Completions and the Responses API are two ways to call a model. Reasoning models are a different choice. How to tell them apart in a debug export, and why Responses is not automatically slower.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Hybrid Plan Mode: Smart Planner, Generate Digs</title><link href="https://productionnotes.dev/blog/hybrid-plan-smart-planner-generate-digs/" rel="alternate" type="text/html" title="Hybrid Plan Mode: Smart Planner, Generate Digs" /><published>2026-09-10T04:00:00+00:00</published><updated>2026-09-10T04:00:00+00:00</updated><id>https://productionnotes.dev/blog/hybrid-plan-smart-planner-generate-digs</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="reasoning" /><category term="orchestration" /><category term="reactree" /><category term="evaluation" /><category term="tokenomics" /><category term="sre" /><category term="aiden" /><summary type="html"><![CDATA[Plan roots already route to planning; digs default to tool calling. Putting a high-thinking reasoning model on every task makes workers slow. Use a thinking model for the planner and a normal chat model for digs.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI Agent Runtime: What to Measure Before You Buy</title><link href="https://productionnotes.dev/blog/ai-agent-runtime-what-to-measure-before-you-buy/" rel="alternate" type="text/html" title="AI Agent Runtime: What to Measure Before You Buy" /><published>2026-09-10T03:00:00+00:00</published><updated>2026-09-10T03:00:00+00:00</updated><id>https://productionnotes.dev/blog/ai-agent-runtime-what-to-measure-before-you-buy</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="runtime" /><category term="evaluation" /><category term="production" /><category term="sre" /><category term="golang" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[Buyer checklist for an AI agent runtime: loop, tools, gates, and an eval receipt — with numbers from a real multi-model triage bench.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to Evaluate an AI Agent for Root Cause Analysis</title><link href="https://productionnotes.dev/blog/how-to-evaluate-ai-agent-root-cause-analysis/" rel="alternate" type="text/html" title="How to Evaluate an AI Agent for Root Cause Analysis" /><published>2026-09-10T01:00:00+00:00</published><updated>2026-09-10T01:00:00+00:00</updated><id>https://productionnotes.dev/blog/how-to-evaluate-ai-agent-root-cause-analysis</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="evaluation" /><category term="sre" /><category term="incident-response" /><category term="rca" /><category term="benchmarking" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[A checklist-first RCA eval: Theory, Unknowns, next action, measured signal, honesty about gaps — plus wall, tokens, and cost. Built from a live alert+logs bench.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Reasoning vs Generate Models for Tool-Heavy Agents</title><link href="https://productionnotes.dev/blog/reasoning-vs-generate-tool-heavy-agents/" rel="alternate" type="text/html" title="Reasoning vs Generate Models for Tool-Heavy Agents" /><published>2026-09-09T23:00:00+00:00</published><updated>2026-09-09T23:00:00+00:00</updated><id>https://productionnotes.dev/blog/reasoning-vs-generate-tool-heavy-agents</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="reasoning" /><category term="openai" /><category term="evaluation" /><category term="tokenomics" /><category term="sre" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[Merits and demerits of reasoning vs normal chat models on a live Grafana triage job — elapsed time, tokens, Theory style, and when each earns the bill.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Best Way to Debug a Multi-Step AI Agent in Production</title><link href="https://productionnotes.dev/blog/best-way-to-debug-multi-step-ai-agent/" rel="alternate" type="text/html" title="Best Way to Debug a Multi-Step AI Agent in Production" /><published>2026-09-09T21:00:00+00:00</published><updated>2026-09-09T21:00:00+00:00</updated><id>https://productionnotes.dev/blog/best-way-to-debug-multi-step-ai-agent</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="debugging" /><category term="workflows" /><category term="production" /><category term="evaluation" /><category term="observability" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[A practical debug loop for multi-step agents: one zip, one golden prompt, tool families, observation hashes, and Theory receipts — not more prompts.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Relative Efficiency Scores Lie When Absolute Wall Doubles</title><link href="https://productionnotes.dev/blog/relative-efficiency-scores-lie/" rel="alternate" type="text/html" title="Relative Efficiency Scores Lie When Absolute Wall Doubles" /><published>2026-09-09T19:00:00+00:00</published><updated>2026-09-09T19:00:00+00:00</updated><id>https://productionnotes.dev/blog/relative-efficiency-scores-lie</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="benchmarking" /><category term="evaluation" /><category term="tokenomics" /><category term="metrics" /><category term="aiden" /><summary type="html"><![CDATA[Efficiency normalized to a cohort median can rise while every seat gets slower. Publish absolute wall, tokens, and correctness first.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Stop Retrying the Same Failed Observability Query</title><link href="https://productionnotes.dev/blog/stop-retrying-the-same-failed-query/" rel="alternate" type="text/html" title="Stop Retrying the Same Failed Observability Query" /><published>2026-09-09T17:00:00+00:00</published><updated>2026-09-09T17:00:00+00:00</updated><id>https://productionnotes.dev/blog/stop-retrying-the-same-failed-query</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="reactree" /><category term="loop-detection" /><category term="observability" /><category term="evaluation" /><category term="production" /><category term="aiden" /><summary type="html"><![CDATA[Host-side gates for typed query failures, unchanged observations, and same-tool fan-out — why prompt-only retries fail on high-thinking models.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Hierarchical vs Single-Agent on a Dual-Part Observability Job</title><link href="https://productionnotes.dev/blog/plan-mode-merits-demerits-observability/" rel="alternate" type="text/html" title="Hierarchical vs Single-Agent on a Dual-Part Observability Job" /><published>2026-09-09T01:00:00+00:00</published><updated>2026-09-09T01:00:00+00:00</updated><id>https://productionnotes.dev/blog/plan-mode-merits-demerits-observability</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="reactree" /><category term="react" /><category term="orchestration" /><category term="evaluation" /><category term="tokenomics" /><category term="sre" /><category term="aiden" /><summary type="html"><![CDATA[When a hierarchical ReAcTree planner earns its tax on alert+logs triage — and when a single-agent ReAct loop is the better default. Real ratios from a six-combo bench.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Observability Tools Agents Actually Call on Triage</title><link href="https://productionnotes.dev/blog/observability-tools-agents-actually-call/" rel="alternate" type="text/html" title="Observability Tools Agents Actually Call on Triage" /><published>2026-09-08T23:00:00+00:00</published><updated>2026-09-08T23:00:00+00:00</updated><id>https://productionnotes.dev/blog/observability-tools-agents-actually-call</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="observability" /><category term="grafana" /><category term="sre" /><category term="mcp" /><category term="tooling" /><category term="evaluation" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[From live combo benches: the short Grafana/Loki tool set that showed up in successful closes — and the dead ends that burned turns.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What Reasoning Models Write When You Ask Them to Triage</title><link href="https://productionnotes.dev/blog/what-reasoning-models-write-on-triage/" rel="alternate" type="text/html" title="What Reasoning Models Write When You Ask Them to Triage" /><published>2026-09-08T21:00:00+00:00</published><updated>2026-09-08T21:00:00+00:00</updated><id>https://productionnotes.dev/blog/what-reasoning-models-write-on-triage</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="reasoning" /><category term="sre" /><category term="incident-response" /><category term="evaluation" /><category term="observability" /><category term="reactree" /><category term="aiden" /><summary type="html"><![CDATA[Same alert+logs prompt, three model classes. How their Theories diverge: leak vs measurement artifact, and what that means for operators.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Six Model×Orchestration Combos on One Alert+Logs Job</title><link href="https://productionnotes.dev/blog/six-model-mode-combos-alert-logs-bench/" rel="alternate" type="text/html" title="Six Model×Orchestration Combos on One Alert+Logs Job" /><published>2026-09-08T19:00:00+00:00</published><updated>2026-09-08T19:00:00+00:00</updated><id>https://productionnotes.dev/blog/six-model-mode-combos-alert-logs-bench</id><author><name>Sabith K S</name></author><category term="ai-agents" /><category term="benchmarking" /><category term="evaluation" /><category term="tokenomics" /><category term="sre" /><category term="observability" /><category term="reactree" /><category term="react" /><category term="reasoning" /><category term="aiden" /><summary type="html"><![CDATA[Same dual-part observability prompt across three model classes and single-agent ReAct vs hierarchical ReAcTree. Wall, tokens, cost, correctness, and an efficiency score you can steal.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://productionnotes.dev/assets/images/og-default.png" /><media:content medium="image" url="https://productionnotes.dev/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>