{"record":{"id":"4d900e75021319c6","repo":"tinyhumansai/openhuman","slug":"install-workflow-from-url-e","errorCode":null,"errorMessage":"install_workflow_from_url: {e}","messagePattern":"install_workflow_from_url: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/skills/tools.rs","lineNumber":645,"sourceCode":"        })\n    }\n\n    fn permission_level(&self) -> PermissionLevel {\n        PermissionLevel::Write\n    }\n\n    fn external_effect(&self) -> bool {\n        // Fetches remote content over the network.\n        true\n    }\n\n    async fn execute(&self, args: serde_json::Value) -> anyhow::Result<ToolResult> {\n        log::debug!(\"[tool][skills] install_from_url invoked\");\n        let params: InstallWorkflowFromUrlParams = serde_json::from_value(args)\n            .map_err(|e| anyhow::anyhow!(\"install_workflow_from_url: invalid params: {e}\"))?;\n        let outcome = install_workflow_from_url(&self.workspace_dir, params)\n            .await\n            .map_err(|e| anyhow::anyhow!(\"install_workflow_from_url: {e}\"))?;\n        Ok(ToolResult::success(serde_json::to_string(&outcome)?))\n    }\n}\n\n/// Uninstall a user skill. **Deletes from disk** — default-OFF.\npub struct WorkflowUninstallTool;\n\n#[async_trait]\nimpl Tool for WorkflowUninstallTool {\n    fn name(&self) -> &str {\n        \"uninstall_workflow\"\n    }\n\n    fn description(&self) -> &str {\n        \"Uninstall a user-scope workflow by `name`, deleting its directory under \\\n         `~/.openhuman/skills/`. Irreversible; project/legacy workflows are \\\n         read-only and cannot be removed. Only use when the user asks to remove \\\n         a specific workflow.\"","sourceCodeStart":627,"sourceCodeEnd":663,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/skills/tools.rs#L627-L663","documentation":"Generic wrapper from install_workflow_from_url: after params parsed, fetching the remote bundle, validating its manifest, or writing it into the skills directory failed. The underlying {e} carries the real cause (network failure, invalid bundle, install refusal).","triggerScenarios":"Thrown at src/openhuman/skills/tools.rs:645 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Read {e}: network errors suggest retrying or fixing the URL","Verify the URL serves a valid workflow bundle (SKILL.md/manifest present)","Check that the install scope directory is writable","Retry transient network failures with the timeout_secs parameter"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}