zeroclaw-labs/zeroclaw · error · anyhow::Error
Some skill tests failed.
Error message
Some skill tests failed.
What it means
`skills test` runs the TEST.sh suites of one skill (--name, or a path) or of every installed skill across all bundles plus the global dir, prints per-skill results, and then bails with this generic message if any result recorded failures. The specifics are in the printed results above the error, never in the message itself.
Source
Thrown at src/skills/mod.rs:550
// Test all skills across every bundle plus the global dir.
let install_root = config.install_root_dir();
let mut dirs: Vec<PathBuf> = config
.skill_bundles
.keys()
.filter_map(|a| {
zeroclaw_config::skill_bundles::resolve_directory(config, &install_root, a)
.ok()
})
.collect();
dirs.push(skills_dir(&config.data_dir));
testing::test_all_skills(&dirs, verbose)?
};
testing::print_results(&results);
let any_failed = results.iter().any(|r| !r.failures.is_empty());
if any_failed {
anyhow::bail!("Some skill tests failed.");
}
Ok(())
}
}
}
enum SkillLocation {
Bundle { alias: String, dir: PathBuf },
Global { dir: PathBuf },
}
impl SkillLocation {
fn dir(&self) -> &Path {
match self {
SkillLocation::Bundle { dir, .. } | SkillLocation::Global { dir } => dir,
}
}
}View on GitHub (pinned to 88bb9c8533)
Solutions
- Re-run only the failing skill with detail: `zeroclaw skills test --name <skill> --verbose`
- Read the failures list printed before the error and fix the TEST.sh or the skill behavior
- Ensure every tool the tests invoke is installed and on PATH
- Treat the non-zero exit code as the gate in CI; do not suppress it
Example fix
# before zeroclaw skills test # 'Some skill tests failed.' # after zeroclaw skills test --name pdf-tools --verbose
Defensive patterns
Strategy: try-catch
Validate before calling
// Narrow the blast radius: test one skill before the full sweep // zeroclaw skills test --name <skill> --verbose
Try / catch
let out = Command::new("zeroclaw").args(["skills", "test"]).output()?;
let stdout = String::from_utf8_lossy(&out.stdout);
let failed: Vec<&str> = stdout.lines().filter(|l| /* match your results-format marker */ false).collect();
if !out.status.success() {
// report `failed`, exit with the same code to keep the CI gate honest
} Prevention
- Run per-skill tests with --verbose before the full suite when iterating
- Pin the tools your TEST.sh scripts invoke (versions on PATH) in CI images
- Treat the exit code, not the message, as the CI signal
When it happens
Trigger: A skill's TEST.sh exits non-zero or its assertions fail; the full sweep in CI where one skill out of many is broken; tests that depend on tools or fixtures absent from the current environment.
Common situations: CI gating on skill repos; third-party skills whose tests assume binaries not on PATH; environment drift between the dev machine and the CI runner.
Related errors
- cli-skills-multiple-locations-path
- cli-skills-agent-not-configured
- cli-skills-audit-failed
- cli-skills-install-skill-requires-git
- Invalid skill name: {name}
AI-assisted analysis of zeroclaw-labs/zeroclaw@88bb9c8533 (2026-08-23).
Data as JSON: /api/errors/717012d465994030.
Report an issue: GitHub.