{"record":{"id":"e51f28dd1f4fcc6c","repo":"zeroclaw-labs/zeroclaw","slug":"no-channels-configured-run-zeroclaw-quickstart","errorCode":null,"errorMessage":"no channels configured — run `zeroclaw quickstart` to set one up","messagePattern":"no channels configured — run `zeroclaw quickstart` to set one up","errorType":"console","errorClass":"DiagItem","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":1327,"sourceCode":"                    \"memory.embedding_model uses hint \\\"{hint}\\\" but no matching [[embedding_routes]] entry exists\"\n                ),\n            ));\n    }\n\n    // gateway.web_dist_dir: flag values that rely on shell expansion the\n    // gateway does not perform. Parallel check lives in\n    // `src/commands/self_test.rs::check_web_dist_dir`; keep the wording\n    // and predicate in sync.\n    check_web_dist_dir(config, items);\n\n    // Channel: at least one configured\n    let cc = &config.channels;\n    let has_channel = cc.channels().iter().any(|info| info.configured);\n\n    if has_channel {\n        items.push(DiagItem::ok(cat, \"at least one channel configured\"));\n    } else {\n        items.push(DiagItem::warn(\n            cat,\n            \"no channels configured — run `zeroclaw quickstart` to set one up\",\n        ));\n    }\n\n    // Enabled bot channels with no token: a partial alias survives the\n    // resilient load (`bot_token` has a serde default), so it never\n    // reaches `degraded_sections` — doctor must name the unset field here\n    // or the operator only finds out when the channel fails to start.\n    for (alias, tg) in &cc.telegram {\n        if tg.enabled && zeroclaw_config::traits::is_unset_display_value(&tg.bot_token) {\n            items.push(DiagItem::warn(\n                cat,\n                format!(\n                    \"channels.telegram.{alias}.bot_token is unset but the channel is enabled — the channel cannot connect until a bot token is set\"\n                ),\n            ));\n        }","sourceCodeStart":1309,"sourceCodeEnd":1345,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L1309-L1345","documentation":"A `zeroclaw doctor` warning from `check_config_semantics`: no channel reports `configured = true` via `config.channels.channels()`. The agent therefore has no message ingress (no Telegram, Discord, or other chat channel), which is usually an unconfigured install rather than a defect. Doctor tells you the fastest remedy is `zeroclaw quickstart`.","triggerScenarios":"Running `zeroclaw doctor` on a fresh install before any channel is set up, or after all channel tables were removed/disabled, or when every channel alias exists but none is fully configured (e.g. `configured` stays false).","commonSituations":"First run after installation; evaluating the gateway/API only and forgetting this warning is expected; a config edit accidentally flipped `enabled = false` on the only channel.","solutions":["Run `zeroclaw quickstart` to interactively configure a first channel.","Or hand-edit config: add e.g. `[channels.telegram.default]` with `enabled = true` and a bot token, then re-run doctor.","If you intentionally run gateway/API-only with no chat channels, accept the warning as expected noise."],"exampleFix":"# before: zeroclaw.toml has no [channels.*] tables\n\n# after\n[channels.telegram.default]\nenabled = true\nbot_token = \"123456:ABC-your-bot-token\"","handlingStrategy":"validation","validationCode":"let configured = config.channels.channels().iter().any(|info| info.configured);\nif !configured {\n    eprintln!(\"no channels configured — run `zeroclaw quickstart` or add a channel table\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use `zeroclaw quickstart` for first-time setup rather than an empty config.","If running gateway/API-only, document that this doctor warning is expected so operators do not chase it."],"tags":["config","channels","doctor","onboarding","zeroclaw"],"backgroundTag":"missing-configuration","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}