zeroclaw-labs/zeroclaw · error
duplicate tool name: plugin '{}' conflicts with an existing
Error message
duplicate tool name: plugin '{}' conflicts with an existing tool What it means
Error "duplicate tool name: plugin '{}' conflicts with an existing tool" thrown in zeroclaw-labs/zeroclaw.
Source
Thrown at crates/zeroclaw-hardware/src/tool_registry.rs:90
}
println!("[registry] loaded built-in: {}", name);
tools.insert(name, tool);
}
}
// `datasheet` used to register here, gated on an Aardvark adapter being
// present at startup. That adapter support is gone, so the gate could
// never be satisfied and the registration is removed with it. The
// `datasheet` module itself is retained: no production entrypoint reaches
// this registry, because the CLI and daemon build hardware tools through
// `peripherals::create_peripheral_tools`, so registering the tool belongs
// with that factory rather than here.
// ── 2. User plugins ───────────────────────────────────────────────
let plugins = scan_plugin_dir();
for plugin in plugins {
if tools.contains_key(&plugin.name) {
anyhow::bail!(
"duplicate tool name: plugin '{}' conflicts with an existing tool",
plugin.name
);
}
println!(
"[registry] loaded plugin: {} (v{})",
plugin.name, plugin.version
);
tools.insert(plugin.name, plugin.tool);
}
// ── 3. Startup summary ────────────────────────────────────────────
println!("[registry] {} tools available", tools.len());
{
let reg = devices.read().await;
let mut aliases = reg.aliases();
aliases.sort_unstable(); // deterministic log orderView on GitHub (pinned to 88bb9c8533)
Solutions
- Rename the plugin tool so it does not conflict with an existing registered tool name.
When it happens
Trigger: Thrown at crates/zeroclaw-hardware/src/tool_registry.rs:90 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/b2df8fe848f9e717.
Report an issue: GitHub.