!!BREAKING CHANGES!!
Summary
The[llm] TOML section has been moved from the top level to [agent.llm]. LLM configuration is now a property of the agent, not a sibling of it. This unlocks per-worker LLM overrides in orchestration mode: each [orchestration.worker.<name>] may declare its own [orchestration.worker.<name>.llm] to run a different model (or a different provider) than the coordinator, inheriting [agent.llm] when omitted.
What Moved
No fields were renamed — every provider-specific field inside
[llm] keeps its name under [agent.llm].
Before / After Examples
Minimal single-agent config
additional_params nested tables
Ollama additional_params
New Capability: Per-Worker LLM Overrides
Workers now accept an optional[orchestration.worker.<name>.llm] table. When omitted, the worker inherits [agent.llm] (including context_window). When present, the worker uses its own LLM configuration exclusively.
context_window is what the runtime reports in aura.session_info events for that worker and what downstream context-budget work (LOG-23439) will use to size per-worker scratchpads.
Startup Errors
Top-level [llm] is no longer accepted
The loader performs a pre-parse check before deserialization. If it sees a top-level [llm] table it fails with:
deny_unknown_fields remains
aura_config::AgentConfig and aura_config::LlmConfig still carry #[serde(deny_unknown_fields)]. Any stray field in [agent] or [agent.llm] (including the fields that were moved out of [agent] in the 10 April 2026 migration) still produces a hard parse error.
Worker LLM fields
[orchestration.worker.<name>.llm] accepts the same fields as [agent.llm] (the full LlmConfig variant set per provider). The same deny_unknown_fields rules apply.
