~/satyajit

Datadog's Scout: RL on simulated outages, and what "as strong as Fable 5.1" rests on

mdjsonmcp

2026-10-16 · 19 min · reinforcement-learning · agents · benchmarks · harness

A 1:46 narrated explainer, drawn in code. Every number and picture in it is this article's own; the sources are below.

› transcript

Hi, I'm Carillon! When a pager goes off, someone has to work out why. Datadog trained a model to do that. Real incidents have no clean labels. So simulate the system, inject a fault, and the fault you injected is the answer key. Their simulator builds each training incident in four moves. An agent turns a real postmortem into a blueprint of the causal chain. Another agent builds a working system from it, or writes the telemetry directly. The fault is injected, and an alert fires. It is kept only if solvable, leak-free, and still hard. The model gets the alert and tries the same incident several times. Each try queries a sandboxed copy of the real production tools. The diagnosis is scored for being right, and for claims the evidence supports. Tries are compared within the group, and new weights flow back as rollouts keep running. Training on the evaluation judge alone backfired. The model learned to claim less. The reward that worked pays for chasing evidence, then for supported claims. On their internal benchmark, quality is plotted against cost. Scout at its highest effort matches Claude Fable five point one at its highest effort, at about a quarter of the cost. On the public SREGym benchmark, Scout climbs into the top group. With one attempt per fault, those rows tie. Make the injected fault the label, train in the real harness, and never train on your evaluation judge alone. To recap: injected faults as labels, sandboxed real tools, and a reward that pays for evidence. Every source is in the full article. I'm Carillon. Bye!

Why read this

Solidtop 85%

Exact AlertEval scores pulled from the figure's vectors, SREGym rows checked against the leaderboard with intervals, and the incident loop stepped through.

  • Original analysis
  • Concrete numbers to act on
  • Explained from first principles

Training & RLNothing to runProprietaryPractitioner paper

How this was scored
Is it new?
1 of 3: An incremental tweak
Can I trust it?
2 of 3: Measures key facts from files, code or configs
Can I run it?
0 of 3: Closed, nothing to run
Will I understand it?
2 of 3: Mechanism from first principles with figures
Can I act on it?
2 of 3: A concrete recipe, numbers or comparison
Will it last?
1 of 3: Relevant for months
Does it affect many?
1 of 3: A specialist community
Only here?
2 of 3: A teardown or measurement few others did

Score 53 of 100, ranked 445 of 577 rated articles. Each question is answered 0–3 by hand, and a 3 is rare. How articles are scored

Samuel Müller, who leads RL methods on the project, put it in one line: "We have post-trained GLM 5.3 flash to become as strong as Fable 5.1 on SRE tasks." The technical report behind that line is 22 pages from Datadog AI Research, dated October 15, 2026. It describes Scout 1.0: GLM-5.3 Flash, post-trained with reinforcement learning to investigate production alerts through the same tools Datadog's own Bits Investigation agent uses.

I read all of it, plus the launch thread and its replies. The recipe is the interesting part. The headline claim is narrower than the tweet: true on one benchmark, at one effort setting, and that benchmark is internal, unpublished and unsized.

Throughout, reported means Datadog's figure, not re-run. Measured means I computed it from a file: the PDF's vector graphics, the Hugging Face API, the SREGym leaderboard page. Reasoned means my arithmetic on the other two.

What an SRE investigation is

A monitor fires. Say all 30 Postgres autovacuum workers have been busy for more than an hour. An on-call engineer, or an agent, now has to answer one question: why? The answer is rarely where the alert is. It sits a few services and a few hours upstream, buried in telemetry that mostly says nothing useful.

An investigation episode in Scout's world looks like this (reported, Section 4.1):

The report's case study, a real Datadog incident, shows why this is hard. The alert was the autovacuum one. The cause was a Kubernetes node drain about two hours earlier, five causal hops away: the drain removed a read replica and its local disk; the replacement replica came up empty and kept asking for a write-ahead log segment that no longer existed; the primary kept the old replication slot alive, which pinned its cleanup horizon; dead rows climbed from 0.3M to 4.5M; autovacuum workers stayed busy without being able to remove any of them.

Step through the run below. Each step is one tool call from the report's Figure 11, in its own words. Watch the hypothesis list and the causal chain: the agent rules out the runbook's obvious answer first, then works backwards from the symptom, and the chain fills in from the alert end.

Without the widget: the agent reads the runbook (two candidate causes: more writes, or vacuum not matching writes). Metrics show workers pinned at 30 of 30 for two hours and dead rows climbing without a break. Traces are a dead end, an unrelated gRPC error. Kubernetes shows one read replica only 2 hours old and not ready. Dashboards show rows read up 10x while query count is flat, which rules out a write spike. Vacuum logs say the rows are dead but not removable, with the same oldest-transaction limit on every table. No idle transactions in 4 hours, and replicas that report lag are under 4 s behind, which rules out the two usual suspects and leaves "something outside the primary". Logs show the new replica retrying every 9 seconds for a segment that has been removed. The change log shows a node drain 10 minutes before onset. The primary still holds that replica's slot. Diagnosis: drop the slot, rebuild the replica.

