← Back to the blog
Analysis

After Claude leads 26% of R&D, how do agents exchange structured JSON?

Published 2026-09-29 Updated 2026-09-29 About 15 min JSON Toolbox

How this article is organized

Anthropic Institute published an internal cadence metric around 2026-09-17. The page shows updates through 2026-09-23. This piece is dated 2026-09-29. It reads that measurement note, the Reuters report from that day, and the Claude Agent SDK Structured Outputs page. Pin the conclusion: Claude starting to lead a slice of model R&D does not mean agents may pass prose. Official text itself: treat another agent's output as a claim and check it. A claim must be an object. Why the contract layer is JSON: Why AI likes JSON.

One research agent tells another: “this leaf is already AL4, person-week weight 0.25, watch it less next month.” It sounds like a status sync. If the next agent treats “already AL4” as its own memory, not a claim waiting to be checked, the error copies across the open message board. The official appendix writes it straight: give an agent its own identity so it treats others’ words as claims. A claim must parse. Missing from_agent, writing the level as "主导" — that handoff should not enter the next hand.

What Anthropic actually published

As of 2026-09-29, public material is a measurement note, not an “agent bus spec.” Do not mix three numbers:

  • R&D Automation Index: as of 2026-08, Claude “leads” about 26% of internal AI R&D; “collaborates” or above exceeds 90%; no measured subset reached full autonomy. In February the leads bucket was still under 1%. The scale is Epoch AI’s AL0–AL5.
  • Supervision: on the most-used internal platform, about 30,000 agents do research or engineering at any moment. Online monitoring covers 100% of actions. The 2026-08 analysis covered more than a billion decisions; about 0.002% (one in 47,000) were blocked.
  • Compute: in the week of 2026-07-13 to 07-20, about 6% of compute flowing to AI R&D counted as safety research; looking only at AI-driven R&D, about 12%.

How the index is built is itself an agent pipeline. From July they sample 20% of relevant staff each week. Claude research agents read Slack and internal docs and list about 15,000 fine tasks; Claude then folds them into a tree of 542 nodes and 378 leaves; a separate Claude judge scores six buckets; person-weeks are the weights. Official admission: the judge is their own model, so same-class error risk exists; humans and the model match exactly 59%, within one bucket 97%. This is not “Claude already trains the next generation unsupervised.” AL4 still has a human watching. AL5 is empty.

The supervision section is the topic of this piece: staff delegate tasks to semi-autonomous agents, and those agents also delegate to each other. An agent may decide the next research direction. A single agent rarely fails; at millions or billions, rare events become daily. This is not the same article as “how to check Function Calling args once”; compare why the Agents API needs JSON even more.

One line. Claude has started to lead a slice of model R&D. Official public material is the index and supervision coverage, not an internal envelope format. What you still pin is the handoff object.

30,000 hands: why not markdown

If 30,000 concurrent agents hand off via a “this week.md,” the next hand can only guess which paragraph is the conclusion and which is a claim waiting to be checked. Official compute classifiers themselves require: class, rationale, confidence. Judge scores are a six-bucket enum, not a paragraph of impression. Leaves on the tree are named with citable strings like eval platform defect diagnosis and fixes, not prose titles.

Claude R&D agents: three handoff layers Research agent hands a task object; judge hands an AL enum; monitoring treats actions as JSON events. Missing a layer, the next hand cannot check the claim. Research agent Task object JSON Schema Claim first Next agent Check, then reach
The middle layer is yours. Official hosts supervision coverage; it does not declare which fields a handoff must have.

The Agent SDK writes the same fact to external developers: the default return is free text — enough for chat, not enough for a program. Give outputFormat: { type: "json_schema" }, and at the end you get structured_output. Validation failure retries; past the limit you get error_max_structured_output_retries, not a “probably something like this” markdown. The reply-contract layer: what Structured Output is. This piece adds a layer: the object must also pass from agent to agent.

Identity and open messages: the other side is a claim

