Skip to content

Conversation

@tlongwell-block
Copy link
Collaborator

Fixes incorrect handling of recipe.instructions and recipe.prompt in the subagent system. Previously, both fields were merged together and used for BOTH the system prompt AND the first user message, which was redundant and semantically incorrect.

The Bug

In subagent_tool.rs, the build_subrecipe() function merged prompt into instructions:

// Before: prompt was appended to instructions
combined.push_str(prompt);
recipe.instructions = Some(combined);

Then in subagent_handler.rs, this merged blob was used for both:

  • The system prompt template (task_instructions)
  • The user message (Message::user().with_text(...))

The Fix

  • instructions → system prompt (agent personality/role/guidelines)
  • prompt → user message (the actual task to execute)

This matches how the CLI handles recipes in extract_from_cli.rs.

Changes

File Change
subagent_tool.rs Remove merge logic; only append parent's extra instructions
subagent_handler.rs Use instructions for system prompt, prompt for user message
subagent_system.md Conditional rendering for empty instructions

Backward Compatibility

  • Recipes with only instructions still work (used for both, as before)
  • Recipes with only prompt still work
  • Ad-hoc subagents (instructions parameter only) still work
  • Augmented mode (subrecipe + extra instructions) still works

@tlongwell-block tlongwell-block changed the title fix: use instructions for system prompt and prompt for user message i… fix: use instructions for system prompt and prompt for user message in subagents Dec 15, 2025
@tlongwell-block
Copy link
Collaborator Author

/goose give me a minimal review on this change

@github-actions
Copy link
Contributor

Summary

This PR correctly separates instructions (system prompt) from prompt (user message) in the subagent system, aligning with how the CLI handles recipes. The fix eliminates redundant duplication and maintains backward compatibility.

🔴 Blocking Issues

None found.

🟡 Warnings

None found.

🟢 Suggestions

None.

✅ Highlights

  • Clean separation of concerns: instructions → system prompt, prompt → user message matches CLI behavior (crates/goose-cli/src/recipes/extract_from_cli.rs)
  • Backward compatibility preserved: Line 124 in subagent_handler.rs gracefully falls back to instructions when prompt is absent
  • Defensive template rendering: The {% if task_instructions %} guard prevents empty sections in the system prompt
  • Simplified logic: Removed unnecessary string concatenation in subagent_tool.rs, making the code more maintainable

Review generated by goose

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 think goose missed this?

@katzdave katzdave self-requested a review December 16, 2025 19:06
@tlongwell-block tlongwell-block merged commit 6d33cbc into main Dec 16, 2025
21 of 22 checks passed
@tlongwell-block tlongwell-block deleted the recipe_instructions_bug branch December 16, 2025 19:53
zanesq added a commit that referenced this pull request Dec 16, 2025
…s-predefined-models