Flowchart of an investigation. An alert box reading all 30 autovacuum workers busy for an hour leads to three stages: test the runbook's causes (docs, metrics, traces, Kubernetes, dashboards), find what holds cleanup back (logs, metrics), and follow the broken replica (logs, changes, logs). Each stage ends in a short conclusion, and the last box states the root cause: a node drain evicted a read replica, its replication slot pins the primary's cleanup horizon.
Selected steps from Scout's investigation of a real Postgres autovacuum incident, worked backward from the alert to a drained node (Datadog Scout technical report, Figure 11).

This is a good RL target and a bad supervised one: there is no single correct sequence of queries, only a correct conclusion, and the hard skill is ruling things out.

Building incidents with known answers: GenSim

RL needs many episodes with an answer key. Real incidents have answers but come with two problems the report names directly: labels need expensive expert time, and archived telemetry is sparse because nobody keeps everything. So Datadog built GenSim, a simulator that deploys "behavioral twins" of the kinds of applications its customers run and injects faults "in the spirit of chaos engineering" (reported, Section 3).

The trick is that the fault you inject is the label. Simulate a service graph emitting metrics, logs and traces; inject a fault; the symptom propagates; an alert fires; the injected fault becomes the reference root cause.

Three panels. Simulate: four services emitting metrics, logs and traces. Inject a fault: service B is faulted, service A shows the symptom, and a box reads known root cause. Investigate: an agent sends queries and gets results, produces a diagnosis, and a reward box compares the diagnosis against the known root cause.
One verifiable investigation task: simulate a topology, inject a fault, let the agent investigate, reward the diagnosis against the injected cause (Datadog Scout technical report, Figure 3).

Some scenarios are seeded from real postmortems, through two pipelines that trade cost against fidelity:

Pipeline diagram. An incident report feeds a blueprint agent. In the CausalGen row the blueprint becomes a generated app, then traffic plus a fault, then metrics, traces and logs. In the SynthTel row the blueprint goes to a telemetry generator with no app executed, then metrics, traces and logs. Both rows feed an investigation task made of an alert, queryable telemetry and a reference cause.
CausalGen runs a generated application under traffic and a fault; SynthTel writes the telemetry directly. Both produce an alert, queryable evidence and a reference cause (Datadog Scout technical report, Figure 4).

The curation section is the most transferable part of the report, because it is a list of ways an RL environment lies to you:

What the report does not give: how many scenarios, the CausalGen/SynthTel split, how many were seeded from postmortems, or any example blueprint. "We train on a curated mix of both kinds" is the whole quantitative description.

The environment: Bits Investigation, sandboxed

The RL environment reproduces the production harness, not a generic one: same tool names, same arguments, same response structures (reported, Section 4.1). A local query service answers from archived scenario data, so many rollouts can share one immutable telemetry archive while each keeps isolated query state. Repeated training queries never touch live systems.

The bet is explicit: "Training a model in the specific harness it will be used in confers a significant performance advantage." The SREGym run exists to test the flip side.

The training stack and the loss

The trainer is asynchronous RL on a fork of SkyRL (commit 29f0fdf, vendored 2026-05-13) running on Ray. Generation and training run on separate GPU pools; a rewarder scores finished investigations; a queue assembles groups for the trainer; new weights go back to the rollout workers. Rollouts may be a bounded number of versions stale.

Systems diagram. A sim generator writes telemetry into a data store. An environment hub serves task sandboxes inside a rollout generator, which pairs inference with an environment. Rollouts go to a rewarder, scored rollouts to a training queue, the queue to the trainer, and the trainer sends weights back to the rollout generator. An orchestrator sits above.
The RL stack: rollout workers investigate against sandboxed scenario data, a rewarder scores them, and the trainer sends updated weights back (Datadog Scout technical report, Figure 7).

The objective is GRPO with three borrowed modifications, all cited in the report:

L(θ)=− E[1GL∑i=1G∑t=1Ticlip⁡ ⁣(πθ(yi,t∣x,yi,:t)πrollout(yi,t∣x,yi,:t), 1−ϵℓ, 1+ϵh)Ai]\mathcal{L}(\theta) = -\,\mathbb{E}\left[\frac{1}{G L}\sum_{i=1}^{G}\sum_{t=1}^{T_i}\operatorname{clip}\!\left(\frac{\pi_\theta(y_{i,t}\mid x, y_{i,:t})}{\pi_{\text{rollout}}(y_{i,t}\mid x, y_{i,:t})},\,1-\epsilon_\ell,\,1+\epsilon_h\right)A_i\right]

