zeroclaw-labs/zeroclaw · error · anyhow::Error

Unknown integration: {name}. Check README for supported inte

Error message

Unknown integration: {name}. Check README for supported integrations or run `zeroclaw quickstart` to configure a model provider, then `zeroclaw config set channels.<name>.<field>=<value>` for channels.

What it means

show_integration_info backs the `zeroclaw integrations <name>` CLI command. It builds the registry via registry::all_integrations(config) and searches it case-insensitively for the requested name; on miss it bails with remediation hints. The error means the name simply is not in the registry of known integrations — it is a lookup miss, not a load failure.

Source

Thrown at crates/zeroclaw-runtime/src/integrations/mod.rs:57

            Self::Platform,
        ]
    }
}

pub struct IntegrationEntry {
    pub name: String,
    pub description: String,
    pub category: IntegrationCategory,
    pub status: IntegrationStatus,
}

/// Handle the `integrations` CLI command
pub fn show_integration_info(config: &Config, name: &str) -> Result<()> {
    let entries = registry::all_integrations(config);
    let name_lower = name.to_lowercase();

    let Some(entry) = entries.iter().find(|e| e.name.to_lowercase() == name_lower) else {
        anyhow::bail!(
            "Unknown integration: {name}. Check README for supported integrations or run `zeroclaw quickstart` to configure a model provider, then `zeroclaw config set channels.<name>.<field>=<value>` for channels."
        );
    };

    let (icon, label) = match entry.status {
        IntegrationStatus::Active => ("✅", "Active"),
        IntegrationStatus::Available => ("⚪", "Available"),
    };

    println!();
    println!(
        "  {} {} — {}",
        icon,
        console::style(&entry.name).white().bold(),
        entry.description
    );
    println!("  Category: {}", entry.category.label());
    println!("  Status:   {label}");

View on GitHub (pinned to 88bb9c8533)

Solutions

  1. List what exists: run the integrations command without a name (or its list mode) to print registered integrations and their statuses
  2. Fix the spelling — matching is case-insensitive but otherwise exact
  3. If it is a channel you want, configure it: zeroclaw quickstart, then zeroclaw config set channels.<name>.<field>=<value>
  4. If you expected this integration to exist, check the README/changelog for renames in your ZeroClaw version
Defensive patterns

Strategy: validation

Validate before calling

let known: Vec<&str> = registry::all_integrations(config)
    .iter().map(|e| e.name.as_str()).collect();
if !known.iter().any(|n| n.eq_ignore_ascii_case(name)) {
    // print known names and exit gracefully instead of calling show_integration_info
}

Try / catch

if let Err(e) = show_integration_info(config, name) {
    if e.to_string().starts_with("Unknown integration:") {
        // show the available list from the registry; not an internal failure
    }
}

Prevention

When it happens

Trigger: Running `zeroclaw integrations slackk` (typo); passing a custom channel name that exists in config but is not a registered integration; passing a model-provider alias; extra whitespace or a plural form ("channels", "gateways") that matches no registry entry.

Common situations: Exploring a fresh install and guessing names; docs/README drift where an integration was renamed between versions; users conflating channels (configured via zeroclaw config set channels.<name>...) with built-in integrations.

Related errors


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