Data propagation among agents during the same run

Hi everyone!
I am working with agno to build a chatbot for my software. I’ve built a team of agents specialized in different tasks (data collection, http requests execution ..), my ideal flow. is:
-user makes a request like “make an order on xyz”
-team leader understands the workflow thanks to my instructions (retrieve data, make calculations, execute the order)
-team leader takes the output of the first agent and gives it to the second so it can use for the tool call, and so on so forth

Right now everything works fine except for the data propagation, the right agents/tools are called but the team leader does not transmit the information to the next agent in the succession.

Here I attach an example of team and agent so maybe you can better understand and help me find the error:

analysis_agent = get_analysis_agent()

business_agent = get_business_agent()
executor_agent = get_executor_agent()
data_collection_agent = get_data_collection_agent()
def get_dev_team(
user_id: Optional[str] = None,
session_id: Optional[str] = None,
debug_mode: bool = True,
) → Team:
return Team(
name=“LM Stock Team Develop”,
role=“Team Leader”,
id=“lm_team_develop”,
user_id=user_id,
session_id=session_id,
model=get_model(agent_id=“lm_team_develop”),
instructions=dedent(“”"
    \# DESCRIPTION

    You are the Team Leader of the hospital stock management team.

    Your responsibility is to orchestrate the team members, each with a specific role and tools.  

    You must always ensure tasks are executed in the correct pipeline order.  



    \# WORKFLOW PIPELINE

    - \*\*Step 1 – Data Collection (DATA COLLECTION AGENT)\*\*  

    - Delegate to the Data Collection Agent whenever raw data is needed (stock levels, department IDs, losses, endowment).  

    - Available tools:  

        • get_departments_id(client_code)  

        • get_department_id(department_description)  

        • get_stock_data()  

        • get_stock_by_department(department_id)  

        • get_lost_by_department(department_id, date)  

        • get_endowment_by_department(department_id, endowment_type)  



    - \*\*Step 2 – Business Logic (BUSINESS AGENT)\*\*  

    - Once data is available from the data collection agent, you can pass it to the Business Agent if restock needs data are requested.  

    - Make sure to pass as argument the exact output data of the previous step, it must be the same dict object

    - Available tool:  

        • calculate_restock_needs(wardrobe_products: dict)  



    - \*\*Step 3 – Analysis & Forecast (ANALYSIS AGENT)\*\*  

    - If the request involves predictions, trends, or strategic insights, delegate to the Analysis Agent.  

    - This agent queries mock forecast data from the DB (simulated for now).  

    - Available tool:  

        • get_forecast_data(query: str)  



    - \*\*Step 4 – Execution (EXECUTOR AGENT)\*\*  

    - If the request requires placing a restock order, delegate to the Executor Agent.  

    - The Executor requires explicit user confirmation before execution.  

    - Available tool:  

        • call_restock_endpoint(final_results: dict)  



    \# DECISIONAL PROCESS

    1\. Analyze the user request.  

    2\. Identify the required pipeline:  

    - Informational → Step 1 (and optionally Step 3 for forecasts).  

    - Restock calculation → Step 1 + Step 2.  

    - Restock execution → Step 1 + Step 2 + Step 4.  

    3\. Always route requests in the correct order: each step depends on the output of the previous one.  

    4\. Store the output of a tool or retrieve it from the session state, in order to pass it to the following tool.



    \# RULES AND CONSTRAINTS

    - Never skip required steps in the pipeline.  

    - Do not invent or alter data: always rely on agent/tool outputs.  

    - Be transparent with the user about which step is being executed and why.  

    - Always enforce confirmation before calling the Executor Agent.  

    - Keep track of pending proposals and user preferences.  



    \# MISSION

    Act as the conductor of the team. Ensure the right agent executes at the right time, 

    and the user always receives a complete, accurate, and explainable result.

"""),
members=[
analysis_agent,
business_agent,
data_collection_agent,
executor_agent
\],
add_history_to_context=True,
delegate_task_to_all_members=False,
determine_input_for_members=False,  # The member gets the input directly, without the team leader synthesizing it
store_member_responses=True,
num_history_runs=3,
enable_user_memories=True,
enable_agentic_state=True,
enable_agentic_memory=True,
share_member_interactions=True,
add_session_state_to_context=True,
session_state={“data_collection_results”: , “business_results”: , “analysis_results”: , “executor_results”: },
debug_mode=debug_mode,
db=PostgresDb(session_table=“lm_restock_team_develop_sessions”, db_url=db_url),
)

EXAMPLE OF AGENT

def get_business_agent(
user_id: Optional\[str\] = None,
session_id: Optional[str] = None,
debug_mode: bool = True,
) → Agent:
return Agent(
name=“BUSINESS AGENT”,
id=“business_agent”,
user_id=user_id,
session_id=session_id,
model=get_model(agent_id=“business_agent”),
role=dedent(“”"\
        Call the restock endpoint to create an order
\
    """),
instructions=[dedent(“”"\
        You are the Business Logic Agent in the Team.



        \## Purpose

        Your responsibility is to apply the business rules required to calculate restock needs based on available data.  



        \## Workflow

        1\. Receive data such as wardrobe_products dictionary or retrieve it from the data_collection_results key in the session state.  

        2\. Call the appropriate tool.

        3\. Update business_results in the team session state, append the result of the tool.

        4\. Return the structured results to the Team Leader or requesting agent without further interpretation.



        \## Tool usage guidelines

        - \*\*calculate_restock_needs(wardrobe_products: dict)\*\*  

            Use this tool whenever the request is about restock orders. 



        \## Behavioral rules

        - Do not alter or filter the stock data before applying the business rule.  

        - Do not summarize or simplify the results: always return the full structured output.  

        - If data is missing or incomplete, process what is available without assumptions.  



        Your mission is to be a precise and deterministic calculator of restock requirements, ensuring the Team can rely on your results as the foundation for further actions.
\
    """)\],
tools = [BusinessLogicTools()],
# -*- Memory -*-
# Handled by the Team Leader
enable_user_memories=True,
enable_agentic_memory=True,
# -*- History -*-
# Send the last 3 messages from the chat history
add_history_to_context=True,
add_session_state_to_context=True,
num_history_runs=3,
# Add a tool to read the chat history if needed
read_chat_history=True,
# -*- Retry policy -*-
exponential_backoff=True,
retries=2,
# -*- Other settings -*-
# Format responses using markdown
markdown=True,
# Add the current date and time to the instructions
add_datetime_to_context=True,
# Show debug logs
debug_mode=debug_mode,
)

Hey @EloisaMazzocco, thanks for reaching out and supporting Agno. I’ve shared this with the team, we’re working through all requests one by one and will get back to you soon.If it’s urgent, please let us know. We appreciate your patience!

Hey @EloisaMazzocco , The issue is due to determine_input_for_members=False in your Team configuration. Can you set it to True to enable the team leader to pass outputs between agents for proper data flow. Let me know if you run into any other issues.