{"record":{"id":"6a91d731580c953e","repo":"aaif-goose/goose","slug":"failed-to-open-recipe","errorCode":null,"errorMessage":"Failed to open recipe: {}","messagePattern":"Failed to open recipe: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"crates/goose-cli/src/commands/recipe.rs","lineNumber":87,"sourceCode":"            Ok(_) => {\n                writeln!(\n                    out,\n                    \"{} Opened recipe '{}' in Goose Desktop\",\n                    style(\"✓\").green().bold(),\n                    recipe.title\n                )?;\n                Ok(())\n            }\n            Err(err) => {\n                writeln!(\n                    out,\n                    \"{} Failed to open recipe in Goose Desktop: {}\",\n                    style(\"✗\").red().bold(),\n                    err\n                )?;\n                writeln!(out, \"Generated deeplink: {}\", deeplink_url)?;\n                writeln!(out, \"You can manually copy and open the URL above, or ensure Goose Desktop is installed.\")?;\n                Err(anyhow::anyhow!(\"Failed to open recipe: {}\", err))\n            }\n        },\n        Err(err) => {\n            writeln!(\n                out,\n                \"{} Failed to encode recipe: {}\",\n                style(\"✗\").red().bold(),\n                err\n            )?;\n            Err(err)\n        }\n    }\n}\n\npub fn handle_list(format: &str, verbose: bool) -> Result<()> {\n    let recipes = match list_available_recipes() {\n        Ok(recipes) => recipes,\n        Err(e) => {","sourceCodeStart":69,"sourceCodeEnd":105,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose-cli/src/commands/recipe.rs#L69-L105","documentation":"After generating a `goose://recipe?config=...` deeplink, the open handler asks the OS to open it via the registered URL-scheme handler so Goose Desktop loads the recipe. When that open call fails — typically because no goose:// handler is registered — the command errors, but the deeplink URL has already been printed for manual use.","triggerScenarios":"Running the open-in-desktop recipe command on a machine without Goose Desktop installed, or where the app has not registered the goose:// scheme (fresh install never launched, Linux missing the xdg desktop entry).","commonSituations":"CLI-only installs; remote/SSH workstations with no desktop session; Linux distributions with incomplete desktop integration; desktop app installed but never started.","solutions":["Copy the printed `goose://recipe?config=...` URL and open it manually in a browser or Goose Desktop","Install Goose Desktop and launch it once so the OS registers the goose:// scheme","On Linux, ensure the .desktop file declares x-scheme-handler/goose and run `update-desktop-database`"],"exampleFix":"# Fallback when the handler is missing:\n# 1) copy the 'Generated deeplink:' URL from the error output\n# 2) open it in a browser or paste into Goose Desktop","handlingStrategy":"fallback","validationCode":"# Check a goose:// handler exists before attempting desktop open\nxdg-mime query default x-scheme-handler/goose 2>/dev/null \\\n  || echo 'no goose:// handler registered: use the printed deeplink manually'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Install and launch Goose Desktop once before scripting opens","Always capture the printed deeplink in logs as the manual fallback","Prefer file-based recipe sharing on CLI-only machines"],"tags":["recipe","deeplink","desktop","cli","integration"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}