Recipe snapshots stored in session history fail Goose's own template validation, blocking recipes from loading in Desktop
- 主要言語
- Rust
- スター
- 54.2k
- フォーク
- 6.2k
- 平均マージ
- 3日 2時間
- マージ済み PR(30日)
- 262
説明
Version: goose 1.45.0 (Homebrew CLI and Desktop cask, both), macOS 15 (Intel)
Summary
Running a recipe that declares parameters stores a rendered copy of that recipe in the session row's recipe_json — all {{ }} substituted — while retaining the parameters: block. Goose Desktop re-validates that stored copy as a template. Because a rendered copy references no parameters, validation fails with Unnecessary parameter definitions: and the recipe cannot be opened in the GUI. The recipe file on disk remains valid; only the stored snapshot is rejected.
Reproduction
Write a recipe declaring a parameter message, referenced as prompt: "{{ message }}".
goose recipe validate recipe.yaml → valid.
goose run --recipe recipe.yaml --params message="hello" → runs normally.
Read that session's recipe_json from ~/.local/share/goose/sessions/sessions.db: the parameters block is present, and no {{ }} remain in instructions or prompt.
Write that stored JSON back out as YAML and run goose recipe validate on it → fails with Unnecessary parameter definitions: message.
In Goose Desktop, the affected recipe fails to load with the same message.
Expected
A recipe that ran successfully should remain loadable. Either the snapshot should preserve the unrendered template, or the "declared parameter must be referenced" check should not apply to an already-rendered snapshot.
Actual
Every parameterized recipe becomes unloadable in Desktop once it has been run — the more often it runs, the sooner it surfaces. On this machine the three most-used recipes (7, 7 and 5 stored snapshots) failed first, while less-used ones with identical structure had not yet been noticed.
Affected here
Subagent Coordinator, Research Subagent, Shopping / Purchase Decisions (user-reported); Capability Scout, File Cleanup and Local Only shared the same latent defect. 29 stored snapshots total.
Contributing factor worth noting
goose run --recipe cannot be combined with --text (the argument '--recipe' cannot be used with '--text'), so passing a message to a recipe requires declaring a parameter and using --params. That makes parameterized recipes the normal case rather than an edge case, which widens this bug's blast radius.
Workaround confirmed working
Removing the inert parameters block from the stored recipe_json makes the snapshot validate and the recipe load again; conversation history is unaffected.
コントリビューションガイド
評価
この issue はまだ評価されていません。