{"record":{"id":"ba14afbce40df62e","repo":"zeroclaw-labs/zeroclaw","slug":"no-cli-tools-found-in-path","errorCode":null,"errorMessage":"No CLI tools found in PATH","messagePattern":"No CLI tools found in PATH","errorType":"console","errorClass":"DiagItem","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":1781,"sourceCode":"            crate::i18n::get_required_cli_string_with_args(\n                \"cli-doctor-systemd-linger-disabled\",\n                &[(\"user\", user.as_str())],\n            ),\n        ),\n        crate::service::SystemdUserLinger::Unknown => DiagItem::warn(\n            cat,\n            crate::i18n::get_required_cli_string(\"cli-doctor-systemd-linger-unknown\"),\n        ),\n    }\n}\n\nfn check_cli_tools(items: &mut Vec<DiagItem>) {\n    let cat = \"cli-tools\";\n\n    let discovered = crate::tools::discover_cli_tools(&[], &[]);\n\n    if discovered.is_empty() {\n        items.push(DiagItem::warn(cat, \"No CLI tools found in PATH\"));\n    } else {\n        for cli in &discovered {\n            let version_info = cli\n                .version\n                .as_deref()\n                .map(|v| truncate_for_display(v, COMMAND_VERSION_PREVIEW_CHARS))\n                .unwrap_or_else(|| \"unknown version\".to_string());\n            items.push(DiagItem::ok(\n                cat,\n                format!(\"{} ({}) — {}\", cli.name, cli.category, version_info),\n            ));\n        }\n        items.push(DiagItem::ok(\n            cat,\n            format!(\"{} CLI tools discovered\", discovered.len()),\n        ));\n    }\n}","sourceCodeStart":1763,"sourceCodeEnd":1799,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L1763-L1799","documentation":"A `zeroclaw doctor` warning from `check_cli_tools`: `zeroclaw_runtime::tools::discover_cli_tools(&[], &[])` found zero supported CLI tools on PATH. ZeroClaw lets agents shell out to discovered tools (jq, git, curl, etc.); with none available, tool-augmented workflows silently lose that surface. The daemon itself still runs.","triggerScenarios":"Running `zeroclaw doctor` in an environment where none of the tools zeroclaw knows how to discover are on PATH — minimal containers, hardened server images, or a systemd unit with a stripped PATH.","commonSituations":"Deployment images pruned to the minimum; PATH not including `/usr/local/bin` in service contexts; developers relying purely on provider APIs and not noticing the missing tooling.","solutions":["Install at least one supported CLI tool into the image/host (e.g. `jq`, `git`, `curl`).","If tools are installed but not found, fix PATH for the context doctor runs in (unit `Environment=PATH=...`, container ENV).","For API-only setups with no shelling-out intended, accept the warning."],"exampleFix":"# before: doctor -> \"No CLI tools found in PATH\"\n\n# after (Debian/Ubuntu image)\napt-get update && apt-get install -y --no-install-recommends jq git curl","handlingStrategy":"fallback","validationCode":"if zeroclaw_runtime::tools::discover_cli_tools(&[], &[]).is_empty() {\n    eprintln!(\"no CLI tools on PATH — tool-based agent skills will be unavailable\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Bake at least jq/git/curl into deployment images by default.","Set an explicit PATH in service units so discovery sees installed tools."],"tags":["cli-tools","path","doctor","containers","zeroclaw"],"backgroundTag":"tool-not-in-path","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}