Skip to content

Conversation

@Abhijay007
Copy link
Collaborator

Closes: #5293

Pull Request Description

This PR addresses an issue where running goose recipe list resulted in duplicate recipe entries when the GOOSE_RECIPE_PATH environment variable was set to the same directory as the default global recipe directory (~/.config/goose/recipes).

The root cause was that the duplication occurred because the local_recipe_dirs() function aggregates recipe directories from multiple sources: the current working directory, directories specified via GOOSE_RECIPE_PATH, the global recipe directory, and local project-specific recipe directories. When GOOSE_RECIPE_PATH pointed to the default global recipe directory, the same path was included more than once. Since these paths were not normalized before being processed, the application scanned the same directory multiple times, resulting in duplicate entries when listing recipes.

Changes Made

To resolve this issue, deduplication logic was added to the local_recipe_dirs() function. The solution works as follows:

  • Canonicalize paths: Convert all collected paths into their absolute canonical forms (resolving symlinks and normalization like . and ..).
  • Sort paths: Ensure paths are sorted so duplicates are adjacent.
  • Remove duplicates: Use dedup() to eliminate repeated entries.

This ensures that each recipe directory is processed exactly once.

NOTE: this could be solved with HashSet too, but I saw that sort and dedup is used in lead_worked.rs so I used a similar approach

Type of Change

  • Bug fix

AI Assistance

  • This PR was created or reviewed with AI assistance - used Goose for approach validation

Testing

Tested with the same command shared in the issue

GOOSE_RECIPE_PATH="$HOME/.config/goose/recipes" goose recipe list --format json | jq   

@Abhijay007 Abhijay007 requested review from DOsinga and Copilot and removed request for Copilot November 9, 2025 17:45
Copy link
Collaborator

@DOsinga DOsinga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suppose this can still create dupes through github, but hey, this is a great improvement

@DOsinga DOsinga merged commit 0d65c81 into block:main Nov 10, 2025
20 checks passed
@Abhijay007
Copy link
Collaborator Author

I suppose this can still create dupes through github, but hey, this is a great improvement

okay I will look into this, thanks for the feedback :)

@DOsinga
Copy link
Collaborator

DOsinga commented Nov 10, 2025

nah, don't worry about it. that's just nitpicking

Rodriguespn pushed a commit to Rodriguespn/goose that referenced this pull request Nov 10, 2025
tiensi added a commit to tiensi/goose that referenced this pull request Nov 11, 2025
* main: (83 commits)
  silence copilot on minor text issues (block#5665)
  fix: disallow runaway subagent chains (block#5659)
  chore: remove usage of non-existent env var for log dir (block#5658)
  clarify agent instructions (block#5655)
  feat: add check-everything for unified style checks (block#5650)
  Show errors on failure (block#5643)
  custom instructions for copilot reviews (block#5646)
  fix: prevent repeated 404 errors when accessing deleted sessions (block#5644)
  Flake.nix corrected main (block#5600)
  fix: goose recipe list can return duplicated entries (block#5645)
  fix: bedrock creds refresh (block#5599)
  Fix Claude Code provider to default to Auto mode (block#5638) (block#5642)
  Scheduler cleanup (block#5571)
  Better search paths and handling of CLI providers (block#5554)
  docs: description required for "Add Extension" in cli - phase 2 (block#5635)
  Remove some logging (block#5631)
  Use session IDs as task IDs for subagents instead of UUIDs (block#5398)
  Fix the naming (block#5628)
  fix: default tetrate model is broken, replace with haiku-4.5 (block#5535) (block#5587)
  Fetch less and use the right SHA (block#5621)
  ...
michaelneale added a commit that referenced this pull request Nov 11, 2025
* main:
  silence copilot on minor text issues (#5665)
  fix: disallow runaway subagent chains (#5659)
  chore: remove usage of non-existent env var for log dir (#5658)
  clarify agent instructions (#5655)
  feat: add check-everything for unified style checks (#5650)
  Show errors on failure (#5643)
  custom instructions for copilot reviews (#5646)
  fix: prevent repeated 404 errors when accessing deleted sessions (#5644)
  Flake.nix corrected main (#5600)
  fix: goose recipe list can return duplicated entries (#5645)
  fix: bedrock creds refresh (#5599)
Surendhar-N-D pushed a commit to Surendhar-N-D/goose that referenced this pull request Nov 17, 2025
arul-cc pushed a commit to arul-cc/goose that referenced this pull request Nov 17, 2025
BlairAllan pushed a commit to BlairAllan/goose that referenced this pull request Nov 29, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

goose recipe list can return duplicated entries

2 participants