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

  1. 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)
  2. Verify the recipe_name exactly matches the folder path in the repo so the right tree gets extracted
  3. 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

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


AI-assisted analysis of aaif-goose/goose@3810898a74 (2026-08-16). Data as JSON: /api/errors/cd0bda1752f21b4d. Report an issue: GitHub.