Two fixes close the gap between inference and trainer: the prediction head is computed in fp32 (as in MiniMax-M1), and Rollout Routing Replay records which experts each token was routed to during generation and replays them in training. GLM-5.3 Flash is a mixture-of-experts model, and in some experiments R3 cut the rollout-to-trainer log-probability mismatch by 30% (reported).

The reward: what went wrong first

The most honest section of the report is the one about reward design (Section 5.3).

Datadog's evaluation judge, DeepJudge, is an LLM-as-judge rubric that compares an investigation's findings with a reference explanation. It credits the immediate cause and deeper causal findings, and it penalizes contradictions and spurious findings absent from the reference. As a training reward it failed: the model learned to investigate less and claim less, because the cheapest way to avoid penalties for wrong findings is to report fewer findings.

The opposite fix also failed. An ensemble of granular rubrics gave a denser signal, and rubric scores went up, with "no gain on the product judge".

What shipped is a "hybrid reward signal that balances correctness, exploration, and grounding": pursue the evidence that resolves the incident, then make only the claims that evidence supports. The report does not give the weights, the components or the judge model. The figure that explains it says outright that its positions are "illustrative, not quantitative ablation results". So the lesson is reported, the recipe is not.

The last trick is harness fuzzing. Production tools change as Datadog ships its MCP server, and some can't be reproduced in the sandbox. So during training, optional tools are randomly dropped and the turn budget is sampled from a range, keeping core tools and holding conditions fixed within each GRPO group so rollouts in a group stay comparable. It is domain randomization for tool surfaces.

The base model, and the release status

Scout starts from GLM-5.3 Flash. The report cites the BF16 checkpoint at a pinned revision, zai-org/GLM-5.3-Flash-BF16. I read that repo's metadata from the Hugging Face API: 321,323,031,390 parameters in the safetensors index, MIT licence (measured). The site's architecture walk-through of GLM-5.3-Flash covers the hybrid attention stack; GLM-5.3 is the larger sibling that appears as a baseline here; and the MLX quantization write-up covers running the base on a laptop.

zai-org/GLM-5.3-Flash@eb9eb20 · snapshot 2026-09-22
parameters
321.32B
repo size
656.69 GB
architecture
Glm5NextForConditionalGeneration
task
image-text-to-text
library
transformers
license
mit
safetensors
62 shards
largest file
5.37 GB
files
73
downloads
3.5M
likes
2.5K
languages
en, zh
parameters by dtype
BF166.93BF32295.5KF8_E4M3314.40B

repo last modified 2026-09-07

That card is the base, not Scout. Scout's weights are not released. Asked in the replies whether it would be open weights, Müller answered "Probably not for now" (reported). The Datadog organisation on Hugging Face lists Toto time-series models and two datasets, and no Scout model (measured, 2026-10-16). AlertEval is not published either. A reply asking whether the evaluation dataset would be public got no answer in the thread. Scout is in closed preview inside Bits Investigation.

Training compute, data volume, number of RL steps and GPU type are all absent. Asked about cost in the replies, Müller said "I can't say too much and it is a moving target". The only scale hint is in the appendix: in some experiments, "a single checkpoint could exceed 10 TB". For scale (reasoned): 321.3B parameters at 14 bytes each (bf16 weights, plus fp32 master weights and two fp32 Adam moments) is about 4.5 TB. A 10 TB checkpoint is roughly what the 753B-parameter GLM-5.3 would need at the same 14 bytes. So either those experiments trained a larger model, or the checkpoint carries much more state than that. The report doesn't say which.

Checking "as strong as Fable 5.1"

AlertEval: the claim holds, on the axis it was made

The report prints no results table, only Figure 1, a scatter of average DeepJudge score against estimated inference cost per investigation. The PDF keeps it as vector paths, so I read every marker's centre and the axis ticks out of the page and converted them to data coordinates (measured; the markers land on 0.1-point values, which suggests the plotted data has one decimal).

Scatter plot of AlertEval average score against cost per investigation relative to Scout 1.0 medium, with cheaper to the right. Scout 1.0 medium, high and xhigh form a purple line at the right, climbing to about 65. Claude Fable 5.1 reaches the same height at the far left near 25 times the cost. GPT-6 Astra, GPT-6.1 Sol, Claude Opus 5.5 and GLM-5.3 sit lower. A dashed arrow labelled post-training rises from GLM-5.3 Flash max to Scout 1.0 medium.
AlertEval score against estimated inference cost, relative to Scout 1.0 medium; lower cost is to the right. The figure shows no error bars (Datadog Scout technical report, Figure 1).

