{"record":{"id":"d3105edcfee9f608","repo":"zeroclaw-labs/zeroclaw","slug":"proxy-is-enabled-but-no-proxy-url-is-configured-s","errorCode":null,"errorMessage":"Proxy is enabled but no proxy URL is configured. Set at least one of http_proxy, https_proxy, or all_proxy","messagePattern":"Proxy is enabled but no proxy URL is configured\\. Set at least one of http_proxy, https_proxy, or all_proxy","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-config/src/schema.rs","lineNumber":9869,"sourceCode":"            (\"http_proxy\", self.http_proxy.as_deref()),\n            (\"https_proxy\", self.https_proxy.as_deref()),\n            (\"all_proxy\", self.all_proxy.as_deref()),\n        ] {\n            if let Some(url) = normalize_proxy_url_option(value) {\n                validate_proxy_url(field, &url)?;\n            }\n        }\n\n        for selector in self.normalized_services() {\n            if !is_supported_proxy_service_selector(&selector) {\n                anyhow::bail!(\n                    \"Unsupported proxy service selector '{selector}'. Use tool `proxy_config` action `list_services` for valid values\"\n                );\n            }\n        }\n\n        if self.enabled && !self.has_any_proxy_url() {\n            anyhow::bail!(\n                \"Proxy is enabled but no proxy URL is configured. Set at least one of http_proxy, https_proxy, or all_proxy\"\n            );\n        }\n\n        if self.enabled\n            && self.scope == ProxyScope::Services\n            && self.normalized_services().is_empty()\n        {\n            anyhow::bail!(\n                \"proxy.scope='services' requires a non-empty proxy.services list when proxy is enabled\"\n            );\n        }\n\n        Ok(())\n    }\n\n    pub fn should_apply_to_service(&self, service_key: &str) -> bool {\n        if !self.enabled {","sourceCodeStart":9851,"sourceCodeEnd":9887,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-config/src/schema.rs#L9851-L9887","documentation":"ProxyConfig::validate requires that an enabled proxy have at least one URL among http_proxy, https_proxy, or all_proxy after normalization — blank strings do not count. An enabled proxy with nothing to route through is treated as a configuration bug rather than silently ignored.","triggerScenarios":"proxy.enabled = true with all three URL fields absent, empty, or whitespace-only. Because normalization runs first, http_proxy = \"\" does not satisfy the check.","commonSituations":"Flipping proxy.enabled in a template before filling in the URL; toggling proxy on to experiment; configs whose proxy URL came from an env expansion that produced an empty string.","solutions":["Set at least one URL, e.g. all_proxy = \"http://127.0.0.1:7890\" (or http_proxy/https_proxy as appropriate).","If you did not mean to route through a proxy, set proxy.enabled = false.","Verify the URL is well-formed (scheme and host present) so validation proceeds past the URL checks."],"exampleFix":"# before\n[proxy]\nenabled = true\n\n# after\n[proxy]\nenabled = true\nall_proxy = \"http://127.0.0.1:7890\"","handlingStrategy":"validation","validationCode":"// mirror has_any_proxy_url: normalization means blank strings do not count\nlet has_url = [\"http_proxy\", \"https_proxy\", \"all_proxy\"]\n    .iter()\n    .any(|k| cfg_value(k).map_or(false, |v| !v.trim().is_empty()));\nif cfg.proxy.enabled && !has_url { /* set a URL or disable proxy before validate() */ }","typeGuard":"fn proxy_ready(enabled: bool, urls: &[Option<String>]) -> bool {\n    !enabled || urls.iter().any(|u| u.as_deref().map_or(false, |v| !v.trim().is_empty()))\n}","tryCatchPattern":"match cfg.proxy.validate() {\n    Err(e) if e.to_string().contains(\"no proxy URL is configured\") => {\n        // set all_proxy (or http/https_proxy), or set enabled = false\n    }\n    other => other,\n}","preventionTips":["Never enable the proxy block without at least one URL in the same change.","Treat empty-string URL fields as unset — normalization discards them.","Validate the proxy block in CI for templated configs."],"tags":["proxy","config","validation"],"backgroundTag":"proxy-enabled-without-url","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}