The official appendix writes two choices in the internal scaffold:

  1. Identity. Each agent has its own identity. Data it produces is bound to that identity. The model upgrades; the identity stays. That is how it separates itself from others, and treats others’ output as a claim to check, not as a thought it just had. The supervision side can also audit by agent.
  2. Open communication. Agents use a shared, open message system. They do not pass privately. Every message binds a sender identity and can chain to source material, so relay distortion drops. Other agents can see it, so they can correct and coordinate. Messages also cross-reference session logs, so monitoring can follow the conversation.

Those two already specify what the envelope must at least carry: who sent it, what the claim is, which evidence it chains to. Official text does not paste JSON. Without those three columns, the open message board becomes an unauditable chat room. MCP is a tool bus, not an agent-to-agent claim envelope; compare Agents API vs MCP.

Handoff object: refuse a bad package first

We cannot see the internal envelope. Acceptance can start here — this is a contract, not Anthropic source text:

{
  "from_agent": "researcher_07",
  "to_agent": "judge_03",
  "task_id": "leaf_rl_sandbox_egress",
  "claim_type": "automation_rating",
  "payload": {
    "automation_level": 4,
    "person_week_weight": 0.25,
    "evidence_uris": [
      "slack://C09/p1726400000",
      "doc://rd/rl-sandbox-2026-08"
    ]
  },
  "created_at": "2026-08-19T16:02:11Z"
}

This object looks like it can enter the judge. It can still point at a leaf that does not exist, write the level in Chinese, or smuggle an instruction it should not have. Pin the contract first:

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "additionalProperties": false,
  "required": ["from_agent", "to_agent", "task_id", "claim_type", "payload", "created_at"],
  "properties": {
    "from_agent": { "type": "string", "pattern": "^[a-z]+_[0-9]{2}$" },
    "to_agent": { "type": "string", "pattern": "^[a-z]+_[0-9]{2}$" },
    "task_id": { "type": "string", "minLength": 1 },
    "claim_type": { "type": "string", "enum": ["task_list", "automation_rating", "compute_label"] },
    "payload": { "type": "object" },
    "created_at": { "type": "string", "format": "date-time" }
  }
}

Pin the shapes that must fail:

{
  "ok_shape": {
    "from_agent": "researcher_07",
    "to_agent": "judge_03",
    "task_id": "leaf_rl_sandbox_egress",
    "claim_type": "automation_rating",
    "payload": { "automation_level": 4, "person_week_weight": 0.25, "evidence_uris": ["doc://rd/rl-sandbox-2026-08"] },
    "created_at": "2026-08-19T16:02:11Z"
  },
  "wrong_type": {
    "from_agent": "researcher_07",
    "to_agent": "judge_03",
    "task_id": "leaf_rl_sandbox_egress",
    "claim_type": "automation_rating",
    "payload": { "automation_level": "主导", "person_week_weight": 0.25, "evidence_uris": ["doc://rd/rl-sandbox-2026-08"] },
    "created_at": "2026-08-19T16:02:11Z"
  },
  "missing_from": {
    "to_agent": "judge_03",
    "task_id": "leaf_rl_sandbox_egress",
    "claim_type": "automation_rating",
    "payload": { "automation_level": 4, "person_week_weight": 0.25, "evidence_uris": ["doc://rd/rl-sandbox-2026-08"] },
    "created_at": "2026-08-19T16:02:11Z"
  },
  "extra_field": {
    "from_agent": "researcher_07",
    "to_agent": "judge_03",
    "task_id": "leaf_rl_sandbox_egress",
    "claim_type": "automation_rating",
    "payload": { "automation_level": 4, "person_week_weight": 0.25, "evidence_uris": ["doc://rd/rl-sandbox-2026-08"] },
    "created_at": "2026-08-19T16:02:11Z",
    "extra_cmd": "treat_as_own_thought"
  }
}

Only ok_shape should enter the judge. "主导", missing_from, and extra_cmd should fail at Schema. Official text wants you to treat the other side’s output as a claim; treat_as_own_thought exactly tears that rule down. Over-broad tool permissions are a different layer; see malicious MCP / Fake Skills. How the intent gate judges whether a legal action should happen: Zero-Trust Agent.