* 'main' of github.com:block/goose: (81 commits)
  fix: display shell output as static text instead of spinner (#6041)
  fix : Custom providers with empty API keys show as configured in desktop (#6105)
  Add .agents/skills and ~/.config/agent/skills to skills discovery paths (#6139)
  fix: use instructions for system prompt and prompt for user message in subagents (#6121)
  Fix compaction loop for small models or large input (#5803)
  feat: Centralize theme management with ThemeContext (#6137)
  OpenRouter & Xai streaming (#5873)
  fix: resolve mcp-hermit cleanup path expansion issue (#5953)
  feat: add goose PR reviewer workflow (#6124)
  perf: Avoid repeated MCP queries during streaming responses (#6138)
  Fix YAML serialization for recipes with special characters (#5796)
  Add more posthog analytics (privacy aware) (#6122)
  docs: add Sugar MCP server to extensions registry (#6077)
  Fix tokenState loading on new sessions (#6129)
  bump bedrock dep versions (#6090)
  Don't persist ephemeral extensions when resuming sessions (#5974)
  chore(deps): bump mdast-util-to-hast from 13.2.0 to 13.2.1 in /ui/desktop (#5939)
  chore(deps): bump node-forge from 1.3.1 to 1.3.2 in /documentation (#5898)
  Add Scorecard supply-chain security workflow (#5810)
  Don't show subagent tool when we're a subagent (#6125)
  ...

# Conflicts:
#	crates/goose/src/providers/formats/databricks.rs
aharvard added a commit that referenced this pull request Dec 17, 2025
* main:
  fix: we don't need to warn about tool count when in code mode (#6149)
  deps: upgrade agent-client-protocol to 0.9.0 (#6109)
  fix(providers): fix for gemini-cli on windows to work around cmd's multiline prompt limitations #5911 (#5966)
  More slash commands (#5858)
  fix: MCP UI not rendering due to CallToolResult structure change (#6143)
  fix: display shell output as static text instead of spinner (#6041)
  fix : Custom providers with empty API keys show as configured in desktop (#6105)
  Add .agents/skills and ~/.config/agent/skills to skills discovery paths (#6139)
  fix: use instructions for system prompt and prompt for user message in subagents (#6121)
  Fix compaction loop for small models or large input (#5803)
  feat: Centralize theme management with ThemeContext (#6137)
  OpenRouter & Xai streaming (#5873)
  fix: resolve mcp-hermit cleanup path expansion issue (#5953)
  feat: add goose PR reviewer workflow (#6124)
  perf: Avoid repeated MCP queries during streaming responses (#6138)
  Fix YAML serialization for recipes with special characters (#5796)
  Add more posthog analytics (privacy aware) (#6122)
  docs: add Sugar MCP server to extensions registry (#6077)
dianed-square added a commit that referenced this pull request Dec 17, 2025
* origin/main: (57 commits)
  docs: create/edit recipe button (#6145)
  fix(google): Fix 400 Bad Request error with Gemini 3 thought signatures (#6035)
  fix: we don't need to warn about tool count when in code mode (#6149)
  deps: upgrade agent-client-protocol to 0.9.0 (#6109)
  fix(providers): fix for gemini-cli on windows to work around cmd's multiline prompt limitations #5911 (#5966)
  More slash commands (#5858)
  fix: MCP UI not rendering due to CallToolResult structure change (#6143)
  fix: display shell output as static text instead of spinner (#6041)
  fix : Custom providers with empty API keys show as configured in desktop (#6105)
  Add .agents/skills and ~/.config/agent/skills to skills discovery paths (#6139)
  fix: use instructions for system prompt and prompt for user message in subagents (#6121)
  Fix compaction loop for small models or large input (#5803)
  feat: Centralize theme management with ThemeContext (#6137)
  OpenRouter & Xai streaming (#5873)
  fix: resolve mcp-hermit cleanup path expansion issue (#5953)
  feat: add goose PR reviewer workflow (#6124)
  perf: Avoid repeated MCP queries during streaming responses (#6138)
  Fix YAML serialization for recipes with special characters (#5796)
  Add more posthog analytics (privacy aware) (#6122)
  docs: add Sugar MCP server to extensions registry (#6077)
  ...
katzdave added a commit that referenced this pull request Dec 17, 2025
…icing

* 'main' of github.com:block/goose: (35 commits)
  docs: skills (#6062)
  fix: add conditional configuration for GOOSE_BIN_DIR in PATH (#5940)
  Update dependencies to help in Fedora packaging (#5835)
  fix: make goose reviewer less bad (#6154)
  docs: create/edit recipe button (#6145)
  fix(google): Fix 400 Bad Request error with Gemini 3 thought signatures (#6035)
  fix: we don't need to warn about tool count when in code mode (#6149)
  deps: upgrade agent-client-protocol to 0.9.0 (#6109)
  fix(providers): fix for gemini-cli on windows to work around cmd's multiline prompt limitations #5911 (#5966)
  More slash commands (#5858)
  fix: MCP UI not rendering due to CallToolResult structure change (#6143)
  fix: display shell output as static text instead of spinner (#6041)
  fix : Custom providers with empty API keys show as configured in desktop (#6105)
  Add .agents/skills and ~/.config/agent/skills to skills discovery paths (#6139)
  fix: use instructions for system prompt and prompt for user message in subagents (#6121)
  Fix compaction loop for small models or large input (#5803)
  feat: Centralize theme management with ThemeContext (#6137)
  OpenRouter & Xai streaming (#5873)
  fix: resolve mcp-hermit cleanup path expansion issue (#5953)
  feat: add goose PR reviewer workflow (#6124)
  ...
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.

4 participants