{"record":{"id":"3ff85865d6fa88d0","repo":"zeroclaw-labs/zeroclaw","slug":"tavily-api-key-not-configured-decrypted-value-is","errorCode":null,"errorMessage":"Tavily API key not configured (decrypted value is empty)","messagePattern":"Tavily API key not configured \\(decrypted value is empty\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-tools/src/web_search_tool.rs","lineNumber":368,"sourceCode":"            .filter(|k| !k.is_empty())\n            .ok_or_else(|| {\n                ::zeroclaw_log::record!(\n                    ERROR,\n                    ::zeroclaw_log::Event::new(module_path!(), ::zeroclaw_log::Action::Reject)\n                        .with_outcome(::zeroclaw_log::EventOutcome::Failure)\n                        .with_attrs(::serde_json::json!({\"search_provider\": \"tavily\"})),\n                    \"web_search: Tavily API key not configured\"\n                );\n                anyhow::Error::msg(\"Tavily API key not configured\")\n            })?;\n\n        if zeroclaw_config::secrets::SecretStore::is_encrypted(&raw_key) {\n            let zeroclaw_dir = self.config_path.parent().unwrap_or_else(|| Path::new(\".\"));\n            let store =\n                zeroclaw_config::secrets::SecretStore::new(zeroclaw_dir, self.secrets_encrypt);\n            let plaintext = store.decrypt(&raw_key)?;\n            if plaintext.is_empty() {\n                anyhow::bail!(\"Tavily API key not configured (decrypted value is empty)\");\n            }\n            Ok(plaintext)\n        } else {\n            Ok(raw_key)\n        }\n    }\n\n    async fn search_tavily(&self, query: &str) -> anyhow::Result<String> {\n        let client = self.build_tavily_client()?;\n        self.search_tavily_with_client(&client, \"https://api.tavily.com/search\", query)\n            .await\n    }\n\n    fn build_tavily_client(&self) -> anyhow::Result<reqwest::Client> {\n        let builder = reqwest::Client::builder().timeout(Duration::from_secs(self.timeout_secs));\n        let builder =\n            zeroclaw_config::schema::apply_runtime_proxy_to_builder(builder, \"tool.web_search\");\n        Ok(builder.build()?)","sourceCodeStart":350,"sourceCodeEnd":386,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-tools/src/web_search_tool.rs#L350-L386","documentation":"Error \"Tavily API key not configured (decrypted value is empty)\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-tools/src/web_search_tool.rs:368 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set the Tavily API key: `zeroclaw config set tools.web_search.tavily.api_key <key>` or re-run `zeroclaw quickstart`.","Check that the stored encrypted key decrypts to a non-empty value and re-enter it if necessary."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}