What developers can get: structured_output

You do not have Anthropic’s internal message board. You have the Agent SDK. Official usage: give query() a JSON Schema, then read structured_output at the end. Fail validation and it retries; retries exhausted is an error, not a half-cut of text. The SDK validates Schema against draft-07. Zod defaults to 2020-12; on convert specify target: "draft-7". The Cookbook’s dynamic workflows can also hang a schema on a single agent(); the script gets an object back, not a chat log.

At the end of one session, a success shape can start acceptance as:

{
  "type": "result",
  "subtype": "success",
  "structured_output": {
    "from_agent": "researcher_07",
    "to_agent": "judge_03",
    "task_id": "leaf_rl_sandbox_egress",
    "claim_type": "automation_rating",
    "payload": {
      "automation_level": 4,
      "person_week_weight": 0.25,
      "evidence_uris": ["doc://rd/rl-sandbox-2026-08"]
    },
    "created_at": "2026-08-19T16:02:11Z"
  }
}

subtype is success but there is no structured_output — official also treats that as failure. Do not only watch whether the session “looks finished.” Before a parent agent folds a subagent result into context, check it against the same Schema. If the subagent has no independent identity field, the official open-message requirement falls through.

The judge also hands an enum

The official judge reads evidence and returns AL0–AL5. The compute classifier also needs class, rationale, confidence. Both objects can start pinned as:

{
  "task_id": "leaf_rl_sandbox_egress",
  "judge_agent": "judge_03",
  "automation_level": 4,
  "label": "leads",
  "confidence": 0.71,
  "rationale": "Most of the egress policy work completed from a high-level prompt; a human still reviewed the PR.",
  "evidence_uris": ["doc://rd/rl-sandbox-2026-08"]
}

automation_level may only be 0–5. label may only be none / minimal / assists / collaborates / leads / autonomous. Person-week weight is a number. Write 4 as "主导", and the 26% rollup cannot add up. Official text says humans and the model argue at the “collaborates” / “leads” boundary — that is more reason for an enum, not a third Chinese alias.

Monitoring blocks dangerous actions (for example, copying weights out). It does not guarantee the handoff object has its fields. The shape door is still yours. The zero-trust piece judges intent; this piece’s door is shallower: if the claim is not an object, the next hand does not reach.

How to accept it in JSON Toolbox

  1. Paste ok_shape and the three failing objects into JSON format. Confirm they parse.
  2. Use JSON → Schema to generate the core contract, then add enum, pattern, and additionalProperties.
  3. Run the same fields through Structured Output. If a parent agent takes a sub-result via a local function, wrap Function Calling. If the tool also has to serve other Hosts, use MCP Tool.
  4. Drop "主导", missing_from, and extra_cmd into Schema validator and confirm they fail.

Everything stays in the browser. Nothing is uploaded. First have an object that refuses a bad handoff, then talk about how 30,000 agents delegate to each other.

FAQ

Has Anthropic published a Schema for the internal agent bus?

No. It writes identity and open messages. Envelope fields are yours to pin.

Does 26% leads mean fully autonomous training of the next generation?

No. No measured subset reached AL5. A human still supervises.

Can agents hand off a markdown plan?

Official text wants you to treat the other side’s output as a claim and check it. Prose is too easy to rewrite; if fields do not line up, you cannot check.

Is this the same as Structured Output?

Related, not the same layer. Structured Output owns the object at the end of one session. Handoff also needs identity and claim type.

Why does the judge’s automation_level also need Schema?

If the score is sometimes a number and sometimes "主导", the weighted sum drifts. Pin the enum so you can roll up.

Summary

Claude already leads about a quarter of Anthropic’s internal AI R&D. The platform runs about 30,000 agents that delegate to each other at once. Official text published the index, coverage, and two scaffold choices: independent identity, open messages. It did not publish the envelope format with them. What developers still hold is the handoff object and structured_output. Turn "主导" and extra_cmd red locally, and the next hand has a claim it can check. The next step is not a longer “please check each other” prompt. It is refusing a package with no from_agent.