{"record":{"id":"cd0bda1752f21b4d","repo":"aaif-goose/goose","slug":"no-recipe-file-found-in-looked-for-extensions","errorCode":null,"errorMessage":"No recipe file found in {} (looked for extensions: {:?})","messagePattern":"No recipe file found in (.+?) \\(looked for extensions: (.+?)\\)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/goose-cli/src/recipes/github_recipe.rs","lineNumber":92,"sourceCode":"    Ok(())\n}\nfn read_recipe_file(download_dir: &Path) -> Result<(String, PathBuf)> {\n    for ext in RECIPE_FILE_EXTENSIONS {\n        let candidate_file_path = download_dir.join(format!(\"recipe.{}\", ext));\n        if candidate_file_path.exists() {\n            let content = fs::read_to_string(&candidate_file_path)?;\n            println!(\n                \"⬇️  Retrieved recipe file: {}\",\n                candidate_file_path\n                    .strip_prefix(download_dir)\n                    .unwrap()\n                    .display()\n            );\n            return Ok((content, candidate_file_path));\n        }\n    }\n\n    Err(anyhow::anyhow!(\n        \"No recipe file found in {} (looked for extensions: {:?})\",\n        download_dir.display(),\n        RECIPE_FILE_EXTENSIONS\n    ))\n}\n\nfn clone_and_download_recipe(recipe_name: &str, recipe_repo_full_name: &str) -> Result<PathBuf> {\n    let local_repo_path = ensure_repo_cloned(recipe_repo_full_name)?;\n    fetch_origin(&local_repo_path)?;\n    get_folder_from_github(&local_repo_path, recipe_name)\n}\n\npub fn ensure_gh_authenticated() -> Result<()> {\n    // Check authentication status\n    let status = Command::new(\"gh\")\n        .args([\"auth\", \"status\"])\n        .set_no_window()\n        .status()","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/aaif-goose/goose/blob/3810898a7447ec3299be72e223d3570a7aabf0ab/crates/goose-cli/src/recipes/github_recipe.rs#L74-L110","documentation":"After goose clones the configured recipe repo, fetches origin, and extracts the requested folder via `git archive`, read_recipe_file scans the download directory for a file named recipe.<ext> where ext is one of goose::recipe::RECIPE_FILE_EXTENSIONS (crates/goose-cli/src/recipes/github_recipe.rs:76-97). If none exists, this error lists the searched directory and the accepted extensions.","triggerScenarios":"Running a recipe resolved from GOOSE_RECIPE_GITHUB_REPO where the target folder has no recipe.yaml/yml/... file: the folder exists in the repo but the file is misnamed (e.g. recipes.yaml, recipe.yml vs supported list), sits in a nested subfolder, or the recipe_name points at the wrong directory.","commonSituations":"Recipe repo layout drifted (file renamed or moved), a typo in the recipe name making git archive extract a different/empty tree, or new extensions added upstream that an older goose binary does not know (version skew between goose and the recipe repo).","solutions":["Open the searched directory shown in the error and confirm what the recipe file is actually named; rename it to recipe.<supported ext> (check the listed RECIPE_FILE_EXTENSIONS)","Verify the recipe_name exactly matches the folder path in the repo so the right tree gets extracted","Upgrade goose if the repo uses a recipe file extension newer than your binary supports"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"# Before running, confirm the repo folder ships a discoverable recipe file\ngh api repos/$GOOSE_RECIPE_GITHUB_REPO/contents/$RECIPE_NAME --jq '.[].name' \\\n  | grep -Eq '^recipe\\.(yaml|yml|json|toml)$' || echo \"missing recipe.<ext>\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Name recipe files exactly recipe.<ext> at the folder root in the recipe repo","Add a CI check on the recipe repo that every recipe folder contains a supported recipe file","Keep goose updated so newly supported extensions are recognized"],"tags":["goose-cli","recipes","github","file-not-found"],"backgroundTag":null,"analyzedSha":"3810898a7447ec3299be72e223d3570a7aabf0ab","analyzedAt":"2026-08-16T10:14:26.282Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}