From 97a0c529f22e8bf5f6abbe121085dedbbd35c02c Mon Sep 17 00:00:00 2001 From: Jarrod Sibbison <72240382+jsibbison-square@users.noreply.github.com> Date: Fri, 4 Jul 2025 18:35:52 +1000 Subject: [PATCH] fix: Enable agent to see instruction to use final output tool when it wasn't called (#3253) --- crates/goose/src/agents/agent.rs | 8 ++++++-- crates/goose/src/agents/final_output_tool.rs | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index 3ba40763..38a488a9 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -821,10 +821,14 @@ impl Agent { if let Some(final_output_tool) = self.final_output_tool.lock().await.as_ref() { if final_output_tool.final_output.is_none() { tracing::warn!("Final output tool has not been called yet. Continuing agent loop."); - yield AgentEvent::Message(Message::user().with_text(FINAL_OUTPUT_CONTINUATION_MESSAGE)); + let message = Message::assistant().with_text(FINAL_OUTPUT_CONTINUATION_MESSAGE); + messages.push(message.clone()); + yield AgentEvent::Message(message); continue; } else { - yield AgentEvent::Message(Message::assistant().with_text(final_output_tool.final_output.clone().unwrap())); + let message = Message::assistant().with_text(final_output_tool.final_output.clone().unwrap()); + messages.push(message.clone()); + yield AgentEvent::Message(message); } } break; diff --git a/crates/goose/src/agents/final_output_tool.rs b/crates/goose/src/agents/final_output_tool.rs index abac6d2d..3ada87c8 100644 --- a/crates/goose/src/agents/final_output_tool.rs +++ b/crates/goose/src/agents/final_output_tool.rs @@ -9,7 +9,7 @@ use serde_json::Value; pub const FINAL_OUTPUT_TOOL_NAME: &str = "recipe__final_output"; pub const FINAL_OUTPUT_CONTINUATION_MESSAGE: &str = - "You MUST call the `final_output` tool with your final output for the user."; + "I see I MUST call the `final_output` tool NOW with the final output for the user."; pub struct FinalOutputTool { pub response: Response, @@ -76,7 +76,7 @@ impl FinalOutputTool { pub fn system_prompt(&self) -> String { formatdoc! {r#" - # Final Ouptut Instructions + # Final Output Instructions You MUST use the `final_output` tool to collect the final output for a user. The final output MUST be a valid JSON object that matches the following expected schema: