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

  1. Run `zeroclaw quickstart` to interactively configure a first channel.
  2. Or hand-edit config: add e.g. `[channels.telegram.default]` with `enabled = true` and a bot token, then re-run doctor.
  3. 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

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


AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23). Data as JSON: /api/errors/e51f28dd1f4fcc6c. Report an issue: GitHub.