This example demonstrates human-in-the-loop functionality using toolkit-based tools that require confirmation. It shows how to handle user confirmation when working with pre-built tool collections like YFinanceTools.
"""🤝 Human-in-the-Loop: Adding User Confirmation to Tool CallsThis example shows how to implement human-in-the-loop functionality in your Agno tools.It shows how to:- Handle user confirmation during tool execution- Gracefully cancel operations based on user choiceSome practical applications:- Confirming sensitive operations before execution- Reviewing API calls before they're made- Validating data transformations- Approving automated actions in critical systemsRun `pip install openai httpx rich agno` to install dependencies."""from agno.agent import Agentfrom agno.models.openai import OpenAIChatfrom agno.tools import toolfrom agno.tools.duckduckgo import DuckDuckGoToolsfrom agno.utils import pprintfrom rich.console import Consolefrom rich.prompt import Promptconsole = Console()agent = Agent( model=OpenAIChat(id="gpt-5-mini"), tools=[DuckDuckGoTools(requires_confirmation_tools=["get_current_stock_price"])], markdown=True,)run_response = agent.run("What is the current stock price of Apple?")if run_response.is_paused: # Or agent.run_response.is_paused for tool in run_response.tools_requiring_confirmation: # type: ignore # Ask for confirmation console.print( f"Tool name [bold blue]{tool.tool_name}({tool.tool_args})[/] requires confirmation." ) message = ( Prompt.ask("Do you want to continue?", choices=["y", "n"], default="y") .strip() .lower() ) if message == "n": tool.confirmed = False else: # We update the tools in place tool.confirmed = True run_response = agent.continue_run(run_response=run_response) pprint.pprint_run_response(run_response)