diff --git a/src/agents/run.py b/src/agents/run.py index fce7b4840..b4e622cdf 100644 --- a/src/agents/run.py +++ b/src/agents/run.py @@ -715,6 +715,15 @@ async def run( return result elif isinstance(turn_result.next_step, NextStepHandoff): + # Save the conversation to session if enabled (before handoff) + if session is not None: + if not any( + guardrail_result.output.tripwire_triggered + for guardrail_result in input_guardrail_results + ): + await self._save_result_to_session( + session, [], turn_result.new_step_items + ) current_agent = cast(Agent[TContext], turn_result.next_step.new_agent) current_span.finish(reset_current=True) current_span = None @@ -1166,8 +1175,7 @@ async def _start_streaming( if isinstance(turn_result.next_step, NextStepHandoff): # Save the conversation to session if enabled (before handoff) - # Note: Non-streaming path doesn't save handoff turns immediately, - # but streaming needs to for graceful cancellation support + # Streaming needs to save for graceful cancellation support if session is not None: should_skip_session_save = ( await AgentRunner._input_guardrail_tripwire_triggered_for_stream(