Providers as a YAML block: a config-driven LLM registry (v1.21.0) RFC BF introduces a YAML-based provider block in LLM registry v1.21.0, allowing operators to declare and configure LLM providers (e.g., OpenAI, Anthropic, self-hosted vLLM) via config instead of hardcoded Go code. The update includes pluggable drivers, per-provider concurrency limits, capability overrides, and backward compatibility through an embedded default-providers layer. RFC BF ships the providers: YAML block. LLM providers stop being hardcoded in Go and become a config-declared registry with pluggable drivers. Each entry declares a compiled-in driver anthropic / openai / gemini / deepseek / ollama / mock / code-js , a base url, an api key env env-var name resolved server-side, tenant-overridable via CredentialDef, never ${VAR}-interpolated , a max concurrent, an options map, and a capabilities override block. Add a self-hosted vLLM / llama.cpp / groq / together / second-Ollama with a few lines; driver: openai covers any OpenAI-compatible endpoint. Every existing config keeps working byte-for-byte via an embedded default-providers layer prepended to every config; operator entries deep-merge over it. Keyless third-party providers now enable on declaration the headline self-hosted case . anthropic/gemini/ollama drivers now forward api key env to KeyEnvName so CredentialDef overrides target the right var. Per-provider max concurrent caps in-flight runs to one provider — the motivating case is a local model on one GPU. Sub-agents gate with a deadlock carve-out. Capability overrides re-enable vision on OpenAI-compat endpoints, applied inside the driver so KeyedProvider / ThinkingDowngrader are preserved. CLI parity: validate / agents / doctor resolve from the same embedded default layer. No schema migration; adapters bump to 1.21.0 in lockstep with no code change.