defaultAgentSpec seeds a new draft rather than binding to the current one. Changing it does not alter the conversation on screen, and it does not apply on clear chat either — that path deliberately preserves the spec already bound to the draft. The new value is picked up when a new chat starts. To apply it immediately, remount the component with a new key. It is ignored entirely in SingleAgent mode.
Always pass an explicit defaultAgentSpec in composer modes. Omitting it falls back to { model: { name: "openai-main/gpt-4.1" } }, and requests fail if your backend does not expose a model under that exact name.
The settings panel appears only when your server exposes a catalog. Without one it is silently absent — there is no error, so an unexpectedly missing settings button usually means the catalog is not attached. Note that useCatalogServer() throws when there is no catalog; use useOptionalCatalogServer() in code that must tolerate its absence.