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
- List what exists: run the integrations command without a name (or its list mode) to print registered integrations and their statuses
- Fix the spelling — matching is case-insensitive but otherwise exact
- If it is a channel you want, configure it: zeroclaw quickstart, then zeroclaw config set channels.<name>.<field>=<value>
- 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
- Build CLI autocomplete from registry::all_integrations names
- Mirror the library's case-insensitive exact match when pre-validating user input
- Catch upstream renames by listing integrations after version upgrades
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
- OpenClaw workspace not found at {}. Pass --source <path> if
- `zeroclaw plugin install <url>` is not supported; use `--reg
- QQ channel requires the `channel-qq` feature
- Lark channel requires the `channel-lark` feature
- DingTalk channel requires the `channel-dingtalk` feature
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/5daa90989e5a2a37.
Report an issue: GitHub.