41 How Datadog Built a ‘Universal Machine Tool’ for Claude Code
41.1 Overview
On July 21, 2026, Anthropic published a deep dive into how Datadog — the cloud monitoring and observability company — had built an internal platform called Temper to manage and verify the output of agentic coding systems at scale. The post was notable not just for the technical sophistication of Temper itself, but for the philosophical shift it represented: a move from treating AI-generated code as something to be reviewed to treating it as something to be verified.
Datadog’s context was significant. By mid-2026, Claude Code drove approximately two-thirds of all AI coding at Datadog — a company with thousands of engineers and one of the most sophisticated internal tooling cultures in the industry. The challenge they faced was not whether to use agentic coding, but how to trust its output at the scale and reliability level that a critical observability platform demands.
The answer was Temper, which Datadog described as a “universal machine tool” for agentic systems — borrowing an analogy from manufacturing, where a machine tool is a device that makes other machines with precision and repeatability. Temper was a system that made agents produce verifiable, trustworthy output.
41.2 The Evolution: Courier → BitsEvolve → Helix → Temper
Temper was not Datadog’s first attempt at managing agentic coding. It was the culmination of an evolutionary path through four generations of internal tooling:
| Generation | Name | Approach | Limitation |
|---|---|---|---|
| 1st | Courier | Human review of agent output | Doesn’t scale with agent volume |
| 2nd | BitsEvolve | Automated test-based verification | Tests alone miss behavioral issues |
| 3rd | Helix | Multi-agent review (agents check agents) | Agents share blind spots |
| 4th | Temper | Specification + multi-layer verification | Most comprehensive |
41.2.1 Courier: Human Review
The first generation was straightforward: agents generated code, and human engineers reviewed every change. This worked when agent output was small, but as Claude Code usage grew to thousands of changes per day, human review became the bottleneck. The quality of review also degraded under volume — a tired reviewer at 4 PM was not as effective as a fresh one at 9 AM.
41.2.2 BitsEvolve: Test-Based Verification
The second generation introduced automated verification through tests. If the agent’s output passed the test suite, it was accepted. This scaled better than human review but exposed a fundamental problem: tests verify what you thought to test, not what matters. An agent could produce code that passed all existing tests while introducing subtle behavioral changes that no test covered.
41.2.3 Helix: Multi-Agent Review
The third generation used multiple agents to review each other’s work — an adversarial approach where one agent generated code and another tried to find problems with it. This caught more issues than test-based verification but had a subtle weakness: agents trained on similar data share blind spots. If the generating agent and the reviewing agent both misunderstood a particular API, neither would catch the error.
41.2.4 Temper: Specification + Verification
The fourth generation — Temper — represented a paradigm shift. Rather than having agents produce code that was then reviewed, Temper had agents produce specifications that were then verified through multiple independent methods. Code was a byproduct of verified specifications, not the primary output.
41.3 How Temper Works
41.3.1 The Core Insight: Agents Produce Specifications, Not Code
The fundamental redesign in Temper was this: agents do not produce code; they produce specifications. Code is then derived from the specification through a process that is itself verified.
Traditional approach:
Agent → Code → Review → Ship (if approved)
Temper approach:
Agent → Specification → Verification → Code → Ship
│
┌─────────┼─────────┐
▼ ▼ ▼
Verify Verify Verify
Layer 1 Layer 2 Layer 3
│ │ │
└────────────┼────────────┘
▼
All pass? → Generate Code → Ship
Any fail? → Reject → Retry
This inversion solved several problems:
- Specifications are easier to verify than code. A specification describes what the code should do, not how. Verifying “this function should return the sum of two numbers” is simpler than verifying that a particular implementation is correct.
- Verification can be multi-modal. Different verification methods can check the same specification from different angles, catching issues that any single method would miss.
- The specification is the artifact of record. If code needs to change, the specification is updated first, then code is regenerated — ensuring the spec and code never diverge.
41.3.2 The Four Verification Layers
Temper’s verification kernel applied four independent layers of verification to every specification:
41.3.2.1 Layer 1: Symbolic Reasoning
Symbolic reasoning applied formal logic to verify that the specification was internally consistent and logically sound. This was the most rigorous layer, capable of proving (not just testing) that certain properties held.
For example, if a specification stated that a sorting function should produce output where “for all pairs (a, b) in the output, a ≤ b,” symbolic reasoning could verify this property held for all possible inputs, not just tested ones.
41.3.2.2 Layer 2: Exhaustive State Exploration
Exhaustive state exploration enumerated all possible states and transitions defined by the specification, verifying that:
- All reachable states were valid.
- No state led to an undefined or erroneous condition.
- State transitions matched the specification’s intent.
This was particularly powerful for specifications involving state machines, protocols, or complex control flow.
41.3.2.3 Layer 3: Deterministic Simulation
Deterministic simulation ran the specification through a simulated environment, executing it against generated inputs and comparing outputs against expected behavior. Unlike unit tests (which test specific cases), deterministic simulation could generate millions of test cases automatically and verify behavior across all of them.
# Conceptual: deterministic simulation
def simulate_specification(spec, iterations=1_000_000):
"""Run the specification against millions of generated inputs."""
for i in range(iterations):
inputs = generate_inputs(spec.input_types, seed=i)
expected = spec.compute_expected(inputs)
actual = spec.execute(inputs)
if actual != expected:
return Failure(
input=inputs,
expected=expected,
actual=actual,
iteration=i,
)
return Success()41.3.2.4 Layer 4: Adversarial Verification
Adversarial verification pitted an adversarial agent against the specification — an agent specifically trained to find inputs or conditions that would break it. This was the “red team” layer, designed to catch the edge cases and malicious inputs that the other layers might miss.
The four layers were deliberately independent — they used different methodologies, different assumptions, and different failure modes. The probability of a bug passing all four layers was vanishingly small, because a bug that evaded symbolic reasoning might be caught by simulation, and a bug that evaded simulation might be caught by adversarial testing.
41.3.3 The Three Contracts
Every specification verified by Temper had to satisfy three contracts:
41.3.3.1 Contract 1: Behavior
The behavior contract defined what the code should do — its inputs, outputs, and the relationship between them. This was the functional specification.
behavior_contract:
function: "calculate_latency_percentile"
inputs:
- name: "measurements"
type: "list[float]"
constraints: "non-empty, all values >= 0"
- name: "percentile"
type: "float"
constraints: "0 <= percentile <= 100"
outputs:
- name: "result"
type: "float"
constraints: ">= 0"
properties:
- "result is the value below which `percentile`% of measurements fall"
- "function is deterministic: same inputs always produce same output"41.3.3.2 Contract 2: Data Contract
The data contract defined what data the code could access, how it could access it, and what it could do with it. This was the data governance specification.
data_contract:
reads:
- resource: "metrics_store"
access: "read_only"
filter: "tenant_id == request.tenant_id"
writes:
- resource: "results_cache"
access: "write"
retention: "24h"
prohibitions:
- "no cross-tenant data access"
- "no writing to metrics_store"41.4 The “Dark Factory” Concept
The post referenced a concept from Simon Willison: the “dark factory” — a manufacturing facility that operates without lights, because there are no humans inside. Applied to software, a “dark factory” was an environment where agents worked without human intervention — generating, verifying, and shipping code autonomously.
Temper was the enabling technology for Datadog’s dark factory. By making verification comprehensive and automated, Temper reduced the need for human review to the point where agents could operate with minimal supervision for many classes of changes.
The “dark factory” did not mean zero human involvement. It meant that humans set the policies, defined the contracts, and handled exceptions — while the routine work of generating and verifying code happened autonomously. The human role shifted from reviewer to architect and policy-setter.
41.4.1 Trust Granularity
Not all work was suitable for the dark factory. Datadog implemented granular trust levels:
| Trust Level | Human Involvement | Example Changes |
|---|---|---|
| Full autonomy | None | Bug fixes, test additions, refactoring |
| Notify after | Review post-merge | Feature additions within existing patterns |
| Review before | Human approval required | New APIs, schema changes |
| Human-only | No agent involvement | Security-critical, compliance-related |
41.5 The Key Insight: Verification Is the Bottleneck
The most important takeaway from Datadog’s experience was this: the real bottleneck in agentic coding is not generation, but verification.
Generating code is fast and getting faster. Claude Code can produce thousands of lines of code in minutes. The challenge is knowing whether that code is correct, secure, and behaves as intended. Traditional code review — whether by humans or by other agents — does not scale to the volume that generation can produce.
Temper’s answer was to make verification automated, multi-modal, and comprehensive — treating it as an engineering problem worthy of the same investment as the generation side.
For organizations building internal tooling for agentic coding, Datadog’s experience suggested an investment priority: spend more on verification infrastructure than on generation tooling. The generation side is handled by the model (Claude); the differentiation comes from how well you can verify and trust the output.
41.6 Broader Implications
41.6.1 For Engineering Culture
Temper represented a cultural shift from “trust but verify” to “verify, then trust.” In the traditional model, a senior engineer’s review was the trust mechanism. In the Temper model, verification was the trust mechanism — and the engineer’s role was to ensure the verification was sound.
41.6.2 For Code Quality
Counterintuitively, Temper-driven code quality was often higher than human-written code, because:
- Every change was verified against a formal specification.
- Edge cases were explored exhaustively, not just the obvious ones.
- Adversarial testing caught issues that humans would overlook.
41.6.3 For Team Structure
The dark factory model changed team composition. Rather than scaling review capacity with generation capacity (more reviewers for more code), teams could scale generation much faster than review — because review was automated. This freed engineers to focus on higher-value work: architecture, product design, and the specifications themselves.
41.7 Key Takeaways
- Datadog’s Claude Code drives two-thirds of AI coding at the company — one of the highest adoption rates in the industry.
- Temper is a “universal machine tool” for agentic systems — a platform that makes agents produce verifiable, trustworthy output.
- The evolution: Courier → BitsEvolve → Helix → Temper. Each generation addressed the limitations of the previous: human review → test-based → multi-agent → specification + verification.
- The core redesign: agents produce specifications, not code. Code is derived from verified specifications, making verification the primary activity rather than an afterthought.
- Four verification layers provide defense in depth. Symbolic reasoning, exhaustive state exploration, deterministic simulation, and adversarial verification — each independent, each catching different classes of errors.
- Three contracts define every specification. Behavior (what it does), Data (what it touches), Authorization (what it’s permitted to do) — together providing a complete, verifiable specification.
- The “dark factory” concept (Simon Willison) describes agent-driven development with minimal human intervention — enabled by comprehensive automated verification.
- Trust is granular. Full autonomy for low-risk changes, human review for high-risk ones — not a binary choice.
- The real bottleneck is verification, not generation. Generation is fast and accelerating; the challenge is knowing the output is correct.
- Investment priority: verification infrastructure over generation tooling. The model handles generation; differentiation comes from how well you verify and trust output.
- Temper-driven code quality can exceed human-written code because verification is more thorough than human review can be.