aaif-goose/goose · error
No recipe file found in {} (looked for extensions: {:?})
Error message
No recipe file found in {} (looked for extensions: {:?}) What it means
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.
Source
Thrown at crates/goose-cli/src/recipes/github_recipe.rs:92
Ok(())
}
fn read_recipe_file(download_dir: &Path) -> Result<(String, PathBuf)> {
for ext in RECIPE_FILE_EXTENSIONS {
let candidate_file_path = download_dir.join(format!("recipe.{}", ext));
if candidate_file_path.exists() {
let content = fs::read_to_string(&candidate_file_path)?;
println!(
"⬇️ Retrieved recipe file: {}",
candidate_file_path
.strip_prefix(download_dir)
.unwrap()
.display()
);
return Ok((content, candidate_file_path));
}
}
Err(anyhow::anyhow!(
"No recipe file found in {} (looked for extensions: {:?})",
download_dir.display(),
RECIPE_FILE_EXTENSIONS
))
}
fn clone_and_download_recipe(recipe_name: &str, recipe_repo_full_name: &str) -> Result<PathBuf> {
let local_repo_path = ensure_repo_cloned(recipe_repo_full_name)?;
fetch_origin(&local_repo_path)?;
get_folder_from_github(&local_repo_path, recipe_name)
}
pub fn ensure_gh_authenticated() -> Result<()> {
// Check authentication status
let status = Command::new("gh")
.args(["auth", "status"])
.set_no_window()
.status()View on GitHub (pinned to 3810898a74)
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
Defensive patterns
Strategy: validation
Validate before calling
# Before running, confirm the repo folder ships a discoverable recipe file gh api repos/$GOOSE_RECIPE_GITHUB_REPO/contents/$RECIPE_NAME --jq '.[].name' \ | grep -Eq '^recipe\.(yaml|yml|json|toml)$' || echo "missing recipe.<ext>"
Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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).
Related errors
- Could not retrieve sub-recipe '{}': {}
- Unknown error occurred
- Invalid repository name format
- Failed to access directory: {}
- Failed to parse directory contents: {}
AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16).
Data as JSON: /api/errors/cd0bda1752f21b4d.
Report an issue: GitHub.