So: Scout xhigh does match Fable xhigh on AlertEval. What the figure cannot tell you:

SREGym: public, and tied at the top

SREGym is a third-party benchmark of 90 live-system faults. A fault counts only if the agent diagnoses and mitigates it correctly. Datadog ran the nine starred rows itself (three Scout settings and six baselines) through the supplied Stratus harness, "one attempt for each fault", and took the rest from the leaderboard (reported).

Bar chart of SREGym faults resolved end to end out of 90. GPT-6.1 Sol xhigh 82, Scout 1.0 xhigh 80, GPT-6 Astra xhigh 80, Scout 1.0 high 79, Claude Opus 5.5 xhigh 79, Claude Fable 5.1 high 76, Scout 1.0 medium 71, GLM-5.3 68, GLM-5.3-Flash 66, then leaderboard rows from 65 down to Kimi K2.5 at 25.
SREGym, 90 faults resolved end to end. Starred rows are Datadog's own single-attempt runs; the rest are reproduced from the sregym.com leaderboard (Datadog Scout technical report, Figure 2).

I checked the leaderboard rows against sregym.com/leaderboard, which embeds its full results. Each reproduced bar is the leaderboard's end-to-end rate times 90, rounded: GPT-5.6 Sol max 72.2% gives 65, GPT-5.5 max 70.0% gives 63, Claude Opus 4.8 medium 69.3% gives 62, GPT-5.4 53.3% gives 48, Kimi K2.5 27.4% gives 25 (measured). The transcription is faithful. Each model takes its best harness, as the footnote says, so those rows mix Codex, Copilot, Claude Code and Stratus.

The Fable row needs a footnote of its own. It is Fable 5.1 high, not xhigh, and "for some tasks, Claude Fable's safety classifier declined a request. For these, we fall back to Claude Opus 5.5 at the same effort level" (reported). So the 76 is partly an Opus score, and the report doesn't say how many tasks fell back.

Now the intervals. With one attempt per fault, each bar is a binomial count out of 90. The 95% Wilson interval at 80 of 90 is about 73 to 85; at 71 it is 62 to 77; at 66 it is 57 to 73 (reasoned). Toggle the SREGym tab:

Read with intervals, SREGym says three things (reasoned, with unpaired two-proportion tests since per-fault results aren't published; a paired test on the same 90 faults could be tighter):

That is the right shape for a generalisation check: a different harness, a different task distribution, and the post-trained model moves from the middle of the pack into the tie at the top. It is not evidence of parity with any particular frontier model, and the report's own wording, "competitive", is the accurate word.

Two cost claims attached to SREGym ("more than 4x" cheaper than GLM-5.3, "at least 2x" cheaper than all competitors, 10x cheaper than Astra and Fable) appear in prose only. Figure 2 has no cost axis, so I can't check them. There is also a small inconsistency: the report says Scout 1.0 xhigh is competitive with the best models on SREGym, the launch blog says Scout 1.0 high. On these intervals both statements are true.

What I'd take from it

The transferable parts are not the leaderboard positions. They are four engineering decisions, each argued from a failure:

  1. Make the injected fault the label. Simulation gives you verifiable rewards for a task whose real data has neither labels nor complete telemetry.
  2. Train in the production harness, then fuzz it. Exact tool names and response shapes buy performance; random tool dropout and turn budgets buy robustness to the harness changing under you.
  3. Don't train on your eval judge. A judge that penalises wrong claims teaches silence. A denser rubric that isn't tied to the outcome teaches rubric-gaming. The reward has to pay for evidence-gathering and for grounded claims at once.
  4. Fix the off-policy plumbing before tuning the loss. Importance ratios against the actual rollout policy, fp32 heads and routing replay are what make async RL on a mixture-of-experts model trainable.

For the related infrastructure on this site: Karotte is an open RL-environment framework built around the same "answer key stays hidden" principle; DeepSeek's DSec is the sandbox fleet side of agentic RL at scale; and Fireworks' distributed RL covers the weight-shipping cost behind asynchronous rollouts.

Whether Scout is as strong as Fable 5.1 in your deployment, nobody outside Datadog can check. The evidence is one internal benchmark of unstated size, with no intervals, plus a public one where the honest reading is a five-way tie.

Cite this article

For attribution, please use the following reference or BibTeX:

Satyajit Ghana, "Datadog's Scout: RL on simulated outages, and what "as strong as Fable 5.1" rests on", ai.thesatyajit.com, October 2026.

bibtex
@misc{ghana2026datadogscout,
  author = {Satyajit Ghana},
  title  = {Datadog's Scout: RL on simulated outages, and what "as strong as Fable 5.1" rests on},
  url    = {https://ai.thesatyajit.com/articles/datadog-scout},
  year   = {2026}
}
share