{"record":{"id":"64cca10f4143d8cf","repo":"zeroclaw-labs/zeroclaw","slug":"no-configured-model-providers-run-zeroclaw-quic","errorCode":null,"errorMessage":"No configured model_providers — run `zeroclaw quickstart` to set one up first","messagePattern":"No configured model_providers — run `zeroclaw quickstart` to set one up first","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":920,"sourceCode":"        .collect()\n}\n\n/// Whether a configured model id appears verbatim in a provider's live catalog.\n/// Pure — separated so the membership rule is explicit and unit-testable\n/// without any network probe.\nfn model_in_catalog(model: &str, catalog: &[String]) -> bool {\n    catalog.iter().any(|id| id == model)\n}\n\npub async fn run_configured_models(\n    config: &Config,\n    provider_override: Option<&str>,\n    verify: bool,\n) -> Result<()> {\n    let entries = configured_model_entries(config, provider_override);\n\n    if entries.is_empty() {\n        anyhow::bail!(\n            \"No configured model_providers — run `zeroclaw quickstart` to set one up first\"\n        );\n    }\n\n    if verify {\n        println!(\"🩺 ZeroClaw — Configured Models (--check)\");\n    } else {\n        println!(\"🩺 ZeroClaw — Configured Models\");\n    }\n    println!();\n\n    let mut ok = 0usize;\n    let mut warn = 0usize;\n    let mut error = 0usize;\n\n    for (provider_ref, model) in &entries {\n        println!(\"  [{}]\", provider_ref);\n","sourceCodeStart":902,"sourceCodeEnd":938,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L902-L938","documentation":"run_configured_models lists (and with --check verifies) the models declared under model_providers. When configured_model_entries returns an empty set there is nothing to show, so the command aborts and points at zeroclaw quickstart. Note the empty set also arises when a provider filter matches no configured alias, since the filter is applied before the emptiness check.","triggerScenarios":"Fresh install with no [model_providers.*] entries; or a provider override whose alias matches no configured provider key, making the filtered entry list empty.","commonSituations":"First run in a new container or data dir; a typo'd --provider alias producing a misleading \"no providers\" message instead of a not-found error.","solutions":["Run zeroclaw quickstart or add [model_providers.<alias>] entries","If you passed a provider filter, verify the alias matches a configured key exactly","Re-run the configured-models listing"],"exampleFix":"# zeroclaw.toml — before\n# (no model_providers section)\n\n# after\n[model_providers.openai]\nmodel = \"gpt-4o\"\nuri = \"https://api.openai.com/v1\"\napi_key = \"sk-...\"","handlingStrategy":"validation","validationCode":"if config.providers.models.is_empty() {\n    anyhow::bail!(\"run `zeroclaw quickstart` or add [model_providers.<alias>] first\");\n}\nzeroclaw_runtime::doctor::run_configured_models(&config, override.as_deref(), false).await?;","typeGuard":"fn has_configured_model_entries(config: &zeroclaw_config::schema::Config, filter: Option<&str>) -> bool {\n    match filter.map(str::trim).filter(|f| !f.is_empty()) {\n        Some(f) => config.providers.models.contains_key(f),\n        None => !config.providers.models.is_empty(),\n    }\n}","tryCatchPattern":"if let Err(err) = zeroclaw_runtime::doctor::run_configured_models(&config, override.as_deref(), verify).await {\n    if err.to_string().contains(\"No configured model_providers\") {\n        eprintln!(\"empty result — either no providers exist or the --provider alias matched none\");\n        return Ok(());\n    }\n    return Err(err);\n}","preventionTips":["When using a provider filter, confirm the alias exists first — a miss reports as 'no providers', not 'unknown provider'","Bootstrap new environments with zeroclaw quickstart before running model tooling"],"tags":["doctor","model-providers","config"],"backgroundTag":"missing-configuration","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}