zeroclaw-labs/zeroclaw · warning · DiagItem
no channels configured — run `zeroclaw quickstart` to set on
Error message
no channels configured — run `zeroclaw quickstart` to set one up
What it means
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`.
Source
Thrown at crates/zeroclaw-runtime/src/doctor/mod.rs:1327
"memory.embedding_model uses hint \"{hint}\" but no matching [[embedding_routes]] entry exists"
),
));
}
// gateway.web_dist_dir: flag values that rely on shell expansion the
// gateway does not perform. Parallel check lives in
// `src/commands/self_test.rs::check_web_dist_dir`; keep the wording
// and predicate in sync.
check_web_dist_dir(config, items);
// Channel: at least one configured
let cc = &config.channels;
let has_channel = cc.channels().iter().any(|info| info.configured);
if has_channel {
items.push(DiagItem::ok(cat, "at least one channel configured"));
} else {
items.push(DiagItem::warn(
cat,
"no channels configured — run `zeroclaw quickstart` to set one up",
));
}
// Enabled bot channels with no token: a partial alias survives the
// resilient load (`bot_token` has a serde default), so it never
// reaches `degraded_sections` — doctor must name the unset field here
// or the operator only finds out when the channel fails to start.
for (alias, tg) in &cc.telegram {
if tg.enabled && zeroclaw_config::traits::is_unset_display_value(&tg.bot_token) {
items.push(DiagItem::warn(
cat,
format!(
"channels.telegram.{alias}.bot_token is unset but the channel is enabled — the channel cannot connect until a bot token is set"
),
));
}View on GitHub (pinned to 88bb9c8533)
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.
Example fix
# before: zeroclaw.toml has no [channels.*] tables # after [channels.telegram.default] enabled = true bot_token = "123456:ABC-your-bot-token"
Defensive patterns
Strategy: validation
Validate before calling
let configured = config.channels.channels().iter().any(|info| info.configured);
if !configured {
eprintln!("no channels configured — run `zeroclaw quickstart` or add a channel table");
} Prevention
- 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.
When it happens
Trigger: 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).
Common situations: 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.
Related errors
- channels.telegram.{alias}.bot_token is unset but the channel
- channels.discord.{alias}.bot_token is unset but the channel
- model route "{}" uses invalid model_provider "{}": {}
- embedding route "{}" uses invalid model_provider "{}": {}
- agent "{name}" uses invalid model_provider "{provider_ref}":
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/e51f28dd1f4fcc6c.
Report an issue: GitHub.