sipeed/picoclaw · error
✗ Skill '%s' is flagged as malicious and cannot be installed
Error message
✗ Skill '%s' is flagged as malicious and cannot be installed.
What it means
The registry's malware scan flagged the skill: result.IsMalwareBlocked was true after download, so installation is refused, the partial directory is removed, and the skill cannot be installed through this path. This is a deliberate security stop, not a bug.
Source
Thrown at cmd/picoclaw/internal/skills/helpers.go:100
return fmt.Errorf("\u2717 failed to create skills directory: %w", err)
}
result, err := registry.DownloadAndInstall(ctx, target, "", targetDir)
if err != nil {
rmErr := os.RemoveAll(targetDir)
if rmErr != nil {
fmt.Printf("\u2717 Failed to remove partial install: %v\n", rmErr)
}
return fmt.Errorf("✗ failed to install skill: %w", err)
}
if result.IsMalwareBlocked {
rmErr := os.RemoveAll(targetDir)
if rmErr != nil {
fmt.Printf("\u2717 Failed to remove partial install: %v\n", rmErr)
}
return fmt.Errorf("\u2717 Skill '%s' is flagged as malicious and cannot be installed.\n", target)
}
if result.IsSuspicious {
fmt.Printf("\u26a0\ufe0f Warning: skill '%s' is flagged as suspicious.\n", target)
}
if !workspaceHasValidSkillDirectory(workspace, dirName) {
_ = os.RemoveAll(targetDir)
return fmt.Errorf("✗ failed to install skill: registry archive for %q is not a valid skill", target)
}
normalizedSlug, registryURL := skills.BuildInstallMetadataForRegistryInstance(registry, target, result.Version)
installedAt := time.Now().UnixMilli()
if err := writeInstalledSkillOriginMeta(targetDir, installedSkillOriginMeta{
Version: 1,
OriginKind: "third_party",
Registry: registry.Name(),
Slug: normalizedSlug,View on GitHub (pinned to 49183d7e8d)
Solutions
- Do not bypass the block — inspect the skill's source on the registry first.
- If it looks like a false positive, report it to the registry maintainers and wait for a clean scan.
- Choose an alternative skill with similar functionality.
- Audit the skill's scripts (SKILL.md and any shell/code files) before considering any manual install.
Defensive patterns
Strategy: try-catch
Try / catch
if err != nil && strings.Contains(err.Error(), "flagged as malicious") {
// hard stop: surface for human review — never retry or bypass
return fmt.Errorf("install blocked by malware scan: %w", err)
} Prevention
- Never script a bypass of malware blocks; treat them as a hard stop.
- Prefer registries with active scanning and a reporting loop.
- Review a skill's SKILL.md and scripts before installing it anywhere sensitive.
When it happens
Trigger: The downloaded skill's files match the registry scanner's malware signatures/heuristics, setting result.IsMalwareBlocked at helpers.go:100.
Common situations: A genuinely malicious skill published to the registry, or a false positive on scripts that shell out, download files, or use obfuscated payloads.
Related errors
- ✗ invalid install target %q: %w
- ✗ failed to install skill: %w
- ✗ failed to install skill: registry archive for %q is not a
- ✗ invalid registry name: %w
- ✗ registry '%s' not found or not enabled. check your config
AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15).
Data as JSON: /api/errors/7bc1e148180c4573.
Report an issue: GitHub.