A Model Is Not a Brand Name
Chat products sell models as personalities. A harness that wants to own its loop has to split the noun. Firebrand calls the split a leg: an endpoint you can reach, an auth source that admits you, and a dialect that turns that vendor's wire into one event contract. The loop asks a leg to stream. It never asks who the vendor is.
That split is why a new brain does not rewrite the engine. You add a module that implements stream(), pick or write a dialect, declare how admission works, and register by kind. The assemble / execute / record path stays still. If adding a vendor required a new if in the loop, the loop was already vendor-owned.
The Dialect Is the Only Translator
One vendor streams a finished tool-call object in a single chunk. Another streams argument string fragments keyed by index. A third uses content-block start / delta / stop. The loop does not learn those shapes. It learns text_delta, tool_call_end(complete=True), and a stop reason that is derived from the wire reason and the blocks that actually arrived. A transport that dies before a terminal event is a cut, not a guess.
Admission Class
Not every leg may head a session. Driver-capable legs stream, call tools, and account for usage. Worker-only legs run bounded child tasks. A worker that quietly starts driving is a second loop wearing a disguise. Agent-class legs are a declared exemption: the vendor runtime owns the turn, Firebrand records what it observed, and such a leg never heads a cleanroom.